LINUX.ORG.RU

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

 , , , ,


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 ()

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

Ну и вы опять за своё: легаси - это отдельная история.

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

Кроме того, C++ никогда не был языком для разработки прикладного софта. Даже тогда, когда его пихали повсюду из-за того, что тогдашние 86-е и 286-е машины были в разы слабее, чем современные смартфоны. С++ — это язык для задач, где ресурсоемкость и производительность имеют значения. Photoshop на C++ — это разумно, Chrome/FireFox — разумно, MSSQL/Oracle — разумно. Какой-нибудь «АРМ Кладовщика» — нет.

То, что C# (как и Java чуть раньше) выжили С++ из многих неподходящих для него ниш — это очень хорошо.

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

Думаю, что частных реализаций CSP на 500 строк полно. Только выкладывать их в открытый доступ авторам не интересно. А в тех проектах, где CSP один из вариантов решения проблем конкурентности, нет интереса нарезать проект на такие тонкие ломтики.

Ну и в стандарт C++ CSP вряд ли попадет. Если только ты сам не запилишь пропозал и не сделаешь его реализацию.

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

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

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

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

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

Ну так людям не понятно почему я выбрал rust, а не прекрасный c++.

С тем, что UB - плохо будут спорить только совсем «упёртые» личности. А вот про остальное можно и поговорить.

Я не могу просто так взять и добавить новый метод в std::vector.

И точно так же ты не можешь добавить метод в трейт. Или воспользоваться приватными данными (растовых) типов извне.

Но ведь эти ограничения не удивляют? Просто в разных языках - разные способы расширения. Нужен дополнительный метод? Напиши свободную функцию. Вряд ли ведь всё дело в «универсальном синтаксисе вызова»? Впрочем, даже если да, то плюсы в эту сторону движутся.

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

Думаю, что частных реализаций CSP на 500 строк полно. Только выкладывать их в открытый доступ авторам не интересно.

Вероятно. Недавно стало на одну больше :/

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

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

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

А некоторым некоторым вещам всё-таки надо быть стандартными. Я не зря про время заговорил: возникла необходимость конфиги читать на расте, решил TOML использовать - как никак «родной» формат для карго. И всё бы здорово, но растовая релизация даты читать не умеет в принципе (даже в строку), хотя в сорцах какие-то подвижки на эту тему и имеются. В итоге вместо элегантного решения через сериализацию приходится промежуточную структуру вводить, читать туда, а потом разбирать дату. Из медатанных файлов, опять же, можно получить SystemTime, которой к датам имеет опосредованное отношение. Ну и прочие такие приятности. Что-то мне подсказывает, что будь дата в std всё было бы проще.

Даты нет у обоих.

Да, ты прав, мне что-то казалось, что в плюсы дату завезли.

Пару лет как.

И?

Разве?

В расте: Vec, VecDeque, LinkedList, HashMap, BTreeMap, HashSet, BTreeSet, BinaryHeap. В плюсах: vector, deque, list, forward_list, set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map, unordered_multimap плюс несколько «адаптеров».

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

А что толку, сообществу от этого ни тепло, ни холодно :)

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

ты не понял

несогласных может быть хоть отбавляй, а вот закрепить слова нечем

У меня есть точка зрения, я могу ответить на вопросы по ней. Если человек не согласен, может стоит добавить в сообщение что именно не так и почему не согласен? Тогда будет здоровая дискуссия.

Потому что на «нет» можно ответить «ну и н___й иди тогда».

З.Ы. Я заметил, что это такая себе отличительная особенность большинства ЛОР-овцев - когда по сути сказать нечего.

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

С аргументацией никак?

Мне казалось, что оно очевидно, но ладно, давай сравнивать вместе:

  • Рекурсивный обход файлов в расте надо велосипедить (или брать библитеку). В плюсах из коробки.
  • Есть в расте аналог filesystem::space_info?
  • Как в расте скопировать директорию? В плюсах можно, более того - с кучей настроек копирования (filesystem::copy_options).
  • std::fs::Permissions позволяет узнать аж одно свойство (readonly), в std::filesystem::perms «немного» побольше свойств.
  • Похожая ситуация с типами файлов.
  • В плюсах есть create_symlink, create_directory_symlink, а в расте предлагается использовать std::os::unix::fs::symlink или std::os::windows::fs::{symlink_file, symlink_dir} - это к вопросу «идентичной работы на всех ОС».
  • absolute, system_complete, resize_file, hard_link_count в раст не завезли?

Но QVarian довольно часто использовал, а это почти одно и тоже.

Как по мне, то это довольно разные вещи.

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

Благодаря ему, под винду на плюсах никто уже не пишет.

Пишут.

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

Если человек не согласен, может стоит добавить в сообщение что именно не так и почему не согласен?

Да что тут разворачивать? Ты говоришь «частное решение всегда лучше», не согласен именно с «всегда». Ведь понятно почему?.. В том числе, из-за того, что на своё решение надо тратить время, потом поддерживать его, плюс усложняется порог входа и всякое такое.

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

ты зачем часть цитируешь? Там еще условие дальше по тексту в круглых скобках.

Оно там не просто так стоит. Правда-правда.

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

ты зачем часть цитируешь?

Цитирую, чтобы проще контекст понять было, а не чтобы выбрать часть фразы - это компромисс, иначе цитаты получались слишком большими.

И что? Даже если автор «не рукожоп и умеет тестировать» - это всё равно не гарантирует, что его решение будет лучше.

Умение документировать, конечно, похвально, но не спасает - со стандартным решением, зачастую, ещё в момент изучения языка можно познакомиться, то есть «терять время» всё равно придётся.

Чувство прекрасного так вообще у людей сильно разное.

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

всё равно не гарантирует, что его решение будет лучше

для этого и

1) делают теоретические оценки
2) пишут тесты

И если автор действительно не рукожоп, то он, проделав эти два пункта, может сделать вывод - писать свое или использовать готовое.

Кроме того, свои велосипеды, порой, быстрее и проще написать и поддерживать чем чужие.

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

что будь дата в std всё было бы проще.

Посмотрим. Дату можно впихнуть, но только примитивную. В этом и проблема. То есть без локализации, ДНЭ, високосного года и секунды, юлианского календаря и прочих заморочек.

Тем не менее есть https://github.com/lifthrasiir/rust-chrono

Про контейнеры не понял. Всё тоже самое. Разве что мультимап отдельно пока: https://crates.io/crates/multimap

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

Стоп-стоп-стоп. В плюсах нет fs. Пока оно появится во всех популярных компиляторах, есть шанс что оно уже будет в расте.

Есть в расте аналог filesystem::space_info?

Он даже в Qt только в 5.4 появился. Там какие-то заморочки с ним.

В плюсах есть create_symlink, create_directory_symlink,

Там в доке чётко написано, что не у всех fs это есть, а значит вы можете словить исключение.

std::fs::Permissions позволяет узнать аж одно свойство (readonly), в std::filesystem::perms «немного» побольше свойств.

https://doc.rust-lang.org/std/os/unix/fs/trait.PermissionsExt.html

hard_link_count

https://doc.rust-lang.org/std/os/unix/fs/trait.MetadataExt.html#tymethod.nlink

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

Именно это и происходит сейчас в Servo. Основная цель проекта — параллельный браузерный движок. Алгоритмы есть, но их нужно параллелизовать, причем эффективно, а не воткнуть пару openmp директив и радоваться.

Да, эффективно. Вчера в очередной раз посмотрел на эффективность этого Servo. Вот результат за приблизительно минуту тестирования: https://postimg.org/image/b0thfx14v/ Грешным делом думал, что увижу панику, но увидел дедлок. А так да, наплодить 337 потоков и грузить ими сайт с полной загрузкой всех ядер процессора в десять раз дольше, чем это делает хром (а после этого при прокрутке - вообще зависнуть намертво) у серво получается замечательно. Кстати, правильно рендерить оно до сих пор не умеет даже примитивный LOR (так что не рассказывайте мне про HTML5/CSS3). И вот у меня вопрос: а что же, собственно, авторы хотели продемонстрировать этим серво? Надёжность? Фейл. Безопасную работу с потоками? Снова фейл. Скорость разработки? Фейл, фейл, фейл.

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

Повторяю для тупых: проект даже не pre-alpha, а early preview. То, что он собирается - уже чудо. Чтобы ожидать от него стабильной, полноценной работы уровня Firefox/Chromium нужно быть ...

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

Один из авторов на презентации говорил, что только в мозиле этим серво постоянно занимаются 4 человека. Плюс ещё столько же постоянно занимаются им вне мозиллы. Итого, умножаем на 4 и получаем ~32 человеко-года. Неплохо для хреновины, которая ни для чего непригодна. Но хрен бы с этим. Для движка, который в перспективе будут использовать миллиарды людей, на это можно было бы забить. Но тут есть другой аспект. А позволяет ли вообще Rust работать над проектом большим командам, чтобы, подобно Java, «бить по площадям» и получать скорость разработки за счет распараллеливания задач между большим числом разработчиков? Такое впечатление, что и с этим в расте как-то не очень)

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

