Независимый проект веб-браузера Ladybird меняет курс в выборе языков программирования, при этом ассистенты кодирования на базе больших языковых моделей (LLM) помогают оценить этот сдвиг.
Последняя запись в блоге проекта излагает суть происходящего в заголовке: “Ladybird принимает Rust с помощью ИИ“. В статье также говорится, что задержка в разработке примерно на год была вызвана попытками использовать язык программирования Swift от Apple, и один из его тикетов на GitHub гласит, что это осталось в прошлом. Пока работа продолжается на C++, параллельно ведется побочный проект по портированию подсистем на Rust.
Проект Ladybird пишет современный веб-браузер, включая его движок рендеринга, с нуля. Это масштабная задача; таких проектов очень мало. Помимо некоторых нишевых инструментов, все основные браузеры сводятся к трем базовым семействам. Mozilla Firefox, основанный на собственном движке рендеринга Gecko от Mozilla, — один из них. Остальные два связаны между собой. В ОС Apple Safari основан на движке WebKit от Apple, который возник как форк KHTML от KDE в 2003 году. На других платформах есть Google Chrome, использующий движок Blink, который Google форкнул из WebKit десять лет спустя.
Ladybird начинался как встроенный нативный веб-браузер проекта Serenity OS, который мы попробовали и о котором написали в начале 2022 года. Примерно через 18 месяцев проекту Serenity OS исполнилось пять лет, и ведущий разработчик Андреас Клинг решил выделить браузер в отдельную, автономную кроссплатформенную программу.
Serenity OS — это новая ОС, подобная Unix. В отличие от Linux или BSD, она реализована на C++, что означает, что Ladybird тоже написан на C++. Еще в 2024 году Клинг объявил в X, что проект браузера меняет курс и вместо этого будет использовать относительно новый язык программирования Swift. Apple анонсировала Swift в 2014 году и на следующий год пообещала, что Swift 2 станет открытым исходным кодом — а значит, кроссплатформенным.
Однако, похоже, увлечение Ladybird Swift’ом подошло к концу. Клинг закрыл тикет #933 Swift 6.0 Blockers на прошлой неделе с комментарием:
Закрываю, поскольку мы больше не планируем внедрять Swift.
Теперь он рассказывает о причинах. В анонсе о Rust он заявляет:
Взаимодействие с C++ так и не достигло нужного уровня, а поддержка платформ за пределами экосистемы Apple была ограничена.
Вместо этого: “В дальнейшем мы переписываем части Ladybird на Rust”. В посте продолжается:
Когда мы изначально оценивали Rust в 2024 году, мы отвергли его, потому что он не очень хорош для ООП в стиле C++.
[…]
Но после еще одного года топтания на месте пришло время сделать прагматичный выбор.
То, как был сделан выбор, может вызвать удивление. Он решил использовать ассистентов кодирования на базе LLM для перевода кода с C++ на Rust, а затем тщательно проверить, соответствует ли структура полученного кода оригиналу и дает ли он идентичный результат. Он решил начать с JavaScript-интерпретатора Ladybird, потому что он достаточно самодостаточен, его этапы и вывод четко определены, и он имеет хорошее тестовое покрытие благодаря ECMAScript Test Suite.
Это не было упражнением в “кодировании по наитию” (vibe coding), как он тщательно поясняет:
Я использовал Claude Code и Codex для перевода. Это было под руководством человека, а не автономная генерация кода. Я решал, что портировать, в каком порядке и как должен выглядеть код на Rust. Это были сотни небольших запросов, направляющих агентов туда, куда нужно было двигаться. После первоначального перевода я провел несколько проходов враждебного обзора, прося разные модели проанализировать код на предмет ошибок и плохих паттернов.
Результаты, безусловно, впечатляют:
Требованием с самого начала был байт-в-байт идентичный вывод из обоих конвейеров. В результате получилось около 25 000 строк кода на Rust, и весь порт занял около двух недель. Та же работа заняла бы у меня несколько месяцев ручного труда. Мы проверили, что каждый AST, созданный парсером Rust, идентичен AST на C++, и весь байт-код, сгенерированный компилятором Rust, идентичен выводу компилятора C++. Нулевая регрессия по всем направлениям.
Подход использования LLM для перевода программного обеспечения с одного языка на другой в погоне за лучшей безопасностью — а также производительностью, размером кода и другими желаемыми свойствами — это то, о чем мы праздно рассуждали сами в 2024 году. Это почти противоположность невмешательскому подходу “пусть бот делает” со стороны орды “кодировщиков по наитию”.
Клинг отмечает, что результат не является идиоматичным Rust, и ему потребуется доработка. Это не единственное новое направление проекта:
Это не станет основным фокусом проекта. Мы продолжим разработку движка на C++, а портирование подсистем на Rust будет побочным процессом, который продлится долго.
Это интересное упражнение, которое, по нашему мнению, вызовет столько же раздражения, сколько и одобрения. Клинг не новичок в спорах. Например, его обвиняли в трансфобии за то, что он отказался от изменений, направленных на то, чтобы сделать язык документации Serenity OS более гендерно-нейтральным, среди прочего. Проект также получил спонсорскую поддержку от Cloudflare — в другое время недружелюбной к нишевым браузерам. Для некоторых этих фактов достаточно, чтобы осудить проект, наряду с вариантом Linux на базе Arch под названием Omarchy, вокруг которого The Registerуже высказывался ранее.
Примечание
В качестве забавного примечания: в нашей статье о переводе кода с помощью LLM мы ссылались на пост блогера по программированию Стива Йегге. Недавно он полностью переключился на фермы ботов, контролирующих ботов, что он назвал “Газовым городом” (Gas Town), с новообретенным энтузиазмом оплаты токенов криптовалютами. Как всегда, посты Йегге в блоге длинные и довольно глубокие, но на этот раз мы хотим подчеркнуть, что не рекомендуем их читать. Мы совершенно не уверены, что они стоят вашего времени. А вот критическая оценка Расти Фостера “Весь Газовый город, никакого торможения” может быть полезна. ®
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Liam Proven




