Сильная И Слабая Типизация

Сильная и слабая типизация или строгая и нестрогая типизация — характеристика системы типов языка программирования, отражающая существенные ограничения на приведение типов при присваиваниях и операциях.

Языки, в которых такие ограничения менее строгие, называют — слабо типизированными.

Впервые понятие введено в 1974 году Лисков и Зиллесом в работе по Клу, назвавшими сильно типизированными языки, в которых «при передаче объекта из вызывающей функции в вызываемую тип этого объекта должен быть совместим с типом, определённым в вызываемой функции». В контексте такого определения «в сильно типизированном языке всякая ячейка данных будет иметь уникальный тип и всякий процесс будет провозглашать свои требования по взаимосвязи в терминах этих типов». Другое определение дал Лука Карделли[en], связавший сильную типизацию со своей концепцией полнотипового программирования: система типов называется «сильной», если она исключает возможность возникновения ошибки согласования типов времени выполнения, иными словами, обеспечивающей типобезопасность (отсутствие неконтролируемых ошибок приведения типов времени выполнения) на уровне языка.

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

Примеры

Яркими примерами языков со слабой типизацией являются языки семейства Си и C++. Их характерными чертами являются понятия приведения типов и каламбуров типизации. Эти операции поддерживаются на уровне компилятора и часто вызываются неявно. Операция reinterpret_cast в C++ позволяет представить элемент данных любого типа как принадлежащий любому другому типу при условии равенства длины их низкоуровневой реализации (битового представления)[источник не указан 1436 дней] и изменить его состояние образом, недопустимым для исходного типа. Неосторожное использование таких операций нередко является источником крахов программ. Несмотря на это, в учебной литературе по C++ его система типов описывается как «сильная», что, с учётом определения Карделли можно интерпретировать как «более сильную, чем в Си».

В противоположность этому, в языках, типизированных по Хиндли — Милнеру, понятие о приведении типов отсутствует в принципе. Единственным способом «преобразовать» тип является написание функции, которая алгоритмически строит значение требуемого типа на основе значения исходного типа. Для тривиальных случаев, таких как «преобразование» целого без знака в целое со знаком и наоборот, такие функции обычно входят в состав стандартных библиотек. Наиболее часто используемым случаем такого рода функций являются специальные определяемые функции с пустым телом, называемые конструирующими функциями или просто конструкторами.

При этом система типов Хиндли — Милнера обеспечивает чрезвычайно высокий показатель повторного использования кода за счёт параметрического полиморфизма. Сильная, но неполиморфная система типов может затруднить решение многих алгоритмических задач, как это было отмечено в отношении Паскаля.

Есть мнение[чьё?], что сильная типизация является непременным элементом обеспечения надёжности разрабатываемых программных средств. При правильном применении (подразумевающем, что в программе объявляются и используются отдельные типы данных для логически несовместимых значений) она защищает программиста от простых, но труднообнаруживаемых ошибок, связанных с совместным использованием логически несовместимых значений, возникающих иногда просто из-за элементарной опечатки.

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

Слабая типизация является типичным решением для языков с динамической типизацией, но в некоторых случаях для динамических языков используется сильная система типов (например, в Python).

Примером языка с крайне строгой типизацией является Ада — в нём приведение типов в принципе невозможно, разные типы изначально считаются несовместимыми (уникальная типизация). Бестиповые языки (различные ассемблеры, Форт, Рефал) можно отнести к другой крайности — в них какой-либо контроль типов отсутствует полностью, вплоть до отсутствия самого понятия типа.

Примечания

Литература

Tags:

Приведение типовСистема типов

🔥 Trending searches on Wiki Русский:

Звёздные войныИбн СинаИнтернетКанадаАтомные бомбардировки Хиросимы и НагасакиКарты GoogleВладимиров, Игорь ПетровичСборная России по футболуСингапурГибель тургруппы ДятловаБандерас, АнтониоГомес, СеленаТ-34Австралийская аттестационная комиссияТретьякова, Галина НиколаевнаКаддафи, МуаммарПётр IIIКруз, ТомАгностицизмIMGSRC.RUЛеонардо да ВинчиПи (число)День внутренних войск МВД РоссииГогунский, Виталий ЕвгеньевичКурская битваГай Юлий ЦезарьСписок игроков НХЛ, забросивших 500 и более шайбНижний НовгородРимский статут Международного уголовного судаДнепр (город)Кронберг, Лариса ИвановнаНаселение РоссииПокровский, Максим СергеевичВоля, Павел АлексеевичСталин, Василий ИосифовичЛоуренс, ДженниферНетаньяху, БиньяминСтудия Квартал-95Бейл, КристианСодружество Независимых ГосударствКрасноярскВеликий НовгородСтейтем, ДжейсонРеспублика КипрВолгоградУотсон, ЭммаМаяковский, Владимир ВладимировичФишер (сериал)Международный фонетический алфавитПосейдон (подводный аппарат)Бортич, Александра НиколаевнаНаполеон IСверхъестественное (телесериал)Азов (полк)Дмитриенко, ВаняНью-ЙоркЧикатило, Андрей РомановичВооружённые силы Российской ФедерацииГагарин, Юрий АлексеевичМедведев, Дмитрий АнатольевичРеспублика КореяСписок кодов состояния HTTPРоссияF-35Булгаков, Михаил АфанасьевичYouTubeБригада (телесериал)Бальзак, Оноре деКапибараСоюз Советских Социалистических РеспубликВяльбе, Елена ВалерьевнаБиполярное расстройствоОбсессивно-компульсивное расстройствоТриггер (телесериал)VK (компания)Шазам! Ярость боговБалабанов, Алексей Октябринович🡆 More