Сильная и слабая типизация: различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Тут неуместно слово "правильный", stong можно перевести как "строгий".
исправление cite web
Строка 55:
Например, яркими примерами '''слабой''' системы типов являются те, что лежат в основе языков [[Си (язык программирования)|Си]] и [[C++]]. Их характерными атрибутами являются понятия [[Приведение типа|приведения типов]] и [[Каламбур типизации|каламбуров типизации]]. Эти операции поддерживаются на уровне компилятора и часто вызываются неявно. Операция <code>reinterpret_cast</code> в С++ позволяет представить элемент данных любого типа как принадлежащий любому другому типу при условии равенства длины их низкоуровневой реализации (битового представления) и изменить его [[Состояние (информатика)|состояние]] образом, недопустимым для исходного типа. Неосторожное использование таких операций нередко является источником [[Аварийный отказ (программирование)|крахов]] программ. Несмотря на это, в учебной литературе по С++ его система типов описывается как «''сильная''», что, с учётом тезисов Луки Карделли<ref name="typeful" /> и других, следует понимать как «''более сильная, чем в Си''». В противоположность этому, в языках, [[Система типов Хиндли — Милнера|типизированных по Хиндли — Милнеру]], понятие о ''приведении'' типов отсутствует в принципе. Единственным способом «преобразовать» тип является написание функции, которая алгоритмически ''строит'' значение требуемого типа на основе значения исходного типа. Для тривиальных случаев, таких как «преобразование» целого без знака в целое со знаком и наоборот, такие функции обычно входят в состав стандартных библиотек. Наиболее часто используемым случаем такого рода функций являются специальные определяемые функции с пустым телом, называемые конструирующими функциями или просто [[Конструктор (функциональное программирование)|конструкторами]].
 
При этом [[Вывод типов|система типов Хиндли — Милнера]] обеспечивает чрезвычайно высокий показатель [[повторное использование кода|повторного использования кода]] за счёт [[параметрический полиморфизм|параметрического полиморфизма]]. Сильная, но не полиморфная система типов может затруднить решение многих алгоритмических задач, как это было отмечено в отношении языка [[Pascal]]<ref>{{Cite web |url=http://www.cs.virginia.edu/~cs655/readings/bwk-on-pascal.html# |title=Why Pascal is Not My Favorite Programming Language|author=[[Керниган, Брайан|Brian Kernighan]] |accessdate=2014-03-13 |archiveurl=https://web.archive.org/web/20120406094058/http://www.cs.virginia.edu/~cs655/readings/bwk-on-pascal.html# |archivedate=2012-04-06 |deadlink=yes }}</ref>.
 
В теории программирования сильная типизация является непременным элементом обеспечения надёжности разрабатываемых программных средств. При правильном применении (подразумевающем, что в программе объявляются и используются отдельные типы данных для логически несовместимых значений) она защищает программиста от простых, но труднообнаруживаемых ошибок, связанных с совместным использованием логически несовместимых значений, возникающих иногда просто из-за элементарной опечатки.