LINUX.ORG.RU

Corrode, проект транслятора из C в Rust, получил финансирование Mozilla

 , corrode, , ,


3

8

Джеймс Шарп (James Sharp), отметившийся ранее в проекте X.org, в начале мая 2016 начал разработку проекта Corrode, целью которого является трансляция программ, написанных на C, в исходный код на Rust. Corrode написан на Haskell и распространяется под GNU GPLv2.

На текущий момент проект обзавёлся сообществом, научился транслировать некоторые программы и обрёл первые ближайшие цели и ориентиры: трансляция неподдерживаемых программ на C в Rust. В качестве субъекта тестирования был выбран исходный код CVS — давно устаревшей, но ещё используемой, системы контроля версий. Разработка и поддержка CVS была остановлена в 2008 году, а первая до сих пор не закрытая remote-уязвимость была обнаружена в 2012 году.

Джеймс рад сообщить, что он получил финансовый патронаж Mozilla, и как минимум на ближайшие несколько месяцев он может сконцентрироваться на своём свободном проекте. Mozilla рассматривает Corrode не только в качестве полуавтоматического транслятора для устаревшего кода, но и как статический анализатор нового поколения для кода на C.

>>> Подробности

★★★★★

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

Ответ на: комментарий от RazrFalcon

Вы это сейчас серьезно? Вот про это: «If you want to run code on many platforms, go for Posix Threads.»

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

Тогда почему вы выдаете этот список за примеры _серьезного_ использования Rust-а?

А какое использование считается серьезным и почему именно такое? Вот обзор, где люди говорят, что пишут на Rust проекты 100+ kLoC на работе. Почему это не серьезно?

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

А мне довелось попользоваться более свежими версиями Java с нормальным Collections API, где не надо на каждый чих передавать пары итераторов и нет таких невыразительных идиом, как erase-remove.

При этом в C++ полно ретроградов, которых даже работа с парами итераторов и erase-remove не устраивает. Ну и, поскольку, C++ развивает совсем по другим правилам, чем Java, то в стандарте C++ не будет многих вещей, которые есть в менее ретроградских языках.

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

Сравните её с растовской и всё станет на свои места.

Если бы это было (мне) очевидно - вопрос не задавал. Про строки тоже можно было не повторяться.

у раста есть юзабилити
в разы больше возможностей

Эмоции.

идентичная работа на всех ОС

И тут к С++ будут конкретные претензии? И в расте std::os не просто так имеется.

отсутствует UB

Плохо, да. Но это «весь язык» такой. Претензия уровня «в джаве в стандартной библиотеке везде исключения».

легкая расширяемость посредством трейтов.

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

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

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

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

Потому, что речь идет о технологических вещах. И точка зрения бизнеса на «серьезное использование» может сильно отличаться от точки зрения разработчика.

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

У cppstd нет даже работы с fs.

Ну в расте есть, хорошо. Вот только всё равно имеются всякие штуки типа walkdir, filetime и и т.д. Не иначе как от любви к велосипедостроительству. Или всё-таки чего-то не хватает?

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

И когда в стандарт затащат filesystem, то есть ощущение, что возможностей там побольше будет.

В каком месте?

В разных. Коллекций, например, меньше. Если что, я ничего не говорил о необходимости «недостающего».

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

option (есть в бусте, но кривой/небезопасный)
fs (path, file, etc.)

Справедливости ради, вот-вот (в C++17) завезут, а первый начиная с какой-то TS уже лежит в experimental.

result (чуть менее чем полностью нереален под плюсами)

Насколько я понял, в расте так Either называют? В плюсовом std его действительно нет, но непонятно, в чём нереальность — разве что неудобство в связи с отсутствием паттернмэтчинга.

строки

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

кроссплатформенный доступ к аргументам CLI, а не указатель на char, который может содержать что угодно

А под какими платформами с этим возникают проблемы?

нормальный print, а не убожество типа iostream и не грабли типа printf.

Это уже сугубо вкусовщина.

Ну и еще 100500 претензий, но они решаются только сменой языка. Типа удобных tuple, enum

А чем плох enum class? Косяки сишных перечислений исправлены, компиляторы умеют ругаться, если в switch по значению такого перечисления указать не все варианты.

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

Эмоции?

Да. «Есть юзабилити» или «в разы больше возможностей» - это именно эмоции.

«Нет удобныx каналов» - это уже нормальная претензия. Из коробки и правда нет.

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

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

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

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

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

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

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

Почти всё.

Тогда у тебя какая-то другая реальность. Мну же как акын - про что увидел, проезжая на «ишаке», про то и спел.

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

Нет. Вы что-то себе вообразили.

Тезиса, на самом деле, всего два:

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

2. Обозвать STL говном легко. Объяснить почему это так — гораздо сложнее. А вам, похоже, очень сложно понять, почему STL такой. И почему в Rust, пока, возможно по другому.

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

enum в терминах Rust - это ADT.

и собственно что?

И собственно не стоит сравнивать его с enum class - это разные вещи.

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

в этом тоже виноват С++?

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

ну что тут сказать... не пользуйся софтом написаным на С++. выкинь его, это всё тлен и ненужно.

Слышал байку про улицу, которую перевели на левостороннее движение?

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

Сам именно на расте писать не собираюсь, но смена ЯП для прикладных программ с чего-то же должна начинаться.

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

В плюсах точно такая же

Расширяемость стандартных классов. Я не могу просто так взять и добавить новый метод в std::vector.

Но это «весь язык» такой. Претензия уровня «в джаве в стандартной библиотеке везде исключения».

Ну так людям не понятно почему я выбрал rust, а не прекрасный c++.

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

В std, понятное дело, нет и не будет.

