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)

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

Да. Где теорему Гёделя о неполноте применять-то? Так пока и не ясно.

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

Технически - да, написано на С.

Технически и Rust никакого нет, сплошной машинный код.

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

типа двусвязного списка

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

Зачем каждый раз писать свой двусвязный список с тонной ошибок, что делают сишники в каждом своём проекте, если можно подключить готовый из репы, который протестирован кучей людей?

То, что на языке можно выразить все эти хаки, разве нельзя назвать «выразительностью»?

Ммм... нет? В моём понимании, выразительность - это возможность легко понимать код. Если он наполнен хаками - его понимать сложно. Хотя любой код на С читать сложно. Поэтому и придуман Rust, в котором вместо -1 и NULL есть Option с Result. Это выразительность.

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

Все сводится к деньгам до тех пор, пока их недостаточно дабы сводить концы с концами. Очевидно, что вы пока этого не понимаете, поэтому для вас мотивация ассоциируется только с финансами.

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

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

Если компилятор отвергнет корректную программу, то это не нарушит безопасности.

На второй день индеец Зоркий Глаз заметил, что одной из стен нет. Это совершенно верно. Теперь перечитываем пост про «вычеркните лишний пункт из 4х».

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

Можно попросить вернуться к обсуждению транслятора C в Rust и сопутствующих вопросов, а не меня? Спасибо.

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

Пусть и с хаками, типа unsafe. Разве это не выразительность?

Но не безопасность.

В моём понимании

Верю, и это прекрасно. Я просто рассказал, что в контексте этого треда я использовал это слово в другом, удобном мне (в контексте обсуждения) значении.

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

Сначала докажите ваше определение «выразительности»

«Выразительность» — способность писать программы, «интересные» в том смысле, любой (существующий на данный момент) тайпчекер находит в ней false positive ошибки.

имеет какой-нибудь практический смысл. Real-life наблюдений недостаточно. Может теорему Гёделя о неполноте применить? Мммм?

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

Какое слово из «вычеркните один пункт из списка неразумных ограничений, что я привёл» непонятно? Можно написать этот список на safe Rust, несколькими способами. А можно дополнить список теорем доказываемых компилятором Rust'а, сделав свой модуль с этим многострадальным списком.

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

Но не безопасность.

При чём тут безопасность? Мы о выразительности и производительности сейчас говорим.

удобном мне (в контексте обсуждения) значении.

И это прекрасно. Но не лучше ли использовать общепринятые термины? Или вы не хотите спускаться со своих академических высот?

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

А можно дополнить список теорем доказываемых компилятором Rust'а, сделав свой модуль с этим многострадальным списком.

Вот это называется «заметать мусор под ковёр».

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

Я совершенно не знаю Rust (даже в глаза не видел), поэтому затрудняюсь ответить, что нужно вычеркнуть. Могу ошибаться, но все перечисленные подходы либо заметают проблему под ковёр (не безопасно), либо являются вариацией на тему регионов (не выразительно).

Полный аналог сишной структуры (c tail-sharing и прочими маняще опасными штуками) сделать всё-таки похоже нельзя.

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

При чём тут безопасность? Мы о выразительности и производительности сейчас говорим.

Разговор начался с того, что предъявы про «быстрый, как сишка и безопасный» несостоятельны. Вот при этом.

Но не лучше ли использовать общепринятые термины?

Ну пусть будет «полнота».

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

мертворожденный урод-мутант.

Вон оно как оказывается.

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

«быстрый, как сишка и безопасный» несостоятельны.

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

We do not intend to be 100% static, 100% safe, 100% reflective, or too dogmatic in any other sense. Trade-offs exist.

- https://www.rust-lang.org/en-US/faq.html#what-are-some-non-goals

Ну пусть будет «полнота».

Очередная муть высосанная из пальца?

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

Вот это называется «заметать мусор под ковёр».

Это. Называется. Вручную. Доказать. Теорему. Что. Всегда. Делают. В. Системах. Интерактивного. Доказательства. Теорем.

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

Разговор перешёл к священным коровам, опять. Всё ясно. Меня устроит, если в следующем раст-треде, куда меня кастанёт по совершенно другому тегу, фанбои будут писать свои обычные лозунги так «без сигфолтов и безопасно*!!!!** Быстрее устаревшей сишки!!!***»

* Не в 100% случаев***,

** Имеются противопоказания

*** В режиме unsafe

**** Точный процент мы не знаем, но он больше нуля!

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

Ок, я просто о другом подумал. Если дополнить формальную имплементацию списка пруфом (скорее всего он будет не на Rust ^____~), то да, всё ок.

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

P.S. Вы выглядите так довольно своей маленькой победой (проистекающей от невнятного объяснения), что это мило ^_____~

Rust fanboys are not the brightest bulbs on the Christmas tree, are they?

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

Я совершенно не знаю Rust

Ладно, повеселились и хватит. Уровень ваших знаний понятен. Держите ваш список: std::collections::LinkedList

За маняще-опасными хвостами, сами знаете куда идти.

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

И почему меня должно волновать ваше мнение?

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

А ваши унылые потуги вида «аааа, а он не 100% безопасный*, ололо», оставьте при себе.

* что нигде и не утвержадось

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

Держите ваш список: std::collections::LinkedList

Первый unsafe на 92й строчке.

Уровень ваших знаний понятен.

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

За маняще-опасными хвостами, сами знаете куда идти.

Разумеется знаю. Но постарайтесь в следующем треде правильно расставлять сноски. Как правильно — см. выше.

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

Первый unsafe на 92й строчке.

