Silné a slabé psaní

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 28. května 2021; kontroly vyžadují 3 úpravy .

Podle jedné z klasifikací jsou programovací jazyky neformálně rozděleny na silně a slabě typované , to znamená, že mají systém silného nebo slabého typu .  Tyto pojmy nejsou vykládány jednoznačně a nejčastěji se používají k označení výhod a nevýhod konkrétního jazyka. Existují specifičtější pojmy, které vedou k pojmenování určitých typových systémů „ silný “ nebo „ slabý “.

V ruskojazyčné literatuře se často používá termín „ silné psaní “ [1] [2] ; běžná varianta " silné psaní " se používá pouze při kontrastu " slabé psaní ". Všimněte si, že používání termínu „ přísný “ ve vztahu k typovému systému jazyka může způsobit zmatek s přísnou sémantikou hodnocení jazyka .  

Historie

V roce 1974 Liskov a Zilles nazývali silně  typované jazyky, ve kterých „ když je objekt předán z volající funkce do volané funkce, typ tohoto objektu musí být kompatibilní s typem definovaným ve volané funkci “ [3] . Jackson napsal: „ V silně typizovaném jazyce bude mít každá datová buňka jedinečný typ a každý proces bude deklarovat své požadavky na vztah z hlediska těchto typů “ [4] .

V článku Lucy Cardelliho " Full Type Programming " 5] se typový systém nazývá "silný", pokud eliminuje možnost chyby při shodě typu za běhu. Jinými slovy, nepřítomnost nekontrolovaných chyb za běhu se nazývá bezpečnost typu ; Hoareova raná práce tomu říká zabezpečení majetku . 

Definice "silného" a "slabého" psaní

„Silné“ a „slabé“ psaní je výsledkem mnoha rozhodnutí učiněných při návrhu jazyka. Přesněji řečeno, jazyky se vyznačují přítomností nebo nepřítomností bezpečnosti typové konzistence a bezpečnosti přístupu do paměti , jakož i charakteristickým načasováním takového ovládání ( statické nebo dynamické ).

Jasnými příklady systému slabého typu jsou například systémy, které jsou základem jazyků C a C++ . Jejich charakteristickým rysem jsou koncepty typového lití a typizačních hříček . Tyto operace jsou podporovány na úrovni kompilátoru a jsou často volány implicitně. Operace reinterpret_castv C++ vám umožňuje reprezentovat datový prvek jakéhokoli typu jako náležející k jakémukoli jinému typu, za předpokladu, že délka jejich nízkoúrovňové implementace (bitová reprezentace) je stejná. a změňte jeho stav způsobem, který je pro daný typ zdroje neplatný. Neopatrné používání takových operací je často zdrojem pádů programu . Navzdory tomu učebnice C++ popisují jeho typový systém jako „ silný “, který by měl být vzhledem k tezi Lucy Cardelliho [5] a dalších chápán jako „ silnější než v C “. Naproti tomu v jazycích psaných podle Hindley-Milnera koncept typového odlévání v zásadě chybí. Jediný způsob, jak „převést“ typ, je napsat funkci, která algoritmicky zkonstruuje hodnotu požadovaného typu z hodnoty původního typu. Pro triviální případy, jako je „převod“ celého čísla bez znaménka na celé číslo se znaménkem a naopak, jsou takové funkce obvykle součástí standardních knihoven. Nejčastěji používaným případem tohoto druhu funkcí jsou speciálně definované funkce s prázdným tělem, nazývané konstruktorové funkce nebo jednoduše konstruktory .

Systém typu Hindley-Milner zároveň poskytuje extrémně vysokou míru opětovného použití kódu díky parametrickému polymorfismu . Silný, ale ne polymorfní typový systém může ztížit řešení mnoha algoritmických problémů, jak bylo uvedeno v souvislosti s jazykem Pascal [6] .

Existuje názor, že silné psaní je nepostradatelným prvkem pro zajištění spolehlivosti vyvinutého softwaru. Při správném použití (to znamená, že program deklaruje a používá samostatné datové typy pro logicky nekompatibilní hodnoty) chrání programátora před jednoduchými, ale těžko dohledatelnými chybami spojenými se sdílením logicky nekompatibilních hodnot, které někdy vznikají jednoduše pouhým překlepem.

Takové chyby jsou detekovány již ve fázi kompilace programu, přičemž při možnosti implicitní konverze téměř libovolných typů na sebe (jako např. v klasickém jazyce C) jsou tyto chyby detekovány pouze při testování, nikoli všechny a ne hned, což je ve fázi průmyslového provozu někdy velmi nákladné.

Python je jedním příkladem jazyka se silným dynamickým psaním [7] .

Viz také

Poznámky

  1. Graham I. Slovníček pojmů // Objektově orientované metody. Principy a praxe = objektově orientované metody: Principy a praxe třetí vydání / per. z angličtiny. S. Belikova , O. Yadrenko , R. Imamutdinova , Natalya Kussul . - 3. vyd. - Williams , 2004. - S. 791. - 880 s. — (Objektové technologie). - 2500 výtisků.  — ISBN 5-8459-0438-2 . — ISBN 0-201-61913-X . Archivováno 1. listopadu 2017 na Wayback Machine
  2. Kaufman V. Sh 4.2.3. Silné psaní a typová jedinečnost // Programovací jazyky. Koncepty a principy . - DMK Press , 2011. - S. 93. - 464 s. — (Klasiky programování). - 1000 výtisků.  - ISBN 978-5-94074-622-5 .
  3. Liskov, Zilles. Programování s abstraktními datovými typy . — ACM Sigplan Notices, 1974. Archivováno z originálu 28. března 2014.
  4. K. Jackson. Paralelní zpracování a modulární konstrukce softwaru . - Lecture Notes in Computer Science, 1977. - S. 436-443 . — ISBN 3-540-08360-X .  (nedostupný odkaz)
  5. 1 2 Archivovaná kopie (odkaz není k dispozici) . Získáno 26. května 2013. Archivováno z originálu dne 23. října 2011.   strana 3
  6. Brian Kernighan . Proč Pascal není můj oblíbený programovací jazyk (nedostupný odkaz) . Získáno 13. března 2014. Archivováno z originálu dne 6. dubna 2012. 
  7. Proč je Python dynamický jazyk a také silně typovaný jazyk - PythonInfo Wiki . Datum přístupu: 28. června 2010. Archivováno z originálu 29. března 2010.

Literatura