Сильная и слабая типизация

Поделись знанием:
(перенаправлено с «Строгая типизация»)
Перейти к: навигация, поиск
Типизация данных

Типобезопасность
Вывод типов
Статическая типизация
Динамическая типизация
Сильная и слабая типизация
Зависимые типы
Утиная типизация

По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».

Примечание: В русскоязычной литературе часто встречается некорректный переводК:Википедия:Статьи без источников (тип: не указан)[источник не указан 2912 дней] термина «strong typing» как «строгая типизация»; корректный вариант «сильная типизация» используется лишь при противопоставлении «слабой типизации». Следует иметь в виду, что использование термина «строгий» в отношении системы типов языка может вызвать путаницу со строгой семантикой вычислений языка (англ. strict evaluation).





История

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

В статье Луки Карделли[en] «Полнотиповое программирование»[3], система типов называется «сильной», если она исключает возможность возникновения ошибки согласования типов времени выполнения. Иначе говоря, отсутствие непроконтролированных ошибок времени выполнения называется типобезопасностью; ранние работы Хоара называют это свойство безопасностью (англ. security).

Определение «сильной» и «слабой» типизации

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

Например, яркими примерами слабой системы типов являются те, что лежат в основе языков Си и C++. Их характерными атрибутами являются понятия приведения типов и каламбуров типизации. Эти операции поддерживаются на уровне компилятора и часто вызываются неявно. Операция reinterpret_cast в С++ позволяет представить элемент данных любого типа как принадлежащий любому другому типу при условии равенства длины их низкоуровневой реализации (битового представления) и изменить его состояние образом, недопустимым для исходного типа. Неосторожное использование таких операций нередко является источником крахов[en] программ. Несмотря на это, в учебной литературе по С++ его система типов описывается как «сильная», что, с учётом тезисов Луки Карделли[3] и других, следует понимать как «более сильная, чем в Си». В противоположность этому, в языках, типизированных по Хиндли — Милнеру, понятие о приведении типов отсутствует в принципе. Единственным способом «преобразовать» тип является написание функции, которая алгоритмически строит значение требуемого типа на основе значения исходного типа. Для тривиальных случаев, таких как «преобразование» целого без знака в целое со знаком и наоборот, такие функции обычно входят в состав стандартных библиотек. Наиболее часто используемым случаем такого рода функций являются специальные определяемые функции с пустым телом, называемые конструирующими функциями или просто конструкторами.

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

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

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

Python является одним из примеров языка с сильной, и при этом динамической типизацией[5].

См. также

Напишите отзыв о статье "Сильная и слабая типизация"

Примечания

  1. Liskov, Zilles [citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.136.3043 Programming with abstract data types]. — ACM Sigplan Notices, 1974.
  2. K. Jackson [www.springerlink.com/content/wq02703237400667/ Parallel processing and modular software construction]. — Lecture Notes in Computer Science, 1977. — С. 436–443. — ISBN 3-540-08360-X.
  3. 1 2 ftp://gatekeeper.research.compaq.com/pub/DEC/SRC/research-reports/SRC-045.pdf page 3
  4. [www.cs.virginia.edu/~cs655/readings/bwk-on-pascal.html Brian Kernighan: Why Pascal is not my favourite language]
  5. [wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language Why is Python a dynamic language and also a strongly typed language — PythonInfo Wiki]

Литература

  • Лука Карделли[en] [www.lucacardelli.name/Papers/TypefulProg.pdf Typeful programming] ( (англ.)) // IFIP State-of-the-Art Reports. — Springer-Verlag, 1991. — Вып. Formal Description of Programming Concepts. — С. 431–507.
  • Pierce, Benjamin C. [www.cis.upenn.edu/~bcpierce/tapl/ Types and Programming Languages]. — MIT Press, 2002. — ISBN 0-262-16209-1.

Отрывок, характеризующий Сильная и слабая типизация

– Вы всегда танцуете. Тут есть моя protegee [любимица], Ростова молодая, пригласите ее, – сказал он.
– Где? – спросил Болконский. – Виноват, – сказал он, обращаясь к барону, – этот разговор мы в другом месте доведем до конца, а на бале надо танцовать. – Он вышел вперед, по направлению, которое ему указывал Пьер. Отчаянное, замирающее лицо Наташи бросилось в глаза князю Андрею. Он узнал ее, угадал ее чувство, понял, что она была начинающая, вспомнил ее разговор на окне и с веселым выражением лица подошел к графине Ростовой.
– Позвольте вас познакомить с моей дочерью, – сказала графиня, краснея.
– Я имею удовольствие быть знакомым, ежели графиня помнит меня, – сказал князь Андрей с учтивым и низким поклоном, совершенно противоречащим замечаниям Перонской о его грубости, подходя к Наташе, и занося руку, чтобы обнять ее талию еще прежде, чем он договорил приглашение на танец. Он предложил тур вальса. То замирающее выражение лица Наташи, готовое на отчаяние и на восторг, вдруг осветилось счастливой, благодарной, детской улыбкой.
«Давно я ждала тебя», как будто сказала эта испуганная и счастливая девочка, своей проявившейся из за готовых слез улыбкой, поднимая свою руку на плечо князя Андрея. Они были вторая пара, вошедшая в круг. Князь Андрей был одним из лучших танцоров своего времени. Наташа танцовала превосходно. Ножки ее в бальных атласных башмачках быстро, легко и независимо от нее делали свое дело, а лицо ее сияло восторгом счастия. Ее оголенные шея и руки были худы и некрасивы. В сравнении с плечами Элен, ее плечи были худы, грудь неопределенна, руки тонки; но на Элен был уже как будто лак от всех тысяч взглядов, скользивших по ее телу, а Наташа казалась девочкой, которую в первый раз оголили, и которой бы очень стыдно это было, ежели бы ее не уверили, что это так необходимо надо.
Князь Андрей любил танцовать, и желая поскорее отделаться от политических и умных разговоров, с которыми все обращались к нему, и желая поскорее разорвать этот досадный ему круг смущения, образовавшегося от присутствия государя, пошел танцовать и выбрал Наташу, потому что на нее указал ему Пьер и потому, что она первая из хорошеньких женщин попала ему на глаза; но едва он обнял этот тонкий, подвижной стан, и она зашевелилась так близко от него и улыбнулась так близко ему, вино ее прелести ударило ему в голову: он почувствовал себя ожившим и помолодевшим, когда, переводя дыханье и оставив ее, остановился и стал глядеть на танцующих.


