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

Так что в ржавчине без костылей даже двусвязный список не создать? Фууууу

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

Не все компиляторы понимают современные диалекты Си.

Т.е. C89, например, это современный диалект С? Збс.

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

У каждого компилятора, фактически, свой стандарт языка.

Некоторые требуют инициализацию константой.

Всегда ваш, К.О.

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

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

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

выходы за пределы векторов?

Да.

целочисленное переполнение

Это будет зависеть от автора транслятора. В расте имеются как «обычные» операторы для арифметики - для них переполнение проверяется только в дебаге, но в релизе знаковое переполнение хотя бы не UB. Так и отдельные методы задающие разные варианты поведения.

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

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

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

В D же GC

...отключаемый.

Вопрос только в том, что отвалится при отключении GC.

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

У каждого компилятора, фактически, свой стандарт языка

Да, но в виде расширения основного, например, того же С89. И подстраивание под какие-то левые компиляторы только делает код менее переносимым.

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

Это аргумент, да, но убойным бы я его не назвал.

Те же кресты в плане популярности «взлетали» больше 10 лет. А сейчас у языка вообще пошло «второе рождение» после C++11 и C++14. Правда, меня очень разочаровало, что попытку ввести модули отставили.

Ну а D, судя по сообщениям тех, кто его ковыряет, наконец-то оперился, оброс интересными библиотеками, теперь можно и о популярности подумать.

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

Тоесть ваша точка зрения заключается в том что стоит еще чуть-чуть подождать и D-взлетит? Тоесть еще не время?

Все же, какие предпосылки если уже есть Rust? У него есть hype, за ним есть компании и он тоже оброс библиотеками

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

Все же, какие предпосылки если уже есть Rust?

Пока чисто субъективные: судя по тому, что я видел, код на D выглядит симпатичнее. Ближе по синтаксису к C и C++, т.е. переход на него больше похож на эволюцию, а не революцию. (Вообще-то я не считаю сишный синтаксис идеалом, но он прижился.)

И да, это звучит смешно, но мне больше нравится название.

Вообще, они оба «уже есть», посмотрим.

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

Это аргумент, да, но убойным бы я его не назвал.

А что бы ты назвал убойным аргументом? И какие вообще есть аргументы за «D взлетел» или «D взлетит»? Я скорее поверю, что Python вернется с асинхронностью и статической типизацией, и надерет зад Go.

Те же кресты в плане популярности «взлетали» больше 10 лет

Я помню, что в далеком 1988 году совет тогдашним прогерам «учите Unix и C++» (советчик был откуда-то с Запада). Ну и если считать 1985 годом создания Си++, то к 1995 он уж точно взлетел. 10 лет ему не понадобилось.

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

Все же, какие предпосылки если уже есть Rust?

Имхо, предпосылки для D вообще никак не связаны с Rust-ом. Rust однозначно нацелен на нишу задач, где GC не применим. Тогда как в D только декларируется возможность работы без GC, но вряд ли это кому-то реально нужно. Так что D скорее бодается с Go и OCaml-ами с Haskell-ями, если не с Java/Scala/Kotlin/Ceylon/C#.

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

в далеком 1988 году совет тогдашним прогерам «учите Unix и C++» (советчик был откуда-то с Запада)

Точно C++, а не C?

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

А про 1995 - да, вот здесь, я считаю, ты написал реальный год.

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

В 1983-ом году появилось название C++. Официальный релиз состоялся в 1985-ом году. К 1990-му он уже был более чем популярным. Языку D такая динамика и не снилась. Что-то похожее демонстрирует Go. И, думаю, что-то похожее может показать и Rust.

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

Если D за счёт худшей динамики продемонстрирует лучшее качество, я, пожалуй, буду за него. :)

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

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

Из недр dlang, да. Но я не писал is born - я просто помню, что когда-то читал там, что D уже существовал до официального релиза в 2001.

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

