eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJakie typowanie jest najlepsze i dlaczego statyczne?
Ilość wypowiedzi w tym wątku: 197

  • 141. Data: 2013-02-12 00:36:38
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Andrzej Jarzabek <a...@g...com>

    On 11/02/2013 00:31, Roman W wrote:
    >
    > Dla mnie jako współautora kilku juz bibliotek do wyceny tych nieslawnych
    > derywatow bardzo duza zaletą statycznego systemu typow jest możliwość
    > precyzyjnego zdefiniowania API biblioteki, w szczególności zaś
    > blokowanie "podpisania" do biblioteki rzeczy, które nie miały byc przez
    > nia obrabiane.

    BTW kiedyś zdaje się wspominałeś, że jakąś sporą część oprogramowania do
    liczenia różnych rzeczy w bankach pisze się jako makra w VBA. Miałem
    ostatnio "przyjemność" dłubać coś w VBA i on ma raczej taki mieszany
    system typów.

    Oczywiście nie żebym podawał VBA jako jakiś pozytywny przykład
    użyteczności dynamicznego typowania. Raczej przykład na to, że jakiś
    język może być popularny w jakichś zastosowaniach i niekoniecznie ma to
    związek z tym, czy system typów czy jakiekolwiek inne ficzery mają
    związek z przydatnością tego języka do tych zastosowań.


  • 142. Data: 2013-02-12 01:15:21
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: "M.M." <m...@g...com>

    W dniu wtorek, 12 lutego 2013 00:23:54 UTC+1 użytkownik Andrzej Jarzabek napisał:
    > On 11/02/2013 16:24, M.M. wrote:
    >
    > [...]
    >
    > > o użyciu takiego lubi innego typowania. Wygląda na to że różnica w
    >
    > > korzyściach pomiędzy jednym typowaniem a drugim nie jest taka duża, jak
    >
    > > pomiędzy asemblerem a językiem wysokiego poziomu.
    >
    >
    >
    > A ktoś twierdził, że jest?
    Było porównanie do że jak ktoś używa kart dziurkowanych to mu
    nawet kod maszynowy niepotrzebny. Zgodzę się, że typowanie
    dynamiczne być może ma zalety (a tylko ja ich nie zauważam), a nie
    zgodzę się że te zalety są tak ogromne jak w przypadku
    przechodzenia z kart do kodu maszynowego, z kodu maszynowego do
    asemblera lub z asemblera do języków wysokiego poziomu. Być
    może typowanie dynamiczne daje jakieś niewielkie korzyści -
    oczywiście mówię w ogólnym bilansie.


    > On działa w obydwie strony, bo jeśli logika jest OK, tylko hierarchia
    > typów błędnie mapuje dziedzinę, to też masz błędy kompilatora.
    Za duże skróty myślowe, nie rozumiem.


    Chodziło mi o mnie/więcej o to, że
    logika pracowała na specyficznej strukturze danych. A więc warstwa
    prezentacyjna przed pobieraniem danych musiała przygotować typy dla
    warstwy obliczeniowej. Po zoptymalizowaniu logika działała już na
    innym formacie danych. Logika działała i można ją było przetestować
    pod kątem wydajności. Jednak program nie dał się uruchomić bez zmian
    w warstwie prezentacyjnej. Trzeba było albo pisać konwersje, albo
    warstwę prezentacyjną dostosować do nowego API w logice. W języku
    z dynamicznymi typami bym logikę uruchomił bez poprawek w prezentacji.



    Pozdrawiam


  • 143. Data: 2013-02-12 02:09:20
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Andrzej Jarzabek <a...@g...com>

    On 12/02/2013 00:15, M.M. wrote:
    > W dniu wtorek, 12 lutego 2013 00:23:54 UTC+1 użytkownik Andrzej Jarzabek napisał:
    >> On 11/02/2013 16:24, M.M. wrote:
    >
    >>> o użyciu takiego lubi innego typowania. Wygląda na to że różnica w
    >>> korzyściach pomiędzy jednym typowaniem a drugim nie jest taka duża, jak
    >>> pomiędzy asemblerem a językiem wysokiego poziomu.
    >> A ktoś twierdził, że jest?
    > Było porównanie do że jak ktoś używa kart dziurkowanych to mu
    > nawet kod maszynowy niepotrzebny.

    Mniemoniki asemblerowe przecież. Poza tym chodziło o first class
    functions, a nie o dynamiczne typowanie. Poza tym się nie zrozumieliśmy
    - nie chodziło mi, że różnica między czymśtam a czymśtam jest jak między
    dziurkowaniem kart a czymśtam, tylko o sensowność argumentu "ja nie
    potrzebuję, więc jest to bezużyteczne".

    >> On działa w obydwie strony, bo jeśli logika jest OK, tylko hierarchia
    >> typów błędnie mapuje dziedzinę, to też masz błędy kompilatora.
    > Za duże skróty myślowe, nie rozumiem.

    Dziedzina to jest to, czego dotyczy program - sterowanie samolotem,
    spedycja międzynarodowa, strzelanka FPS, co tam jeszcze. Mapowanie
    dziedziny na system typów - stworzenie typów dla pojęć z dziedziny
    (kontrahent, transakcja, statecznik poziomy, przeciwnik) i uwzględnienie
    relacji - IsA, HasA, 1 do 1, 1 do wielu itd. Mając prawidłową logikę
    programu (algorytmy) i błędnie zamapowane typy możesz mieć błędy
    kompilacji. Powiedzmy, prawidłowy algorytm ustawia i odczytuje walutę
    transakcji i twój program właśnie to robi, ale ponieważ masz błednie
    zdefiniowany typ transakcji, to kod się nie kompiluje, bo typ nie ma
    takiej właściwości.


  • 144. Data: 2013-02-12 08:41:12
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: g...@s...invalid (Adam Wysocki)

    Andrzej Jarzabek <a...@g...com> wrote:

    > BTW kiedyś zdaje się wspominałeś, że jakąś sporą część oprogramowania do
    > liczenia różnych rzeczy w bankach pisze się jako makra w VBA.

    Czasem przez security. Nie jest łatwo przeforsować możliwość uruchomienia
    exeka w niektórych bankach.

    --
    Gof
    http://www.chmurka.net/


  • 145. Data: 2013-02-12 10:10:02
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: "AK" <n...@n...com>

    Użytkownik "Maciej Sobczak" <s...@g...com> napisał:

    > Poza tym, że obiektowość powstała z myślą o dużych systemach

    :) nie ma to jak urojenia Ayatollahow C++ :)

    AK






  • 146. Data: 2013-02-12 10:19:14
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Maciej Sobczak <s...@g...com>

    W dniu wtorek, 12 lutego 2013 00:19:46 UTC+1 użytkownik Andrzej Jarzabek napisał:

    > No to odpowiem: ty nie dałbyś, ale kto inny dał. Tajemnica wyjaśniona?

    Nie bardzo. Kiedyś pewien akwizytor do mnie zapukał i chciał mi coś sprzedać
    powołując się na fakt, że mój sąsiad też kupił. Zgadnij, jaki osiągnął sukces.

    > > Poza tym, że obiektowość powstała z myślą o dużych systemach
    >
    > W którym momencie?

    W takim, że w małych nie było powodów, żeby powstała.

    > > i sama w sobie nie ma cech, który by były z nimi sprzeczne.
    >
    > http://c2.com/cgi/wiki?ArgumentsAgainstOop

    Przewinąłem losowo i trafiłem na argument "OO runs too slow", z którym nawet autor
    tej strony się nie zgadza, ale ponieważ gdzieś to usłyszał, to napisał.

    Przyznaję, że rzuciłem też okiem na inne argumenty na tej liście, ale one też mnie
    nie porwały.

    > http://folk.uio.no/andersmo/oo.html

    Przewinąłem losowo i trafiłem na argument "Everything has to be an object".
    Sorry, ale dzisiaj mam też trochę pracy do zrobienia.

    Jeżeli chciałem pokazać, że na absolutnie każdy temat można znaleźć w necie stronę
    zatytułowaną "Why XYZ sucks", to wiem, że można.

    > > Jeśli coś ma być inaczej, to ma być po coś i ma się opłacać.
    >
    > A dlaczego akurat to dynamiczny, a nie statyczny system typów to jest
    > "inaczej"?

    Bo rozmawialiśmy o możliwości wprowadzenia nowego języka w miejscu, gdzie używa się
    czegoś mainstreamowego - w domyśle Javy lub C++. Taki był mniej więcej klimat w tym
    wątku i generalnie takie są realia na rynku.

    > > Możliwe, ale nie czuję się tym pokrzywdzony a skoro tak, to
    > > najwyraźniej nic nie straciłem, że nie widziałem. Poproszę o lepszy
    > > argument, niż "niewiele widziałeś".
    >
    > Poproszę o lepszy argument, niż "nie widziałem".

    Ale to nie jest zły argument. Skoro nie widziałem i moi koledzy/koleżanki nie
    widzieli w obecnej firmie i w poprzedniej/poprzednich, to przypuszczalnie obserwuję
    jakąs regułę albo chociaż coś, co jest obserwacyjnie uzasadnione.

    > > Statyczne typowanie ma swój koszt. Pytanie, jaki jest końcowy
    > > bilans.
    >
    > I uważasz, że potrafisz ten bilans policzyć?

    Nie, ale oczekuję tego od kogoś, kto mi reklamuje nowe rozwiązanie.

    > Poza tym pozostańmy nawet przy heterogeniczności. Dość popularnym
    > rozwiązaniem z językami dynamicznymi jest Javascript w przeglądarce i
    > jakiś Python czy inny Ruby na serwerze. W celu serializacji obiektów i
    > przesyłania ich przez sieć wymyślono format JSON - dzięki niemu można z
    > łatwością serializować dane w Pythonie i przesyłać do javascriptowego
    > klienta lub odwrotnie. Można to spokojnie robić bez potrzeby
    > uzgadaniania definicji typów pomiędzy serwerem a klientem - każda strona
    > korzysta z tych właściwości, jakich potrzebuje, i każda jest w stanie
    > wziąć odserializowany obiekt i zserializować go z powrotem razem ze
    > wszystkimi polami/właściwościami, nawet jeśli nie były one jeszcze
    > zdefiniowane w momencie pisania tego kodu.

    Tak. Nie mam większych problemów z użyciem C++ w takim systemie, choć zależnie od
    użytego rozwiązania w tym jednym konkretnym miejscu składnia dostępu do pola może być
    dłuższa.

    > BTW można się zastanowić nad faktem, że dynamicznie typowany Erlang jest
    > przeznaczony do, i używany w systemach wysokiej niezawodności.

    Można. Jak również nad innym faktem, że w wielu systemach wysokiej niezawodności
    Erlang nie jest używany.

    > Nie jest. Prosty przykład - w C++ nawet niewielka zmiana definicji typu
    > danych między biblioteką a programem z niej korzystającym może
    > spowodować spektakularne wylecenie wszystkiego w powietrze.

    Na moim komputerze kompilator pokaże, gdzie nastąpiła niezgodność.

    > > A czy ja gdzieś w tej dyskusji napisałem, że Java jest dla mnie
    > > statycznym językiem?
    >
    > W myśl powszechnie rozumianego podziału na dynamiczne i statyczne
    > systemy typów, Java jest językiem o typowaniu statycznym.

    class CannotCompare {}

    TreeSet<CannotCompare> s = new TreeSet<CannotCompare>(); // 1
    s.add(new CannotCompare()); // 2
    s.add(new CannotCompare()); // 3

    (mniejsza o dokładne nazwy, nie chce mi się tego sprawdzać)

    W języku statycznym powyższe nie ma prawa się skompilować. W Adzie wyleci na 1., w
    C++ na 2. W Javie kompiluje się radośnie i wylatuje z wyjątkiem dopiero na 3.
    Można nawet zrobić unit test, który wykona linijki 1 i 2 i zrobi raport, że jest
    dobrze...

    W tym przykładzie Java zachowuje się dokładnie jak skryptowy język dynamiczny.
    Dodając do tego kulturę, która kieruje programistów w stronę dynamicznego ładowania
    klas, opisu ich związków w XML, itd., mamy język, w którym istotnymi elementami są
    wyjątki ClassDefNotFound oraz NoSuchFunction.

    Jak dla mnie - jeśli coś kwacze jak kaczka, to jest to kaczka.

    --
    Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com


  • 147. Data: 2013-02-12 20:14:34
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Andrzej Jarzabek <a...@g...com>

    On Feb 12, 9:19 am, Maciej Sobczak <s...@g...com> wrote:
    > W dniu wtorek, 12 lutego 2013 00:19:46 UTC+1 użytkownik Andrzej Jarzabek napisał:
    >
    > > No to odpowiem: ty nie dałbyś, ale kto inny dał. Tajemnica wyjaśniona?
    >
    > Nie bardzo. Kiedyś pewien akwizytor do mnie zapukał i chciał mi coś sprzedać
    > powołując się na fakt, że mój sąsiad też kupił. Zgadnij, jaki osiągnął sukces.

    Jak będę kiedyś chciał ci coś sprzedać, to może się zainteresuję.

    > > > Poza tym, że obiektowość powstała z myślą o dużych systemach
    > > W którym momencie?
    >
    > W takim, że w małych nie było powodów, żeby powstała.

    Kto konkretnie, kiedy i co takiego zrobił z myślą o dużych systemach?

    Bo mi wygląda na to, że opowiadasz o wymyślonej przez siebie historii
    OO, a nie tej, która faktycznie miała miejsce.

    > > > i sama w sobie nie ma cech, który by były z nimi sprzeczne.
    > >http://c2.com/cgi/wiki?ArgumentsAgainstOop
    >
    > Przewinąłem losowo i trafiłem na argument "OO runs too slow",
    [...]
    > Przewinąłem losowo i trafiłem na argument "Everything has to be an object".

    Poszczególne argumenty odnoszą się do różnych definicji
    obiektowości...

    > Jeżeli chciałem pokazać, że na absolutnie każdy temat można znaleźć
    > w necie stronę zatytułowaną "Why XYZ sucks", to wiem, że można.

    Chodzi o to, że różnie można interpretować "cechy sprzeczne".
    Technicznie nawet assembler nie posiada cech sprzecznych z dużymi
    systemami, skoro istnieją duże systemy napisane w assemblerze.

    To czy owo może posiadać cechy przeszkadzające albo pomocne w pisaniu
    dużych systemów, ale to kategorie subiektywne - cechy przeszkadzające
    komuś lub pomocne dla kogoś.

    > > > Jeśli coś ma być inaczej, to ma być po coś i ma się opłacać.
    >
    > > A dlaczego akurat to dynamiczny, a nie statyczny system typów to jest
    > > "inaczej"?
    >
    > Bo rozmawialiśmy o możliwości wprowadzenia nowego języka w miejscu,
    > gdzie używa się czegoś mainstreamowego - w domyśle Javy lub C++.

    To nie ta odnoga dyskusji :)

    Przy takim pytaniu nie da się przecież odpowiedzieć abstrakcyjnie:
    zarówno C++ jak i Java mają swoje ograniczenia, każdy projekt ma swoje
    okoliczności. Jeśli np. chcesz mieć UI w przeglądarce, to możesz
    zaimplementować go:
    * w dynamicznym Javascript
    * jako aplikacja flashowa w dynamicznym actionScript czy jak to się
    tam nazywa
    * jako applet Javowy
    * w C++ jako komponent ActiveX

    Nie powiesz chyba, że skoro używasz już C++ albo Javy, to rozwiązanie
    z tym właśnie językiem jest oczywistym wyborem.

    Inny przykład, tym razem z osobistego doświadczenia: miałem rozbudować
    możliwości programowania narzędzia testowego napisanego w Javie.
    Zdecydowałem się zrobić to przez dodanie DSL-a. Żeby zrobić to szybko,
    postanowiłem zaimplementowac embedded DSL i wybrałem do tego język
    Groovy, który ma dynamiczny system typów. Z różnych względów Groovy
    nadaje się świetnie do osadzania DSL-i w programach Javovwych -
    wystarczy zlinkować program z jednym JAR-em, który jest dostępny w
    standardowych repozytoriach (my używamy Mavena), poza tym jest
    interpretowany i użytkownik może sobie program w DSL-u napisac w pliku
    i uruchomić go tym narzędziem testowym - żadna faza kompilacji nie
    jest potrzebna. Poza tym ma dynamiczny meta-object protocol jako część
    owego dynamicznego systemu typów, przez co świetnie się nadaje do
    pisania DSL-i. Pewnie dałoby się mieć język statycznie typowany,
    który się równie dobrze, a może nawet lepiej nadaje do pisania DSL-i -
    ja wiem o Haskellu, ale nie znam Haskella, a Groovy trochę znam i
    nawet mam (kupioną w tym celu) książkę o pisaniu DSL-i w Groovym, poza
    tym Haskell nie jest na JVM więc musiałbym wszystko posklejać i
    dołączyć kompilator Haskella do projektu. W statycznie typowanej Javie
    ani nawet w statycznie typowanej Scali nie dałoby sie zrobić równie
    dobrego i wygodnego w użyciu DSL-a.

    Czy w takiej sytuacji byś uznał, że wprowadzenie języka dynamicznie
    typowanego do projektu w mainstreamowej Javie ma sens?

    > Taki był mniej więcej klimat w tym wątku i generalnie takie są realia na rynku.

    No bo Pythona czy Ruby to się w ogóle na rynku nie spotyka.

    > > > Statyczne typowanie ma swój koszt. Pytanie, jaki jest końcowy
    > > > bilans.
    > > I uważasz, że potrafisz ten bilans policzyć?
    >
    > Nie, ale oczekuję tego od kogoś, kto mi reklamuje nowe rozwiązanie.

    Na ten temat musisz porozmawiać z tym, co ci reklamuje.

    Nawiasem mówiąc, w nawiązaniu do odnogi dyskusji o wprowadzaniu
    języków programowania przez programistę, najlepszy sposób uwalenia
    dowolnej inicjatywy innowacyjnej to zażądanie przedstawienia bilansu.
    Na zasadzie: "postawiliśmy checkboxa dla Scali bo ma lambdy? Proszę o
    konkretny dowód na to, że języki z lambdami są mniej błedogenne niż
    języki bez lambd".

    Wagi przy checkboxach dają dodatkową zabawę "prosze mi pokazać
    metodologię, z której wyliczyłeś, że pattern matching ma relatywną
    wagę 2.7".

    Bo bilans wyciągnięty z odbytu to każdy potrafi pokazać.


  • 148. Data: 2013-02-12 22:28:58
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Andrzej Jarzabek <a...@g...com>

    On 12/02/2013 09:19, Maciej Sobczak wrote:
    > W dniu wtorek, 12 lutego 2013 00:19:46 UTC+1 użytkownik Andrzej
    > Jarzabek napisał:
    >
    >>> Statyczne typowanie ma swój koszt. Pytanie, jaki jest końcowy
    >>> bilans.
    >>
    >> I uważasz, że potrafisz ten bilans policzyć?
    >
    > Nie, ale oczekuję tego od kogoś, kto mi reklamuje nowe rozwiązanie.

    BTW:
    http://www.tcl.tk/doc/scripting.html


  • 149. Data: 2013-02-12 22:42:52
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: "M.M." <m...@g...com>

    W dniu wtorek, 12 lutego 2013 10:10:02 UTC+1 użytkownik AK napisał:
    > Użytkownik "Maciej Sobczak" <s...@g...com> napisał:
    > > Poza tym, że obiektowość powstała z myślą o dużych systemach
    > :) nie ma to jak urojenia Ayatollahow C++ :)

    Kilka lat temu w moich programach ilość klas/obiektów znacząco
    zmalała. Gdy jest jakaś wyraźna struktura danych i gdy są
    algorytmy które z dużym prawdopodobieństwem będą przydatne tylko
    dla tej struktury - to wydzielenie klasy jest jedynie słuszną
    drogą.

    Jednak w sytuacji gdy mamy wiele klas, np. klasy o nazwach od A do E,
    i gdy niektóre algorytmy na wejście biorą kilka z tych klas, to
    mam w kodzie golutkie funkcje.

    Jakoś mnie wkurzają potem rozterki czy pisać
    A.akcja( B , C , D , E)

    czy może lepiej:
    B.akcja( A , C , D , E)

    Zamiast powyższego, zwykle mam w kodzie masę funkcji:
    akcja( A , B , C , D , E )

    Poza kodem naprawdę zarezerwowanym na potrzeby klas,
    wolę styl proceduralny. Jakoś nie lubię robić ze
    wszystkiego klasy/obiektu. Czy takie... "pół-proceduralne
    programowanie" stanowi dobre podejście do większych
    systemów? Dla mnie taki kod jest łatwiejszy w utrzymaniu
    od kodu w którym ze wszystkiego zrobiono klasę.


    Pozdrawiam





  • 150. Data: 2013-02-12 23:27:49
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: "AK" <n...@n...com>

    Użytkownik "M.M." <m...@g...com> napisał:

    > > Poza tym, że obiektowość powstała z myślą o dużych systemach
    > :) nie ma to jak urojenia Ayatollahow C++ :)

    > Kilka lat temu w moich programach ilość klas/obiektów znacząco zmalała.

    Alez nie o to chodzi !:).
    Chodzi o to, ze OO powstalo w/dla takiej niszy jak "algorytmy sumulacyjne".
    To naprawde nie byly duze systemy, a raczej dosc specyficzna dziedzina
    na skraju "zwyklej" numeruki i statystyki.
    Dla niej (symulacji) tez powstaly tez jedne z pierwszych prob "ustadaryzowania"
    wspolbieznosci (czy jak tam nazwac ogolnie pojety "multitasking").
    (Mowie oczywiscie o matce OOP czyli Simuli67).

    PS: No ale coz.. jesli obecne tu "tuzy C++" twierdza, ze Python ma normalne zmienne,
    to coz... (Moze jeszcze w Pythonie __init__() to jest konstruktor, albo
    .copy.deepcopy() czy [:] zawsze tworzy nowy obiekt ? mimo ze dokumentacja
    tak twierdzi :)

    AK

strony : 1 ... 10 ... 14 . [ 15 ] . 16 ... 20


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: