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

А вы попытайтесь. Я же целый вечер потратил вчера (правда безуспешно) пытаясь на пальцах объяснить один абзац из первой главы TAPL здешней аудитории. В конце концов, не мне, так кому-нибудь другому поможете.

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

Речь про _ваши_ разговоры о _вашей_ боли. И о _ваших_ примерах _вашего_ говнокода.

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

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

Ответ прост: никто не предложил лучший вариант.

Вот вам на засыпку: https://github.com/kostya/benchmarks В этих тестах Rust опережает Go с большим отрывом.

+ https://bitbucket.org/ewanhiggs/csv-game

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

же целый вечер потратил вчера (правда безуспешно) пытаясь на пальцах объяснить один абзац из первой главы TAPL

Вот этот TAPL? http://port70.net/~nsz/articles/book/pierce_types_and_programming_languages_2...

(правда безуспешно)

И почему я не удивлён? Вам было бы намного проще объяснять этот абзац (какой, кстати?), если бы вы сами понимали о чём говорите.

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

Ну а если серьезно, то:

  • benchmarks game, я так понял вы о нём говорите, не заслуживает доверия. Его много раз критиковали. В гугл за пруфами.
  • benchmarks game не запрещает линковку сишных либ, что убивает всю идею бенчмарка.
  • benchmarks game не запрещает смену алгоритма, что убивает всю идею бенчмарка.
  • benchmarks game использует GLIBTOP_PROC_MEM_RESIDENT для проверки потребления памяти. Но это мало о чём говорит, ибо важна динамика, которую можно получить через тот-же massif. И даже автор подчёркивает, что это не очень полезная величина:

    By sampling GLIBTOP_PROC_MEM_RESIDENT for the program and it's child processes every 0.2 seconds. Obviously those measurements are unlikely to be reliable for programs that run for less than 0.2 seconds.

    То есть многое зависит от того, как работает и главное запускается прога.
  • Любой бенчмарк - это минное поле. Сравнивать реализации микробенчмарков на разных языках - бессмысленно. Там нюансов будет больше чем кода.
  • Rust использует jemalloc, который аллоцирует дофига памяти. Бенчмарков с системным malloc там нет.
  • В Rust статический стек, в Go динамический.
RazrFalcon ★★★★★
()
Ответ на: комментарий от eao197

Речь про _ваши_ разговоры о _вашей_ боли. И о _ваших_ примерах _вашего_ говнокода.

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

Вот взять акторный фреймворк Женьки:-) Неужели кто-то считает, что там эталонный код? :-) Лол :-)

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

Неужели кто-то считает, что там эталонный код? :-) Лол :-)

Как минимум он на две головы выше твоего.

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

Как минимум он на две головы выше твоего.

Женька, ты? :-) Ко ко :-) Покажи мой код :-)

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

Не важно чья боль и чьи примеры

Важно откуда вы это берете. Одно дело, если бы вы программировали на C++ и знали про боль на собственном опыте. Но ведь вы же говорите, что на C++ не программируете, не так ли?

Неужели кто-то считает, что там эталонный код?

Неужели вы думаваете, что выкладывая код в OpenSource мы боимся того, что кто-то назовет его говном? Лол.

Впрочем, каждый может взять и попробовать, и сделать свои выводы.

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

Rust 1.7 (комментарий)

Вот тут местные фанбои хруста визжали о том, что бенчмарки харошия, просто у сишнегов руки кривыя!

Но это было до того, как колобок при содействии Царя переиейсал фасту.

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

Важно откуда вы это берете. Одно дело, если бы вы программировали на C++ и знали про боль на собственном опыте. Но ведь вы же говорите, что на C++ не программируете, не так ли?

Нет. не важно :-)

Неужели вы думаваете, что выкладывая код в OpenSource мы боимся того, что кто-то назовет его говном?

Думаю, что очень боитесь :-) Ведь ты бы не стал вообще ничего говорить про говнокод других :-) Значит, у тебя есть критерии того, что говнокод, а что не говнокод :-) И, следовательно, в своем проектишке, ты говнокода не потерпишь :-) Что и требовалось доказать :-)

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

Потому, что утечки памяти не нарушают memorysafety!

Очевидно же!

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