Нет - это понятно, но почему не будет? CSP и сам по себе рулит, и Go ему рекламу сделал.

Не в std, например, вот или вот.

Objectizer слишком велик. Boost.Fiber - на первый взгляд не вижу в нем операции ожидания нескольких каналов (оккамовский ALT).

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

Вот только всё равно имеются всякие штуки типа walkdir, filetime и и т.д.

В том то и дело, что rust стараются как можно больше выкинуть из std, ибо можно легко подключить нужное через cargo. В с++ такое невозможно.

даты/времени

Есть. std::time. Умеет она столько же, сколько и cpp версия. Даты нет у обоих.

которые в плюсах имеются

Пару лет как.

Коллекций, например, меньше.

Разве?

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

В с++ такое невозможно.

Невозможно что именно? «Невозможно подключить» или «невозможно легко подключить».

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

вот-вот

Вот-вот и модули завезли, и ranges.

разве что неудобство в связи с отсутствием паттернмэтчинга.

Да.

А под какими платформами с этим возникают проблемы?

Под любой. Кодировка может быть любой.

Это уже сугубо вкусовщина.

Чем? Гугл завален статьями вида «printf pitfalls».

А чем плох enum class?

Тем, что он не может содержать значение, как в rust.

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

В С/С++ используются системные заголовки, польза этого для несистемных программ сомнительная

А вот если ЯП+компилятор поставляется с набором своих, альтернативных, заголовков

повисает хорошо

вообще жесть конечно. неудивительно, что ты страдаешь. думаю что не следует тебе мешать винить в этом С++, должен же быть кто-то, кто будет виноват во всех твоих неудачах.

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

С++ уже показал, как он себя ведет в больших и сложных проектах.

Ага. Показал. Именно поэтому придумали D, Rust и всех остальных убийц.

очень сложно понять, почему STL такой

Я прекрасно понимаю. Но пользоваться им от этого не легче.

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

И я об этом же. Нафантазировали что-то своё, а виноват C++. Нужно хоть немного разбираться в вопросе прежде чем такое писать.

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

Можно подключить только при условии, что автор используется тот-же стиль, что и в std. Ту же модель памяти. Те же контейнеры. Протестировал под всеми ОС и компиляторами.

Примеров таких либ очень мало.

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

Сам именно на расте писать не собираюсь,

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

но не могу ибо..

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

плохим танцорам язык мешал, угнетал их и т.д.

Это Грейдон Хоар плохой танцор? Бгг.

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

Окей, тогда зачем отдельно упоминать result, если он и есть один из простейших ADT?

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

В смысле?

В смысле объема кода.

Ты линкуешься с готовой либой, какая тебе разница, 1KLOC в ней или 25KLOC?

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

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

fs (path, file, etc.)

В расте оно довольно куцее.

any

Любопытно: для чего тебе растовый Any пригодился?

больше бесит не убогость cppstd, а невозможность её расширения.

В каком смысле?

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

Именно поэтому придумали D, Rust и всех остальных убийц.

Спасибо, поржал. Из всех остальных убийц успеха добилась только Java. Ну, отчасти, C# на Windows.

Можно подключить только при условии, что автор используется тот-же стиль, что и в std.

За пределами Qt-шного мира это уже давно так. И с каждым годом становится все лучше и лучше. А Qt-шники должны платить и каятсястрадать.

Протестировал под всеми ОС и компиляторами.

Да, тут уж у Rust-а преимущества просто капец какие :))) Как у неуловимого Джо.

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

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

Походу, дело в том, хочешь ли ты колупаться просто в 1KLOC чужого кода или в 500 строках из 25KLOC чужого кода.

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

В расте оно довольно куцее.

С аргументацией никак?

для чего тебе растовый Any пригодился

Пока не для чего. Но QVarian довольно часто использовал, а это почти одно и тоже.

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

Ну, отчасти, C# на Windows.

Про него лучше не вспоминать. Благодаря ему, под винду на плюсах никто уже не пишет.

И с каждым годом становится все лучше и лучше.

Тем временем языку под 40 лет. Надеюсь еще лет через 10 всё станет совсем хорошо.

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

А разве хороший ЯП не должен помогать их фильтровать?

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

Я недостаточно хорошо знаком с тем как оно работает в паскале, но как взгляд со стороны - есть сомнения, что банальные обёртки типа приведённых в пример «unix, linux, windows, dos» сильно помогут. Могу заблуждаться, конечно, но есть ощущение, что всё это барахло надо постоянно поддерживать в актуальном состоянии.

Этот куть сам превращается в ОС

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

Ими можно теперь пользоваться в программе вообще забив на остальные, линкуясь при этом со всем чем угодно?

Есть ощущение, что вопрос не понимаю, но всё-таки: естественно, если из других библиотек торчат другие типы, то надо что-то делать. А линковка-то тут при чём?

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

Активности фанатов больше, но как только у них наступает лень или кончается время, то кто со стороны поправит недоделки?

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

Ну а то, что сообщество/«фанаты» не всегда работают идеально - так это понятно. Но опять же, это слабо зависит от языка, а популярность наоборот увеличивает шансы.

Паскаль, но так сразу и не вспомню того, кто его именно покупает.

Периодически на рекламу натыкаюсь - значит кто-то покупает.

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

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

А грузить мозг, если речь идёт о изучении нового, дело совсем не лишнее.

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

Благодаря ему, под винду на плюсах никто уже не пишет.

Да, тут давеча Adobe взял и переписал все на C#.

Надеюсь еще лет через 10 всё станет совсем хорошо.

Совсем хорошо не станет. Ибо есть диверсификация, о которой речь шла выше.

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

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

Он за паскаль вообще-то.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.