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)
Ответ на: комментарий от sabacs

Ты смотрел старые фильмы? Читал стрые книги? В них много сказано о том, как будет выглядеть будущее. Ни одна пока не угадала. Будущее вообще обычно не такое, каким его представляют.

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

Динамика, понимаешь?

Чего-же тут непонятного. VLM-ка со статическими весами не может знать всего. Поэтому её запускают в цикле взаимодействия с окружением и она себе записывает что не сработало, что сработало, что попробовать ещё. Получается агент использующий in-context learning, в общем.

Доступа к Claude у меня тоже нет. Grok 4.20 говорит

You’re looking at normal chat, not system messages CHAT_MSG_SYSTEM only fires for yellow/orange system messages. Regular /say, party chat, guild chat, whispers — none of them trigger it.

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

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

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

Ты же видишь какой бред оно несет? Мы сохраняем данные в переменную SAtest. И она уже прописана в файле. Если мы добавим SAtestDB, что изменится?

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

Никогда с WoW-овскими аддонами не работал. А, оно ещё и переменную в файле переименовало.

В .lua теперь SAtestDB = SAtestDB or {}, и в .toc добавлена эта строка.

Выглядит логично. Если нужно сохранить переменную между сессиями добавляем её в SavedVariables. В документации на .toc это есть.

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

За использование printf в C++ нужно руки отрывать.

А почему? надо write(fd) юзать?

Если я напишу operator<< для std::ostream, то это будет автоматически поддерживаться для разных типов ostream-ов. Не обязательно для std::cout.

  1. Речь шла про std::cout

  2. Ты используешь iostreams в прошакшене?

ХЗ, история не знает сослагательного наклонения.

Я и не говорю, что моё сетование чо-то изменит. Просто сетую. Сетую, что в C++ всегда так: что ни решение, всё рак. Рак убивабщий.

Когда я изучал С++ в начале 1990-ых, то cout там уже был. Как и рекомендации не использовать printf.

На это я и сетую.

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

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

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

Решений есть два, но чтобы их знать, нужен опыт работы. 1) Сделать задержку инициализации переменных после входа в игру. Секунды две хватит. 2) Инициализировать переменную в самом фрейме, когда он точно прогрузится:

local eventFrame = CreateFrame("Frame")
eventFrame:SetScript("OnEvent", function(self, event, text)
    local SAtest = SAtest or {}
    table.insert(SAtest, text)
    print("Пошло поехало: " ..text)
end)
eventFrame:RegisterEvent("CHAT_MSG_SYSTEM")

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

Вот тебе второй пример: https://github.com/Vladgobelen/NSQCuE/blob/main/global-mouse-hook/src/lib.rs

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

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

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

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

Это надо ему дать все органы, мотивацию, самосознание, он должен иметь тот же опыт.

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

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

Да не выяснит он. Квену внешнюю память уже дали, очень спасает. Но тоже не всегда.

Чтоб выяснить, слишком много вариантов «что могло пойти не так». Ты готов ждать часы, дни? Один тест, я вот сейчас засек, займет у тебя больше 32 секунд. Чтобы провести один тест, надо перезагрузить весь интерфейс. Полная перезагрузка 32 секунды. Плюс тест. А ошибок нету - нет от чего оттолкнуться. Это не ошибка, которую можно выявить отладкой.

И чем тебе захват экрана то поможет? Что ты там смотреть собрался? На игру? Это чисто работа с текстовой информаций за капотом игры.

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

  1. Метод загрузки настроек

  2. Метод принудительной загрузки настроек над методом загрузки настроек

  3. Метод форсированной принудительной загрузки настроек над обоими прошлыми методами.

Кадый следущий был больше и сложнее предыдущих. Ни один не заработал, как ты понимаешь.

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

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

И чем тебе захват экрана то поможет? Что ты там смотреть собрался?

На print-debugging. Grok там ещё отладочных сообщений надобавлял. Я не стал копировать.

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

Естественно, всех знаний не впихнуть, поэтому сейчас впихивают умение решать задачи (отладка, планирование, и т.п.).

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

Тебе нужно попробовать Amazon Kiro - будешь удивлен, там есть бесплатная подписка. DeepSeek же действительно тупенький.

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

Странно. Даже бармены после курсов «программирование за 21 час» устраиваются. Было бы желание.

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

Я тут как то зашел на hh, полистал вакансии «Без опыта». Пример одной из:

Опыт работы:
- с Python фреймворками асинхронными и синхронными (Django/FastAPI / Flask);
- с Python Core и встроенной библиотекой;
- с асинхронным программированием (AsyncIO);
- с написанием юнит-тестов;
- с ORM, SQLAlchemy, DjangoORM;
- в написании SQL запросов;
- с Pydantic или Marshmallow;
- с SQL базами данных (PostgreSQL);
- с Kafka / RabbitMQ;
- с No-SQL хранилищами (MongoDB, DynamoDB, Redis);
- с облачными сервисами (AWS / Azure / GСP);
- с Docker;
- с Pytest;
- с GNU/linux;
Знание принципов CI/CD;
Английский B1 и выше.

Это, если что, без опыта, напомню.

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

За использование printf в C++ нужно руки отрывать.

А что использовать вместо него? Я вообще в плюсах не шарю, просто интересно.

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

У вас какой-то свой термин «zero cost», не такой, как в C++.

Эээ, вроде давно уже известно, https://godbolt.org/z/EGMo1sPW9 - в расте вот эквивалентно сырым указателям (с точностью до перестановок пары команд)

Он там потому, что программировать на исключительно safe Rust-ов невозможно чисто теоритически.

Не только и не столько поэтому, если вообще не самая последняя причина

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

У меня довольно специфичные навыки без винды последние 20 лет и без завершенной вышки. Ведь «быть не таким как все» - это ж так круто, угу..

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

Если я напишу operator<< для std::ostream, то это будет автоматически поддерживаться для разных типов ostream-ов. Не обязательно для std::cout.

Я отказываюсь в своем коде на С++ использовать вендор-лочащие фичи языка. Если кто-то выступает за то, чтобы в С++ использовать вендор-лочащие фичи С++, то ему бы стоит задуматься, на чьей он стороне.

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

В плюсах же это просто правило - можно соблюдать, можно не соблюдать.

Но оно есть. И если кто-то его не соблюдает или тупо не знает — это его проблема. Никто не обязан клиническому «психу» обивать мягким всю планету. Даже отдельную комнату с мягкими полом и стенами не всем «выдают»...

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

А Rust для «растаманов» ;), похоже - та самая «планета с мягким покрытием»... Но ведь Homo, если «ну вот такое оно!», всегда найдёт возможность «убиться» - физически ли, или в своей «программной инкарнации», пописывая программки - не суть...

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

Инструмент это продолжение твоего разума

Верно! Только вот разум у всех разный... ;))

Некоторым, для того, чтобы «откровенную хрень не упороть», нужен вон Rust вместо C/C++ ;P ;))

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

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

Некоторым, чтобы не лишиться пальцев и рук, нужны защиты на УШМ/Пилораму, да?

Это просто инструмент. Есть менее удобный, есть более удобный - все.

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

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

А при чем тут обязанность?

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

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

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

Нормальная разработка и правда ближе к этому. Потому что это проектирование системы. Само написание кода занимает процентов 10 - не более.

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

А почему?

Потому что printf-ам всегда было начхать на типизацию.

Потому что для простых вещей там нужно делать странные телодвижения. Например, что в форматной строке нужно указать, чтобы отобразить std::uint64_t? А что для std::size_t?

надо write(fd) юзать?

Сперва нужно договориться о задаче. Если речь о просто форматированном выводе текстовой информации, что write(fd) вряд ли подойдет.

Речь шла про std::cout

Если мне нужно вывести экземпляр собственного типа в std::cout, то я определяю operator<< для std::ostream и, внезапно, мой тип можно выводить и в другие виды потоков – хоть в файл, хоть в сокет, хоть в разделяемую память.

Ты используешь iostreams в прошакшене?

Случается.

Сетую, что в C++ всегда так: что ни решение, всё рак.

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

Во-вторых, я буквально вчера столкнулся с отличным примером. Разбирался с темой аллокаторов, чтобы заставить работать один хитрый самодельный контейнер с разными аллокаторами. И долго не мог вкурить почему для std::pmr::polymorphic_allocator (как, впрочем, и у std::allocator) тип propagate_on_container_swap – это std::false_type. И почему для того же polymorphic_allocator метод select_on_container_copy_construction возвращает не копию исходного аллокатора. На первый взягляд все это выглядит странно и нелогично. Но вот когда в достаточной степени погрузишься в проблему, то картинка меняется.

Так что для меня однозначные утверждения о том, что «в С++ все рак» больше говорят о том, кто такое утверждение высказывает, чем о самом C++.

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

А что использовать вместо него?

Если говорить об обычной разработке под десктоп или сервер-сайд, то std::ofstream и fmt::format/print. Если есть возможность сидеть на самых свежих компиляторах, то std::print/println (хотя если в проект уже затянули fmtlib, то можно и без std::print обходиться).

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

У вас какой-то свой термин «zero cost», не такой, как в C++.

Эээ, вроде давно уже известно

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

Так вот, насколько я помню, в C++ zero cost означает не отсутствие накладных расходов.

Не только и не столько поэтому, если вообще не самая последняя причина

Аминь.

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

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

Я отказываюсь в своем коде на С++ использовать вендор-лочащие фичи языка. Если кто-то выступает за то, чтобы в С++ использовать вендор-лочащие фичи С++, то ему бы стоит задуматься, на чьей он стороне.

У меня есть сомнения, что это написал трезвомыслящий человек.

Могли бы раскрыть что есть «вендор-лочащие фичи языка»?

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

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

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

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

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

Сейчас изрядный процент ПО можно разрабатывать вообще не вспоминая ни про Си, ни про C++. Даже если кому-то в условном Python-е или Erlang-е не хватает производительности, то расшить узкое место через FFI можно на том же Rust-е.

Однако, там, где для C++ все еще осталось место, важны как раз небезопасные качества C++. Например, возможность использовать union-ы или создание объектов внутри байтовых буферов через placement new (и даже, как частный случай этого, делать что-то вроде new(this) another_type{}).

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

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

eao197 ★★★★★
()

лиса тоже свободная, ну ладно пусть будет, больше лучше

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

Могли бы раскрыть что есть «вендор-лочащие фичи языка»?

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

Плюсовый код, который полагается на элементы в этом списке – завендорлочен на С++. Тут младоязыки наступают, и смешно смотреть, как программисты С++ пытаются огородиться всеми доступными способами. Код на С++ наоборот должен быть открытым и дружелюбным.

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

если вам нужно разделать свинную тушу, то вам нужны острые ножи.

…и единственный производитель острых ножей поставляет их с эргономичной подставкой, где лезвия торчат наружу (и с упаковкой пластыря в комплекте). Ну да, тут делать особо нечего.

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

Могли бы раскрыть что есть «вендор-лочащие фичи языка»?

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

архинеть_не_встать.png

Скажите, а ваш код где-то в открытом доступе есть? Хочется приобщиться к прекрасному.

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

Мы можем сколько угодно упражняться в остроумии (хотя я тут сразу сдамся), но смысл от этого не поменяется. ИМХО, C++ сейчас нужен только там, где его небезопасные возможности становятся ключевыми преимуществами. Посему ругать C++ за то, что он небезопасен, нет смысла.

А если кому-то эта небезопасность мешает, то альтернатив целая куча, необязательно продолжать держаться за C++.

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

Могли бы раскрыть что есть «вендор-лочащие фичи языка»?

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

архинеть_не_встать.png

Скажите, а ваш код где-то в открытом доступе есть? Хочется приобщиться к прекрасному.

Что ж так полыхнуло-то?..

Давеча нейронке сказал сделать рендерер шейдеров формата Shadertoys, но на голом VT1, без всяких Х11 и Вейландов. Пишу, сделай там REST-обработчики для пинга, стопа, и загрузки текста шейдеров, предположим библиотекой restinio. Нейронка попыталась в restinio, не смогла, решила взять голый asio и забульбенила REST-обработчики на нем. Знал бы заранее, сказал бы взять libuv.

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

Что ж так полыхнуло-то?..

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

Так что на счет кода? Можно что-то посмотреть?

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

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

В одном там комитете сейчас заплакали создатели модулей, концептов и корутин.

Код на зиге выполняется быстрее кода на С++. Нет у С++ никаких небезопасных преимуществ.

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

Так что на счет кода? Можно что-то посмотреть?

Непонятно, что вы попытаетесь в моем коде найти.

https://github.com/0x3f00/oled-saver-win – там build.zig альтернатива CMake-портянке, вдруг кому будет полезно.

Обычно я много пишу в декабре, в период AoC. В этот период, собственно, от С++ мне нужны только контейнеры С++98.

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

там build.zig альтернатива CMake-портянке

Ради 69 (совпадение?! Не думаю!) строк устанавливать ненужные мегабайты ненужного Zig?
Спасибо, я лучше tup возьму.

Тебе приплачивают за пиар Zig чуть ли не в каждом треде, что ли?
Поднадоело уже, честное слово.


https://gittup.org/tup)

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

Ради 69 (совпадение?! Не думаю!) строк устанавливать ненужные мегабайты ненужного Zig? Спасибо, я лучше tup возьму.

Эмм… тут неглупые люди (я) выбирал между системами сборки и остановился на зиге. Судя по размеру, дистрибутив tup не содержит компилятора С и С++. И не содержит никаких нужных библиотек, в частности, для проекта по ссылке. Это для виндовз сколько получается? 40 гигабайт на MSVC и 10 гигабайт для Windows SDK?

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

и остановился на зиге

А тут почему не получается остановиться?

Это для виндовз сколько получается?

Да вообще плевать.

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

В одном там комитете сейчас заплакали создатели модулей

Модули не решают ни одну из упомянутых в этой теме проблем C++.

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

концептов

К безопасности вообще никак.

корутин.

А эти добавляют еще несколько граблей.

Код на зиге выполняется быстрее кода на С++.

Нисколько не сомневаюсь, что скринсейвер на zig выполняется быстрее такого же на С++.

Да даже Java у Sun-а в свое время регулярно обгоняла C++ по скорости.

Нет у С++ никаких небезопасных преимуществ.

Аминь.

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

Непонятно, что вы попытаетесь в моем коде найти.

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

https://github.com/0x3f00/oled-saver-win

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

в период AoC

AoC – это что?

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

А при чем тут обязанность?

Русский язык для тебя не родной?.. Если так - извини, я не знал. Знай я это заранее, я бы учёл это при написании ответа.

Но если таки родной: слово «обязан» имеет больше одного значения, и в данном контексте это не «обязанность», «это другое!»:)). Любой "Толковый словарь русского языка" тебе в помощь...:)

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