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

Типизация данных

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

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

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

Примеры

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

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

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

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

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

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

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

Примечания

  1. Грэхем И. Словарь терминов // Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice Third Edition / пер. с англ. С. Беликова, О. Ядренко, Р. Имамутдинова, Наталья Куссуль. — 3-е изд. — Вильямс, 2004. — С. 791. — 880 с. — (Объектные технологии). — 2500 экз. — ISBN 5-8459-0438-2. — ISBN 0-201-61913-X. Архивировано 1 ноября 2017 года.
  2. 1 2 Кауфман В. Ш. 4.2.3. Строгая типизация и уникальность типа // Языки программирования. Концепции и принципы. — ДМК Пресс, 2011. — С. 93. — 464 с. — (Классика программирования). — 1000 экз. — ISBN 978-5-94074-622-5.
  3. С термином «строгий» от англ. strong в отношении системы типов может возникать путаница со строгой семантикой вычислений языка (англ. strict evaluation)
  4. Liskov, Zilles. Programming with abstract data types. — ACM Sigplan Notices, 1974. Архивировано 28 марта 2014 года.
  5. K. Jackson. Parallel processing and modular software construction. — Lecture Notes in Computer Science, 1977. — С. 436–443. — ISBN 3-540-08360-X. (недоступная ссылка)
  6. 1 2 Архивированная копия. Дата обращения: 26 мая 2013. Архивировано 23 октября 2011 года. page 3
  7. В ранних работах Хоара подобное свойство называлось «безопасностью» (англ. security)
  8. Brian Kernighan. Why Pascal is Not My Favorite Programming Language. Дата обращения: 13 марта 2014. Архивировано из оригинала 6 апреля 2012 года.
  9. Why is Python a dynamic language and also a strongly typed language — PythonInfo Wiki. Дата обращения: 28 июня 2010. Архивировано 29 марта 2010 года.

Литература

Read other articles:

Foto Perkampungan Prapatan Prapatan TulungDesaNegara IndonesiaProvinsiJawa TengahKabupatenKlatenKecamatanTulungKode pos57482Kode Kemendagri33.10.19.2013 Luas... km²Jumlah penduduk... jiwaKepadatan... jiwa/km² Prapatan Tulung adalah dukuh di bagian desa Tulung, Klaten, Jawa Tengah, Indonesia. Asal-muasal dukuh berdiri sekitar akhir tahun 1950-an, pada awalnya wilayah ini berupa persawahan di pinggir jalan. Status menempati tanah sewa dengan sebidang sawah, setelah kurun waktu tanah akhi...

 

أقمار بلوتومعلومات عامةصنف فرعي من قمر كوكبٍ قزم المكتشف أو المخترع كلايد تومبو الجرم السماوي الأم بلوتو نوع المدار hadeocentric orbit (en) زاوية الميلان 17٫14175 درجة زاوية نقطة الاعتدال 110٫30347 درجة تعديل - تعديل مصدري - تعديل ويكي بيانات صورة هابل للنظام البلوتوني توضح الأقمار الأربعة...

 

Cari artikel bahasa  Cari berdasarkan kode ISO 639 (Uji coba)   Cari berdasarkan nilai Glottolog   Kolom pencarian ini hanya didukung oleh beberapa antarmuka Halaman rumpun acak Rumpun bahasaRumpun bahasa Ryukyu Utara Amami–OkinawaPersebaranKepulauan Amami, Prefektur Kagoshima, Kepulauan Okinawa, dan mungkin Pulau Taketomi, Prefektur Okinawa, JepangPenggolongan bahasaJaponikRyukyuRumpun bahasa Ryukyu Utara Kikai Amami (Utara, Setouchi) Tokunoshima Yoron Kunigami Okinawa Tenga...

American college basketball rivalry Gonzaga–Washington men's basketball rivalry Gonzaga Bulldogs Washington Huskies SportBasketballFirst meetingFebruary 14, 1910Washington 23, Gonzaga 14Latest meetingDecember 9, 2023Washington 78, Gonzaga 73Next meetingTBAStatisticsMeetings total50All-time seriesWashington leads, 30–20Largest victoryWashington, 59–11 (1921)Longest win streakWashington, 9 (1944–1979)Current win streakWashington, 1 (2023–present) 200km125miles Washington Gonzaga  ...

 

Television channel The Israeli NetworkThe Israeli Network logoCountryCanadaBroadcast areaNationalHeadquartersToronto, OntarioProgrammingPicture format480i (SDTV)OwnershipOwnerEthnic Channels Group(name licensed by Israeli Network)HistoryLaunchedDecember 2005LinksWebsiteThe Israeli Network The Israeli Network is a Canadian exempt Category B Hebrew language specialty channel. It is wholly owned by Ethnic Channels Group, with its name used under license from the owners of the Israeli-based TV ch...

 

Thai dessertThapthim kropThapthim kropTypeDessertPlace of originThailandMain ingredientsWater chestnut, Coconut milk  Media: Thapthim krop Thapthim krop (Thai: ทับทิมกรอบ, pronounced [tʰáp.tʰīm krɔ̀ːp]; literally 'crispy rubies') is one of the best known Thai desserts, having been named one of the world's best 50 desserts by CNN Travel.[1] It is made of cubes of water chestnuts soaked in grenadine or red food dye, then boiled in tapioca flou...

Gereja Santo Matias RasulGereja Santo Matias Rasul - Paroki Kosambi Baru6°10′27″S 106°42′50″E / 6.174180°S 106.713980°E / -6.174180; 106.713980Koordinat: 6°10′27″S 106°42′50″E / 6.174180°S 106.713980°E / -6.174180; 106.713980LokasiJalan Taman Kosambi Barat blok A ext 1 no.120, Duri Kosambi, Cengkareng, Jakarta Barat 11750NegaraIndonesiaDenominasiGereja Katolik RomaJumlah anggota/umat± 11.000Situs webparokikosambibaru.or....

 

Сибирский горный козёл Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:СинапсидыКла�...

 

Team representing Thailand in international U-17 football competitions Thailand Under-17Nickname(s)ช้างศึก (Changsuek)(War elephants)AssociationFootball Association of ThailandConfederationAFC (Asia)Sub-confederationAFF (Southeast Asia)Head coachChayakorn Tanaddernkao (Interim)CaptainPacharaphol LekkunHome stadiumRajamangala StadiumFIFA codeTHA First colours Second colours Third colours FIFA U-17 World CupAppearances2 (first in 1997)Best resultRound 1 (1997, 1999)AFC U-17 Asian ...

Присарыкамышская дельта Амударьи (слева от реки) Присарыкамышская дельта Амударьи (также: Сарыкамышская дельта Амударьи; туркм. Amyderýäniň Sarygamyş deltasy) — область древнего земледелия и ирригации в северном Туркменистане, место возникновения культуры Хорезма и древнехорезми...

 

Medieval Albanian tribe Part of a series onAlbanian tribes Tribes and regions Malësia e Madhe Hoti Gruda Kelmendi Shkreli Rrjolli Kastrati Trieshi Koja Marsheni Tuzi Gruemiri Reçi Lohja Lepuroshi Boga Dukagjin highlands Bobi Shala Shoshi Shllaku Dushmani Toplana Mavriqi Mazreku Prekali Pult Kiri Plani Xhani Suma Highlands of Gjakova Krasniqi Nikaj Mërturi Gashi Bytyqi Morina Puka-Mirdita Berisha Mirdita Puka Malziu Thaçi Qerreti Kabashi Selita Dukagjini Upper Drin Hasi Luma Lura Arrëni D...

 

Philippine record label branch of Universal Music Group This article is about the Philippine branch of the Universal Music Group. For the unrelated Philippine label, see Universal Records (Philippines). UMG Philippines Inc.Company typeSubsidiaryTraded asUniversal Music Philippines (outside Philippine territory)IndustryMusicPredecessor PolyCosmic Records (1993–1997) PolyGram Records (1997–1999) MCA Universal (1999–2004) MCA Music Inc. (2004–2021) Founded1993Headquarters12th Floor, The ...

