Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 11.05.25 20:28
Оценка:
Вот, подняли вопрос — раз LLM может писать код по формальным требованиям — то сможет ли справиться с более простой задачей — переводить с одного ЯП на другой. Под переводом подразумевается не буквальная автоматизированная трансляция — а некое "умное" преобразование с учетом нюансов.

Вроде бы задача — намного проще чем писать некие системы с нуля. Бери готовый код и просто переводи.

Ну и ключевая задача, о которой сейчас много споров и почти до мордобоя доходит — это пресловутая идея переписать ядро Линукс с гнилого C на божественный Rust.

Сможет ли LLM? Вроде задача как раз для него.

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

Т.е., получается, нельзя в точности сказать что именно не возможно, показать пальцем. Как только покажешь пальцем — проблема исчезает. Но в целом задача считается не выполнимой автоматизированно.
=сначала спроси у GPT=
Re: Ускользающий элемент
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.05.25 20:34
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Т.е., получается, нельзя в точности сказать что именно не возможно, показать пальцем. Как только покажешь пальцем — проблема исчезает. Но в целом задача считается не выполнимой автоматизированно.


Можно ли взять условный LLVM, и запилить транспиллер из Си в Rust? Думаю, что да. Надо ли это кому? Думаю, что нет.

P.S. Задача более объемная, чем кажется, потому что с точки зрения практической применимости, надо (1) генерировать не слишком уж пессимизированный выходной код (2) надо поддерживать расширения gcc. По крайней мере те, которые активно используются.
Re[2]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 11.05.25 20:50
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Можно ли взять условный LLVM, и запилить транспиллер из Си в Rust? Думаю, что да.


Мы не знаем, скорее всего нет.

Pzz>Надо ли это кому? Думаю, что нет.


Почему же? Посмотреть будет ли работать намного медленнее — или не критично. Опять же — можно на Rust писать как бы с чистого листа — все будет нейтивное. Ведь люди хотят.

Pzz>P.S. Задача более объемная, чем кажется, потому что с точки зрения практической применимости, надо (1) генерировать не слишком уж пессимизированный выходной код (2) надо поддерживать расширения gcc. По крайней мере те, которые активно используются.


Если вообще разрешима.
=сначала спроси у GPT=
Re[3]: Ускользающий элемент
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.05.25 21:02
Оценка:
Здравствуйте, Shmj, Вы писали:

Pzz>>Можно ли взять условный LLVM, и запилить транспиллер из Си в Rust? Думаю, что да.


S>Мы не знаем, скорее всего нет.


С чего бы нет-то? Представь, что Rust — это ассемблер такой...

Pzz>>P.S. Задача более объемная, чем кажется, потому что с точки зрения практической применимости, надо (1) генерировать не слишком уж пессимизированный выходной код (2) надо поддерживать расширения gcc. По крайней мере те, которые активно используются.


S>Если вообще разрешима.


Разрешима.
Re: Ускользающий элемент
От: Silver_S Ниоткуда  
Дата: 12.05.25 07:59
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Вот, подняли вопрос — раз LLM может писать код по формальным требованиям — то сможет ли справиться с более простой задачей — переводить с одного ЯП на другой.

S>... переписать ядро Линукс с гнилого C на божественный Rust.
S>Сможет ли LLM? Вроде задача как раз для него.

А разве уже появился такой ИИ, который смог бы хотя бы переименовать функцию в проекте, в котором больше 50 тыс. строк и так, чтобы вероятность ошибки была меньше 0.001 ?
Re[3]: Ускользающий элемент
От: Anton Batenev Россия https://github.com/abbat
Дата: 12.05.25 08:47
Оценка: :)
Здравствуйте, Shmj, Вы писали:

S> Опять же — можно на Rust писать как бы с чистого листа — все будет нейтивное. Ведь люди хотят.


"Вот эти люди, они сейчас с тобой в одной комнате?"
Re[3]: Ускользающий элемент
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.05.25 08:53
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Почему же? Посмотреть будет ли работать намного медленнее — или не критично. Опять же — можно на Rust писать как бы с чистого листа — все будет нейтивное. Ведь люди хотят.


Кажется, что не только хотят, но и делают — Redox. Чем не устраивает, зачем обязательно переписывать Линукс с кучей легаси?
Re[4]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 12.05.25 09:12
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Если вообще разрешима.

Pzz>Разрешима.

Там же должна сохраниться и философия Rust — где возможно. А с этим сложнее.
=сначала спроси у GPT=
Re[4]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 12.05.25 09:20
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Кажется, что не только хотят, но и делают — Redox. Чем не устраивает, зачем обязательно переписывать Линукс с кучей легаси?


Ну если это бесплатно можно сделать автоматизированно — то почему нет? Единая экосистема.
=сначала спроси у GPT=
Re[4]: Ускользающий элемент
От: Silver_S Ниоткуда  
Дата: 12.05.25 10:49
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Можно ли взять условный LLVM, и запилить транспиллер из Си в Rust? Думаю, что да.

S>>Мы не знаем, скорее всего нет.
Pzz>С чего бы нет-то? Представь, что Rust — это ассемблер такой...

Если бы можно было сделать простой конвертер из Си в Rust, чтобы воспользоваться статическим анализатором из Rust (отловить в compile time ошибки работы с памятью). То тогда можно было бы написать такой анализатор и для Си. Или нет? Если бы можно было сделать автоматически, то зачем эти ключевые слова из Rust для управления памятью?
Re[5]: Ускользающий элемент
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.05.25 10:52
Оценка:
Здравствуйте, Silver_S, Вы писали:

Pzz>>С чего бы нет-то? Представь, что Rust — это ассемблер такой...


S_S>Если бы можно было сделать простой конвертер из Си в Rust, чтобы воспользоваться статическим анализатором из Rust (отловить в compile time ошибки работы с памятью). То тогда можно было бы написать такой анализатор и для Си. Или нет? Если бы можно было сделать автоматически, то зачем эти ключевые слова из Rust для управления памятью?


Вопрос был в том, можно ли автоматически превратить работающий код на Си в работающий код на Rust. Ответ: да, можно.

Но это не значит, что можно автоматически превратить код на Си в safe код на Rust.
Re: Ускользающий элемент
От: alpha21264 СССР  
Дата: 12.05.25 13:48
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну и ключевая задача, о которой сейчас много споров и почти до мордобоя доходит — это пресловутая идея переписать ядро Линукс с гнилого C на божественный Rust.


S>Сможет ли LLM? Вроде задача как раз для него.


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

Ну и чё? Похоже это на "задачу как раз для LLM"? По моему, не очень.

Течёт вода Кубань-реки куда велят большевики.
Re[6]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 12.05.25 14:22
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Вопрос был в том, можно ли автоматически превратить работающий код на Си в работающий код на Rust. Ответ: да, можно.


Пока я не уверен в этом. Чтобы все 1.5 Гб кода линукс ядра заработали?
=сначала спроси у GPT=
Re[2]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 12.05.25 14:24
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Божественность Rust-а связана с тем, что он заставляет программиста гораздо более подробно описывать свои намерения.

A>Миссионеры Руста считают, что таким образом можно снизить количество ошибок.

Но вообще для начала хотя бы на небезопасном Rust переписать. Он так же имеет преимущества перед C.
=сначала спроси у GPT=
Re[3]: Ускользающий элемент
От: alpha21264 СССР  
Дата: 12.05.25 14:29
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, alpha21264, Вы писали:


A>>Божественность Rust-а связана с тем, что он заставляет программиста гораздо более подробно описывать свои намерения.

A>>Миссионеры Руста считают, что таким образом можно снизить количество ошибок.

S>Но вообще для начала хотя бы на небезопасном Rust переписать. Он так же имеет преимущества перед C.


1) Какие он имеет преимущества? За счёт чего?
2) Я подозреваю, что проблемы переписывания ровно такие же.

Течёт вода Кубань-реки куда велят большевики.
Re[4]: Ускользающий элемент
От: Shmj Ниоткуда  
Дата: 12.05.25 15:00
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>1) Какие он имеет преимущества? За счёт чего?


Да, даже небезопасный (unsafe) Rust в ряде аспектов может быть лучше C, несмотря на то, что он отказывается от основной "фишки" безопасного Rust — гарантированной безопасности памяти. Вот ключевые моменты, где unsafe Rust может выигрывать у C:

✅ 1. Строгая система типов
У Rust даже в unsafe коде остаётся гораздо строже выраженная система типов, чем в C.

Например, отличия между &T, &mut T, *const T, *mut T явно выражены, и вы не сможете случайно передать *mut туда, где ожидался &.

✅ 2. Более современный компилятор
Компилятор Rust (rustc) проводит более строгий анализ кода, чем типичный компилятор C.

Даже в unsafe блоках остаются некоторые проверки (например, инициализация переменных, сроки жизни, переменные после move и т.д.).

✅ 3. Поддержка безопасного обрамления (safe wrappers)
Вы можете изолировать unsafe участки в чётко ограниченных местах и предоставить безопасный API, тогда как в C весь код потенциально небезопасен.

Это делает unsafe Rust более контролируемым и позволяет постепенно обертывать низкоуровневый код безопасными абстракциями.

✅ 4. Оптимизации и контроль без UB
Rust по умолчанию не допускает неопределённого поведения (Undefined Behavior) в безопасном коде, и даже unsafe должен быть корректен.

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

✅ 5. Удобные макросы, системы сборки и экосистема
cargo, crates.io, #[macro_use], derive-макросы и т.д. делают работу с unsafe Rust намного продуктивнее, чем с "голым" C.

✅ 6. Более строгий контроль над владением
Даже в unsafe коде вы можете (и должны) использовать систему владения, чтобы избежать двойного освобождения, утечек или гонок.


A>2) Я подозреваю, что проблемы переписывания ровно такие же.


Возможно.
=сначала спроси у GPT=
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.