LINUX.ORG.RU

Проект TrapC развивает Си-подобный язык, безопасно работающий с памятью

 , ,


1

5

Проект развивает Робин Роу (Robin Rowe), бывший профессор компьютерных наук, принимавший участие в комитетах по развитию стандартов С и С++, в своё время создавший графический редактор Cinepaint, использовавшийся при создании некоторых голливудских фильмов, и POSIX-библиотеку libunistd для Windows. Соучредителем компании Trasec выступает Габриэль Пантера (Gabrielle Pantera), занимавшая руководящий пост в компании Disney.

Из особенностей:

  • Проверки выхода за границы массива. В TrapC применяется фундаментально иной способ работы с указателями и специальный механизм перехвата ошибок на основе обработчиков исключений (trap).

  • Проверки use after free.

  • Наличие GC.

  • Выделение памяти через new. *alloc и free нет.

  • Явная инициализация нулями.

  • Строгая типизация.

Исходный код компилятора для TrapC планируют открыть в 2025 году.

>>> Подробности

★★★★★

Проверено: maxcom ()

механизм перехвата ошибок на основе обработчиков исключений

Минус скорость (алсо если у них не будет throw c явным перечислением всех бросаемых функцией исключений - то дважды ненужно)

Проверки use after free.

Минус скорость

Наличие GC.

МИНУС скорость

Явная инициализация нулями.

Ололо, вон из эмбеддеда

Итог:

  • Это не заменитель С
  • Это вот вообще ни разу не заменитель С

Очередная поделка человека, который где-то рядом сидел, когда делали что-то древнее и известное.

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)

Наличие GC.

Читал на OpenNet'е

В куче применяется инкрементальное автоматическое управление памятью, но без сборщика мусора.

Пока не вижу больших отличий от других клонов Си с «безопасностью».

Dr64h ★★★
()
Ответ на: комментарий от PPP328

gc обычно создаёт проблемы не для скорости, а для стабильности производительности. Вызов gc буквально фризит всё приложение. Основная проблема, которая возникает в js-лапше это подвисания на gc

mittorn ★★★★★
()

Подробности

Оттуда: https://github.com/pizlonator/llvm-project-deluge

This is a spare-time personal project that I’m doing for fun. It’s called Fil-C.
What is it? It’s a totally memory-safe version of C and C++. All memory safety errors are caught as Fil-C panics. Fil-C achieves this using a combination of real-time garbage collection and monotonic capabilities (all pointers are 128 bits and have of those bits are under strict GC control). Every fundamental C operation (as seen in LLVM IR) is checked against the capability. Fil-C has no unsafe escape hatch of any kind.

Things That Work

Included in the binary distribution (or if you build from source using build_all.sh) is:

Memory-safe SSH client and server.

Memory-safe curl.

Memory-safe libz and openssl.

Memory-safe libc (based on musl) and libc++ (based on LLVM's libc++).

A version of clang that you can use to compile C or C++ programs.

Fil-C catches all of the stuff that makes memory safety in C hard, like:

Out-of-bounds on the heap or stack.

Use-after free (also heap or stack).

Type confusion between pointers and non-pointers.

Type errors arising from linking.

Type errors arising from misuse of va_lists.

Pointer races.

System calls. All buffers passed to system calls are checked for bounds and type.

Lots of other stuff.

Fil-C comes with a reasonably complete POSIX libc and even supports tricky features like threads, signal handling, mmap/munmap, longjmp/setjmp, and C++ exceptions.

Things That Don’t Work

Fil-C is not a complete product. Lots of stuff isn't done!

Fil-C doesn't catch stack exhaustion (i.e. recursing until you run out of stack).

Fil-C doesn't do anything about UB not related to memory, yet. For example, dividing by zero may take the compiler down a weird path.

I'm still working on performance. In good cases, it's 1.5x slower than normal C. In bad cases, it's 5x slower. Lots of work remains to fix those bad cases.

Probably other stuff, too!

These are all things that can be fixed. They just haven't been, yet.
dataman ★★★★★
()

Безопасный C - это Ada, нам в институте рассказывали.

Irma ★★
()

Короче: очередная макака, которая еще не поняла, что в zero runtime языке не может быть никакого safety(c)(r)(tm), потому что без рантайма — это просто продвинутый ассемблерный препроцессор. Т.е. если в процессоре нету сейфти массивов, то и в «языке» им неоткуда взяться.

BceM_IIpuBeT ★★☆☆☆
()
Последнее исправление: BceM_IIpuBeT (всего исправлений: 1)
Ответ на: комментарий от EXL

И чем от Go отличается по итогу?

Отсуствием concurrency реализованной через Communicating Sequential Processes (модель разработаная в 1978 году Tony Hoare, создатель Quick Sort.).

lbvf50txt
()
Ответ на: комментарий от BceM_IIpuBeT

Короче: очередная макака,

Ну куда профессору компьютерных наук до вас? Отнеситесь с пониманием, где вы, и где он.

lbvf50txt
()

Шо, опять?!

Очередная идиотская затея... Далась им эта память!

gns ★★★★★
()

Ни один клон Сишки за исключением C++ не взлетел, даже Ди не смог и этот трап не взлетит.

Dr64h ★★★
()
Ответ на: комментарий от BceM_IIpuBeT

Ну это же не я Си «улучшаю» исключениями и GC 🤡🤡🤡🤡

Он не «улучшает» Си, а пишет новый высокоуровневый язык с максимально похожим на С синтаксисом.

lbvf50txt
()

Проверки выхода за границы массива.

Круто!

Проверки use after free

Круто!!

Наличие GC

Ну и все, тут всех дедов порвало и проект не взлетает.

micronekodesu ★★★
()

Вот смотрю на вас и удивляюсь. Вышел «ПриветВсем» не осилил даже заглавие поста, сам придумал zero runtime, сам опроверг. Оскорбил пожилого профессора. И ему сыпятся лайки.

Вы, ребята, добанутые чтоли?

Еще не осилили разницу между синтаксисом и внутренним механизмом языка. Чтоб могут быть два языка с похожими синтаксисами и разными областями применения, и также с разными синтаксиами и одной областью применения.

По ходу дела да.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от lbvf50txt

А вот синтаксис-то у Си повторять и не следует. Мы его, конечно, любим за обилие звезд и скобок в однострочном преобразовании типов примерно таким способом:

static inline struct fd __to_fd(unsigned long v)
{
	return (struct fd){(struct file *)(v & ~3),v & 3};
}

Но в здравом уме такое лучше не повторять :)

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 2)

Самое важное пропустили! Презентация трапа происходила в столице Тайланда (а где же ещё?!).

perl5_guy ★★★★★
()
Ответ на: комментарий от gns

А вот синтаксис-то у Си повторять и не следует.

Синтаксис Си повторяют не потому, что он идеальный, а потому его все знают. Это один из первых преподаваемых языков.

lbvf50txt
()
Ответ на: комментарий от PPP328

Минус скорость

Пофиг с какой скоростью ты выстрелишь себе в ногу. Или в голову — и память-то и утечет.

slackwarrior ★★★★★
()
Ответ на: комментарий от lbvf50txt

А зачем повторять систаксис Си? Он что, крейзи?!

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от lbvf50txt

Да любое добавление скрытого рантайма и безопасных указателей ломает способы работы с raw-указателями, к которым все в Си и привыкли. В результате, придется переучиваться в мелочах и по привычке будешь лепить char *buf = buf1 + 5, а в этом Трапе семантика таких присваиваний может быть другой.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)

Проверки выхода за границы массива.

Отлично!

Проверки use after free.

Замечательно!

Наличие GC.

А тут, нна, бах серпом по яйцам.

Golang 2.0 с сишным синтаксисом?

cocucka_B_TECTE
()
Ответ на: комментарий от gns

