Да, подобные вопросы задавались, но всегда с целью выяснить, «какой из них лучше».
Я спрашиваю, потому что я пришел как разработчик в основном на JavaScript, и у меня нет большого опыта написания на статически типизированных языках.
Несмотря на это, я определенно вижу ценность в изучении C для обработки сложных операций на более низких уровнях кода (что, как я полагаю, имеет много общего со статической и динамической динамикой на уровне компилятора), но что я пытаюсь обернуть вокруг Существуют ли специфические контексты проекта (возможно, определенные типы динамических операций с большими объемами данных?), затрагивающие другие аспекты, помимо производительности, когда гораздо больше смысла использовать Java или C #, чем что-то вроде Python.
dynamic-typing
static-typing
Эрик Реппен
источник
источник
Ответы:
Определенно да.
Динамическая типизация имеет определенные преимущества в тех случаях, когда вы хотите иметь возможность рассматривать все как один тип. Сериализация / десериализация является одним из классических примеров. Вот почему так много веб-программирования выполняется на языках сценариев с динамической типизацией: они хорошо подходят для задачи, которая включает в себя множество преобразований всех видов данных в строки и из них.
Для прикладного программирования, с другой стороны, статические языки работают намного лучше, потому что попытка рассматривать все как один единственный тип не является обязательным требованием. Вы часто хотите иметь эффективные структуры данных с данными, представленными как сами по себе и не очень часто конвертируемыми в другие типы. Это делает преимущества динамической типизации недостатком, а не преимуществом, поэтому приложения почти исключительно написаны на статически типизированных языках.
источник
Я смотрю на это так: если вы можете работать естественным образом в статически типизированном языке, тогда стоит использовать статическую типизацию. Как правило, целью системы типов является предотвращение выполнения операций с неопределенной семантикой, например
(string) "hello" + (bool) true
. Наличие дополнительного уровня безопасности, препятствующего выполнению этих операций, может стать хорошим способом предотвращения ошибок в вашем коде даже без обширных модульных тестов. То есть безопасность типов обеспечивает еще один уровень уверенности в семантической корректности вашего кода.Но системы типов очень трудно понять правильно. Я не считаю , что это идеальный тип системы в природе на момент написания этой статьи. (Под «совершенной системой типов» я подразумеваю систему строгих типов, которая не требует подробных аннотаций кода, которая не генерирует ложноположительных ошибок типа и чьи ошибки типа легко понять программисту.) Кроме того, она может Трудно понять действительно хорошие системы типов, которые существуют. Когда я изучал Haskell, я не могу сказать вам количество неясных ошибок типов, которые я получил, пытаясь написать то, что выглядело (для меня) как правильный код. Обычно код на самом деле не был корректным (что говорит в пользу системы типов), но это заняло много времениработы, чтобы понять сообщения об ошибках от компилятора, чтобы я мог исправить основные проблемы. В ОО-языках вы можете в конечном итоге подумать: «Этот аргумент должен быть противоречивым с типом ввода, а не ковариантным!», Или (более вероятно) возвращаться к типам типов для выхода за пределы системы типов. Системы типов могут оказаться намного сложнее, чем вы думаете.
Что бы это ни стоило, я понимаю, что трудность в создании хороших систем типов является частью того, что побудило Гилада Брачу включить в Newspeak поддержку сменных систем типов.
источник
Это разные инструменты, но дело не в производительности. Все дело в сложности .
Динамические языки обычно стремятся к максимальной гибкости, и это приводит к отсутствию проверки и своего рода гарантии. Кроме того, он очень мощный в небольших программах, но практически невозможно поддерживать крупномасштабные программы (сложность).
Статические языки обычно стремятся к максимальной валидации. Их первой целью обычно является выявление ошибок (или ошибок) как можно раньше. Многие гарантии сделаны для проверки. Тогда труднее учиться и начинать, но, поскольку программы становятся больше, это обеспечивает лучшую проверку программ с гораздо меньшими затратами (усилия по написанию кода).
В результате динамические языки обычно подходят для небольших (я имею в виду очень маленьких) программ, таких как динамические веб-страницы, веб-браузер DSL (не для приложений браузера!) Или сценарии оболочки. Статические языки лучше подходят для системного программирования или любых других вещей.
Приведенные выше описания относятся к очень чисто динамическим или статическим языкам. Большинство реальных языков находятся между ними и показывают различные характеристики.
Смотрите здесь для получения более подробной информации: https://softwareengineering.stackexchange.com/a/105417/17428
источник
В настоящее время я программирую на языках статического типа (C # и F #), но мне нравится программирование на динамических языках (Smalltalk, Ruby). Есть много плюсов и минусов, которые люди связывают с одним типом против другого, которые больше связаны с языком, чем когда вы применяете типы. Например, динамические языки обычно имеют более чистый и более лаконичный синтаксис, однако F # и OCaml с их системой вывода типов имеют такой же чистый синтаксис, как и любой динамический язык. А со статической типизацией у вас есть реальное автоматическое рефакторинг и автозаполнение, но Smalltalk с его полным исходным кодом в базе данных и каждым методом, скомпилированным отдельно, был первым языком, который действительно имел серьезные автоматизированные рефакторинги, и он работал отлично. В конечном счете, современные динамические и статические языки сегодня безопасны от типов, что является наиболее важным аспектом вашей системы типов,
источник
Сейчас 2015 год, который добавляет некоторые интересные фрагменты к разговору:
Так что парни из бэкэнда устали от ненужной прямой рубашки строгой типизации, в то время как парни из фронтэнда устали от хаоса динамической типизации.
Совершенно иронично: интересно, встретятся ли они посередине или устремятся мимо друг друга с звуковым бумом крайнего срока, проходящего через ...? ;)
источник