eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJakie typowanie jest najlepsze i dlaczego statyczne?Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED!not-for-mail
    From: Andrzej Jarzabek <a...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
    Date: Wed, 13 Feb 2013 05:31:15 +0000
    Organization: news.chmurka.net
    Lines: 107
    Message-ID: <kff8f5$nrb$1@somewhere.invalid>
    References: <f...@g...com>
    <k...@b...softax.pl>
    <4...@g...com>
    <keun5d$lsh$1@somewhere.invalid>
    <f...@g...com>
    <keuri4$nje$1@somewhere.invalid>
    <1...@g...com>
    <keuusd$ovj$1@somewhere.invalid>
    <7...@g...com>
    <kf1b5r$cvj$1@somewhere.invalid>
    <51152b96$0$1306$65785112@news.neostrada.pl>
    <3...@x...googlegroups.com>
    <4...@g...com>
    <kf61vl$fh0$1@somewhere.invalid>
    <c...@g...com>
    <kf8mrj$piq$1@somewhere.invalid>
    <3...@g...com>
    <kf9c7i$61o$1@somewhere.invalid>
    <8...@g...com>
    <kfbuak$lvs$1@somewhere.invalid>
    <0...@g...com>
    NNTP-Posting-Host: 5ac53cfe.bb.sky.com
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: somewhere.invalid 1360733477 24427 90.197.60.254 (13 Feb 2013 05:31:17 GMT)
    X-Complaints-To: abuse-news.(at).chmurka.net
    NNTP-Posting-Date: Wed, 13 Feb 2013 05:31:17 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130107
    Thunderbird/17.0.2
    In-Reply-To: <0...@g...com>
    X-Authenticated-User: ajarzabek
    Xref: news-archive.icm.edu.pl pl.comp.programming:202034
    [ ukryj 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: