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)

Странные тут комментаторы, даже чуть вникнуть в текст не могут, портируют чувствительные вещи, типа libjs поэтому и хотят memory-safe там так легче поддерживать было. А в целом проект на qt, потому отказываться полностью от c++ резона нет. А то что переписали в не идиоматическом виде, так понятно что если в лоб переписывать как можно быстрее, то только так и будет. И это совсем не означат, что код без гарантий и такой же по безопасности как на c++, просто структура кода была бы иной, работа с типами отличается, в rust это композиция, в c++ иерархия, композицией можно сделать что-то похожее как в c++, но будет выглядит не очень.

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

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

Ага, а ещё зависимости зависимостей и зависимости зависимости зависимостей и тэдэ и тэпэ. Контроля - 0. Идиотизм - 100%

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

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

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

Да уж, если говнокодить, так говнокодить!

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

Не знаю что такое ladybird, но решение идиотизм в квадрате

Не читал, но осуждаю!

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

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

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

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

Так это большой плюс Rust вообще-то.

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

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

Нет там ансейфа, но и прямого указания времени жизни, на что свой нефритовый наяривали адепты тоже нет. Есть просто код малоотличимый от обычного С. С++ оно даже не пахнет, если не брать за «похожесть» наличие «::» в тексте.

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

Хех, а что так пригорело-то? Иметь 10 копий (а технически это возможно) разных версий одной и той-же библиотеки считается теперь нормой? ИМХО это говнокод.

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

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

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

Нет там ансейфа, но и прямого указания времени жизни, на что свой нефритовый наяривали адепты тоже нет. Есть просто код малоотличимый от обычного С. С++ оно даже не пахнет, если не брать за «похожесть» наличие «::» в тексте.

Если ансейфа нет, значит багов с памятью нет. Максимум - утечка, и то это надо постараться, случайно такое не сделать.

И вот этим свойством программа на Rust очень даже отличима от C и C++. Про которые без серьёзнейшего ручного анализа такое сказать нельзя.

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

«Работа программистом C++ в Москве, 715 вакансий.» Надо думать, что там комманда, которая использует С++. Так что народ есть и работает.

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

Так что народ есть и работает.

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

За счет этого тезис «просто нанять тех, кто умеет программировать на C++» оказывается не таким однозначным как того хотелось бы.

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

Лучше покажи другой пример, как, если использовать std::set и документирование функции интерфейса можно на ровном месте получить сегфолт. И причина в самой реализации set, и чтобы его избежать, я должен тшательно изучить что там под капотом.

Lusine
()

Вангую, что такой LLM/RIIR - глобальный тренд в скором будущем. Изкоробочные решения, публичные сжигания K&R, статья УК за растление через преподавание C++.

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

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

Скорее как английский порядок слов в предложении, но слова русские.

More like ordering words in a sentence per English grammar, but with Russian words.  
Больше как упорядочивание слов в предложении по Английской грамматике, но с Русскими словами.  

Некоторые люди, находящиеся под сильным американским влиянием, так и пишут :)

question4 ★★★★★
()

Что ж, стабильный и пригодный к использованию релиз этого бровсера не выйдет теперь уже никогда.

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

Ты уверен, что мы будем нужны? Достаточно будет обезьян с зачатками интеллекта. Или же в принципе это дойдёт до того, что топ менеджер будет такой: сделай мне игру и размести в стиме.

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

Нет больше радости, чем неприятности у других, да?

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

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

Достаточно будет обезьян с зачатками интеллекта.

В таком случае я не понимаю чем недовольны хейтеры - им уже гарантирована работа за банан ;)

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

«Our first Alpha release for Linux and macOS is coming in 2026.

А тогда на кой это здесь и сейчас??..

Новость о внедрении экспериментальных технологий.

Запрещены только новости о намерениях. Если есть пре-альфа, которую можно потыкать, её тоже можно в новости.

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

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

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

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

Их столько не нужно. А бананом сыт не будешь.

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

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

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

Или же в принципе это дойдёт до того, что топ менеджер будет такой: сделай мне игру и размести в стиме.

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

Да, скорее всего нужно будет не 100 разработчиков, а 10 операторов(очень высокого класса). Но и софт начнут писать все кому не лень(каждой шаверме по приложению и сайту), это же станет дешевле намного.

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

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

Хм, а я вот так в этом не уверен.

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

Лучше покажи другой пример, как, если использовать std::set и документирование функции интерфейса можно на ровном месте получить сегфолт.

class Registry {
public:
    Registry(std::set<std::string>& init_data)
        : data(init_data) {}

    void cleanup() {
        /* логика вокруг data.erase() */
        }
    }

protected:
    std::set<std::string>& data;
};

void foo(const std::string& x, Registry& reg) {
    reg.cleanup();               // что-то происходит
    std::print("{}\n", x);       // UB!
}

int main() {
    std::set<std::string> data = { "one", "two" };
    Registry reg(data);

    const std::string& str = *data.begin();
    foo(str, reg);
}
sarumeister
()
Ответ на: комментарий от Lusine

Лучше покажи другой пример, как, если использовать std::set и документирование функции интерфейса можно на ровном месте получить сегфолт.

std::set<std::string> s;
s.insert(some_key);
auto it = s.find(some_key);
s.erase(some_key);
std::cout << *it << std::endl;

Не нужно недооценивать силу невнимательности, забывчивости и усталости.

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

Что значит «хорошо»

Это когда заглядываешь в код и не возникает вопросов WTF. И не по дизайну решения, а просто по коду. Например, когда в C++ном коде видишь что-то вроде:

FILE * f = std::fopen(...);
...
std::fclose(f);

И дело здесь вовсе не в том, что fopen/fclose не место в современном С++.

программисты gcc делают это хорошо?

Понятия не имею. Не приходилось работать с кодовой базой GCC.

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

Какие претензии к std::endl?

Стримы плохо, потому что раздутые. std::cout единственное место на уроке про перегрузку операторов. Я так рад, что эта дичь миновала и можно спокойно пользоваться print/fmt.

Ну а std::endl убивает производительность.

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

Я так рад, что эта дичь миновала и можно спокойно пользоваться print/fmt.

Вам никто не запрещает пользоваться print/fmt.

Только вот и удалять std::cout (и прочие варианты ostream-ов) из старого кода ради вашей любви к print/fmt вряд ли кто-то будет.

Ну а std::endl убивает производительность.

Любители добавлять «\n» к выводу в stdout, вероятно, никогда не перенаправляют этот самый stdout. Напишут такие отладочную печать, потом запускаешь код на больших данных с перехватом выхлопа через, к примеру, tee, и вообще ничего долгого времени не видишь. Потому что люди привыкли к «\n» и ничего не знают про флуширование.

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

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

Понятно. Я думаю более упрощенно, если компания заняла 90% рынка, как Виндовс на десктопе, программисты там работают очень хорошие.

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

Я думаю более упрощенно, если компания заняла 90% рынка, как Виндовс на десктопе, программисты там работают очень хорошие.

У вас сразу два заблуждения.

  1. Доля на рынке не обязательно должна объясняться качество продукта.

  2. Что в больших командах разработчиков высокий средний уровень этих самых разработчиков.

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

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

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

А также бананом сыт не будешь

Ну вообще-то бананы довольно питательные.

CrX ★★★★★
()

Новость написана так, как будто каждый заранее знает что такое Ladybird.

Это OpenSource-проект с SVG-исходниками для самостоятельного изготовления женских прокладок с крылышками из бумажных салфеток и силикогеля?

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

Или это так Zig влияет, из-за отсутствия в нём println. :)

dataman ★★★★★
()

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

А уж как эта главная задача современного браузера будет достигнута - при помощи ИИ™ и/или rust и/или инклюзивностью команды и/или финансовыми вливаниями - всем плевать. Хомчки всё равно схавают и будут бегать по социалочкам нахваливая ощущения от очередного корпоративного зонда.

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

Ну почему же. Утверждения типа «труЪ программеры должны писать только на асме» можно было встретить даже в начале нулевых.

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

Чего по нему тосковать, он никуда не делся.

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

ИИ конечно ненужно, но ты сказанул совершеннейшую чушь.

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

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

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

Этот вопрос навеян здравым смыслом? Проходите гражданин, нынче так не принято!

pihter ★★★★★
()

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

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

Память не обманула: The Ladybird browser is replacing C++ with… Swift

«-пентагон предлагает форматировать все винты! -этим солдафонам дай только что-нибудь отформатировать!» (с)

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