LINUX.ORG.RU

Fil-c: Rust killer

 , , ,


0

2

https://fil-c.org/

Видево: https://www.youtube.com/watch?v=6Maoe-GMynM

Ъ:

Fil-C — a memory safe implementation of the C and C++ programming languages you already know and love.

Key Features:

Memory Safety: Advanced runtime checks to prevent exploitable memory safety errors. Unlike other approaches to increasing the safety of C, Fil-C achieves complete memory safety with zero escape hatches.

C and C++ Compatibility: Your C or C++ software most likely compiles and runs in Fil-C with zero changes. Many open source programs, including CPython, OpenSSH, GNU Emacs, and Wayland work great in Fil-C. Even advanced features like threads, atomics, exceptions, signal handling, longjmp/setjmp, and shared memory (mmap style or Sys-V style) work. It’s possible to run a totally memory safe Linux userland, including GUI, with Fil-C.

Modern Tooling: Compiler is based on a recent version of clang (20.1.8), supports all clang extensions, most GCC extensions, and works with existing C/C++ build systems (make, autotools, cmake, meson, etc).

Принёс на ЛОР.

Нужна ли борьба с borrow checker? Или продолжаем страдать от ЦеПеПе?

Известны ли уже CVS с ошибками в unsafe блоках?

★★★★

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

@AlexVR @zurg

Ну нет, друзья, постойте!

Провозглашаем memory safety? Провозглашаем.

Затем делаем unsafe блоки. Непоследовательно?

И вот, та-дам, есть решение БЕЗ unsafe блоков.

П. С. Подумываю собрать что-то своё с этим вот, оценить импакт.

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

Провозглашаем memory safety? Провозглашаем.

Затем делаем unsafe блоки. Непоследовательно?

Вопрос дилетанта. Не понимающего что и зачем.

Если тролишь. То это слишком плоско.

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

Признаюсь, я о расте знаю только по историям с ЛОРа. Можем продолжить моё образование: объясни, почему мой вопрос некорректен.

В видосике, который я привёл, озвучен довод про unsafe блоки. Он показался мне достойным внимания.

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

выжимают максимальную скорость, экономят память и избавляются от GC

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

no-such-file ★★★★★
()
Ответ на: комментарий от eao197

которые возникают не из-за ошибок программиста?

Если программист пишет программу, он избегает UB, т.е. все UB - результат ошибки. Поэтому я не понимаю, для чего задавать этот вопрос?

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

Поэтому я не понимаю, для чего задавать этот вопрос?

Потому что он в точности соответствует вашему:

Т.е. все UB в языке на месте?

Ведь если программист «избегает UB», т.е. не совершает ошибок, то ему и без разницы все ли UB на месте или нет.

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

почему мой вопрос некорректен.

unsafe можно применять только в некоторых местах, например для реализации двусвязного списка) Все это хорошо оттестировать. А в сишечке можно закрашиться в любом месте если провтыкал, банально при выводе в консоль)

goingUp ★★★★★
()
Ответ на: комментарий от no-such-file

GC никак не мешает «скорости»

Возможно. Это ортогональные причины.

Чем это лучше чем любой другой язык с GC, например голанг?

Думаю, пойнт в возможности «захарденить» уже написанный код.

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

А, так вы свидетель расы сишников-сверхлюдей, не совершающих ошибки, понятно.

Ни в коем разе.

Меня интересует стоимость.

Грубо говоря, вот есть ошибка – выход за пределы массива. Сколько стоит ее предотвратить в коде (чтобы не дать программисту ошибиться)? Сколько стоит ее диагностировать в ран-тайме (т.е. программист таки ошибся, мы не хотим, чтобы она привела к пагубным последствиям)?

В вину C++у ставят то, что он вообще не пытается предотвращать последствия ошибок в ран-тайме. Т.е. если вышел за пределы массива, то у тебя UB, а не исключение или паника. Но при этом твой код работает на 5% быстрее и потребляет на 20% меньше памяти (условно).

Мне кажется, что C++ предлагает честный обмен. И как-то странно, что его этим попрекают.

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

при этом твой код работает на 5% быстрее и потребляет на 20% меньше памяти (условно)

Зачем тебе неправильный результат работы программы на 5% быстрее и 20% меньше памяти?

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

Зачем тебе неправильный результат работы программы на 5% быстрее и 20% меньше памяти?

Так фокус-то в том, что неправильный результат программы не нужен вне зависимости от того, была ли ошибка диагностирована в ран-тайме или не была (произошло UB).

Т.е. если я открываю в условном текстовом редакторе документ со сложным форматированием и мне выдают аккуратное окошко «не шмогла» или же редактор тупо падает с SIGSEGV, результат для меня одинаковый – я не могу сделать то, что мне нужно.

Причина этого не в наличии/отсутствии UB, а в том, что программист ошибся. И его ошибка не была обнаружена при тестировании.

