-
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.
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
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- 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
Najnowsze wątki
- 2025-01-30 Błonie => Analityk Systemów Informatycznych (TMS SPEED) <=
- 2025-01-30 DeepSeek nie lubi gadać o polityce
- 2025-01-30 Błonie => Administrator systemów <=
- 2025-01-30 Gliwice => Business Development Manager - Network and Network Security
- 2025-01-30 Warszawa => Programista Full Stack (.Net Core) <=
- 2025-01-30 Faktura z czech.
- 2025-01-29 "Zorganizowana Grupa Przestępcza" poczeka na decyzję o ekstradycji z UK na wolności [RARS]
- 2025-01-29 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-29 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-29 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-29 Poznań => Specjalista ds. Employer Brandingu <=
- 2025-01-29 Warszawa => Developer Microsoft Dynamics 365 Finance & Operations (D36
- 2025-01-29 Warszawa => Junior Rekruter <=
- 2025-01-29 Warszawa => Mid IT Recruiter <=
- 2025-01-29 Białystok => UX Designer <=