Startup-i Trasec po zhvillon gjuhën e programimit TrapC, e cila është një dialekt i gjuhës C, që siguron punë të sigurt me memorien. Për të parandaluar gabimet gjatë punës me memorien, si dalja jashtë kufijve të ndarë të buferit dhe qasja në memorien e liruar tashmë, TrapC përdor një mënyrë themelore ndryshe për të punuar me treguesit dhe një mekanizëm të veçantë për kapjen e gabimeve mbi bazën e trajtuesve të përjashtimeve (trap). Kodi burimor i kompajlerit për TrapC pritet të hapet në vitin 2025.
Kjo është deklaruar se veçoritë e punës me treguesit do të përpiqen të mos dëmtojnë zakonet e njohura dhe do të realizohen përmes përpjekjeve të kompajlerit. Sipas ideve të autorëve të gjuhës, kompajleri do të garantonte që treguesit të referohen vetëm në zonat e memories që lidhen me ta, si dhe do të kontrollonte të gjitha kufijtë e buferëve. Kompajleri mban mend tipet dhe nuk lejon ndërrime të pasigurta të tipeve. Të gjitha variablat dhe buferat e krijuar inicializohen shprehimisht ose mbushen me zero nga kompajleri.
Në vend të malloc, në TrapC përdoret një konstruktor i ngjashëm me new në C++. Thirrjet free dhe delete mungojnë, ndërsa çlirimi i memories është përgjegjësi e kompajlerit, që mbron nga gabimet që çojnë në rrjedhjen e memories. Në heap përshtatet menaxhimi inkrimental automatik i memories, por pa mbledhës plehrash. Në nivelin ABI, TrapC do të jetë i përputhshëm me C, çka do t'i lejojë kodit në TrapC të kombinohet me kodin e pastër C në një aplikacion, por për kodin C nuk do të sigurohet siguria e punës me memorien.
Projektin e zhvillon Robin Rowe, një ish-profesor i shkencave kompjuterike, i cili ka marrë pjesë në komitetet për zhvillimin e standardeve C dhe C++, duke krijuar dikur redaktorin grafik Cinepaint, i përdorur në disa filma hollivudiane, dhe bibliotekën POSIX libunistd për Windows. Bashkëthemelues i kompanisë Trasec është Gabrielle Pantera, e cila ka mbajtur një post drejtues në kompaninë Disney.
Detajet e projektit ende nuk janë disponibël, vetëm disa shembuj me kod janë treguar, në të cilat, për shembull, thuhet se TrapC nuk do të lejojë mbivendosjen e buffers buff gjatë ekzekutimit «strcpy(buff,argv[1]);» apo nuk do të lejojë shtimin e treguesit ose indeksit të masës me një vlerë që e shtyn përtej buffers së alokuar apo fundin e masës. Si arrihet kjo mbrojtje nuk shpjegohet. \/\/ darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; \/\/ TrapC implicitly zeros, no dirty memory int success = 0;\/\/ Në C, mbivendosja e bufferit korrupton suksesin strcpy(buff,argv[1]); \/\/ TrapC nuk mund të mbivendosë, strcpy e sigurt if(!strcmp(buff,"s3cr8tpw")) { success = 1; } if(success) \/\/ TrapC bllokoi mbivendosjen e strcpy, suksesi i mirë { printf("Mirë se erdhët!\n"); } return !success; } \/\/ trapc_ptr.c int main() { const char* ptr = "Hello World"; \/\/ 12 karaktere while(ptr) \/\/ Nuk ka mbivendosje bufferi me TrapC { printf("%c",*ptr); \/\/ printo një karakter në një kohë ptr++; \/\/ Hapat përtej fundit: TrapC nullohet ptr! } \/\/ MOS e provoni këtë në C, do të shfaqet segfault! assert(ptr == 0); return 0; } \/\/ trapc_array.c int score[10]; printf("%i",score[-1]); \/\/ TrapC nuk do të lejojë qasje for(int i = 0;i
Burimi: opennet.ru
