Startupul Trasec dezvoltă limbajul de programare TrapC, un dialect al limbajului C care asigură o gestionare sigură a memoriei. Pentru a bloca erorile în gestionarea memoriei, cum ar fi depășirea frontierelor buffer-ului alocat și accesarea memoriei deja eliberate, TrapC utilizează o abordare fundamental diferită pentru pointere și un mecanism special de interceptare a erorilor bazat pe gestionarea excepțiilor (trap). Codul sursă al compilatorului pentru TrapC este planificat să fie deschis în 2025.
Se declară că caracteristicile gestionării pointerelor nu vor perturba modul obișnuit de lucru și vor fi implementate de către compilator. Conform ideii autorilor limbajului, compilatorul va garanta că pointerele se referă doar la zonele de memorie asociate, precum și va verifica toate limitele buffer-elor. Compilatorul ține evidența tipurilor și nu permite conversii nesigure ale tipurilor. Toate variabilele și buffer-urile create sunt explicit inițializate sau umplute cu zerouri de către compilator.
În loc de malloc, TrapC folosește un constructor similar cu new din C++. Apelurile pentru free și delete lipsesc, iar eliberarea memoriei este responsabilitatea compilatorului, ceea ce protejează împotriva erorilor care duc la scurgeri de memorie. Managementul memoriei în heap este realizat printr-o gestionare automată incrementală, dar fără un colector de gunoi. La nivel de ABI, TrapC va fi compatibil cu C, ceea ce va permite combinarea codului pe TrapC și codului pur C într-o aplicație, dar securitatea gestionării memoriei nu va fi asigurată pentru codul C.
Proiectul este dezvoltat de Robin Rowe, fost profesor de informatică, care a participat la comitetele pentru dezvoltarea standardelor C și C++, și care a creat editorul grafic Cinepaint, folosit în realizarea unor filme de la Hollywood, precum și biblioteca POSIX libunistd pentru Windows. Co-fondator al companiei Trasec este Gabrielle Pantera, care a ocupat o poziție de conducere în cadrul companiei Disney.
Detaliile despre proiect nu sunt încă disponibile, sunt prezentate doar câteva exemple de cod, în care, de exemplu, se afirmă că TrapC nu va permite depășirea tamponului buff atunci când se execută „strcpy(buff,argv[1]);” sau nu va permite creșterea pointer-ului sau a indexului array-ului cu o valoare care îl împinge dincolo de tamponul alocat sau de capătul array-ului. Cum este realizată această protecție nu este explicat. \/\/ darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; \/\/ TrapC inițializează implicit la zero, fără memorie murdară int success = 0;\/\/ În C, suprascrierea tamponului corupe succesul strcpy(buff,argv[1]); \/\/ TrapC nu poate depăși, strcpy este sigur if(!strcmp(buff,"s3cr8tpw")) { success = 1; } if(success) \/\/ TrapC a blocat suprascrierea strcpy, succesul este bun { printf("Welcome!\n"); } return !success; } \/\/ trapc_ptr.c int main() { const char* ptr = "Hello World"; \/\/ 12 caractere lățime while(ptr) \/\/ Nu există depășire a tamponului cu TrapC { printf("%c",*ptr); \/\/ imprimează un caracter de fiecare dată ptr++; \/\/ Pașii de la capăt: TrapC nullifică ptr! } \/\/ NU încercați asta în C, va provoca segfault! assert(ptr == 0); return 0; } \/\/ trapc_array.c int score[10]; printf("%i",score[-1]); \/\/ TrapC nu va permite accesul for(int i = 0;i
Sursa: opennet.ro
