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-13 06:31:15
    Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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ł:
    >
    >> 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,
    [...]
    > 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.

    Chodzi o to, że użyjesz kontenerów asocjacyjnych? Większe problemy masz
    takie:
    * używasz dwóch konstrukcji językowych (struct/class lub hashtable) do
    tego samego celu - musisz za każdym razem wybrać.
    * jeśli wybierzesz struct/class bo myślisz, że nie będziesz musiał
    serializować/deserializować, to masz problem
    * dla hashtable jako obiektów nie masz dobrego wsparcia w języku:
    konstrukcja, wołanie metod (w tym wirtualnych), w przypadku kiedy
    elementem hashtable jest wskaźnik na inny hashtable ownership semantics
    są niejasne itd.
    * jeśli konsekwentnie stosujesz hashtable zamiast struct/class, to
    właśnie implementujesz dynamiczne typowanie w języku statycznie
    typowanym - tracisz type safety, a ze względu na poprzedni punkt jest to
    zakładanie prawego buta na lewą nogę.

    >> 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.

    Bym powiedział, że to raczej niewiele wnosi.

    >> 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ść.

    Naprawdę? Jak nowa wersja execa spróbuje załadować starą DLL-kę? Czy
    może statycznie wykryje możliwość takiego wydarzenia i napisze "WARNING:
    za tydzieeń twój użytkownik w Pernambuco spróbuje użyć programu, który
    właśnie skompilowałeś ze starą DLL-ką. Skontaktuj się z nim pod numerem ..."

    >>> 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

    Bzdura. Język statycznie typowany może w ogóle nie mieć generyków. W
    języku statycznie typowanym możesz mieć nawet:

    TreeSet s = new TreeSet();
    s.add(new CannotCompare());
    [...]

    Jeśli do tak statycznie typowanego języka dodasz składnię
    TreeSet<CostamCostam> s, gdzie 'CostamCostam' ma rolę wyłącznie
    dekoracyjną, powiedzmy jest rodzajem komentarza, to nadal jest to język
    statycznie typowany. Jeśli w kolejnych krokach dajesz dodatkowe
    obostrzenia na tego tokena sprawdzane w czasie kompilacji (1: musi być
    to nazwa klasy, 2: ...), to w którym momencie ze statycznego typowania
    przechodzisz w dynamiczne?

    > W tym przykładzie Java zachowuje się dokładnie jak skryptowy język
    > dynamiczny.

    int i=3;
    i=5;

    W tym momencie C++ zachowuje się dokładnie jak skryptowy język
    dynamiczny. Zatem jest językiem dynamicznym.

    > 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.

    Kaczka kwakałaby tak:
    Object s = new TreeSet();
    s.add(new Whatever());

    Dodatkowo od dynamicznego języka wymagałbym możliwości stworzenia
    obiektu, który nie należy do żadnej klasy i którego zestaw metod
    rozstrzygany jest w runtime - np. łączysz się z bazą danych, bierzesz
    tabelę o danej nazwie, sprawdzasz jakie ma kolumny i tworzysz obiekt
    reprezentujący rekord z getterami i setterami dla każdej kolumny.

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: