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

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

Да это вы, походу, имеете дело с програмульками на 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
()
Ответ на: комментарий от 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.