LINUX.ORG.RU

Части Ladybird переписывают на Rust при помощи LLM

 , , ,


0

6

Ladybird переходит на частичное использование Rust вместо C++. Разработчики давно искали memory-safe альтернативу: Swift не подошёл из-за слабых возможностей взаимодействия с C++ и ограниченной поддержки вне Apple. Rust оказался лучше: зрелая экосистема, многие контрибьюторы уже знают язык, а Firefox и Chromium уже используют его.

Первым портировали LibJS — движок JavaScript (лексер, парсер, AST, генератор байткода). Работу вёл человек с помощью Claude Code и Codex: ~25 000 строк Rust за две недели вместо нескольких месяцев вручную. Результат — полная идентичность выходных данных с C++-версией, ноль регрессий в тестах (52 898 тестов test262, 12 461 собственных тестов).

Код намеренно стилистически близок к C++-оригиналу — идиоматичность придёт позже. Полного перехода на Rust не планируется: C++ и Rust будут сосуществовать, а портирование будет постепенным и управляться основной командой.

>>> ladybird.org



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

Косяки сишки стали проблемой всего мира в итоге.

По-моему, ты откровенно передёргиваешь...

Это инструмент для массовой продукции и страдают в итоге все.

Нет, не все. Но большинство - да. Люди, в массе своей, не любят и не хотят учиться.

С более удобным инструментом

«Удобным» тем, что для него не требуется так глубоко изучать его, как C++?.. ;)) Вопрос риторический. :)

можно сократить ошибки, ускорить и упростить произвдство

И удешевить, нанимая откровенных «ламеров», «не осиливших» (и, вполне возможно, даже и не пытавшихся) нормально C++, да. :)

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

Красоту неописуемую.

У проекта нет зависимости от С++ рантайма. Оно того стоило.

Да, это как раз тот масштаб, на котором не нужны «Исключения, перегрузка операторов, лямбды, смешивание бизнес-логики с template-metaprogramming.» Сложно не согласиться.

Был у меня другой проект, проверка целостности ad-hoc одного большого XML. Зиг-френдли код на С++ получился в десять раз быстрее изначального С++ на базе xml-security-с.

AoC – это что?

Декабрьский AdventOfCode. Проводился десять лет с 2015-го, задачи можно решать круглый год.

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

Изучать нужно любой инструмент. Про ламеров это тебе виднее. Ты ж не такой - ты ведь пуп Земли.

Но как по мне - не надо осиливать всякое говно, если можно его не осиливать, а сразу делать нормально.

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

Tы ж не такой - ты ведь пуп Земли.

Я и вправду не такой, но с с такими вот твоими проекциями и переносами - это луТЧе тебе обратиться к вашему семейному психологу... Ну, или к психиатОру...

Но как по мне - не надо осиливать всякое говно, если можно его не осиливать

Соглашусь: не надо «всякому говну» даже и пытаться «осиливать» то, что ему (говну) видится ему (говну) подобным...

И Даннинг с Крюгером меня поддержат. ;))

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

И это не только его проблема. Косяки сишки стали проблемой всего мира в итоге. Это инструмент для массовой продукции и страдают в итоге все. С более удобным инструментом можно сократить ошибки, ускорить и упростить произвдство. Это касается и профессионалов и новичков - все иногда ошибаются.

Это ложный тезис, всё с точностью наоборот. Безопасность во главу угла ставится на массовом ширпотребе для домохозяек. В профессиональной среде приоритеты совсем иные - удобство, производительность, …, а за ошибку часто можно потерять здоровье или жизнь. Станки могущие сделать из оператора кашу, прессы с адским давлением, лазерные резаки, … . Пойди на любой завод с реальным производством, и увидь, что там сплошной unsafe блок. Либо ты будешь дышать каким-нибудь дерьмом, либо вероятность вернуться домой нецеликом - будет далеко не нулевая. Имел опыт на кислородном заводе, коллега горел, а за мой пол года стаж чуть не получил в голову деталью, которая вылетела под давлением газа в 160 кг/см2. Расскажи также про безопасность строителям каким-нибудь, которые вяжут арматуру на высоте метров 60.

Это всегда компромисс между удобство/безопасность, и вообще далеко не факт, что раст пригоден для действительно серьёзного. Глядя на развитие нейронок, почему бы не ИИ стат анализаторы в купе с санитарами? Вместо всей этой вашей безопасной дрочи и запретов всего, что как следствие заставляет чесать гланды через зад?

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

Был у меня другой проект, проверка целостности ad-hoc одного большого XML. Зиг-френдли код на С++ получился в десять раз быстрее изначального С++ на базе xml-security-с.

Да, да, экстраполяции на базе одного-двух примеров – это очень точно и надежно.

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

Да, да, экстраполяции на базе одного-двух примеров – это очень точно и надежно.

Всего-то не аллоцировал. И сортировку атрибутов сделал вручную на стеке, а не через std::sort() на контейнере.

Удивительно, насколько быстрее заработает программа, если не будет аллоцировать память под объекты.

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

Удивительно, насколько быстрее заработает программа, если не будет аллоцировать память под объекты.

Ага, а C++ заставляет все аллоцировать и не предоставляет вообще никаких возможностей для того, чтобы не аллоцировать. Верим, верим безусловно.

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

Что известно? Я вот читаю то, что вы пишете, и вижу, что вы вкладываете в «zero cost» смысл «нет накладных расходов».

Что ещё может означать слово «zero» ? Собственно это ещё одна проблема плюсцов - кривая вводящая в заблуждение терминология. И move в них не перемещение а специальный такой оператор каста и вся «мув семантика» скорее «недокопирование семантика». На самом деле название-то всему этому схоластическому кошмару нельзя придумать. В расте вот действительно move-семантика, в полном соответствии со смыслом термина, благодаря чему Box и быстрее и легче unique_ptr-а, и при всём при этом надежнее.

Аминь.

Ну т.е. тоже не понимаете

На более важный из заданных вам вопросов ответите?

Это про то что я посмел плюсцы слегка покритиковать? На лоре? В тредике который прямо про rust vs C++? Почему бы и нет, я не испытываю эмоциональной привязанности(как и неприязни) к кам-то там язычкам, и именно поэтому объективно рассмотрев все за и против я переехал с с++ на раст и НЕ переехал с плюсцов на D в своё время, хотя были на него надежды, но чёт не взлетел.

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

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

Ага, а C++ заставляет все аллоцировать и не предоставляет вообще никаких возможностей для того, чтобы не аллоцировать. Верим, верим безусловно.

Это не я хотел отрывать руки за std::fopen(). Я всего-то говорю, что на С++ надо писать зиг-френдли код. Ясен пень, что С++ мультипарадигменный.

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

Это не я хотел отрывать руки за std::fopen().

А кто хотел?

Я всего-то говорю, что на С++ надо писать зиг-френдли код.

Да вы тут просто жгете напалмом глаголом.

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

А кто хотел?

«И дело здесь вовсе не в том, что fopen/fclose не место в современном С++» чьи слова? Нельзя быть пуристом наполовину.

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

Что ещё может означать слово «zero» ?

Насколько я помню рассказы Страуструпа, в C++ «zero cost» означает не 0 дополнительных накладных расходов, а то, что получить меньше накладных расходов вручную будет (сильно) сложнее.

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

В расте вот действительно move-семантика, в полном соответствии со смыслом термина, благодаря чему Box и быстрее и легче unique_ptr-а, и при всём при этом надежнее.

Да, в Rust-е учли опыт C++ и сделали специального синтаксического франкенштейна для тех, кому ублажать компилятор интереснее, чем решать проблемы.

Это про то что я посмел плюсцы слегка покритиковать?

Плюсцы и я могу покритиковать. Как и Java, как и Go. Как и Rust. Но вот чтобы бегать из темы в тему и кричать какое же это все говно, вот как-то нет.

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

«И дело здесь вовсе не в том, что fopen/fclose не место в современном С++» чьи слова?

Мои. А вот вы, вероятно, читать не умеете. Или, судя по высказанному ранее, имеете какой-то альтернативный способ мышления.

Я привел пример кода к которому бы у меня были вопросы. Но вопросы эти были бы не к fopen/fclose. Отсюда и «дело здесь вовсе не в том, что fopen/fclose не место в современном С++».

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

Раст намного более устойчив к говнокоду. Сам язык своим дизайном активно наказывает за попытки наговнокодить(например, в сишном стиле) и в мелочах и в общем. Тогда как плюсы фактически потворствуют

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

А ты сам на зводе то не был никогда? Техника безопасности это первое, что создается на реальном производстве. Причем дубирвоанная многократно на разных уровнях.

А когда кого то наматывает или кто то возвращается по частям - это вот такие вот умники считают всех вокруг идиотами и нарушают правила безопасности.

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

Техника безопасности это первое, что создается на реальном производстве.

Только вот техника безопасности состоит как из использования средств пассивной безопасности (каска, защитные очки, специальные перчатки/обувь или даже одежда, ограждения, перила, защитные щиты и пр.), так из соблюдения строгих правил (например, нельзя засовывать руки в работающие механизмы, влазить в щиток под напряжением, хвататься за движущиеся части, заходить за ограждения и подходить к чему-либо слишком близко и т.д.).

Безопасные языки программирования с GC и Rust идут в сторону увеличения именно что средств пассивной безопасности. Грубо говоря, это станки, куда просто некуда руку засунуть, все закрыто специальными кожухами.

К сожалению, эта безопасность достигается не бесплатно. Например, в языках с GC программист фактически не властен над тем, как данные располагаются в памяти. Или вынужден смириться с обязательными проверками индексов/ссылок.

В C++ (как наследнике Си) со средствами пассивной безопасности полный швах. Поэтому в C++ вынуждены полагаться на правила. Профит при этом в том, что программист получает почти полный контроль за происходящим. Но ценой безопасности, да.

PS. Не хочу чтобы мои слова восприняли как будто я простив средств пассивной безопасности. Как раз наоборот, чем больше безопасных языков, тем лучше. Но когда C++ начинают обвинять в том, что он небезопасен, то это воспринимается как будто масло обвиняют в том, что оно маслянное.

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

Заводские условия подразумевают, что люди там подготовленные и знают правила. Это позволяет забить на безопасность в некоторой степени взамен получив более эффективный/производительный/дешёвый процесс. Вот простой пример - многометровые в высоту стеллажи на складах, это безопасно? Конечно нет, может упасть, сломать продукцию, придавить рабочих. Будет ли кто-то адекватный в угоды безопасности строить склад с многократно большей площадью, где продукция лежит в один ярус? Нет конечно, лучше/дешевле/проще обучить оператора штабелера работать относительно безопасно.

Так и вы со свой безопасностью - вы тупо мешаете работать эффективно. Это как дать токарю станок со слабым двигателем, мощности которого точно не хватит для намотки его на деталь со смертельным исходом.

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

За вашу «эффективность» внезапно кто-то может сесть в тюрьму при неблагоприятном стечении обстоятельств.

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

С твоей логикой не нужны ремни безопасности те же - ведь это проблема водителя, если он не умеет соблюдать скоростной режим, да?

Нет, это твоя «логика», которую ты тужишься приписать мне.

Вот моя: надо соблюдать существующие правила. И на дорогах, и в C++, и т. д. И тогда не будет необходимости переписывать ПДД для ламеров на Rust... :)

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

И что ему инкринируют, если пострадавший нарушил ТБ? Инструктаж проведен, личная подпись в журнале есть. Естественно, если следствие найдет нарушения, и не дай бог документ с личной подписью, это другой вопрос.

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

Не знаю, но врядли для руководителя такое пройдёт бесследно, может халатность какую пришьют или еще чего.

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

Выплатят денежною компенсацию родственникам.

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

Так по твоей логике зачем нужны ремни безопасности, если соблюдать правила? Не превышай лимит скорости, не лезь никуда вне очреди и все - ты в безопасности, не?

А раст тебе физически на уровне компилятора запрещает вылетать через лобовое стекло.

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

Открою страшную тайну - люди идоты. И тут не про интеллект, просто самая архитектура такая. И умные и глупые - все идиоты в разных ситуациях. Потому всегда делается «защита от дурака».

Я не знаю как это работает. Вот помню на фабрике стою я возле шлифовального станка, задолбанный в хлам. И такой - тык пальцем в шлифовальный диск. Вот зачем я это сделал? Было больно. Заживало неделю.

А еще есть просто усталость, просто случайности от которых тоже надо защищать.

Естественно вся защита - это баланс между ценой и безопасностью.

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

Так мне этим раст и нравится и этим не понравился го, например. В раст нет GC - ну классное же. И памятью управлять не надо, а она не течет.

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

И памятью управлять не надо

Сдается мне, что нам втирают какую-то дичь. Явное указание лайфтаймов в Rust-е зачем придумали?

И памятью управлять не надо, а она не течет.

Насколько я помню, в Rust-е утечка памяти не считается нарушением memory safety.

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

В раст совершить утечку памяти чисто теоретически можно, но это надо очень уж специально постараться. Например в цикле где нибудь специально начать переполнять.

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

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

Открою страшную тайну - люди идоты. И тут не про интеллект, просто самая архитектура такая. И умные и глупые - все идиоты в разных ситуациях. Потому всегда делается «защита от дурака».

Ты заблуждаешься, если думаешь, что раст тебе прям поможет сильно. На первый взгляд - звучит странно, но это так. Раст не выдаст тебе ошибку от:

hypotenuse_square = leg_0^2 + leg_1*2  // error, 'leg_1^2' is implied

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

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

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

Все эти пугалки про утечки памяти - брехня полнейшая, никто в современных плюсах не вызывает new/delete напрямую в норме. Знаешь, у меня тоже ничего не бежит, мне это даже проверять не нужно, зачем, если я даже new нигде не вызываю?

И ещё раз скажу - стат анализ плюсового кода нейронками - думаю, что это очень перспективный подход. Факт, что сетки сильно поумнели, это может без всяких тестов ткнуть во всякие там «забыл/затупил», но без всяких запретов, которые накладывает на программиста раст. Смесь си/с++ свободы с безопасностью. Ржавый курит в сторонке

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

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

@LightDiver, вот твой код, который, очевидно, только специально можно так написать, а не от «забыл»:

void process(std::shared_ptr<int> ptr) {
    int* raw = ptr.get();
    delete raw;
    std::cout << *ptr;
}

int main() {
    process(std::make_shared<int>(42));
    return 0;
}
chatgpt, is it correct code?
No, this code is incorrect. It has undefined behavior (UB). ...

и полное описание проблемы подробное (правильное). А если сетка прям специально натасканная на плюсовый код, будет вообще огонь

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

Так оно и было специально написано, чтобы показать - в плюсах так можно. Скомпилируется, выполнится, выдаст ошибку. В раст не скомпилируется.

А так - посмотрим что будет дальше. У меня просто плюсы ну не заходят никак. Ну не получаются. А раст со старта пошел как родной, так что я предвзят.

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

Это был ответ. Я не считаю мусором то, что делаю.

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

Так по твоей логике зачем нужны ремни безопасности, если соблюдать правила? Не превышай лимит скорости, не лезь никуда вне очреди и все - ты в безопасности, не?

Это твоя «логика», которую ты пытаешься приписать мне...

Видимо, вот поэтому:

Открою страшную тайну - люди идоты

Почитав твои «письмена» здесь, считаю это твоим признанием. И согласен с такой твоей самооценкой. :)

А раст тебе физически на уровне компилятора запрещает вылетать через лобовое стекло.

Сказки.

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

Сдается мне, что нам втирают какую-то дичь

100%

Насколько я помню, в Rust-е утечка памяти не считается нарушением memory safety

Это же известный способ «решения проблем безопасности»! - заявить «лассическое» уже: «Это не баг! Это фича!». ;P;))

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

Косяки сишки стали проблемой всего мира в итоге.

Титул мисс вселенскромность сегодня достаётся этому клопользователю.

LLM-9000
()
Ответ на: комментарий от LightDiver

И такой - тык пальцем в шлифовальный диск. Вот зачем я это сделал?

Так это в тебя ду́хи сишечки вселились и в твои шарова.

LLM-9000
()
Ответ на: комментарий от Lusine

Странные подходы, зачем переписывать на раст, то что уже работает? Да еще пытаться мимикрировать под плюсы, которые им не нравятся.

Насчёт мимикрии - LLM на базе Transformers изначально созданы для перевода с одного человеческого языка на другой и для языков программирования это тоже справедливо.

А вот зачем - это знает только автор. Может из опасения будущих ошибок с памятью, может - для получения нового опыта с LLM и/или rust

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

Ты должен проверять зависимости.

Работа с зависимостями у раста такая же как и у веб макак. Cargo свалка равняется на npm.

Зависимости можно проверять, когда у тебя их 10. Когда их сотни, никто проверять не будет. Тыкнут в cargo, чтобы он там как-то сам разрулил и всё.

Это фундаментальный изъян у языков с удобным пакетным менеджером. В c++, чтобы притащить зависимость, нужно страдать. Поэтому ничего лишнего не добавляют к себе в проект. В cargo/npm нужно написать всего одну строчку. Поэтому зависимости пихают сотнями штук.

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

Поэтому ничего лишнего не добавляют к себе в проект.

А вместо этого изобретают велосипед в стотысячный раз, заново собирая по пути все грабли.

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

Серьёзно считаешь это сравнимым со сложением? Структура с 45 публичными методами, имплементация в полторы тысячи строк с тестами - уровень a+b? Мелкая фигня, которую нужно в каждом проекте велосипедить?

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

О чём и речь. Раздули сложение на 45 публичных методов.

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

А велосипедить в таком универсальном виде и не нужно. Велосипедным там будет в 1-2 местах, по 2 строки, а не вот этот монстр.

Кстати, там и is_even(odd) есть, но не так популярен правда.

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