сравнение статически типизированного кода с динамически типизированным кодом - затраты и выгоды - PullRequest
0 голосов
/ 07 января 2009

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

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

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

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

Ответы [ 6 ]

1 голос
/ 07 января 2009

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

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

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

1 голос
/ 07 января 2009

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

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

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

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

1 голос
/ 07 января 2009

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

0 голосов
/ 07 февраля 2013

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

0 голосов
/ 17 сентября 2011

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

0 голосов
/ 07 января 2009

OP и felipecsl не уверены в терминологии, используемой при разговоре о типизации дисциплин.

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

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

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

...