La startup Trasec está desarrollando el lenguaje de programación TrapC, que es un dialecto del lenguaje C utilizado para un manejo seguro de la memoria. Para prevenir errores en la gestión de memoria, como el desbordamiento de búferes y el acceso a memoria ya liberada, TrapC aplica un enfoque fundamentalmente diferente en el manejo de punteros y un mecanismo especial de interceptación de errores basado en manejadores de excepciones (trap). Se planea abrir el código fuente del compilador de TrapC en 2025.
Se ha declarado que las características del manejo de punteros no interrumpirán en la medida de lo posible el flujo habitual y se implementarán mediante el compilador. Según los diseñadores del lenguaje, el compilador garantizará que los punteros solo apunten a las áreas de memoria asociadas y también verificará todos los límites de los búferes. El compilador recuerda los tipos y no permite conversiones de tipos inseguras. Todas las variables y búferes creados se inicializan explícitamente o se llenan con ceros por el compilador.
En lugar de malloc, TrapC utiliza un constructor new similar al de C++. No hay llamadas a free ni delete, y la liberación de memoria es responsabilidad del compilador, lo que protege contra errores que pueden llevar a fugas de memoria. Se aplica gestión automática de memoria incremental en el heap, pero sin recolector de basura. A nivel de ABI, TrapC será compatible con C, lo que permitirá combinar en una misma aplicación código en TrapC y código puro en C, pero no se garantizará la seguridad en la gestión de memoria para el código en C.
El proyecto es liderado por Robin Rowe, exprofesor de ciencias de la computación, quien participó en comités para el desarrollo de los estándares de C y C++, y que en su momento creó el editor gráfico Cinepaint, utilizado en la creación de algunas películas de Hollywood, así como la biblioteca POSIX libunistd para Windows. Gabrielle Pantera, quien ocupó un puesto de dirección en Disney, es cofundadora de la empresa Trasec.
Los detalles del proyecto aún no se han proporcionado, solo se muestran algunos ejemplos con código, que, por ejemplo, afirman que TrapC no permitirá desbordar el búfer buff al ejecutar «strcpy(buff,argv[1]);» o no permitirá aumentar el puntero o el índice del arreglo a un valor que lo desplace más allá del búfer asignado o del final del arreglo. No se explica cómo se logra tal protección.// darpa_tractor.c int main(int argc,char* argv[]) { char buff[8]; // TrapC pone a cero implícitamente, sin memoria sucia int success = 0; // En C, sobreescribir el búfer corrompe el éxito strcpy(buff,argv[1]); // TrapC no puede desbordar, strcpy seguro if(!strcmp(buff,"s3cr8tpw")) { success = 1; } if(success) // TrapC bloqueó el sobreescritura de strcpy, éxito bueno { printf("¡Bienvenido!\n"); } return !success; }// trapc_ptr.c int main() { const char* ptr = "Hello World"; // 12 caracteres de ancho while(ptr) // No hay desbordamiento de búfer con TrapC { printf("%c",*ptr); // imprime un carácter a la vez ptr++; // Salir del final: ¡TrapC anula ptr! } // ¡NO intentes esto en C, generará segfault! assert(ptr == 0); return 0; }// trapc_array.c int score[10]; printf("%i",score[-1]); // TrapC no permitirá el acceso for(int i = 0;i
Fuente: opennet.ru
