Из бумаги Роу.
Две недели назад Рабочая группа по международной стандартизации «Число программирования C» услышала предложение предпринимателя Робин Роу на TRAPC, новаторское расширение языка программирования C, безопасное для памяти.
«После моей презентации мне сказали, что я должен был попросить больше времени», — сказал Роу в интервью TNS по электронной почте, — этого 30 минут недостаточно. Так что да, добрый интерес.
Расширение Rowe будет «очень совместимым» с существующим C-кодом и даже «несколько совместимым» с C ++, предлагая еще один путь для огромной кодовой базы в мире существующего кода памяти.
Конечная цель, согласно представлению Rowe WhitePaper Rowe, заключается в том, чтобы «включить перекомпилирование кода L Legacy C в исполняемые файлы, которые безопасны по проектированию и защищены по умолчанию» с очень небольшим рефакторией кода.
В последние несколько лет как на языках программирования C, так и C ++ находились под пристальным вниманием, позволяя разработчикам непреднамеренно писать программы с ошибками памяти, неисправным кодом, который позволяет вредоносным пользователям перезаписать блок памяти своим собственным гнусным кодом. TRAPC может положить конец этому классу ошибок.
Как разработан TRAPC
Чтобы все это произошло, Rowe возглавляет Fountain Adobe, некоммерческий исследовательский институт недалеко от Вашингтона, округ Колумбия, он был основан в ноябре «для поддержания спецификации языка TRAP
Уже есть компилятор, который производит x86, X64 или ARM -исполнителей из стандартного кода C, Rowe подтвердил в его электронном письме, и теперь они работают над поддержкой дополнительных расширений языка для TRAPC. (Они добавляют ловушку ключевого слова, чтобы предложить безопасную обработку ошибок и псевдоним для легкой оператора и перегрузки типа, при повторном использовании функций безопасности кода C ++, таких как конструкторы, деструкторы, новые и функции-члены.)
TRAPC удаляет два ключевых слова C: Goto и Union, которые он описывает как «небезопасные и широко устаревшие от использования». (Позже в белом документе рекомендуется C -код, используя эти ключевые слова, можно хранить в библиотеке C -кода, а затем связан проектом TRAP
«Программистам C и C ++, возможно, не придется изучать ржавчину, чтобы участвовать в подвиге для безопасности памяти», — написал Регистр.
Безопасность с производительностью
TRAPC «находится на пути к выпуску в 2025 году», — сказал мне в субботу Роу. И он пообещал, что «когда будет достаточно для демонстрации, мы разместим его в прямом эфире — так что любой может попробовать TRAPC».
Это амбициозный проект. Роу назвал цель TRAPC не менее чем «сделать программное обеспечение C/C ++ неуклюжим на языковом уровне, чтобы компилировать программное обеспечение, которое не может быть использовано неожиданным поведением и никогда не будет разбиться».
Но есть конкретные методы, чтобы это произошло.
«Когда C -код скомпилируется с использованием компилятора TRAPC, все указатели становятся безопасными указателями памяти и проверены», — сообщил Роу, что Rowe Co Body Codation встречается. В TRAPC компилятор определяет, какие указатели могут выйти за пределы границ — и установит их на ноль.
Одним из результатов этого, согласно белой бумаге, является то, что указатели TRAPC «всегда указывают на действительную память» и «не могут перевернуть или содержать мусор». Поскольку TRAPC знает (и наблюдает) размер буфера, он знает, когда ошибочный код «будет пытаться коснуться недопустимой памяти после нулевого терминатора».
Но может ли это также принести улучшения производительности? «В отличие от компилятора C, компилятор TRAPC имеет идеальную информацию о областях памяти, которые его указатели держат», — говорит мне Роу, что означает, что он может лучше оптимизировать. Вместо того, чтобы проверять каждый доступ к указателю, один за другим, «Компилятор TRAPC может избежать большинства проверок, защищенных памятью, с помощью рассуждения кода ИИ».
Это приводит его к провокационному утверждению. «Эксперты ожидают, что безопасность памяти будет дорогой, — говорит Роу, — но это обязательно это правда?» В конце концов, Код компиляции TRAPC может быть как меньше, так и быстрее, говорит Роу, что означает, что при расчете затрат на производительность безопасность памяти TRAPC может быть лучше, чем бесплатно… »
Улучшения производительности также могут исходить из других языковых функций TRAPC. Например, у некоторых языков программирования есть ключевое слово Try, которое бросает ошибку, если попытка неудачная, что приводит к филиалу кода для этого исключения. Но белая бумага отмечает, что «с TRAPC, цитируя Йоду из« Звездных войн »,« нет никакой попытки, только делай или не ».».
Возвращение из бесплатного вызова функции просто пропускает блок кода ловушки в обработке ошибок. В статье признается, что это новый синтаксис, который не найден в C или C ++.
Таким образом, в отличие от C, TRAPC отвечает на перевернут буфера (и другие ошибки), завершив полезное сообщение об ошибке.
И хотя это звучит как незначительное изменение, Роу говорит мне, что механизм ошибок «ловушка» TRAP
Больше улучшений безопасности
Белая статья Роу включает в себя пример кода, который обычно вызовет ошибку переполнения буфера, но вместо этого в TRAPC завершает программу «с полезным сообщением об ошибке».
Но то же самое будет верно для любого другого непредвиденного условия ошибки, добавляет статья (включая, например, ошибки разделиться с нулем)-если программист явно не создает свой собственный обработчик ошибок улавливания.
Белая бумага также указывает на несколько других функций безопасности TRAPC:
- Чтобы избежать общих ошибок, TRAPC предлагает автоматическое управление памятью, которое можно найти на многих современных языках.
- В то время как C также может запустить переполненную буфер, добавив к строке, «развернут строки TRAPC».
- Typec предлагает автоматическую проверку типов в операторах printf, когда используется спецификатор «{}», то есть printf («{}», var);.
- «TRAPC Printf () и Scanf () являются типами, перегружены и имеют встроенную поддержку JSON и локализации».
- TRAPC также имеет функции «обертки» для других стандартных функций библиотеки COSIX.
- Язык программирования C включает в себя ключевое слово Free () для сделки с решением памяти — создавая возможную ошибку, если указатель, затем обращается к этому местоположению. Но так как управление памятью TRAPC происходит автоматически, это никогда не проблема, объясняет статья. Таким образом, «для совместимости C можно вызовать бесплатно () в TRAPC, но он игнорируется».
- TRAPC «имеет целочисленное« десятичное »тип данных с фиксированной точкой, подходящий для использования в финансовых транзакциях»
- Белая бумага добавляет, что в будущем TRAPC может даже попытаться добавить функции безопасности потока, чтобы помочь предотвратить условия гонки.
Короче говоря, TRAPC « — это язык программирования, разбитый C, с изменениями, чтобы сделать его Langsec и память безопасным», — заключается в статье. «Для этого TRAPC стремится устранить все неопределенное поведение на языке программирования C…»
IDE с AI?
В марте 2024 года Роу также основал коммерческий стартап под названием TRASEC, который работает над технологией генеративного программирования ИИ.
«До сих пор финансирование — это друзья и семья», — сказал Роу TNS, добавив, что он «общается с венчурными капиталами».
TRASEC помогает развивать компилятор TRAPC, но это только начало. В техническом документе говорится, что стартап также надеется в конечном итоге выпустить специального компонента Cybersecurity с рассуждением кода ИИ — и сделать это где -то в 2025 году.
Как сказал Роу в Реестре, «бизнес -план состоит в том, чтобы убить компилятора в качестве бесплатного открытого исходного кода и иметь AI IDE, который является нашим платным продуктом».
Его конечная цель — «создать программное обеспечение для создания ИИ, которое не является неумолимым и невзрачным», — сказал Роу в январе, отвечая на вопросы в подреддите «предприниматели Reddit».
«В мире, Generative AI делает большие шаги, написав код Python», — говорит мне Роу, но он все еще «не так хорош» при написании C -кода. Но что, если Code, сгенерированный AI, был настолько хорошо организован, что обеспечил полноценную поддержку «модульного» программирования, причем все отдельные функции приложения аккуратно спрятаны в отдельные файлы. Роу может даже быть сгенерированные модульные тесты, «модульный код с модульными тестами, а не код спагетти».
Таким образом, в отличие от C, TRAPC отвечает на перевернут буфера (и другие ошибки), завершив полезное сообщение об ошибке.
Он тоже работает над этим. Белый документ Роу указывает, что в настоящее время в C не имеет стандартизированной системы сборки как часть самого языка (например, грузовой инструмент Rust). Поэтому, если смотреть в будущее: «Для TRAPC жизненно важно иметь портативный, прост в использовании, как rust, поэтому программисты могут быстро и легко создавать системы сборки, которые работают в операционных системах».
К счастью, у Rowe уже есть инструмент для создания файлов сборки Cmake, которые он создал для своего долгосрочного (и открытого) программного обеспечения Graphics Project Cinepaint. Роу руководил вилкой с открытым исходным кодом программы манипуляции с изображениями GNU (или GIMP) и говорит мне, что «абоненты GIMP дали в качестве причины отказа от голливудского отделения GIMP, позже переименованного в Cinepaint, как потому, что это было так багни. Справедливо сказать, что сложность удаления ошибок памяти в Cinepaint, написанном в C, дала мне опыт и мотивацию для создания TRAPC ».
И это также оставило его с пользовательским набором инструментов, который не только генерирует код для файлов cmake, но и код парикматериала для классов, кода приложения и даже модульных тестов. (И статья Роу указывает на то, что ее можно даже использовать «задним числом для существующих проектов, в которых может отсутствовать система сборки».)
«Cmaker поддерживает C ++ в настоящее время», согласно документу, но «Поддержка C и TRAPC наступает».
Совместимость и производительность
Один слайд в презентации Роу признал, что TRAPC «сохраняет» минимализм C — означает, что он не предлагает версию шаблонов C ++, исключений, перегрузки функций, наследование или полиморфизм.
«Совместимость C и высокая производительность — это то, что говорят мне программисты C, абсолютно требуется для безопасного языка памяти, чтобы быть приемлемой заменой», — объяснил Роу в нашем интервью по электронной почте. «Вышепроизводительная безопасность памяти в C была дизайнерским компромиссом, сделанным в 1970 -х годах. Это был жесткий выбор дизайна между производительностью, повсеместным распространением и безопасностью — выберите два. Моя миссия TRAPC — выбрать все три.
«Будьте очень совместимы с C и обеспечивают безопасность памяти, которая ничего не стоит по сравнению с ручным управлением памятью в C.»
Какими бы ни были его недостатки, в одном последнем слайде в презентации Роу однозначно гласит, что TRAPC «защищает указатели C/C ++, Scanf, Printf и Malloc».
И это включает в себя то, что кажется заявлением о миссии для TRAPC. «Устаночный код Harden: компилируйте обычный код C/C ++ в программы, которые не могут переоценки, не могут сбоя».
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэвид Кассель — гордый житель района залива Сан -Франциско, где он освещал технологические новости более двух десятилетий. За эти годы его статьи появлялись повсюду от CNN, MSNBC и The Wall Street Journal Interactive … Подробнее от Дэвида Касселя