Т.е. мне в принципе нужна программа, которая делает свою работу без ошибок. Если в ней есть ошибки, то (по большому счету) программа бесполезна. Вне зависимости от того на безопасном Rust-е она написана или на опасном C++.

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

редактор тупо падает с SIGSEGV

Или не падает, т.к. ты вышел за пределы массива, но не попал не следующую страницу памяти. И редактор просто записывает на диск мусор. UB не приводит автоматически к сегфолтам, это было бы слишком просто.

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

Или не падает

Мне без разницы падает ли он или начинает рисовать мусор на экране. Или писать мусор в файл.

Вы упускаете ключевое – программный продукт должен работать без ошибок. Иначе в нем нет ценности.

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

В итоге такое же говно, только в другой обертке.

Поэтому и странно, что акцент делается на UB (т.е. на последствиях ошибки), а не на средствах по ее (ошибке) предотвращению.

Если бы вы спросили «а Fil-C поддерживает все те же возможности выстрелить себе в ногу?», то мне бы это было понятно. Но ваш вопрос был про количество UB.

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

программный продукт должен работать без ошибок. Иначе в нем нет ценности.

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

Возникновение паники или исключения так же может портить данные в файле

Могут. Но это будет заметно по самому факту паники. Будет повод достать бэкап вместо того, что бы сохранить новую версию в бэкап.

акцент делается на UB (т.е. на последствиях ошибки), а не на средствах по ее (ошибке) предотвращению.

Именно на отсутствии оных средств и делаю акцент.

Если бы вы спросили «а Fil-C поддерживает все те же возможности выстрелить себе в ногу?», то мне бы это было понятно. Но ваш вопрос был про количество UB.

Это эквивалентные вопросы, и вы это сами понимаете, предлагая такую замену.

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

Речь же о Fil-C. С Fil-C тебе не нужен unsafe, не нужно «хорошенько тестировать» — потому что он даёт гарантии memory safety. Более того, Fil-C позволяет иметь memory safety межку либами, чего также не даёт rust, если я правильно понимаю.

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

Если ошибся - значит программа будет неправильной. Но при чём тут UB? Ни при каких обстоятельствах UB не может требоваться для работы. Это противоречит его определению.

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

Речь же о Fil-C. С Fil-C тебе не нужен unsafe, не нужно «хорошенько тестировать» — потому что он даёт гарантии memory safety. Более того, Fil-C позволяет иметь memory safety межку либами, чего также не даёт rust, если я правильно понимаю.

Звучит буквально как чудо)

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

Через год программистов не будет.

Да, ИИ внедряется в программирование семимильными шагами, гораздо быстрее других отраслей. Но и до вашей отрасли дойдет)

goingUp ★★★★★
()

Advanced runtime checks to prevent exploitable memory safety errors.

Безусловно, такие проверки приведут к скачку производительности, что очень понравится писателям критически чувствительных к задержкам приложений. Ну что сказать, ново, оригинально, молодёжно!

Очередной филипок-недоучка, выкинутый из университета за проф. непригодность познаёт мир. Пожелаем ему успеха, и дальнего плавания.

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

Разница в том, как разные языки подходят к проблеме того, что программисты ошибаются.

Это уже разговор о том, как лучше обосраться: много и жидко или мало и твердо (ну или наоборот).

Возможно, для каких-то областей это важно. Например, если у нас есть сервер, который смотрит прямо в Интернет и его могут атаковать. Перестанет ли он пускать вообще всех или, напротив, начнет пускать вообще всех.

Но ведь суть-то все равно в другом: как не обосраться.

Но это будет заметно по самому факту паники.

В ноябре 2025-го клиентам Cloudflare от этого факта стало сильно легче, ага.

Это эквивалентные вопросы, и вы это сами понимаете, предлагая такую замену.

Для меня это как раз не эквивалентные вопросы.

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

Но при чём тут UB?

При том, что бывают языки и их подмножества без UB. В которых ошибка на единицу не приводит к инкременту не той переменной или тихой записи мусора в файл.

Ни при каких обстоятельствах UB не может требоваться для работы.

Конечно, не может. Так зачем плодить языки, нафаршированные UB?

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

Перестанет ли он пускать вообще всех или, напротив, начнет пускать вообще всех.

Встроенные в язык проверки приведут к первому варианту, UB запросто и ко второму.

Но ведь суть-то все равно в другом: как не обосраться.

Вот именно. И если обосрался, как заметить этот нюанс. Языки с UB активно мешают заметить.

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

Безусловно, такие проверки приведут к скачку производительности, что очень понравится писателям критически чувствительных к задержкам приложений. Ну что сказать, ново, оригинально, молодёжно!

Говорит от 1.2 до 10 раз медленне. Но это хобби проект одного человека.

Очередной филипок-недоучка, выкинутый из университета за проф. непригодность познаёт мир. Пожелаем ему успеха, и дальнего плавания.

http://www.filpizlo.com/

BruteForce ★★★★
() автор топика