Projekt TrapC razvija jezik sličan C-u, koji sigurno radi s memorijom

Startap Trasec razvija programski jezik TrapC, koji je dijalekt jezika C, a omogućava sigurnije upravljanje memorijom. Da bi se spriječile greške pri radu s memorijom, poput izlaska izvan dodijeljenog prostora i pristupa već oslobođenoj memoriji, TrapC koristi fundamentalno drugačiji pristup radom s pokazivačima i poseban mehanizam za hvatanje grešaka temeljen na obradama iznimaka (trap). Izvorni kod kompajlera za TrapC planira se otvoriti 2025. godine.

Navedeno je da specifičnosti rada s pokazivačima neće narušiti uobičajen način rada i bit će realizirane putem kompajlera. Prema zamisli autora jezika, kompajler će jamčiti da pokazivači upućuju samo na povezane dijelove memorije i provjeravati sve granice buffera. Kompajler pohranjuje tipove i ne dopušta nesigurno izvršavanje tipova. Sve stvorene varijable i buffere kompajler izričito inicijalizira ili ispunjava nulama.

Umjesto malloc, u TrapC se koristi sličan konstruktor new, kao u C++. Pozivi free i delete ne postoje, a za oslobađanje memorije odgovara kompajler, što štiti od grešaka koje mogu uzrokovati curenje memorije. U hrpi se koristi inkrementalno automatsko upravljanje memorijom, ali bez sakupljača smeća. Na razini ABI, TrapC će biti kompatibilan s C, što će omogućiti kombinaciju koda na TrapC-u i čistom C-u u jednoj aplikaciji, ali sigurnost upravljanja memorijom neće biti zajamčena za C kod.

Projekt razvija Robin Rowe, bivši profesor računalnih znanosti koji je sudjelovao u komitetima za razvoj standarda C i C++, a koji je stvorio grafički uređivač Cinepaint, korišten u stvaranju nekih holivudskih filmova, te POSIX-biblioteku libunistd za Windows. Suosnivač tvrtke Trasec je Gabrielle Pantera, koja je obnašala vodeću ulogu u tvrtki Disney.

Detalji o projektu još nisu navedeni, prikazani su samo neki primjeri s kodom, u kojem se, na primjer, navodi da TrapC neće dopustiti prelivanje bafera buff pri izvršenju „strcpy(buff,argv[1]);“ ili neće dopustiti povećanje pokazivača ili indeksa niza za vrijednost koja ga pomiče izvan dodijeljenog bafera ili kraja niza. Na koji način se postiže takva zaštita nije objašnjeno. \/\/ darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; \/\/ TrapC implicitno nuli, nema prljave memorije int success = 0;\/\/ U C-u, prepisivanje bafera korumpira success strcpy(buff,argv[1]); \/\/ TrapC ne može preći granicu, strcpy je siguran if(!strcmp(buff,"s3cr8tpw")) { success = 1; } if(success) \/\/ TrapC je blokirao strcpy prepisivanje, success je dobar { printf("Dobrodošli!\n"); } return !success; } \/\/ trapc_ptr.c int main() { const char* ptr = "Hello World"; \/\/ 12 znakova široko while(ptr) \/\/ Nema preljeva bafera s TrapC { printf("%c",*ptr); \/\/ ispisuje jedan znak po jedan ptr++; \/\/ Izlazi s kraja: TrapC nulira ptr! } \/\/ NE pokušavajte ovo u C-u, izazvat će segfault! assert(ptr == 0); return 0; } \/\/ trapc_array.c int score[10]; printf("%i",score[-1]); \/\/ TrapC neće dopustiti pristup for(int i = 0;i

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster