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)

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

Rust не более системный чем С++

Допустим, и?

А зачем

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

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

Я ответил на вопрос, который ты задал.

«Сэр, не подскажите ли, где мы находимся? — Вы находитесь на воздушном шаре» (с)

Это к тому, что отвечать можно сильно по-разному.

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

К тебе в данном случае это относится еще в большей степени.

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

Да, мы, к сожалению, находимся во Вселенной, где есть фанб^Wлюди, не осилившие теорему Гёделя

Очевидный факт.

верящие, что некая «магическая система типов»© защитит их от собственного несовершенства

Очевидная проекция.

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

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

Молодец. Теперь можешь прочитать последнее предложение новости ещё раз.

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

напиши на хаскеле что-то уровня божественной pvs-studio

Это, пожалуй, надо приберечь для цитатника.

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

Случись подобное c «резидентом Сколково» с Роснано в роли спонсора, тут бы уже было 5 страниц комментариев в духе: «Распил! Откат! Котлета!». Но это же святая Мозилла, разве они будут таким заниматься?

Да, налицо двойные стандарты.

Но я предлагаю лучше обсудить, почему автор выбрал Rust, а не, скажем, D, и насколько целесообразно написать подобный транслятор с C и/или C++ на D. Это интереснее, чем про распилы и откаты. А автор пусть пилит то, что выбрал, его право.

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

А так - напомню, мы находимся в Вселенной, где Rust считается безопасным языком.

Во-первых, не «мы», а «вы». Во-вторых, Rust безопасен, потому что на нем ничего толкового не написано? Превью servo, насколько я помню, знатно выпадало с 11-м сигналом.

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

какие-то мелкие вещи видимо переводиться будут
но большие проекты вряд-ли

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

Да, налицо двойные стандарты.

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

почему автор выбрал Rust, а не, скажем, D

Это как раз понятно - D не взлетел, а у Rust по крайней мере есть шансы.

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

Допустим, и?

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

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

Я сравнивал проекты на С++ и на хаскеле, кстати, а где они.

anonymous
()

Похоже на распил денег. Нереализуемый проект с непонятной целью. Можно код из Rust-а перевести в C, но наоборот? Бред какой-то.

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

Очевидная проекция.

Очевидный садово-поливальный камуфляж.

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

мы находимся в Вселенной, где Rust считается безопасным языком.

Во-первых, не «мы», а «вы»

А вы с GoodRiddance из одной Вселенной или из разных?

Превью servo, насколько я помню, знатно выпадало с 11-м сигналом.

Но ведь Servo наполовину состоит из Си++-кода.

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

то, что он «системный», совсем не ограничение для написания такого рода продуктов

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

Я сравнивал проекты на С++ и на хаскеле, кстати, а где они

Не знаю про хаскель, а на окамле трансляторов-анализаторов много. На крестах либо старое наследие, либо когда хотят чтоб было быстро (как LLVM).

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

Мне тоже кажется, что приличная трансляция невозможна

Недохелловорд

int main (void)
{
return 0;
}

транслируется в

fn main() {
let ret = unsafe { _c_main() };
std::process::exit(ret);
}

#[no_mangle]
pub unsafe extern fn _c_main() -> i32 { 0i32 }

Что-то сложнее транслируется, но rustc результат трансляции уже не переваривает.
Ну и до кучи:
На С после strip размер 6272
На rust после strip 331000
Не такой уж жирный рантайм у rust, что уже очень интересно.

но речь шла о мотивах.

Лично мне мотивы не очень интересны. Если пишет на haskell, значит будет на haskell.
Это я так, просто мимо прошёл, не для спора, или ещё чего либо.

imul ★★★★★
()

трансляция программ, написанных на C, в исходный код на Rust.

Corrode написан на Haskell

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

Можно код из Rust-а перевести в C, но наоборот? Бред какой-то.

Можно написать безопасный рантайм для приворачивания к объектникам, скомпилированным из .c?

imul ★★★★★
()

Джеймс Шарп (James Sharp), отметившийся ранее в проекте X.org

я всегда говорил, что Хorg - говно, внутренности которого могут нравится только писачам на всяких эзотерических языках.

трансляция программ, написанных на C, в исходный код на Rust. Corrode написан на Haskell

Такое мощное комбо из ненужно. Казалось бы, есть шланг, уж если так сильно хочется из С получать ржавый, возьми шланг! возьми шланг, встань и иди! Господь исцелил тебя!

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

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

Но в отличии от евангелистов Лиспа они не набегают в чужие темы ;)

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

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

(шепотом)шлааааанг. шлааааанг. скажите ему про шланг.

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

Если он не выходит по ошибке при UB, то это неправильный транслятор.

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

такие вещи, как целочисленное переполнение и выходы за пределы векторов?