В результате, придется переучиваться в мелочах …

«В мелочах» - ключевое слово. Любой новый язык требует перучивания. Один больше, другой меньше, этот заточен на минимальное переучивание с Си.

lbvf50txt
()
Ответ на: комментарий от Bfgeshka

большая часть трапов под капотом.

Это шо, получается Си с трапами?

cocucka_B_TECTE
()
Ответ на: комментарий от cocucka_B_TECTE

Ну Гошечку делали люди, которые имели неиллюзорное отношение к Си. Они-то это понимают. Ну, кстати, Гошечка не выглядит таким уж ублюдством. Она хоть читаема с первого раза.

gns ★★★★★
()
Ответ на: комментарий от gns

Она хоть читаема с первого раза.

Это основная задача Go. Ради этого его и писали.

lbvf50txt
()

По поводу гц и прочего ни за ни против не скажу. Но все эти убийцы Сишечки - это стагнация. До тех пор, пока не появится важная задача, которую можно решить на очередном убийце Си, но нельзя решить на Си. Точнее, таких задач вагон - веб, приложения, работа с данными и т.п. - там Сишечка не нужна, но и убийцы Сишечки там тоже не нужны. А там, где она нужна, она и так достаточно хороша.

И эта задача если появится не на современном железе появится скорее всего

bender ★★★★★
()
Последнее исправление: bender (всего исправлений: 1)
Ответ на: комментарий от lbvf50txt

А вот мелочи в данном случае решают все! Если хоть чуть тронуть семантику указателей, то потом сам не поймешь, в какой семантике у тебя что где написано, особенно, если заявляется совместимость с Си.

gns ★★★★★
()

А как же golang или rust? Кто их развивать будет?

Infra_HDC ★★★★★
()
Ответ на: комментарий от gns

в какой семантике у тебя что где написано, особенно, если заявляется совместимость с Си.

Короче, вместо домыслов я кликнул два раза по ссылкам. И получил исчерпывающий ответ.

Exclusive C and C++ programmers may not need to learn Rust after all to participate in the push for memory safety.

https://www.theregister.com/2024/11/12/trapc_memory_safe_fork/

Который был и так предсказуем. Создается решение под определенную область для людей хорошо знающих С.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 1)
Ответ на: комментарий от bender

Но все эти убийцы Сишечки - это стагнация.

Это не «убийца Си», это решение аналогичное Rust для тех кто хорошо знает Си.

lbvf50txt
()

«Наличие GC.» - закопать. Нет, вот просто - нафига? У нас нехватает языков с gc?

atrus ★★★★★
()

занимавшая руководящий пост в компании Disney

А тег disney для лулзов?

dataman ★★★★★
()
Ответ на: комментарий от cocucka_B_TECTE

?MON–F–Trap to 4 177560 (c)RT-11

Лучше уж тогда действительно пользовать Раст, если он в твоем проекте нужен, а Си оставить как есть.

gns ★★★★★
()
Ответ на: комментарий от sadko4u

Если какой-нибудь гуй писать, то уж лучше с GC, чем без него.

Для gui да, но... Это не ответ на вопрос. У нас что, острая нехватка нормальных языков с gc, что надо делать ещё один?

atrus ★★★★★
()
Ответ на: комментарий от atrus

Это не ответ на вопрос. У нас что, острая нехватка нормальных языков с gc, что надо делать ещё один?

Кликните два раза по сслыке на источник, там целая статья объсняющая зачем.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 1)

А зачем создавать новый язык для исправления таких мелочей? Неужели нет либ / фреймворков для С, чтобы правильно работать с памятью + накрутить линтеров, чтобы подсвечивал любую работу с памятью напрямую (то есть не используя методы прежде упомянутой либы / фреймворка)? Я сейчас втёрся в TypeScript, так у нас столько правил накручено в ESLint, что большая часть возможностей выстрелить в ногу пресекается на этапе написания кода.

Irben ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.