Czy istnieją jakieś poważne różnice architektoniczne podczas projektowania aplikacji, które będą budowane na językach statycznych (takich jak C # lub Java) i językach dynamicznych (takich jak Ruby lub Python)?
Nie.
Nieco łatwiej jest pisać fantazyjne ramy dla dynamicznych języków. Ale to nie jest kwestia aplikacji.
Jakie są możliwości projektowania, które mogą być dobrym wyborem dla jednego typu, który jest zły dla drugiego?
Naprawdę brak.
Możesz pisać dobre rzeczy w obu językach.
Czy są jakieś przydatne funkcje, które można osiągnąć z jednym typem, który nie jest z drugim (oczywiście w projektowaniu i architekturze)?
Nie.
Różnica polega na tym, że języki dynamiczne to „pisz, uruchamiaj, napraw”. Możesz szybko eksperymentować i naprawiać.
Językami statycznymi są „pisz, kompiluj, buduj, uruchamiaj, naprawiaj”. Nie możesz tak łatwo eksperymentować.
Poza tym są prawie identyczne pod względem możliwości.
Czy istnieją jakieś dynamiczne wzorce projektowe?
Może. Pythoneval()
i execfile()
funkcje - w pewnym sensie - wskazują dynamiczną funkcję języka, która jest trudna (ale daleka od niemożliwej) do obsługi w języku statycznym. Byłoby o wiele więcej wierszy kodu do kompilacji i wykonania kodu w tej samej przestrzeni procesu.
Nie jest on specyficzny dla języka dynamicznego. To jest po prostu łatwiejsze.