Целочисленное переполнение не выполняется, поведение при переполнении определено как wrap as twos-complement. Выходы за пределы массива проверяются.

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

s/Целочисленное переполнение/Проверка на целочисленное переполнение/

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

Ты сам-то его API пользовался или так, на ЛОРе услышал, и решил, что твои советы нужны?

Я вот с language-c/language-c-quote немного работал, и это весьма взрослая либа.

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

Как же дерзко написано, во Вселенной, мол. И даже если пролетит возле черной дыры?

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

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

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

И защита нужна не от несовершенства, а от тупых или не очень ошибок, приводящих к сегфолтам, перезаписыванию памяти и прочим remote code execution.

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

я больше того скажу: вот все эти borrows в расте - они в Си на уровне документации описываются. например в документации Gtk прямо пишут про то, какие параметры забирают ownership у callerа. чуваку придется зашаривать вручную каждую либу.

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

Сборки мусора нет

Rust это не С, там и работа с памятью безопасная, и руками выделять память обычно нет нужды.

декларативности нет

И духовности, и православия. А все знают, что без этого ну никуда.

читаемость тяжелая

Ну уж не по сравнению с хаскелем.

ну и ради чего это?

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

а на окамле трансляторов-анализаторов много

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

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

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

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

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

Спасибо!

Выходы за пределы массива проверяются.

Пребывал в уверенности, что в release mode этих проверок просто нет. Иначе это же не такой уж и маленький performance penalty...

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

Оптимизатор во многих случаях может эти проверки выкинуть. Я когда декодер HDR писал, замена [] на get_unchecked() дала немного. В конце-концов я распараллелил декодирование и выкинул get_unchecked().

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

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

Так, повторюсь, для чего выбирать rust, если на окамле или хаскеле задача решается проще (а маргинальности у них примерно порвну :D)?

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

На многоядерных процессорах мой декодер работает быстрее чем декодеры из stb_image и фотошопа, и гарантированно безопасен.

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

не такой уж и маленький performance penalty

О(1).

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

Так, повторюсь, для чего выбирать rust, если на окамле или хаскеле задача решается проще (а маргинальности у них примерно порвну :D)?

Согласен, GC сильно облегчает работу. Генератор Rust биндингов к COM-интерфейсам и прочему win-API, я писал на F#.

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

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

На Rust это придется писать с нуля, а для Haskell есть готовая либа. Да и зачем писать _этот_ транслятор на Rust?

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

Не понятна мотивация автора подобного инструмента.

Что тут непонятного? — «Джеймс рад сообщить, что он получил финансовый патронаж Mozilla» :-) Просто Джеймс, видимо, нормальный человек, которому хочется кушать и проводить время не только перед замусоленной клавиатурой в наушниках, бесконечно бодаясь со всякими копирующими конструкторами и прочими прочими SFINAE, но ещё и радоваться другим аспектам своей жизни, для чего, собственно, почти всегда нужны денежки :-)

anonymous
()

Вот есть у нас к примеру gtk(написана на c). Сможет ли данная штука пересобрать код на rust, при чём так чтобы это дело продолжило работать? api трогать нельзя, иначе прикладные программы не заработают. Можно ли влезть в логику работы функций? Не получится ли так что переведённый код будет чуть более чем полностью состоять из unsafe блоков?

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

Быстрее бы вымерло это Си и ЦПП

Это такая традиция на ЛОРе - первый комментарий к новости обычно от идиота.

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

«Джеймс рад сообщить, что он получил финансовый патронаж Mozilla»

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

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

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

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

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

Можно предположить, что унылые дурачки с пустыми карманами застиранных джинсов считают, что мир крутится вокруг какого-нибудь параллельного программирования как самоцели :-) Казалось бы, причём тут деньги :-) Но ведь то унылые дурачки, что с них взять :-)

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

Казалось бы, причём тут C++, когда речь шла о мотивации работы над транслятором C -> Rust :-) Ты и тут свой цепепе прилепил :-) Лол :-)

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

Rust сложнее чем окамл за счет отсутствия gc, т. е. слежения за лайфтаймами

А за ними не надо следить, за ними компилятор следит.

на окамле или хаскеле задача решается проще

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

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

На Rust это придется писать с нуля, а для Haskell есть готовая либа.

https://github.com/KyleMayes/clang-rs

Да и зачем писать _этот_ транслятор на Rust?

Чтоб его писал не один хаскелист just-for-fun, а было сообщество растоманов, которые бы принимали участие в его развитии. Т.к. очевидно, что такой проект должен быть рассчитан именно на них.

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

Казалось бы, причём тут деньги

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

А вот транслятор с C в Rust и деньги... Эту мысль развить сможете? Смайликов хватит?

Казалось бы, причём тут C++

Не вы ли приплели сентенцию "копирующими конструкторами и прочими прочими SFINAE" в данный тред?

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.