Czy istnieją badania dotyczące skuteczności języków statystycznych i dynamicznych?
W szczególności:
- Pomiary wydajności programisty
- Wskaźnik defektów
Uwzględnia także skutki zastosowania testu jednostkowego.
Widziałem wiele dyskusji na temat zalet każdej ze stron, ale zastanawiam się, czy ktoś to zrobił.
productivity
comparison
type-systems
dynamic-typing
static-typing
Winston Ewert
źródło
źródło
Odpowiedzi:
Niektórzy sugerowali lekturę:
Nie do końca przy pisaniu statycznym, ale powiązane:
Kilka interesujących artykułów lub esejów na ten temat lub ogólnie na temat analizy statycznej programów:
A dla tych, którzy zastanawiają się, o co w tym wszystkim chodzi:
Wątpię jednak, aby którekolwiek z nich dało bezpośrednią odpowiedź, ponieważ nie wykonują dokładnie tego, czego szukasz. Będą to ciekawe lektury.
Osobiście, Zdecydowanie uważam, że pisanie statyczne zamiast pisania dynamicznego ułatwia wykrywanie błędów. O wiele za dużo piszę, szukając literówek i drobnych błędów takich jak te w JavaScript, a nawet w kodzie Ruby. A jeśli chodzi o pogląd, że dynamiczne pisanie daje ci wzrost wydajności, myślę, że sprowadza się to głównie do narzędzi. Jeśli statycznie wpisane języki mają odpowiednie narzędzia, które pozwalają na rekompilację w tle i zapewniają interfejs REPL, zyskujesz korzyści z obu światów. Scala zapewnia to na przykład, co bardzo ułatwia naukę i tworzenie prototypów w interaktywnej konsoli, ale daje korzyści płynące z pisania statycznego (i silniejszego systemu pisma niż wiele innych języków, pomijając języki ML). Podobnie, nie sądzę, żebym stracił produktywność przy użyciu Java lub C ++ (z powodu pisania statycznego), dopóki używam IDE, które mi pomaga. Kiedy wracam do kodowania tylko w prostych konfiguracjach (edytor + kompilator / interpreter), wydaje mi się, że korzystanie z bardziej dynamicznych języków jest niewygodne. Ale nadal polujesz na błędy. Sądzę, że ludzie powiedzieliby, że kwestia narzędzi jest odwracalnym argumentem, tak jakby gdyby narzędzia były lepsze dla języków dynamicznych, wówczas większość błędów i literówek byłaby wskazywana w czasie kodowania, ale moim zdaniem odzwierciedla to wadę systemu. Mimo to zwykle prototypuję w JRuby i koduję w Javie później większość rzeczy, które robię. jakby narzędzia były lepsze dla języków dynamicznych, wówczas większość błędów i literówek będzie wskazywana w czasie kodowania, ale moim zdaniem odzwierciedla to wadę systemu. Mimo to zwykle prototypuję w JRuby i koduję w Javie później większość rzeczy, które robię. jakby narzędzia były lepsze dla języków dynamicznych, wówczas większość błędów i literówek będzie wskazywana w czasie kodowania, ale moim zdaniem odzwierciedla to wadę systemu. Mimo to zwykle prototypuję w JRuby i koduję w Javie później większość rzeczy, które robię.
OSTRZEŻENIE: Niektóre z tych łączy są niewiarygodne, a niektóre przechodzą przez portale różnych towarzystw komputerowych korzystających z opłat dla członków. Przepraszam za to, próbowałem znaleźć wiele linków dla każdego z nich, ale nie jest to tak dobre, jak bym tego chciał.
źródło
Wczoraj znalazłem to badanie: Testowanie jednostkowe nie wystarczy. Potrzebujesz także pisania statycznego.
Zasadniczo autor użył narzędzia zdolnego do automatycznej konwersji projektu z niestatycznego języka pisania na język pisania statycznego (python do haskell)
Następnie wybrał wiele projektów Pythona o otwartym kodzie źródłowym, które również zawierały rozsądną liczbę jednostek testowych, i automatycznie przekonwertował je na haskell.
Tłumaczenie na Haskell ujawniło szereg błędów związanych z typem zmiennych: błędy nie zostały wykryte przez jednostki testowe.
źródło
Moja opinia. Chociaż istnieją słabe dowody, że dynamicznie pisane języki są bardziej produktywne, nie jest to jednoznaczne. (1) Istnieje wiele czynników, które nie były kontrolowane, (2) jest zbyt mało badań, (3) niewiele lub nie było dyskusji na temat tego, co stanowi odpowiednią metodę badania.
źródło
Oto punkt wyjścia:
Artykuł podważa powszechnie przyjętą mądrość, że programiści piszą tę samą liczbę wierszy kodu na raz, niezależnie od języka. Innymi słowy, artykuł powinien służyć jako dowód empiryczny, że produktywność mechaniczna (napisane wiersze kodu) nie jest dobrą miarą wydajności funkcjonalnej i musi być przynajmniej znormalizowana przez język.
źródło
Znalazłem języki statyczne vs. dynamiczne: przegląd piśmiennictwa , w którym wymieniono niektóre badania na ten temat i podano ładne podsumowanie każdego z nich.
Oto streszczenie:
źródło
Szczerze mówiąc, nie sądzę, aby pisanie statyczne vs. dynamiczne było prawdziwym pytaniem.
Myślę, że na pierwszym miejscu powinny być dwa parametry:
Jeśli znasz się na języku, napiszesz kod i z łatwością wyszukasz błędy.
Jeśli napiszesz oddzielony kod i dokładnie przetestujesz każdą funkcjonalność, to stworzysz dobrze dopracowany kod, a tym samym będziesz produktywny (ponieważ nie możesz zakwalifikować się jako produktywny, jeśli nie ocenisz jakości produktu, prawda? )
Dlatego uważam, że debata statyczna kontra dynamiczna dotycząca produktywności jest dość dyskusyjna lub przynajmniej w znacznym stopniu zastąpiona innymi rozważaniami.
źródło
Tu jest kilka:
Stefan Hanenberg. 2010. Eksperyment na temat układów typu statycznego i dynamicznego: wątpliwości dotyczące pozytywnego wpływu układów typu statycznego na czas opracowywania. W materiałach z międzynarodowej konferencji ACM na temat języków i aplikacji systemów programowania obiektowego (OOPSLA '10). ACM, Nowy Jork, NY, USA, 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Daniel P. Delorey, Charles D. Knutson, Scott Chun, „Czy języki programowania wpływają na produktywność? Studium przypadku z wykorzystaniem danych z projektów Open Source”, floss, str. 8, Pierwsze międzynarodowe warsztaty nt. Pojawiających się trendów w badaniach i rozwoju FLOSS (FLOSS '07: warsztaty ICSE 2007), 2007
Daly, M .; Sazawal, V., Foster, J .: Work in Progress: Empirical Study of Static Typing in Ruby, Workshop on Evaluation and Usability of Programming Languages and Tools (PLATEAU) na ON-WARD 2009.
Lutz Prechelt i Walter F. Tichy. 1998. Kontrolowany eksperyment mający na celu ocenę korzyści wynikających z kontroli argumentów typu procedury. IEEE Trans. Oprogramowanie Inż. 24, 4 (kwiecień 1998), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
źródło