После князя Андрея к Наташе подошел Борис, приглашая ее на танцы, подошел и тот танцор адъютант, начавший бал, и еще молодые люди, и Наташа, передавая своих излишних кавалеров Соне, счастливая и раскрасневшаяся, не переставала танцовать целый вечер. Она ничего не заметила и не видала из того, что занимало всех на этом бале. Она не только не заметила, как государь долго говорил с французским посланником, как он особенно милостиво говорил с такой то дамой, как принц такой то и такой то сделали и сказали то то, как Элен имела большой успех и удостоилась особенного внимания такого то; она не видала даже государя и заметила, что он уехал только потому, что после его отъезда бал более оживился. Один из веселых котильонов, перед ужином, князь Андрей опять танцовал с Наташей. Он напомнил ей о их первом свиданьи в отрадненской аллее и о том, как она не могла заснуть в лунную ночь, и как он невольно слышал ее. Наташа покраснела при этом напоминании и старалась оправдаться, как будто было что то стыдное в том чувстве, в котором невольно подслушал ее князь Андрей.
Князь Андрей, как все люди, выросшие в свете, любил встречать в свете то, что не имело на себе общего светского отпечатка. И такова была Наташа, с ее удивлением, радостью и робостью и даже ошибками во французском языке. Он особенно нежно и бережно обращался и говорил с нею. Сидя подле нее, разговаривая с ней о самых простых и ничтожных предметах, князь Андрей любовался на радостный блеск ее глаз и улыбки, относившейся не к говоренным речам, а к ее внутреннему счастию. В то время, как Наташу выбирали и она с улыбкой вставала и танцовала по зале, князь Андрей любовался в особенности на ее робкую грацию. В середине котильона Наташа, окончив фигуру, еще тяжело дыша, подходила к своему месту. Новый кавалер опять пригласил ее. Она устала и запыхалась, и видимо подумала отказаться, но тотчас опять весело подняла руку на плечо кавалера и улыбнулась князю Андрею.
«Я бы рада была отдохнуть и посидеть с вами, я устала; но вы видите, как меня выбирают, и я этому рада, и я счастлива, и я всех люблю, и мы с вами всё это понимаем», и еще многое и многое сказала эта улыбка. Когда кавалер оставил ее, Наташа побежала через залу, чтобы взять двух дам для фигур.
«Ежели она подойдет прежде к своей кузине, а потом к другой даме, то она будет моей женой», сказал совершенно неожиданно сам себе князь Андрей, глядя на нее. Она подошла прежде к кузине.
«Какой вздор иногда приходит в голову! подумал князь Андрей; но верно только то, что эта девушка так мила, так особенна, что она не протанцует здесь месяца и выйдет замуж… Это здесь редкость», думал он, когда Наташа, поправляя откинувшуюся у корсажа розу, усаживалась подле него.
В конце котильона старый граф подошел в своем синем фраке к танцующим. Он пригласил к себе князя Андрея и спросил у дочери, весело ли ей? Наташа не ответила и только улыбнулась такой улыбкой, которая с упреком говорила: «как можно было спрашивать об этом?»
– Так весело, как никогда в жизни! – сказала она, и князь Андрей заметил, как быстро поднялись было ее худые руки, чтобы обнять отца и тотчас же опустились. Наташа была так счастлива, как никогда еще в жизни. Она была на той высшей ступени счастия, когда человек делается вполне доверчив и не верит в возможность зла, несчастия и горя.

Пьер на этом бале в первый раз почувствовал себя оскорбленным тем положением, которое занимала его жена в высших сферах. Он был угрюм и рассеян. Поперек лба его была широкая складка, и он, стоя у окна, смотрел через очки, никого не видя.
Наташа, направляясь к ужину, прошла мимо его.
Мрачное, несчастное лицо Пьера поразило ее. Она остановилась против него. Ей хотелось помочь ему, передать ему излишек своего счастия.
– Как весело, граф, – сказала она, – не правда ли?
Пьер рассеянно улыбнулся, очевидно не понимая того, что ему говорили.
– Да, я очень рад, – сказал он.