-
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.
Następne wpisy z tego wątku
- 13.02.13 07:11 Roman W
- 13.02.13 09:09 Adam Wysocki
- 13.02.13 10:10 Maciej Sobczak
- 13.02.13 10:29 Maciej Sobczak
- 13.02.13 14:00 Michal Kleczek
- 13.02.13 14:56 Piotr Chamera
- 13.02.13 16:50 AK
- 13.02.13 18:55 Andrzej Jarzabek
- 13.02.13 19:09 AK
- 13.02.13 23:25 Maciej Sobczak
- 14.02.13 09:18 Andrzej Jarzabek
- 14.02.13 10:22 Maciej Sobczak
- 14.02.13 11:11 firr kenobi
- 14.02.13 23:57 Andrzej Jarzabek
- 15.02.13 01:08 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa
- 2024-11-09 Warszawa => Sales Executive <=
- 2024-11-09 Wrocław => SAP BTP Consultant (mid/senior) <=
- 2024-11-09 Warszawa => ECM Specialist / Consultant <=
- 2024-11-09 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-11-10 TVN donosi: Obywatelskie zatrzymanie policjanta (nie na służbie)
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=