Но вот оказия — в benchmark game, за исключением двух примеров, раст жрёт больше памяти, чем Go.
Надеюсь, светочи раста это мигом объяснят.

Тоже мне бином ньютона. У гоу горутины с минимальным размером стека, у раста обычные потоки со стеком в несколько мегабайт. В бенчмаркгеймах соревнуются по скорости, поэтому везде стараются наплодить потоков. Первый же попавшийся исходник (мандельброт) создаёт 20 потоков, если по 2 мегабайта стека на поток уже 40 мегабайт. Это с одной стороны. С другой, проблемы GC начинаются когда объектов в хипе выделено море, несколько раз прошла сборка мусора и теперь вот перед рантаймом стоит дилемма, то ли запустить полную сборку, которая ещё неизвестно, освободит ли чего-то, то ли просто увеличить размер кучи. К бенчмаркингеймам это не относится, там в большинстве задач можно память вообще не освобождать, выделил, сделал работу, завершил процесс.

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

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

И я не знаю почему в каком-то неназванном тесте раст ест больше памяти чем C. Может реализация на C создаёт меньше потоков. Может там другой размер стека, например. Вы вообще не думали, что насчёт экономии памяти в тестах на 5-10 секунд и потреблением меньше 100 мегабайт просто тупо никто не заморачивался? В том же мандельброте можно было уменьшить число потоков с 20 до 4х и получить тот же по времени результат, уложившись в гошные 30 мегабайт, например.

khrundel ★★★★
()

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

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

Думаю, что очень боитесь

Боимся и выкладываем. Снова боимся и снова выкладываем.

Блин, ваша способность пробивать дно просто поражает.

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

Боимся и выкладываем. Снова боимся и снова выкладываем.

В принципе, боитесь, не боитесь - 29 звездочек на Github - результат не впечатляет :-) Не особо то кичился бы :-)

Блин, ваша способность пробивать дно просто поражает.

За тобой в этом не угнаться :-)

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

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

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

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

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

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

Вы так упорно стараетесь меня хоть как-то зацепить

Это не сложно :-)

Даже жаль вас становится, столько усилий и все без толку.

Ну как же, дискуссия же продолжается :-)

Звездочки на гитхабе, звездочки на LOR-е, карма на Хабре — это все, чтоб вы знали, на хлеб не намазывается.

Поэтому и «Джеймс рад сообщить, что он получил финансовый патронаж Mozilla» :-) Не понимаю тогда, почему ты решил обозвать меня улыбчивым дурачком, когда тебе всего то было сказано про главную мотивацию Джеймса - ту, что «намазывают на хлеб» :-) Теперь, когда тебе напомнили про рейтинг на Github, ты заговорил, что рейтинг ничто, а хлеб с маслом - всё :-) Какой забавный :-)

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

Просто же :-) Когда проект становится популярным, он становится экономически привлекательным :-) И такие как Джеймс обретают финансовый патронаж :-) Адепты ассоциируют это со словом «взлетел» :-)

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

Поведайте нам, о чём говорит количество звёзд на гитхабе?

О степени аутсайдерства проекта :-)

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

Ну как же, дискуссия же продолжается

Это не дискуссия, это я прокачиваю скилы по общению с неадекватами. А вы меня пиарите. Забесплатно.

Не понимаю тогда, почему ты решил обозвать меня улыбчивым дурачком

Еще бы. Не понимаете потому, что вы дурачок, хоть и улыбчивый.

когда тебе всего то было сказано про главную мотивацию Джеймса - ту, что «намазывают на хлеб»

Еще раз повторю: скорее всего, вы путаете причину и следствие. Вряд ли Джеймс начал свой проект дабы получить финансирование от Mozilla. Скорее Mozilla решила дополнительно пропиарить Rust выделив небольшую сумму Джеймсу на его проект.

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

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

С этого места поподробнее. Из личного опыта? Или вам опять Рабинович напел?

И такие как Джеймс обретают финансовый патронаж

Скажу вам по секрету: никто просто так деньги никому не дает. За них всегда чем-то придется расплачиваться. Так что мы внешнего финансирования и не ищем, у нас есть свое. Посему и количество звезд не имеет значения.

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

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

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

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

Владеет тот, в «деструкторе» которого вызывается free.

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

Ну я тоже послушал бы о DSL на хаскеле.

