eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJakie typowanie jest najlepsze i dlaczego statyczne?Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
  • Data: 2013-02-12 10:19:14
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Maciej Sobczak <s...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: