Projekt TrapC vyvíjí jazyk podobný C, bezpečně pracující s pamětí

Startup Trasec vyvíjí programovací jazyk TrapC, který je dialektem jazyka C a zajišťuje bezpečné manipulace s pamětí. K zablokování chyb při práci s pamětí, jako je překročení vyhrazeného bufferu a přístup k již uvolněné paměti, se v TrapC používá zásadně jiný přístup k ukazatelům a speciální mechanismus pro zachycení chyb na základě výjimek (trap). Zdrojový kód překladače pro TrapC plánují otevřít v roce 2025.

Je uvedeno, že vlastnosti práce s ukazateli co nejméně naruší obvyklý způsob a budou implementovány silami překladače. Podle autorů jazyka zaručí překladač, že ukazatele odkazují pouze na související oblasti paměti, a také zkontroluje všechny hranice bufferů. Překladač si pamatuje typy a nedovoluje nebezpečné přetypování. Všechny vytvářené proměnné a buffery jsou explicitně inicializovány nebo vyplněny nulami překladačem.

Místo malloc se v TrapC používá konstruktor new podobný C++. Volání free a delete chybí a za uvolňování paměti odpovídá překladač, což chrání před chybami vedoucími k únikům paměti. V haldě se používá inkrementální automatické řízení paměti, ale bez správce paměti. Na úrovni ABI bude TrapC kompatibilní s C, což umožní kombinaci kódu na TrapC a čistém C v jednom aplikaci, ale pro kód C nebude zajištěna bezpečnost manipulací s pamětí.

Projekt řídí Robin Rowe, bývalý profesor informatických věd, který se účastnil komisí pro rozvoj standardů C a C++, a který vytvořil grafický editor Cinepaint, používaný při výrobě některých hollywoodských filmů, a POSIX knihovnu libunistd pro Windows. Spoluzakladatelkou společnosti Trasec je Gabrielle Pantera, která dříve zastávala vedoucí pozici ve společnosti Disney.

Podrobnosti o projektu zatím nejsou uvedeny, zobrazeno je pouze několik příkladů s kódem, ve kterém je například uvedeno, že TrapC neumožní přetečení bufferu buff při provádění „strcpy(buff, argv[1]);“ nebo neumožní zvýšit ukazatel nebo index pole o hodnotu, která by ho posunula za vyhrazený buffer nebo konec pole. Jak přesně je taková ochrana dosažena, není vysvětleno. // darpa_tractor.c int main(int argc, char* argv[]) { char buff[8]; // TrapC implicitně inicializuje, žádná špinavá paměť int success = 0; // V C, přepsání bufferu znehodnocuje úspěch strcpy(buff, argv[1]); // TrapC nemůže přetečíst, strcpy je bezpečný if (!strcmp(buff, "s3cr8tpw")) { success = 1; } if (success) // TrapC zablokoval přepsání pomocí strcpy, úspěch dobrý { printf("Vítejte!\n"); } return !success; } // trapc_ptr.c int main() { const char* ptr = "Hello World"; // 12 znaků širokých while (ptr) // Žádné přetečení bufferu s TrapC { printf("%c", *ptr); // tiskne jeden znak najednou ptr++; // Krok na konec: TrapC nastaví ptr na null! } // NEZKOUŠEJTE to v C, způsobí segfault! assert(ptr == 0); return 0; } // trapc_array.c int score[10]; printf("%i", score[-1]); // TrapC nedovolí přístup for (int i = 0; i

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster