-
X-Received: by 10.49.1.162 with SMTP id 2mr811118qen.2.1360532217558; Sun, 10 Feb
2013 13:36:57 -0800 (PST)
X-Received: by 10.49.1.162 with SMTP id 2mr811118qen.2.1360532217558; Sun, 10 Feb
2013 13:36:57 -0800 (PST)
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin1!goblin.stu.neva.ru!news.glorb.com!p13no8567767qai.0!news-out.g
oogle.com!k2ni21154qap.0!nntp.google.com!p13no7326285qai.0!postnews.google.com!
glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sun, 10 Feb 2013 13:36:57 -0800 (PST)
In-Reply-To: <kf8mrj$piq$1@somewhere.invalid>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=46.171.80.166;
posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 46.171.80.166
References: <f...@g...com>
<s...@j...net>
<b...@g...com>
<s...@j...net>
<1...@g...com>
<3...@b...softax.pl>
<b...@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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3...@g...com>
Subject: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
From: Maciej Sobczak <s...@g...com>
Injection-Date: Sun, 10 Feb 2013 21:36:57 +0000
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:201998
[ ukryj nagłówki ]W dniu niedziela, 10 lutego 2013 18:53:53 UTC+1 użytkownik Andrzej Jarzabek napisał:
> > Moim zdaniem właśnie statyczny system typów najbardziej pokazuje
> > swoje zalety właśnie wtedy, gdy należy przerobić istniejący kod -
> > wszystko jedno, czy w celu refaktoryzacji czy w celu rozszerzenia
> > albo zmiany funkcjonalności.
>
> Być może jest to prawda, ale to nie znaczy, że dynamiczny system typów
> nie pokazuje innych zalet, które są w takich sytuacjach przydatne.
Co z tego, że pokazuje, skoro przez swoją dynamiczność nie dałbym mu szansy się
wykazać. Coś w stylu: być może Fiat 126p przejawia jakieś ciekawe własności podczas
przekraczania bariery dźwieku, ale nie przekonam się o nich, bo w obawie o swoje
bezpieczeństwo w całym zakresie poniżej tego, po prostu do niego nie wsiądę.
(Nie znaczy to, że w ogóle nie wsiądę - może i wsiądę, ale w innym celu.)
> > Statyczny system typów pozwala wyrazić
> > związki między różnymi bytami w programie, dzięki czemu szybciej
> > widać jaki jest zakres wprowadzanych zmian.
>
> Pozwala, ale są inne sposoby, które też pozwalają.
Droższe?
> Daje różne rzeczy, między innymi ułatwia code reuse między różnymi
> typami danych,
Jak do tej pory jedyny code reuse między różnymi typami widywałem w kontenerach i ten
reuse polegał na tym, że można coś skopiować albo porównać albo wyliczyć hash, itd.
Do tego niepotrzebne są języki dynamiczne. Innym przykładem może być np.
serializacja, ale ponieważ temat serializacji pojawia się w systemach rozproszonych,
które zwykle są heterogeniczne, to i tutaj mało mnie interesuje, co mi ma do
zaoferowania jakiś jeden język, bo zwykle co by nie miał, to i tak nie rozwiązuje to
problemu heterogeniczności. I tak, np. fajnie, że Python ma swoją dynamiczną
serializację a Java swoją, ale nic mi po tym, skoro jedno z drugim nie chce rozmawiać
i w rezultacie wybieram rozwiązanie, do którego znowu dynamiczność nie jest
potrzebna. Itd.
Poważnie - nie przypominam sobie, od ręki, pozytywnego przykładu w temacie code
reuse.
> programowanie deklaratywne,
Nie widzę związku z dynamicznością.
> loose coupling
Daję radę bez dynamicznego systemu typów. Większość wzorców projektowych właśnie po
to istnieje, więc nawet nie trzeba wymyślać koła od nowa.
> i różne inne
> rzeczy.
Które też nie są przekonywujące?
> > (Tak, słyszałem o unit testach. Znam również ich realny koszt i
> > najchętniej posługuję się tą metodą, która w danej sytuacji jest
> > tańsza.
>
> Z mojego doświadczenia wynika, że w prawie każdym przypadku koszt unit
> testów jest tańszy od kosztu braku (dobrych) unit testów. Również w
> językach ze statycznym typowaniem.
W języku statycznym nie potrzebuję unit testu, żeby upewnić się, że foo może zawołać
bar z podaną listą parametrów. Unit test, który to sprawdza, nie jest dobry.
Unit testy są dobre (i uzasadnione) wtedy, gdy sprawdzają rzeczy, których system
typów nie sprawdzi. W danym języku - bo w różnych językach siła wyrazu systemu typów
potrafi się znacząco różnić.
Np. są języki, które nie potrafią wyrazić tego, że funkcja sortująca powinna sortować
- wtedy unit testy są dobrym, choć kosztownym uzupełnieniem (i tak jak piszesz, są
wtedy lepsze, niż ich brak). Ale są języki, które potrafią to statycznie wyrazić i
tam unit testy są po grzyba. Z tego wnioskuję, że im bardziej statyczny jest jakiś
język i im bardziej ekspresywny ma system typów, tym mniej unit testów będzie tam
potrzebnych. Dla mnie to prosty rachunek.
> Całkiem spore i mocno zmieniające się w czasie serwisy webowe pisze się
> np. w Pythonie czy Ruby.
https://www.google.pl/search?q=django+exception
Google na to: "Około 3,760,000 wyników (0,15 s)"
Nabijam się, ale na poważnie: nie raz dostałem po gałach różnymi komunikatami, które
ładnie zdradzały w czym dany serwis został ulepiony, więc potwierdzam: faktycznie,
masz rację, pisze się.
--
Maciej Sobczak * http://www.msobczak.com * http://www.inspirel.com
Następne wpisy z tego wątku
- 11.02.13 00:58 Andrzej Jarzabek
- 11.02.13 01:31 Roman W
- 11.02.13 06:04 M.M.
- 11.02.13 09:07 Andrzej Jarzabek
- 11.02.13 10:49 Maciej Sobczak
- 11.02.13 17:24 M.M.
- 11.02.13 18:41 firr kenobi
- 11.02.13 18:55 M.M.
- 11.02.13 19:18 firr kenobi
- 12.02.13 00:19 Andrzej Jarzabek
- 12.02.13 00:23 Andrzej Jarzabek
- 12.02.13 00:36 Andrzej Jarzabek
- 12.02.13 01:15 M.M.
- 12.02.13 02:09 Andrzej Jarzabek
- 12.02.13 08:41 Adam Wysocki
Najnowsze wątki z tej grupy
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- 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
Najnowsze wątki
- 2025-03-20 Środa Wielkopolska => Konsultant wewnętrzny SAP FI/CO <=
- 2025-03-20 Warszawa => Senior Programmer C <=
- 2025-03-20 Re: Dlaczego tak odstają od Tesli?
- 2025-03-20 Greenpeace została zobowiązana do zapłaty niemal 667 mln dolarów [USA,wyrok sądu]
- 2025-03-20 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Brak ograniczeń dla chińskiego kapitału - wam nie do rządu, tylko na zmywak do chińskiej knajpy!!!
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 szal-Unia == federacja policyjna
- 2025-03-19 Polsza == państwo policyjne
- 2025-03-19 Grzegorz Płaczek o programie szczepień dzieci. ,,Stworzono eldorado dla firm farmaceutycznych"
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 Gemini
- 2025-03-19 Mokry sen Zenka :)
- 2025-03-19 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Czy grupa p.s.prawo przetrwa najbliższe wybory (prezydenta)?