Prime Minister Australia from 1929 to 1932 The Right HonourableJames ScullinScullin c. 1930s9th Prime Minister of AustraliaIn office22 October 1929 – 6 January 1932MonarchGeorge VGovernors GeneralJohn BairdIsaac IsaacsDeputyTed TheodorePreceded byStanley BruceSucceeded byJoseph LyonsLeader of the OppositionIn office6 January 1932 – 1 October 1935Prime MinisterJoseph LyonsDeputyFrank FordePreceded byJoseph LyonsSucceeded byJohn CurtinIn office29 March 1928 ...

 

American close air support attack aircraft A-10 redirects here. For other uses, see A10. A-10 / OA-10 Thunderbolt II An A-10 of the 74th Fighter Squadron after taking on fuel over Afghanistan (2011) Role Close air support attack aircraftType of aircraft National origin United States Manufacturer Fairchild Republic First flight 10 May 1972; 52 years ago (1972-05-10) Introduction October 1977 Status In service Primary user United States Air Force Produced 1972–1984[...

 

2-га окрема бригада Засновано 10 лютого 1992Країна  УкраїнаВид  Національна гвардіяУ складі Західне ОТОБазування підрозділів Львів, Рівне, Тернопіль, ЗапоріжжяРічниці 1 липня[1]Військові конфлікти Війна на сході України Бої за ДебальцевеПочесні найменування «Г...

Nature reserve in Lewisham, London, England Brookmill Road Local Nature Reserve is a small nature reserve in St Johns in the London Borough of Lewisham. It has been designated as a local nature reserve.[1][2] The reserve is on a disused railway embankment between Brookmill Road and the Lewisham to St Johns railway line. The railway ceased operating in 1916 and the tracks were taken up in 1929. In 1979 Lewisham Council purchased the land and established a nature reserve on the ...

 

Genus of mammals belonging to the deer, muntjac, roe deer, reindeer, and moose family of ruminants OdocoileusTemporal range: Pleistocene to present Odocoileus virginianus Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammalia Order: Artiodactyla Family: Cervidae Subfamily: Capreolinae Tribe: Odocoileini Genus: OdocoileusRafinesque, 1832[1] Type species Odocoileus speleus[1]Rafinesque, 1832 Species Odocoileus hemionus Odocoileus pandora O...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Data mentah (atau disebut juga raw data atau data primer) adalam sebuah kondisi untuk sebuah data di dalam sebuah sistem komputer yang dikoleksi langsung dari sebuah sumber langsung tanpa perubahan apapun. Data mentah dapat berdiri sendiri dan tidak me...

Castellania Coppi komune di Italia Tempat Negara berdaulatItaliaDaerah di ItaliaPiemonteProvinsi di ItaliaProvinsi Alessandria NegaraItalia PendudukTotal87  (2023 )GeografiLuas wilayah7,21 km² [convert: unit tak dikenal]Ketinggian400 m Berbatasan denganAvolasca Carezzano Costa Vescovato Garbagna Sant'Agata Fossili Sardigliano SejarahSanto pelindungSanto Blasius Informasi tambahanKode pos15051 Zona waktuUTC+1 UTC+2 Kode telepon0131 ID ISTAT006045 Kode kadaster ItaliaC137 Lain-lainSi...

 

在羅馬的圣安当院长堂 系列条目天主教會自权個別教會 拉丁礼教会使用拉丁十字,拜占庭礼教会使用宗主十字。 根据教礼排列: 拉丁礼 拉丁礼 拜占庭或希腊礼 阿尔巴尼亚 白俄罗斯 保加利亚 克罗地亚和塞尔维亚(英语:Byzantine Catholic Church of Croatia and Serbia) 希腊 匈牙利 意大利-阿尔巴尼亚 马其顿 默基特 罗马尼亚(英语:Romanian Greek-Catholic Church) 俄罗斯 鲁塞尼亚 斯洛�...