Tastare puternică și slabă

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 28 mai 2021; verificările necesită 3 modificări .

Conform uneia dintre clasificări, limbajele de programare sunt împărțite informal în tip puternic și slab tip , adică având un sistem de tip puternic sau slab .  Acești termeni nu sunt interpretați fără ambiguitate și sunt folosiți cel mai adesea pentru a indica avantajele și dezavantajele unei anumite limbi. Există concepte mai specifice care duc la denumirea anumitor sisteme de tip „ puternic ” sau „ slab ”.

În literatura de limbă rusă, termenul „ dactilografiere puternică ” [1] [2] este adesea folosit ; varianta comuna " dactilografiere puternica " este utilizat numai când contrastează " tastare slabă ". Rețineți că folosirea termenului " strict " în relație cu sistemul de tip al unei limbi poate provoca confuzie cu semantica strictă de evaluare a  limbii .

Istorie

În 1974, Liskov și Zilles au numit limbaje puternic  tipizate în care „ când un obiect este trecut de la o funcție de apelare la o funcție apelată, tipul acelui obiect trebuie să fie compatibil cu tipul definit în funcția apelată ” [3] . Jackson a scris: „ Într-un limbaj puternic tipizat, fiecare celulă de date va avea un tip unic și fiecare proces își va proclama cerințele de relație în ceea ce privește aceste tipuri ” [4] .

În articolul lui Luca CardelliFull Type Programming 5] , un sistem de tip este numit „puternic” dacă elimină posibilitatea unei erori de potrivire a tipului de rulare. Cu alte cuvinte, absența erorilor de rulare neverificate se numește siguranță de tip ; Lucrările timpurii ale lui Hoare numesc această proprietate de securitate . 

Definiția tastării „puternice” și „slabe”

Tastarea „puternică” și „slabă” este produsul multor decizii luate în proiectarea unei limbi. Mai precis, limbile se caracterizează prin prezența sau absența siguranței de consistență a tipului și a siguranței accesului la memorie , precum și sincronizarea caracteristică a unui astfel de control ( static sau dinamic ).

De exemplu, exemple clare de sistem de tip slab sunt cele care stau la baza limbajelor C și C++ . Atributele lor caracteristice sunt conceptele de turnare de tip și jocuri de cuvinte dactilografiere . Aceste operațiuni sunt suportate la nivel de compilator și sunt adesea numite implicit. O operație reinterpret_castîn C++ vă permite să reprezentați un element de date de orice tip ca aparținând oricărui alt tip, cu condiția ca lungimea implementării lor la nivel scăzut (reprezentarea biților) să fie egală și modificați starea într-un mod care nu este valid pentru tipul de sursă. Folosirea neglijentă a unor astfel de operațiuni este adesea sursa blocărilor programului . În ciuda acestui fapt, manualele C++ descriu sistemul său de tip ca fiind „ puternic ”, care, având în vedere teza lui Luca Cardelli [5] și alții, ar trebui înțeles ca „ mai puternic decât în ​​C ”. În schimb, în ​​limbile tipizate conform Hindley-Milner , conceptul de turnare a tipului este absent în principiu. Singura modalitate de a „converti” un tip este să scrieți o funcție care construiește algoritmic o valoare a tipului necesar din valoarea tipului original. Pentru cazuri banale, cum ar fi „conversia” unui întreg fără semn într-un întreg cu semn și invers, astfel de funcții sunt de obicei incluse în bibliotecile standard. Cel mai frecvent utilizat caz al acestui tip de funcții sunt funcțiile speciale definite cu un corp gol, numite funcții de constructor sau pur și simplu constructori .

În același timp , sistemul de tip Hindley-Milner oferă o rată extrem de mare de reutilizare a codului datorită polimorfismului parametric . Un sistem de tip puternic, dar nu polimorf, poate face dificilă rezolvarea multor probleme algoritmice, așa cum sa observat în legătură cu limbajul Pascal [6] .

Există opinia că tastarea puternică este un element indispensabil pentru asigurarea fiabilității software-ului dezvoltat. Când este utilizat corect (însemnând că programul declară și utilizează tipuri de date separate pentru valori incompatibile din punct de vedere logic), protejează programatorul de erori simple, dar greu de găsit asociate cu partajarea valorilor incompatibile din punct de vedere logic, uneori decurgând dintr-o simplă greșeală de scriere.

Astfel de erori sunt detectate chiar și în etapa de compilare a programului, în timp ce cu posibilitatea conversiei implicite a aproape oricăror tipuri între ele (ca, de exemplu, în limbajul clasic C), aceste erori sunt detectate numai în timpul testării și nu toate și nu imediat, ceea ce uneori este foarte costisitor în stadiul de operare industrială.

Python este un exemplu de limbaj cu tastare dinamică puternică [7] .

Vezi și

Note

  1. Graham I. Glosar de termeni // Metode orientate pe obiect. Principii și practică = Metode orientate pe obiecte: Principii și practică Ediția a treia / per. din engleza. S. Belikova , O. Yadrenko , R. Imamutdinova , Natalya Kussul . - Ed. a 3-a. - Williams , 2004. - S. 791. - 880 p. — (Tehnologii obiect). - 2500 de exemplare.  — ISBN 5-8459-0438-2 . — ISBN 0-201-61913-X . Arhivat la 1 noiembrie 2017 la Wayback Machine
  2. Kaufman V. Sh 4.2.3. Tastare puternică și unicitate de tip // Limbaje de programare. Concepte și principii . - DMK Press , 2011. - S. 93. - 464 p. — (Clasice ale programării). - 1000 de exemplare.  - ISBN 978-5-94074-622-5 .
  3. Liskov, Zilles. Programare cu tipuri de date abstracte . — ACM Sigplan Notices, 1974. Arhivat din original la 28 martie 2014.
  4. K. Jackson. Procesare paralelă și construcție modulară de software . - Note de curs în Informatică, 1977. - S. 436-443 . — ISBN 3-540-08360-X .  (link indisponibil)
  5. 1 2 Copie arhivată (link indisponibil) . Preluat la 26 mai 2013. Arhivat din original la 23 octombrie 2011.   pagina 3
  6. Brian Kernighan . De ce Pascal nu este limbajul meu de programare preferat (link indisponibil) . Preluat la 13 martie 2014. Arhivat din original la 6 aprilie 2012. 
  7. De ce este Python un limbaj dinamic și, de asemenea, un limbaj puternic tipat - PythonInfo Wiki . Data accesului: 28 iunie 2010. Arhivat din original pe 29 martie 2010.

Literatură