И? Что вы хотели этим сказать? Вся std чуть менее чем полностью состоит из unsafe. Дальше что?

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

Все сводится к деньгам до тех пор, пока их недостаточно дабы сводить концы с концами.

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

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

Понимание приходит и уходит, а кушать хочется всегда :-)

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

Считать ты можешь как угодно :-) А факт в том, что автор транслятора безмерно рад тому, что его проект заинтересовал крупного игрока рынка, который готов платить ему реальные деньги :-)

Факт ещё в том, что хотя большинство из присутствующих безмерно были бы рады хотя бы банальным лайкам за бесплатно их сомнительных проектов на каком-нибудь github :-) Но они и этого не имеют :-) А тут у человека не гроши от пожертвований, как у попрошайки, а реальные деньги от корпорации Mozilla :-) Такие дела :-)

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

Вообразили какой-то свой Rust, который не имеет никакого отношения к реальности

Из общих принципов я могу понять, чем он не является — вашим мысленным образцом.

И почему меня должно волновать ваше мнение?

Хороший вопрос приходит не сразу.

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

Наверное чтобы мосты не остались без охраны существ, которые иначе бы умерли с голода.

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

К деньгам всё сводится до тех пор, пока есть желание развиваться как фирма/компания/предприятие

Мосье теоретик?

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

С большой долей вероятности вы путаете причину и следствие.

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

вашим мысленным образцом

Вы еще и мысли читать умеете. Завидую всем сердцем. Смею вас огорчить - я на расте, о Боже, пищу реальные проекты и прекрасно знаком с его ограничениями. Евангелистом я уж точно не являюсь. Но вы пытаетесь убедить меня в обратном. Вот это мне и не понятно.

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

Это вы про себя? И где я спорю? Я пытаюсь понять причину вашего недовольства, а вы сливаетесь постоянно.

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

Ну как бы DSL в основном на Haskell-е делают

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

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

И где я спорю?

О, нигде. Этот тред (и ещё три-четыре в прошлом) — лишь плод моего воображения.

а вы сливаетесь постоянно

Вы первым успели засчитать слив, я проиграл T_____T

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

Почему-то я ни про один не слышал

Это ты у меня спрашиваешь?

Rodegast ★★★★★
()

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

zabbal ★★★★★
()

Значит так. Потом они оттранслируют сам хаскель на раст. И сабж будет уже сам на себе. Добавят с++ и конвертнут вообще всё! Они хотят поглотить весь мир! Спасайтесь! Раст грядет!

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

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

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

Ну тащемта, он прав насчет выразительности (сам того не зная, ЛОЛ).

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

Вот смотри, списки: Вставка в зад, Rust:

    /// Adds the given node to the back of the list.
    fn push_back_node(&mut self, mut node: Box<Node<T>>) {
        unsafe {
            node.next = None;
            node.prev = self.tail;
            let node = Some(Shared::new(Box::into_raw(node)));

            match self.tail {
                None => self.head = node,
                Some(tail) => (**tail).next = node,
            }

            self.tail = node;
            self.len += 1;
        }
    }

То же на Си:

// Insert an item to a list
void bgrt_item_insert(bgrt_item_t *item, bgrt_item_t *head)
{
    // A tail of a list
    bgrt_item_t * tail;
    tail = head->prev;
    // Insert an item between a head and a tail
    item->prev = tail;
    item->next = head;

    head->prev = item;
    tail->next = item;
}

Вырезать из списка на Rust:

    fn pop_front_node(&mut self) -> Option<Box<Node<T>>> {
        self.head.map(|node| unsafe {
            let node = Box::from_raw(*node);
            self.head = node.next;

            match self.head {
                None => self.tail = None,
                Some(head) => (**head).prev = None,
            }

            self.len -= 1;
            node
        })
    }
То же на Си:
void bgrt_item_cut(bgrt_item_t *item)
{
    bgrt_item_t * prev;
    bgrt_item_t * next;
    prev = item->prev; //Previous item
    next = item->next; //Next item

    next->prev = prev;
    prev->next = next;

    item->prev = item;
    item->next = item;
}

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

OK!

Спорим, Рустеры не смогут переписать ghoshscript на Rust, так, чтобы не было возможности выполлнить произвольный код на целевой системе?

shkolnick-kun ★★★★★
()

Тут, кстати, некроманты пытались оживить llvm c-backeng.

Что вышло, не знаю, но если бы им это удалось, то Rust можно было бы попробовать использовать в имбеде (в настояжем, а не на RPi).

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

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

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

Спорим, Рустеры не смогут

Для начала - кто такие Рустеры? Это какое-то известное аристократическое семейство?

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

Интересно, а почему так:

void bgrt_item_cut(bgrt_item_t *item)
{
    bgrt_item_t * prev;
    bgrt_item_t * next;
    prev = item->prev; //Previous item
    next = item->next; //Next item
а не вот так:
void bgrt_item_cut(bgrt_item_t *item)
{
    bgrt_item_t * prev = item->prev; //Previous item
    bgrt_item_t * next = item->next; //Next item
?

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

Интересно, а почему так:

Потому-что как у K&R, добавляет илитарности.

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

евангелисты как-то очень смущают

Разве бывает иначе?

Ну и, кстати, в англоязычном сообществе, особенно в «официальной» его части, перекос в другую сторону: сплошная «толерантность» и обмазывание «code of conduct».

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

Напишите прогу на C без уязвимостей. Вы проиграли.

hello world не содержит уязвимостей. ЗЫ уязвимости могут быть не только из-за указателей. Почитай про psv

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