Startup Trasec ontwikkelt de programmeertaal TrapC, een dialect van de C-taal dat veilige geheugentoegang garandeert. Om fouten bij geheugentoegang, zoals buffer overflows en toegang tot al vrijgegeven geheugen, te voorkomen, maakt TrapC gebruik van een fundamenteel andere werkwijze met pointers en een speciaal mechanisme voor foutopsporing op basis van exception handlers (trap). De broncode van de compiler voor TrapC wordt in 2025 openbaar gemaakt.
Er is aangekondigd dat de kenmerken van het werken met pointers zoveel mogelijk de gebruikelijke werkwijze zullen respecteren en door de compiler zullen worden geïmplementeerd. Volgens de bedenkers van de taal zal de compiler garanderen dat pointers alleen verwijzen naar de bijbehorende geheugengedeelten en dat de grenzen van buffers worden gecontroleerd. De compiler onthoudt types en staat geen onveilige typecasting toe. Alle gecreëerde variabelen en buffers worden expliciet geïnitialiseerd of door de compiler met nullen gevuld.
In plaats van malloc gebruikt TrapC een constructie die lijkt op C++'s new. Calls naar free en delete ontbreken, en de compiler is verantwoordelijk voor het vrijgeven van geheugen, wat fouten voorkomt die tot geheugenlekken kunnen leiden. In de heap wordt incrementeel automatisch geheugenbeheer toegepast, maar zonder garbage collector. Op het niveau van ABI zal TrapC compatibel zijn met C, waardoor het mogelijk is om code in TrapC en pure C in ƩƩn applicatie te combineren, maar voor C-code zal geen veilige geheugentoegang worden gegarandeerd.
Het project wordt geleid door Robin Rowe, voormalig professor in de computerwetenschappen, die deel uitmaakte van commissies voor de ontwikkeling van de standaarden voor C en C++, en die in het verleden de grafische editor Cinepaint heeft ontwikkeld, die werd gebruikt bij de productie van enkele Hollywood-films, en de POSIX-bibliotheek libunistd voor Windows. Co-oprichter van het bedrijf Trasec is Gabrielle Pantera, die een leidinggevende functie had bij Disney.
Details about the project are not yet provided; only a few code examples are shown, which state that TrapC will not allow the buffer buff to overflow when executing "strcpy(buff, argv[1]);" or prevent a pointer or array index from being incremented beyond the allocated buffer or the end of the array. The specifics of how this protection is achieved are not explained. // darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; // TrapC implicitly zeros, no dirty memory int success = 0; // In C, buffer overwrite corrupts success strcpy(buff, argv[1]); // TrapC cannot overrun, strcpy safe if(!strcmp(buff, "s3cr8tpw")) { success = 1; } if(success) // TrapC blocked strcpy overwrite, success good { printf("Welcome!\n"); } return !success; } // trapc_ptr.c int main() { const char* ptr = "Hello World"; // 12 char wide while(ptr) // No buffer overrun with TrapC { printf("%c", *ptr); // print one char at a time ptr++; // Steps off the end: TrapC nulls ptr! } // Do NOT attempt this in C, will segfault! assert(ptr == 0); return 0; } // trapc_array.c int score[10]; printf("%i", score[-1]); // TrapC will not allow access for(int i = 0; i
Bron: opennet.ru
