Siguranță în ceea ce privește tipurile

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calcul , siguranța tipului (securitatea decât tipurile) este măsura în care un limbaj de programare previne sau alertează de erori de tip.

Erori de tip

O eroare de tip este un comportament incorect sau nedorit al programului cauzat de o discrepanță între diferite tipuri de date în ceea ce privește constantele, variabilele și metodele (funcțiile) programului.

Posibilele erori de tip sunt următoarele:

  • invocați o funcție cu tipuri de date greșite (ex: add_int (3, 4.5 ); );
  • trece dincolo de limitele unui tablou ( în afara limitelor);
  • indicator de legătură ;
  • invoca sau trimite mesaje către o metodă inexistentă a unui obiect;
  • accesați un câmp de date inexistent al unui obiect.

O limbă este considerată sigură pentru tip dacă toate erorile de tip sunt întotdeauna detectate, în timpul compilării (mai bine) sau cel puțin în timpul rulării prin verificări adecvate.

Uneori, siguranța de tip este considerată alternativ ca o proprietate a unui program, mai degrabă decât limba în care a fost scris programul; adică, unele limbi au caracteristici de siguranță de tip care pot fi ocolite de programatori care adoptă practici de siguranță de tip mic.

Verificați tipul

Verificarea tipului , adică controlul tipurilor și utilizarea corectă a acestora, poate avea loc, așadar, în timpul rulării sau al compilării:

  • dacă se face ca tip de compilare, produce un document care este deja verificat și, prin urmare, fără verificări în timp de execuție. Acest lucru permite o executare mai rapidă a programului, în fața unor controale mai severe și limitative;
  • dacă se face în timpul rulării, programatorul are mai multă libertate, dar verificările se efectuează numai dacă se execută o bucată de cod. Dacă o ramură a execuției programului care conține o astfel de eroare nu este niciodată vizitată, aceasta poate ascunde o eroare care ar putea apărea în alte utilizări ale programului.

Siguranța memoriei

Siguranța tipului este legată de siguranța memoriei , o restricție asupra capacității de a copia în mod arbitrar biți de memorie dintr-o locație în alta. De exemplu, următorul cod C ++:

 #include <iostream>

folosind spațiul de nume std ;

int main () {
    
char x = 'a' ;
gol * p = ( gol * ) & x ;
double * d = ( double * ) p ;
	
cout << x << endl << * d << endl ;

// ieșire:
// la
// 2.8477e-306

retur 0 ;
}

Face o încălcare evidentă a tipului, deoarece inițial creează o variabilă char, apoi creează un indicator gol care indică spre el și aruncă un dublu, schimbă tipul indicatorului. Apoi, se conectează și își imprimă valoarea. După cum era de așteptat, ieșirea nu are sens (și variază pentru fiecare execuție), deoarece o variabilă de tip char este alocată ca 1 octet pe stivă, în timp ce o variabilă de tip dublu are nevoie de 8 octeți, precum și de tip incompatibil.

Din acest motiv, este considerat esențial ca un limbaj să dispună de mecanisme automate de gestionare a memoriei, cum ar fi Garbage Collector sau alte mecanisme în timp de compilare, cum ar fi ARC pentru Objective-C , pentru a evita accesul la variabile sau accesuri deja alocate . văzut înainte.

Categorii de limbi

Prin urmare, limbile sunt de obicei împărțite în trei categorii:

  1. limbaje nesigure, cum ar fi C și C ++, care vă permit să comiteți în mod explicit erori de tip (de exemplu, prin turnare sau cu indicatori atârnați etc.);
  2. limbi cvasi-sigure, cum ar fi Pascal , care efectuează aproape toate verificările, cu excepția câtorva referitoare la indicii atârnați;
  3. limbi sigure, cum ar fi Smalltalk sau Java, care efectuează toate verificările de tip necesare.

A fi un limbaj sigur impune, prin urmare, constrângeri mai mari și o securitate mai mare în crearea programului. Pe de altă parte, totuși, pot apărea probleme legate de eficiență (trebuind să crească controalele în timpul rulării) și imposibilitatea de a gestiona alocarea memoriei și timpul de distrugere a obiectelor, care (pentru o anumită categorie de aplicații) pot ajunge să saturăm grămada .

Bibliografie

  • John C. Mitchell, Concepte în limbaje de programare , 2002

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT