LINUX.ORG.RU

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

 , , ,


0

5

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)

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

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

Когда ЛОР на расте ждать?

Когда ты – да-да, лично ты! – закончишь его переписывать.

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

только тяжкий труд, пот, слезы и кровь из-под ногтей

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

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

А так хорошо все начиналось.

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

Потому что большую часть CVE составляют ошибки памяти. Путем десятилетий набивания шишек таки было выяснено, что на плюсах все-таки писать большие и сложные системы не нужно.

liksys ★★★★
()

Долго до Андреаса доходило, и ведь даже изначально он сам хотел, и ему говорили, что выбор языка ясен)

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

Вылези из танка. Это в С были ошибки, а в С++ уже есть всякие механизмы защиты типа умных указателей и raii. И проверялки всякие, даже ИИ можно привлекать.

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

Ага. Давно уже. Только CVE от этого значительно меньше не стало.

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

Раст написанный автоматикой увеличит число ошибок памяти в разы. В переписанном sudo уязвимость нашли через месяц, cloud flare тоже вон переписали, ложится теперь раз в месяц

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

Я не найду сейчас всю драму, но они пробовали. Вариант был с нуля переписать на c++ и снова скатить всё в помойку с buffer overflow и текущей памятью или так. Количество разрабов в гугле намекало на системную проблему. Microsoft вообще сдались в итоге (и были лидером по уязвимостям и не могли добавлять фичи не создавая уязвимостей)

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

Ты прав во всём. В плюсах есть всё для безопасной разработки и нужно страдать, чтобы был результат. А сотни новых cve нам всем внушили корпорации, масоны и рептилоиды. ИИ вообще нам всем приснился.

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

Партия сказала раст, значит раст.

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

Про ИИ-код я не спорю. Сам по себе же растовый код будет надежнее, чем плюсовый за счет гарантий компилятора.

В переписанном sudo уязвимость нашли через месяц

Логическую.

cloud flare тоже вон переписали, ложится теперь раз в месяц

Тоже логические проблемы.

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

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

Здесь немаловажным следует считать фактор времени. Эти дефекты при человеческой разработке устранялись годами. А если ЛЛМ будет набирать обороты, забирая всё больше и больше ресурсов, в какой-то момент ей будет достаточно сказать: учти в коде защиту от дешёвого DoS, и она такие все дешёвые лазейки закроет мигом.

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

Мне кажется, это будет как если бы пытались русскими словами говорить по-немецки:

дер лягушка дер по болоту дер шлеп дер шлеп дер шлеп;

маттер и муттер поехали на хутор. Авария случилась, дер киндрер получилось;

ингорссен фамилия нихт клювен клац-клац.
dicos ★★★
()
Последнее исправление: dicos (всего исправлений: 1)
Ответ на: комментарий от liksys

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

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

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

Откуда дровишки?

Прочитай, пожалуйста, что конкретно делает раст и как в нем устроена модель памяти, чтобы чушь не пороть.

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

Почитай пожалуйста про stl. Я даже слов таких не знаю «модель памяти». Там абстрактные контейнеры, итераторы, алгоритмы, про память где она и как управляется знать ничего не нужно. Откуда там взяться ошибкам? Наверное в реализации stl находят ошибки, но их быстро исправляют.

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

Я даже слов таких не знаю «модель памяти».

Но мнение, тем не менее, имеешь. Я тебя понял, можешь не продолжать.

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

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

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

Серебряной пули и вправду нет. А современные инструменты - есть.

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

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

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

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

Сильное заявление.

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

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

Странные подходы, зачем переписывать на раст, то что уже работает?

ЕМНИП, пару лет назад в США потребовали от производителей софта предоставить роудмапы с описанием их перехода к memory-safe языкам и отказа от небезопасных Си и C++.

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

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

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

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

Приближайте то время, когда девелоперы будут не нужны.

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

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

Ну будем не девелоперами, а операторами нейросетей, как будто что-то плохое

Мне нравится писать код. А управлять нейросетями - не нравится. Если бы нравилось - я был бы менеджером, а не программистом. Поэтому - таки плохое. А те программисты, для кого не плохое, как будто бы не на своём месте.

во времена перехода от машкодов к языкам высокого уровня тоже были староверы, которые ныли что станут не нужны

Да и сейчас такие есть, особенно в эмбеддеде. Может и не от машкодов, но вот с C аналогия чёткая. Есть те, кто хочет просто писать в регистры без всяких усложнений и есть индустрия, которая от этого уходит.

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

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

Такое ощущение, что это писал человек, который ничего никогда на C++ не программировал.

Откуда там взяться ошибкам?

От непонимания, забывчивости, невнимательности и еще кучи других факторов.

void f(std::vector<int> & v) {
  for(auto & i : v) {
    if(i & 1) {
      v.push_back(i * 2);
    }
    ++i;
  }
}
eao197 ★★★★★
()
Ответ на: комментарий от liksys

Прочитай, пожалуйста, что конкретно делает раст и как в нем устроена модель памяти

Тут есть пара проблемок:

  1. раст по-прежнему может тащить в проект несколько версий одной и той-же либы разных версий, в одной из которых уязвимость устранена, а в другой нет.
  2. Чтобы он давал гарантии там пол-клавиатуры спец.символов для всякой там разной передачи владения, а это вот всё тупо в новых исходниках никто не использует, т.к. после этого читать тот мусор, который получился невозможно, а уж тем-более разобраться чего там кто куда передал и куда оно в конце-то концов приехало.

Соответственно, если исходить из новости:

  1. В получившемся коде сохранена стилистика С++.
  2. Всего того полного говнища с борроу значит там нет.
  3. Гарантий получается ровно столько-же, сколько даёт С++ с умными указателями и прочим.
Q-Master
()
Ответ на: комментарий от Q-Master

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

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

а это вот всё тупо в новых исходниках никто не использует

Неправда. Сложный софт без этих аккордов написать невозможно.

Соответственно, если исходить из новости:

Сделали какой-то непонятный мув. Если уж переходить на раст - то целиком и полностью, о чем я и толкую.

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

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

Так это большой плюс Rust вообще-то. Мало какой язык в принципе позволяет использовать несколько версий одной библиотеки, что приводит к dependency hell, когда обновление одной библиотеки тянет обновление её зависимости, что ломает третью библиотеку. А следить за версиями, уязвимостями и тд это уже работа программиста, непонятно - что ты хочешь тут от cargo. Отказаться собирать проект, если в интернете написали, что эта версия небезопасна? Глупость же.

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

И что же в новых исходниках используют по твоему мнению? Ты считаешь, что там всё в unsafe или что?

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

А кто эти волшебники, которые работают в Майрософт, Оракл и даже 1С? Их специально разводят? Нет, вполне обычные люди, среднего уровня. Их тысячи, если не десятки тысяч.

Lusine
()

идиоматичность придёт позже.

Идиоматичность приходит позже, с возрастом. Иногда, возраст приходит один.

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

А что с ffmpeg случилось? Там тоже llm с растом набежали?

firkax ★★★★★
()

Результат — полная идентичность выходных данных с C++-версией

Код намеренно стилистически близок к C++-оригиналу — идиоматичность придёт позже.

Использование раста при таких условиях не имеет смысла.

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

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

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

А кто эти волшебники, которые работают в Майрософт, Оракл и даже 1С?

Про Oracle и 1С не знаю, а вот качество продуктов MS как-то все ниже и ниже. Так что, боюсь, там с «волшебниками» не очень хорошо.

Ну и показательна мотивация людей из Google, которые Go придумывали: мол, у нас тут простые смертные работают, им С++ осваивать очень тяжело, давайте дадим чего-нить попроще.

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

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

Это чисто твой косяк, при чем тут stl?

Позволю себе процитировать вас же:

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

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

Да, это идеальный подход. Например Go был изначально написан на C и в версии 1.5 был автоматически транслирован на Go специально написанным для этого инструментом. Но такой подход применим для сравнительно простых языков и когда ты можешь на 100% контролировать исходный код. Думаю, что для конвертации из C++ в Rust такой подход не подойдёт. Слишком сложные и непохожие языки, чтобы можно было написать автоматический транслятор для него.

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

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

Не было таких. Как и тех кто тосковал по ассемблеру.

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