Официального релиза в 2001-ом году не было. В 2001-ом году Вальтер Брайт начал выкладывать в публичный доступ сборки D, которые стабильными никогда не объявлялись. До официального выхода D 1.000 в 2007-ом. Собственно, с 2001-го я за D и наблюдал, когда издалека, когда очень плотно.

А работы над D начались в 1999-ом, да.

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

Если D за счёт худшей динамики продемонстрирует лучшее качество, я, пожалуй, буду за него.

На счет качества сложно судить, D получился монстром не хуже C++. Другое дело, что в последние пару лет стало больше разговоров о том, что D стабилизировался и уже не нужно тучу кода править при переходе на новую версию компилятора. Да и в changelog-ах больше багфиксов, чем нововведений в язык.

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

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

Мне кажется, что те, кого пугают «копирующие конструкторы и SFINAE» раст напугает не меньше.

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

Ну улыбчивых дурачков я бы в расчет вообще не брал. Интереснее другое: разработчики, вроде RazrFalcon или red75prim предпочитают Rust C++у. Криворукими неумехами их назвать ну никак нельзя. Однако, на C++ предпочитают не программировать (отдельная тема объективно ли это или есть влияние каких-то тараканов). И таких, как мне кажется, отнюдь не мало.

Если даже не брать сложность C++ и непривычность Rust-а, то у Rust-а есть три очень привлекательные черты, которых не будет у C++ в ближайшем обозримом будущем:

1. Наличие всего одного компилятора. Я бы, например, очень бы хотел иметь дело только с одним C++ компилятором на всех платформах, а не как сейчас.

2. Наличие cargo.

3. Экосистема для Rust-а сейчас — это чистая поляна. Твори все, что хочешь. Если сделаешь что-то удачное, будешь первым и займешь свой кусок этой поляны. Не нужно будет никому объяснять, чем твоя разработка лучше чьего-то распиареного эксперимента, например.

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

Наличие всего одного компилятора. Я бы, например, очень бы хотел иметь дело только с одним C++ компилятором на всех платформах, а не как сейчас.

На разных платформах будут разные версии.

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

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

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

Я бы, например, очень бы хотел иметь дело только с одним C++ компилятором на всех платформах,

Rust основан на llvm и работает там же, где и clang. Итого никто не мешает тебе пользоваться clang на тех же платформах.

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

Итого никто не мешает тебе пользоваться clang на тех же платформах.

За исключением заказчиков, которые хотя, например, VC++ или конкретную версию GCC.

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

За исключением заказчиков, которые хотя, например, VC++ или конкретную версию GCC.

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

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

Да, да, расскажите мне еще этих интересных и увлекательных сказок.

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

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

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

Ну вот мне приходит в голову. Но не приходит, что это можно делать с помощью одного лишь clang-а. Ведь такой совет здесь давал некий анонимный ыксперт.

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

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

Зато на расте я могу писать

vec.iter().filter().map()
. Жду аналогичный пример на Си.

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

разработчики, вроде RazrFalcon или red75prim предпочитают Rust C++у. Криворукими неумехами их назвать ну никак нельзя. Однако, на C++ предпочитают не программировать

Программисты вообще часто существа религиозные.

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

Это уже вопрос определения полноценности: кому и кобыла невеста.

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

Но не приходит, что это можно делать с помощью одного лишь clang-а.

Я тебе больше скажу - во многих случаях это можно делать на одной лишь ОС. И именно так анонимный ыксперт (с) и делает. Хотя конечно он не знаком с проблемами фриласеров, которые вынуждены работать с идиотами заказчиками.

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

И именно так анонимный ыксперт (с) и делает.

Да, в уютненьком моямирке хорошо.

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

Угу. По религиозным причинам предпочитаю не танцевать на минных полях и не забивать голову r-values, l-values, pr-values, x-values, неявными приведениями, неспецифицированными и неопределенными поведениям, умолчательными конструкторами и деструкторами, двухфазными системами разрешения параметров шаблонов, конструкторами перемещения, множественным наследованием и т.д. и т.п. В общем, религия не позволяет, что поделаешь. /s

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