Один из авторов на презентации говорил, что только в мозиле этим серво постоянно занимаются 4 человека. Плюс ещё столько же постоянно занимаются им вне мозиллы. Итого, умножаем на 4 и получаем ~32 человеко-года.

Уже фейл - Патрик Уолтон занимался транслятором Rust не в меньшей степени, чем Servo.

32 человеко-года

Сравни эту заведомо завышенную оценку с Хромом.

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

Повторяю для тупых: проект даже не pre-alpha, а early preview.

Это просто словоблудие. Вот новость: Началось формирование и тестирование сборок движка Servo Когда проект выкатывается на публику, это обычно называется даже не альфой (для внутреннего тестирования), а бетой (для «посмотреть» посторонним).

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

Сравни эту заведомо завышенную оценку с Хромом.

Похоже, ты не до конца прочитал что я тебе написал.

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

Вот новость: Началось формирование и тестирование сборок движка Servo

«В настоящее время, как сообщается, движок не полностью совместим с веб-стандартами и готов лишь для проведения тестирования и экспериментов».

ШОК.

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

Я где-то писал, что ждал от него совместимости с веб-стандартами?

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

В настоящее время, как сообщается, движок не полностью совместим с веб-стандартами и готов лишь для проведения тестирования и экспериментов

Я где-то писал, что ждал от него совместимости с веб-стандартами?

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

Похоже, «цифр» нет у тебя. Я то свои привёл.

Приведенные цифры неверны, интересные не приведены.

Похоже, «цифр» нет у тебя

Я и не бросаюсь «фейлами».

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

Приведенные цифры неверны, интересные не приведены.

Ещё раз: приведенные цифры озвучены одним из авторов. И это - оценка снизу, т.к. не учитывает участников, вносящих вклад не на постоянной основе.

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

Окей, даже по твоей заведомо неверной методике: https://github.com/GoogleChrome
57 человек, как минимум, работают на постоянной основе, как минимум с 2008 года, (хотя это не так, 2008 это первый стабильный релиз).
57 * 8 = 456 человеко лет.

456 / 32 = разница в 14.25 раз

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

Ещё раз: приведенные цифры озвучены одним из авторов.

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

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

Озвучивались цифры про 4 человека внутри Мозиллы

И вот как минимум один из них не занимался Servo полный рабочий день 4 года.

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

То, что он собирается - уже чудо

То есть обычно подобные проекты первые несколько лет разрабатывают, не собирая?

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

А что там интересного? Твои фантазии и рассуждения о том, о чем ты совершенно ничего не знаешь?

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

В плюсах нет fs. Пока оно появится во всех популярных компиляторах [...]

Оно появится не в компиляторах, а в стандартной библиотеке. Так как оно уже в experimental, то нет никаких оснований полагать, что перевод в std займёт много времени.

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

Шта? О каком внутренеем тестировании идёт речь, есть проект FOSS?

Он будет бета, когда авторы скажу, что это бета. Сейчас же это nightly build. Ни одного релиза еще не было.

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

Тем не менее есть https://github.com/lifthrasiir/rust-chrono

На нём и остановился. Теперь бы как-то заставить все остальные библиотеки, которым нужно время, использовать именно chrono.

Всё тоже самое.

Как минимум, forward_list нет.

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

То, что он собирается - уже чудо.

Шедеврально. Если бы про проект на каком-то другом языке такое сказали, наверное обосрали бы и проект, и язык, и проектную команду. Но тут же Rust, как же можно.

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

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

С этим не спорю, но чисто с практической точки зрения меня более чем устраивает boost.

https://doc.rust-lang.org/std/os/unix/fs/trait.PermissionsExt.html

std::os::unix - не катит, уж лучше None возвращать, если оно не поддерживается.

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

Будем посмотреть. Авторы сейчас компилятором заняты, а не std.

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

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

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

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

А так да, наплодить 337 потоков

Это что, правда? Приложение создало 337 потоков на обычной десктопной машине?

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

Я думаю, в активной фазе загрузки их было ещё больше, но к моменту зависания их осталось 337 (как видно из скриншота эппловского Activity Monitor; открыто 2 сайта - linux.org.ru (в фоне) и zr.ru (на котором Servo и застыл)).

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