Erős és gyenge gépelés

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. május 28-án felülvizsgált verziótól ; az ellenőrzések 3 szerkesztést igényelnek .

Az egyik osztályozás szerint a programozási nyelveket informálisan erősen és gyengén tipizáltra osztják , vagyis erős vagy gyenge típusú rendszerrel rendelkeznek .  Ezeket a kifejezéseket nem értelmezik egyértelműen, és leggyakrabban egy adott nyelv előnyeinek és hátrányainak jelzésére használják. Vannak specifikusabb fogalmak, amelyek bizonyos típusú rendszerek " erős " vagy " gyenge " elnevezéséhez vezetnek.

Az orosz nyelvű irodalomban gyakran használják az " erős gépelés " [1] [2] kifejezést ; gyakori változat " erős gépelés " csak akkor használatos, ha a " gyenge gépelés " kontrasztja van. Megjegyzendő , hogy a " szigorú " kifejezés használata egy nyelv típusrendszerével kapcsolatban összetévesztheti a nyelv szigorú értékelési szemantikáját .  

Történelem

1974 -ben Liskov és Zilles erősen  tipizált nyelveket neveztek , amelyekben " ha egy objektumot a hívó függvényből egy meghívott függvénybe adnak át, az objektum típusának kompatibilisnek kell lennie a hívott függvényben meghatározott típussal " [3] . Jackson ezt írta: " Egy erősen tipizált nyelvben minden adatcellának egyedi típusa lesz, és minden folyamat kimondja a kapcsolati követelményeit ezeknek a típusoknak megfelelően " [4] .

Luca Cardelli " Full Type Programming " 5] cikkében a típusrendszert "erősnek" nevezik, ha kiküszöböli a futásidejű típusillesztési hiba lehetőségét. Más szavakkal, az ellenőrizetlen futásidejű hibák hiányát típusbiztonságnak nevezzük ; Hoare korai munkája ezt ingatlanbiztonságnak nevezi . 

Az "erős" és "gyenge" gépelés meghatározása

Az „erős” és „gyenge” gépelés a nyelv tervezése során hozott számos döntés eredménye. Pontosabban, a nyelveket a típuskonzisztencia - biztonság és a memóriaelérés biztonságának megléte vagy hiánya , valamint az ilyen vezérlés jellegzetes időzítése ( statikus vagy dinamikus ) jellemzi.

Például a gyenge típusú rendszerek egyértelmű példái azok, amelyek a C és C++ nyelvek mögött állnak . Jellegzetes attribútumuk a típusöntés és a gépelési szójáték fogalma . Ezeket a műveleteket fordítói szinten támogatják, és gyakran implicit módon hívják őket. Egy művelet reinterpret_casta C++ nyelvben lehetővé teszi, hogy bármilyen típusú adatelemet bármely más típushoz tartozóként ábrázoljon, feltéve, hogy az alacsony szintű megvalósításuk (bitreprezentációjuk) hossza egyenlő , és módosítsa az állapotát oly módon, hogy az érvénytelen a forrástípushoz. Az ilyen műveletek gondatlan használata gyakran a program összeomlásának forrása . Ennek ellenére a C++ tankönyvek „ erősnek ” írják le a típusrendszerét , amely Luca Cardelli [5] és mások tézisei alapján „ erősebb, mint C-ben ” értendő. Ezzel szemben a Hindley-Milner szerint gépelt nyelvekben a típusöntés fogalma elvileg hiányzik. Egy típus "konvertálásának" egyetlen módja egy olyan függvény írása, amely algoritmikusan összeállítja a kívánt típusú értéket az eredeti típus értékéből. Triviális esetekben, például egy előjel nélküli egész szám "konvertálása" előjeles egész számmá és fordítva, az ilyen függvények általában szerepelnek a szabványos könyvtárakban. Az ilyen típusú függvények leggyakrabban használt esetei a speciálisan definiált, üres törzsű függvények, amelyeket konstruktor függvényeknek vagy egyszerűen konstruktoroknak neveznek .

Ugyanakkor a Hindley-Milner típusú rendszer a paraméteres polimorfizmus miatt rendkívül magas kód-újrafelhasználási arányt biztosít . Egy erős, de nem polimorf típusú rendszer megnehezítheti számos algoritmikus probléma megoldását, amint azt a Pascal nyelv kapcsán megjegyeztük [6] .

Az a vélemény, hogy az erős gépelés elengedhetetlen eleme a kifejlesztett szoftverek megbízhatóságának biztosításának. Helyes használat esetén (ami azt jelenti, hogy a program külön adattípusokat deklarál és használ a logikailag inkompatibilis értékekhez), megvédi a programozót a logikailag inkompatibilis értékek megosztásával kapcsolatos egyszerű, de nehezen fellelhető hibáktól, amelyek néha egyszerűen egy elírásból erednek.

Az ilyen hibákat még a programfordítási szakaszban is észlelik, míg a szinte bármilyen típus implicit konverziójának lehetőségével (mint például a klasszikus C nyelvben) ezeket a hibákat csak a tesztelés során észlelik, és nem minden és nem azonnal, ami néha nagyon drága az ipari üzemeltetés szakaszában.

A Python egy példa az erős dinamikus gépeléssel rendelkező nyelvekre [7] .

Lásd még

Jegyzetek

  1. Graham I. Fogalmak szójegyzéke // Objektumorientált módszerek. Alapelvek és gyakorlat = Objektum-orientált módszerek: Alapelvek és gyakorlat Harmadik kiadás / per. angolról. S. Belikova , O. Yadrenko , R. Imamutdinova , Natalya Kussul . - 3. kiadás - Williams , 2004. - S. 791. - 880 p. — (Objektumtechnológiák). - 2500 példány.  — ISBN 5-8459-0438-2 . — ISBN 0-201-61913-X . Archivált : 2017. november 1. a Wayback Machine -nél
  2. Kaufman V. Sh . 4.2.3. Erős gépelés és típus egyediség // Programozási nyelvek. Fogalmak és alapelvek . - DMK Press , 2011. - S. 93. - 464 p. — (A programozás klasszikusai). - 1000 példányban.  - ISBN 978-5-94074-622-5 .
  3. Liskov, Zilles. Programozás absztrakt adattípusokkal . – ACM Sigplan Notices, 1974. Archivált az eredetiből: 2014. március 28..
  4. K. Jackson. Párhuzamos feldolgozás és moduláris szoftverkonstrukció . - Számítástechnikai előadásjegyzetek, 1977. - S. 436-443 . — ISBN 3-540-08360-X .  (nem elérhető link)
  5. 1 2 Archivált másolat (hivatkozás nem érhető el) . Letöltve: 2013. május 26. Az eredetiből archiválva : 2011. október 23..   3. oldal
  6. Brian Kernighan . Miért nem a Pascal a kedvenc programozási nyelvem (nem elérhető hivatkozás ) Letöltve: 2014. március 13. Az eredetiből archiválva : 2012. április 6.. 
  7. Miért dinamikus nyelv a Python és egyben erősen tipizált nyelv? - PythonInfo Wiki . Hozzáférés dátuma: 2010. június 28. Az eredetiből archiválva : 2010. március 29.

Irodalom