Это возникло в дискуссии с другом, и я оказался в затруднении, чтобы придумать какие-либо хорошие аргументы. Какие преимущества дает слабая типизация?
type-systems
type-safety
weak-typing
Fishtoaster
источник
источник
Ответы:
Проблема с такого рода обсуждением заключается просто в том, что термины «слабая типизация» и «строгая типизация» не определены, в отличие, например, от терминов «статическая типизация», «динамическая типизация», «явная типизация», «неявная типизация», « типирование утки "," структурное типирование "или" номинальное типирование ". Черт, даже термины «манифестная типизация» и «скрытая типизация», которые все еще являются открытыми областями исследований и дискуссий, вероятно, лучше определены.
Таким образом, пока ваш друг не даст определение термина «слабая типизация», которое будет достаточно устойчивым, чтобы служить основой для обсуждения, даже не имеет смысла отвечать на этот вопрос.
К сожалению, кроме ответа Ника , никто из ответчиков не удосужился дать свое определение, и вы можете увидеть путаницу, которая возникает в некоторых комментариях. Трудно сказать, так как на самом деле никто не дает их определения, но я думаю, что я считаю по крайней мере три разных, только на этой самой странице.
Вот некоторые из наиболее часто используемых определений (и да, я знаю, что почти ни одно из них не имеет никакого смысла, но это те определения, которые, как я видел, люди фактически используют):
Три определения, которые, как представляется, используются наиболее широко, однако, являются
Если все не согласится на определении того , что «слабая типизация» даже есть , она даже не имеет смысла думать о том, что его преимущество может быть. Преимущества чего? Еще хуже, если нет определения вообще , то каждый может просто перенести их определения в соответствии со своими аргументами, и каждое обсуждение в значительной степени гарантированно делегируют в flamewar.
Я сам лично несколько раз менял свое определение на протяжении многих лет и теперь достиг точки, когда я даже больше не считаю эти термины полезными. Раньше я также думал, что слабая типизация (в ее различных определениях) имеет место в сценариях оболочки, но всякий раз, когда мне приходится решать одну и ту же проблему в Bash и PowerShell, мне до боли напоминают, как я ошибался.
источник
Помните, что есть две основные концепции, которые обычно путают:
Динамическая печать
Преимущества здесь часто игнорируются как для «новых» программистов, но также могут быть удобны для любого программиста:
Меньше кода в любом случае, где в противном случае вам пришлось бы привести или присвоить новое значение:
Слабая или слабая типизация
Выгоды:
Неявная логическая оценка . Любой тип может быть оценен как логическое значение. Это также имеет побочные преимущества, такие как часть
||
может использоваться в присваивании без преобразования в логическое значение:Опять же, меньше кода:
Даже Java должен был идти наполовину с неявным вызовом
.toString()
при объединении объектов с aString
; в противном случае Java-программисты проклинали бы это весь день (операторы журнала вышли бы из-под контроля).Оба определения взяты из http://en.wikipedia.org/wiki/Type_system . Он сказал это лучше, чем мог.
источник
if
блок или какая-либо другая более сложная (даже динамическая или динамическая) логика, следующая строка будет допустимой и защищенной от ошибок.Основной аргумент в пользу слабой типизации - это производительность. (это ответ на вопрос ОП, как указано). Существует много хороших дискуссий о динамическом и статическом, неявном и явном. и т.п.
C является самым известным слабо типизированным языком, и он не выполняет никакой проверки во время выполнения или проверки времени компиляции типа переменных. В сущности, вы можете привести a
char *
к a,int *
и язык не будет заботиться. Так зачем ты это делаешь?Программирование на C довольно близко к тому, как вы делаете вещи со сборкой, поэтому бывают случаи, когда вам важен только адрес. По
void *
этой самой причине нередко разыгрывать или передавать ссылку. Если вы знаете, как организована память (опять же проблема C и сборки), вы можете сделать несколько довольно крутых вычислений, основываясь на адресе в,void *
чтобы получить необходимую информацию. Это может позволить вам замкнуть процесс, который вам, например, придется пройти в Java.Хотя проверка типов во время выполнения не требует особых затрат, бывают случаи, когда этого достаточно, чтобы критическая секция работала слишком медленно. В этом случае я думаю в основном о встроенном программировании и системах реального времени.
Тем не менее, в большинстве случаев наличие сильной системы типов, которая либо проверяется во время компиляции, либо во время выполнения, помогает чаще, чем вредит.
источник
Новичкам обычно легче понять слабую типизацию, например, в Excel, Javascript и VBScript. Вы также обмениваете некоторую скорость разработки на возможные ошибки.
Хорошая статья на эту тему: Строгая типизация против Строгого тестирования
источник