Релиз Rust 1.0. Возможности и сомнения

Разработчики Rust прошли долгий путь и 15 мая ожидается выпуск первой версии языка с вечеринкой по случаю новорожденного. Лично я долго ждал этого события, хотя и вызывает оно довольно смешанные чувства. Вроде что-то и родилось, но хочу ли я это что-то использовать и стоит ли оно того? Вот в чем вопрос. Дело в том, что в процессе развития Rust претерпел довольно сильные изменения и теперь это далеко не тот же язык, о котором я писал в 2013.

Положительное

Как бы много изменений не претерпел язык, ряд основных заложенный в него концепций так никуда и не делся.  Как и любой C/C++ разработчик я постоянно сталкивался с проблемами в области управления памятью и первое что меня привлекло в Rust несколько лет назад была его идея разделения памяти по пулам с контролем за использованием и передачей объектов на этапе компиляции. К счастью данный механизм из Rust никуда не делся, а только несколько заматерел и обрел форму.

Так же нельзя не отметить используемую модель CSP (если коротко – похоже на Акторы, но не совсем они) для взаимодействия между Задачами Rust. Решение получилось практичное и удобное в использовании, само собой куда более низкоуровневое если сравнивать с AKKA из Scala, но для языка системного уровня самое оно.

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

Отрицательное

Но не обошлось и без ложки дегтя. Дело в том, что разработчики не осилили зеленые потоки и асинхронную сеть. С учетом того, что язык часто преподносился как Erlang, которые еще и компилируетсая, то выглядит это очень грустно. Официальная позиция по зеленым потокам – используемый для их построения libuv слишком медленный из за большого количества преаллокаций памяти. Хотя больше это похоже на то, что релиз выпускать надо (ну не дело же язык 5 лет пилить) и не критические фичи идут под нож.

Кроме того, у меня серьезные сомнения относительно наличия в языке ключевого слова unsafe и шареной памяти как в RO, так и в RW вариантах. С одной стороны причины их появления понятны и логичны “мы строим язык который не уступит C++ в скорости”. С другой стороны, если ты оставляешь лазейки, то вся красивая и логичная модель, защищающая от ошибок идет под откос. Есть возможность обойти и сделать по старинке? Так и сделаем именно этим способом! Зачем разбираться с чем-то новым? Именно так выглядят изрядное количество вопросов посвященных Rust.

И последний пункт – усложнение языка. По моим ощущениям он все больше и больше начинает напоминать C++ с точки зрения синтаксиса. Множество шаблонов и интерфейсов, разлапистые описания типов (особенно при создании объектов не на стеке), множество макросов. Но C++ уже 30 лет как живет и зачем нужен еще один?

Итого

Несмотря на то, что, казалось бы, язык готов к промышленному использованию у меня есть некоторые сомнения в его целесообразности. В своем текущем виде язык не имеет каких-то сколь нибудь серьезных преимуществ перед C++14. Само собой язык будет развиваться и дальше, но с учетом того, что C++17 не за горами, сказать что данная ситуация изменится в будущем тоже не получается.

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

2 Comments Релиз Rust 1.0. Возможности и сомнения

  1. Pingback: Критика языка Rust и почему C/C++ никогда не умрет | Записки программиста

Leave a Reply to Eax Melanhovich (@afiskon) Cancel reply