Startup Trasec po zhvillon gjuhën e programimit TrapC, e cila është një dialekt i gjuhës C, që siguron punë të sigurt me memorie. Për të parandaluar gabimet gjatë punës me memorien, si dalja jashtë kufijve të tamponit të ndarë dhe qasjen në memorie që tashmë është çliruar, TrapC zbaton një mënyrë themelore të ndryshme për punën me tregues dhe një mekanizëm të veçantë për kapjen e gabimeve bazuar në trajtuesit e përjashtimeve (trap). Kodi burimor i kompilatorit për TrapC planifikohet të hapet në vitin 2025.
Është deklaruar se veçoritë e punës me tregues do të përpiqen të mos prishin zakonin e zakonshëm dhe do të realizohen nga vetë kompilatori. Sipas autorëve të gjuhës, kompilatori do të garantojë që treguesit të referohen vetëm në zonat e memories që janë të lidhura me ta, si dhe të kontrollojë të gjithë kufijtë e tamponëve. Kompilatori ruan tipet dhe nuk lejon konvertim të pasigurt të tipeve. Të gjitha variablat dhe tamponët e krijuar inicializohen qartë ose mbushen me zero nga kompilatori.
Në TrapC përdoret një constructor i ngjashëm me C++ si zëvendësim për malloc. Thirrjet për free dhe delete nuk ekzistojnë, ndërsa kompajleri kujdeset për çlirimin e memories, duke mbrojtur ndaj gabimeve që çojnë në rrjedhje të memories. Në heap aplikohet menaxhimi automatik inkremental i memories, por pa një mbledhës plehrash. Në nivelin ABI, TrapC do të jetë i pajtueshëm me C, çka do të lejojë kombinimin e kodit TrapC dhe atij të pastër C në një aplikacion, por siguria e menaxhimit të memories nuk do të sigurohet për kodin C.
Projektin e zhvillon Robin Rowe, ish-profesor i shkencave kompjuterike, i cili ka marrë pjesë në komitetet për zhvillimin e standardeve C dhe C++, i cili gjithashtu ka krijuar editorin grafik Cinepaint, i përdorur për krijimin e disa filmave hollivudianë, dhe bibliotekën POSIX libunistd për Windows. Bashkëthemelues i kompanisë Trasec është Gabrielle Pantera, e cila ka mbajtur një pozitë drejtuese në kompaninë Disney.
Për momentin nuk ka detaje të projektit, vetëm disa shembuj me kod janë treguar, në të cilët, për shembull, thuhet se TrapC nuk do të lejojë mbivendosjen e tamponit buff gjatë ekzekutimit të «strcpy(buff,argv[1]);» ose nuk do të lejojë që treguesi ose indeksi i nivelit të arrijë një vlerë që e çon atë përtej tamponit të caktuar apo fundin e nivelit. Si arrihet ky mbrojtje nuk shpjegohet. // darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; // TrapC implicitisht zero, pa memorie të ndotur int success = 0; // Në C, mbivendosja e tamponit e 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 erdhe!\n"); } return !success; } // trapc_ptr.c int main() { const char* ptr = "Hello World"; // 12 karaktere të gjera while(ptr) // Asnjë mbivendosje tamponi me TrapC { printf("%c",*ptr); // printo një karakter në një kohë ptr++; // Hapa jashtë fundin: TrapC nulls ptr! } // MOS e provoni këtë në C, do të çojë në segfault! assert(ptr == 0); return 0; } // trapc_array.c int score[10]; printf("%i",score[-1]); // TrapC nuk do të lejojë akses for(int i = 0;i
Burimi: opennet.ru
