Tak na luzie chciałem zadać pytanie, czy znacie jakieś plusy dynamicznie typowanych języków nad statycznie typowanymi językami? Tzn ja coś tam wiem, pewnie jak każdy, ale też chciałbym po prostu poznać Waszą techniczną opinię, bo dość często tutaj widzę jak dynamiczne języki dostają lanie zwłaszcza od osób, które ich w ogóle nie używają albo od osób, które raz użyli w pracy i się sparzyli na całe życie.
Analogicznie ktoś mógłby mówić, że Haskell jest zbyt dziwny i zbyt akademicki, niepraktyczny, i w ogólne za trudny jak na początek, ale zmienia myślenie (i przez to warto go poznać), sprawia, żę warto zmienić myślenie i przez to ten kto zignoruje powierzchowną opinię może odkryć w tym języku coś pięknego,pouczającego, prawda? I to samo podejście byłoby super wykorzystać tutaj, aby w tej dyskusji padały hasła dotyczące rzeczy, które są mniej dostrzegalne, a jednocześnie stanowią pewną wartość języków dynamicznych. Byłbym wdzięczny za powstrzymanie się od pisania frazesów, że język dynamiczny to zabawka, narzędzie niegodne inżyniera i ogólnie, że to środek, do wprowadzania bałaganu za cenę szybkiego prototypowania. Jeśli ktoś nie wie co zaproponować (bo np. żal go do tego typu rozwązań zalewa), niech się wstrzyma od głosu, dzięki!
O statycznie typowanych językach ludzie pewno powiedzą:
- często idzie w parze z kompilacją do pliku binarnego
- a jak plik binarny to często wykonanie jest szybsze, też jest większa oszczędność pamięci, lepiej to współgra z wykorzystaniem procesora
- programy są bezpieczniejsze, bo są weryfikowane pod kątem zgodności z typami co również ułatwia refaktoryzację i ułatwia zaprojektownie kodu, by uniknąć niepożądanych użyć
- obsługa błędów również na tym korzysta gdy błędy są zwracane jako wartość funkcji, ponadto łatwiej jest się ustrzec przed nullami
- IDE taki kod lepiej obsługuje, daje znacznie więcej podpowiedzi i autouzupełnianie
- kod jest bliższy kontekstowi użycia, stąd łatwo określić co przyjmujemy, łatwo określić co funkcja produkuje
- poprzez typy łatwiej opisać zmiany jakie następują w trakcie przetwarzania
- poprzez typy (z pomocą monad) można kontrolować efekty uboczne
- typy też są dobre w modelowaniu gdzie dane mają dużą regularność, a także pozwalają modelować przetwarzanie tak by podkreślić zmiany jakie następują
- dodatkowo moc tych punktów rośnie wraz z kodem, który integrujemy, a którego nigdy wcześniej nie pisaliśmy, łatwiej wykryć niezgodności
pewnie jeszcze dałoby radę coś wymyślić trochę punktów :-)
Fajnie byłoby zobaczyć podobne listy uwagi odnośnie atuty jakie mają dynamicznie typowane języki? Co one odblokowują? Ogólnie fajnie byłoby gdyby padło coś ciekawszego niż tylko wrażenia, ze na początku ich nauka jest prostsza, mniej wymagająca i , ż małe programy pisze się szybciej / taniej docelowo kosztem jakości. Mi bardziej chodzi o wskazanie tych cech, ktore robią różnicę na płaszczyźnie projektu, a które na ogół w typowych wojenkach nie są nawet dostrzegalne.