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)
Ответ на: комментарий от GoodRiddance

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

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

Впрочем, если система типов соответствует логике предикатов первого порядка, то согласно теореме Гёделя о полноте, можно сделать компилятор, который скомпилирует все корректные программы и отвергнет все некорректные. Но это неинтересно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

red75prim ★★★
()
Ответ на: комментарий от 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 ★★★
()
Ответ на: комментарий от red75prim

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

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

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

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

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

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

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

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

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

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

Вся суть безопасной ржавчины

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