вкратце: там можно перегрузить if_then_else, т.е. вообще *все* структуры управления (т.к. там можно лямбды определять локально, и они, емнип, от «настоящих» функций ничем не отличаются)

вот в с++ можно создать переменные _1, _2, ... и перегрузить почти все встроенные операторы так, чтобы _1+3, _1*_2-10, ... выдавали AST, однако тернарный условный оператор x?y:z уже не может быть перегружен, и это большая проблема

например, _1>0 ? _2 : _1+_2+43 не может выдать ОДНОВРЕМЕННО AST обеих веток

и тем более while, for, goto, break, throw, catch... поэтому приличный dsl в с++ не сделать

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

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

Лол. Что за ад творится в удалённых...

Каникулы.

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

том же плохом, негодном benchmarks game

Я бы не стал доверять ничему что написано на benchmarksgame. Например там есть тест «n-body» по которому раст проигрывает С 22.92 к 9.56, хотя алгоритм такой же. Я ради интереса скачал исходники, запустил у себя на машине и получил результат 4.5 к 4.2 (и 4.4 если собирать С код clang-ом). Из какой задницы они достали эти 23 секунды я не знаю, может быть оттуда же взяли и потребление памяти.

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

Владеет тот, в «деструкторе» которого вызывается free

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

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

вот не знаешь ты, как Gtk устроен.

А что незнание устройства какой-то конкретной либы, которую человек никогда в глаза не видел и не пользовался, о нем говорит? О_о
Хейтерство в чистом виде, уже даже без аргументов.

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

Тоже пища на подумать: почему ты считаешь, что ситуация, в которой никто кроме авторов либы и ее адептов не в сотсоянии по сниппету кода понять что тот делает — это хорошо?
В «нормальном» С каждый строит свой собственный велосипед, по своему собственному усмотрению, в зависимости от собственного градуса шизанутости.

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

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

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

и это - библиотека с довольно стройной моделью «кто кем владеет».

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

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

Сабжевый транслятор не предназначен для автоматического переписывания: «Partial automation for migrating legacy code that was implemented in C».

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

и это - библиотека с довольно стройной моделью «кто кем владеет».

Я исключительно рад, что у авторов Gtk есть свое представление о том, как такую модель строить.
Речь о том, что твои нападки отдают пригоревшей задницей и крайне невразумительны в целом.
Незнание того, какая модель управления ресурсами у рандомной библиотеки, не говорит о человеке абсолютно ничего.

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

вот не знаешь ты, как Gtk устроен.

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

наверняка на расте выразительные программы пишешь

Нет. Где я вообще говорил за Раст?

самые умные должны жить в своём загончике, кидать друг в друга какашками

Как ты?

С++

К слову, нынешние апологеты крестов рекомендуют ровно те же модели владения, которые есть в Расте.

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

Раньше была мода такая писать трансляторы из Фортрана. Потом транслировали в С всё подряд, начиная от самородной валы, и заканчивая семейством МЛ. Видать всё перетранслировали. Теперь всё это будем транслировать в Руст.

В параллельной вселенной, между тем, куча писателей пишут трансляторы в яваскрипт; тоже всего подряд, кстати. Они ещё не знают, что лет через 10-15 они будут писать трансляторы из этого самого ява-скрипта во что-то новое, более модное и продвинутое.

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

В JS уже написали (llvm -> emscripten + asm.js), видимо стало скучно, решили Си потранслировать

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

там полно мест, где надо знать документацию

Я видел либу на 20к строк кода состоящую целиком из g_strdup_printf и прочего дерьма, и текло это чудо по 2 мегабайта в минуту. Так что глупо надеятся на то что люди читают документацию.

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

Рустеры - любители ЯП Rust в наивной транслитерации, они же растеры, они же растаманы.

Ну так как насчет возможности переписать ghostscript без выполнения произвольного кода на целевой системе?

Анус Аватарку ставишь?

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

Шок для вас. Ибо вы сравниваете совершенно разные вещи.

Это был пример лаконичного кода. Покажите аналог этого кода на С:

let a = [1i32, 2, -5, 100, -100];
for n in a.into_iter().filter(|x| **x > 0).map(|x| x * 2) {
    print!("{} ", n);
}

// 2 4 200 

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

Цитирую:

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

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

Как будите отнекиваться теперь?

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