Преимущества слабого набора текста перед строгим набором текста
Итак, я прочитал кучу похожих вопросов по переполнению стека относительно этой проблемы, и я думаю, что хорошо понимаю, в чем различия между ними. Мой вопрос заключается в том, есть ли какое-либо преимущество слабой типизации над строгой, кроме того факта, что некоторые операции просто проще для программистов. Хотя я согласен, что некоторые операции между типами излишне усложняются из-за строго типизированных языков, кажется, что все, что слабо типизированный язык все еще может быть выполнен в строго типизированном языке с некоторым дополнительным багажом.
Лично я, вероятно, предпочел бы дополнительную безопасность строгой типизации и иметь дело с незначительными неудобствами для определенных операций, но есть ли преимущество слабой типизации помимо этого? Есть ли что-то, что строгая типизация никогда не могла бы сделать так же?
4 ответа
Некоторые языки предлагают концепции для изменения поведения объекта или класса во время выполнения: объект, который не реализует метод, может все же решить найти способ ответить на вызов метода.
В Objective-C делегирование является обычным способом дать возможность другому объекту ответить на сообщение клиента. Объекты могут обнаружить отсутствующую реализацию и передать вызов метода делегату. Также возможно динамически добавлять реализацию метода при его вызове.
Эти концепции основаны на динамическом поиске методов, а не на слабой и строгой типизации. Но слабая типизация тесно связана с динамическим поиском, поэтому я считаю, что это считается преимуществом.
Очевидно, что в строке нет вычислимости... языки со строгой типизацией могут быть эквивалентными по Тьюрингу, и, предполагая, что языки со слабой типизацией не являются контрпримерами к тезису Черча-Тьюринга (можно представить, что это было бы широко опубликовано, если бы это было известно в таком случае) тогда они, по крайней мере, столь же мощны (вычислительно говоря), что и слабо типизированные языки.
Затем мы можем спросить, есть ли временная или пространственная сложность на линии. Мое интуитивное чувство здесь, что ответ - нет; Разница между строгой и слабой типизацией, вероятно, не значительна (с точки зрения вычислительной сложности) в модели вычислений ОЗУ. Я мог бы очень легко ошибаться здесь. Однако языки со строгой типизацией, вероятно, могут быть скомпилированы в более жесткий код, поэтому в любом случае реальная производительность может быть предпочтительна для языков со строгой типизацией.
На мой взгляд, единственное очевидное преимущество - это программируемость / возможность записи / читаемость / и т.д. Таким образом, это облегчает жизнь программистов, позволяя им писать меньше кода с меньшими усилиями, чтобы получить тот же эффект, что и написание большего кода с большими усилиями на языке с более строгими правилами ввода. Опять же, это также подлежит обсуждению, поскольку строгая типизация может облегчить предоставление гарантий правильности / надежности.
Для меня нет почти никакого преимущества (только куча подводных камней). Он подвержен ошибкам, сложен для отладки, выполнение юнит-тестирования - это ах.... (я не знаю, что сказать), и это заставляет начинающих программистов думать, что программирование настолько просто, в начале проекта нет дизайна,
Мне нужны ОШИБКИ КОМПИЛЕЙ, мне не нравится отладка динамического объекта, почему он неправильный, или........
Слабая типизация очень подвержена ошибкам, потому что вы найдете ошибки только во время выполнения.
Ошибки компиляции очень полезны, потому что они МОМЕНТАЛЬНО отображаются, тогда как для поиска всех ошибок времени выполнения вам нужно выполнить каждый сценарий каждого варианта использования. И если вы не разрабатываете автоматизированные тесты, которые охватывают 100% (я еще не видел кого-то подобного), у вас будет более хрупкое программное обеспечение, чем со строго типизированным языком.
Слабая типизация менее многословна, что означает, что вы печатаете меньше, но это также миф, потому что со строго типизированным языком вы получаете завершение кода, что означает меньшее количество нажатий клавиш, чем в слаботипированных языках.