сравнение статически типизированного кода с динамически типизированным кодом - затраты и выгоды

StackOverflow https://stackoverflow.com/questions/419072

Вопрос

Какими бы ни были его достоинства, Adobe Actionscript 3 предоставляет, возможно, уникальную возможность изучить последствия типизированных и нетипизированных языков, потому что это в значительной степени строгий надмножество javascript со всеми синтаксическими преимуществами / накладными расходами на строгое объявление типов, декларативное приведение и т.д.

Что это делает возможным, так это сравнение одного и того же кода, написанного обоими способами, с одновременным выделением основного синтаксиса языка.

Это заставляет меня задаться вопросом, есть ли какие-либо количественные доказательства реальной пользы строгой типизации, в частности, для проверки ошибок во время компиляции, в отношении частоты ошибок, производительности программирования и объема кода;или наши взгляды полностью основаны на домыслах и догадках?Существуют ли какие-либо другие языки, которые можно использовать обоими способами (не считая старомодного VB - в любом случае он не является очень уважаемым языком.)

Я потратил значительное время на изучение обоих языков, но так и не решил окончательно, какой способ я предпочитаю, и я бы предпочел ничего не добавлять к неподтвержденным данным - я ищу объективную информацию.

Это было полезно?

Решение

Это одна из величайших религиозных войн в программировании, которая, возможно, превзошла только конфликт между единственным Истинным редактором EMACS и злым порождением сатаны VI.

По сути, если программа, написанная на динамическом языке, является правильной, то она может быть преобразована в язык со статической типизацией и при этом быть правильной, и наоборот. Преимущество действительно статически типизированного langfuage заключается в том, что ошибки, которые будут отображаться во время выполнения на динамическом языке, могут быть идентифицированы во время компиляции на статически типизированном языке.

Однако в этих ситуациях часто пренебрегают тем, что в статически типизированных языках обычно есть escape-штриховки (например, типы типов), и, очевидно, динамические языки могут использовать вывод типов для вывода и рассматривать как статически типизированные типы явно динамических выражений. .

Что действительно важно под покровом, так это программист. Если программист считает программу правильной, то она будет правильной на статическом или динамическом языке. Мне не известны какие-либо убедительные экспериментальные доказательства того, что один из них более продуктивен или более подвержен ошибкам на практике.

Другие советы

По моему мнению, языки со строгой типизацией, такие как C #, могут идентифицировать во время компиляции множество пропущенных ошибок, которые не будут обнаружены в свободном типизированном языке и, следовательно, позже вызовут ошибку времени выполнения. Я не думаю, что это всего лишь предположение, поскольку строгая компиляция может предвидеть проблемы, которые впоследствии могут привести к ошибкам во время выполнения. Это может потенциально устранить большинство ошибок кодирования, которые вы пропускаете во время реализации, но которые могут быть легко найдены и исправлены компилятором.

Значение статической типизации кажется мне довольно ограниченным, если вы, как и я, считаете, что вы не можете сказать что-то правдивое о программном обеспечении, если у вас нет теста, демонстрирующего, что это так. Если вы принимаете и применяете это на практике, то в значительной степени не имеет значения, были ли обнаружены ошибки во время компиляции или во время тестирования.

На данный момент, я бы предпочел более краткий из двух типов языков, которые по моему опыту были динамическими языками.

С другой стороны, статическая типизация действительно помогает вам, только если вы не пишете тесты. Если это так, статической типизации, вероятно, недостаточно для обеспечения правильной работы вашего программного обеспечения.

OP и felipecsl путаются в терминологии, используемой при разговоре о дисциплинах набора текста.

Статическая типизация означает, что типы проверяются во время компиляции (что бы ни означало время компиляции в языке).Динамическая типизация означает, что типы проверяются по мере выполнения выражений / инструкций.Строгая типизация означает, что вы не можете, например, преобразовать указатель в целое число.Слабый набор текста - это противоположность Сильному набору текста.

Насколько я знаю, "строгой типизации" не существует.

Теперь пусть кто-нибудь другой ответит на сам вопрос ;-)

Слабый тип требует больше времени на обслуживание. Поскольку программы становятся более сложными, возникает больше проблем из-за отсутствия компилятора, который бы улавливал очевидные проблемы. Не рекомендуется для больших сложных проектов. Я говорю из опыта.

Статистически типизированный язык. Имейте их переменные и выражения как фиксированные типы, которые явно указаны программистом или выведены. Компилятор использует это. Информация, проверка типа здесь будет выполняться во время компиляции. В то время как динамически типизированный lang имеет свои значения фиксированными, но переменные и выражения x не являются фиксированными .. из-за того, что когда вычисляется операнд, он может возвращать разные значения, тогда проверка типа выполняется после того, как операнд был вычислен. после вычисления, но до выполнения операции во время выполнения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top