Я не думаю о динамически типизированных языках, как о «разрешении прохладных трюков» (они делают это, но в основном это не очень удобно использовать «классные» трюки в производственном программном обеспечении - они пригождаются для тестирования, отладки и т. Д. , но когда дело доходит до получения хорошего, быстрые вещи, развернутые для производства, правила простоты).
Скорее, я думаю о таких языках, как «не мешаю», в частности, не замедляя меня, заставляя меня излишне указывать вещи снова и снова. Не все статически типизированные языки делает «встать на ваш путь» - хорошие с прочными, логически правильными типами систем, такие как Haskell, позволяют компилятору вывести типы (хотя вы можете с избытком указать их, если вы , например redundancy ... или, более того, если вам нужны более строгие ограничения, чем то, что компилятор действительно может вывести из кода). Но в Java (и в меньшей степени в C#, за исключением случаев, когда вы используете достаточно последнее ключевое слово var
) избыточность является правилом, и это влияет на производительность.
Компромисс может быть предложен сторонними системами проверки для Python, например typecheck. Я не использую его сам, но я могу видеть, как кто-то, кто действительно считает статическую проверку типа, добавляет большую ценность, может быть доволен им. Существует даже синтаксис (который компилятор Python принимает, но ничего не делает) в последних версиях Python, чтобы вы могли аннотировать аргументы функции и возвращаемые значения - его цель - предоставить такие пакеты, как typecheck
, для более естественного слияния с соответствующим языком (хотя я не думаю, что typecheck
еще).
Edit:
Как я уже писал здесь, и я цитирую:
Я люблю объяснения Ван Рой и Haridi, с. 104-106 из their book, хотя я может или не может согласиться с их выводы (которые в основном , что внутренняя разница крошечная - они указывают на Оз и Алиса в качестве совместимых языков без и со статической типизации, соответственно) , все пункты, которые они делают, хороши. Самое главного, я считаю, как динамическая типизация позволяет в режиме реальной модульности (тверже со статической типизацией, поскольку типа дисциплина должна быть приведены в исполнение через границы модулей) и «разведочные вычислений в вычислительной модели, которая объединяет несколько программирования парадигм».
«Динамическая типизация рекомендуется», они заключают: «когда программы должны быть как гибкими, насколько это возможно». Я рекомендую чтение Agile Manifesto в понять, почему максимальная гибкость решающая роль в большинстве реальных приложений программирования - и, следовательно, почему в сказала реальный мир, а не в более научных кругах доктор Ван Рой и Dr. Хадиди перемещается, динамическая типизация обычно предпочтительнее, а не такая крошечная проблема, поскольку они делают разницу быть. Тем не менее, они по крайней мере показать больше осведомленности о проблемах, в посвящая 3 прекрасных страниц обсуждения о его, плюсов и минусы, чем почти любой другой книги, которую я видел - большинство книг четко очерчены и предварительно приоритет так или иначе, поэтому обсуждение редко бывает сбалансированным как то;).
Обязательная ссылка XKCD: http://xkcd.com/353/ –
возможно дубликат http://stackoverflow.com/questions/42934/whats-with-the-love-of-dynamic-languages HTTP: //stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages http://stackoverflow.com/questions/379128/how-do-you-program-differently-in-dynamic-languages –
Это намного мощнее. Он также создает очень читаемый код. – jcao219