- PVSM.RU - https://www.pvsm.ru -

Зачем нам нужен Rust?

Зачем нам нужен Rust?Rust [1] — системный язык программирования, который исполняется чертовски быстро, предотвращает почти все падения, а также устраняет неопределённости совместного доступа к данным. Он разрабатывается Mozilla как инструмент для создания обозревателя нового поколения — Servo [2].

Пункты соприкосновения

Данное определение языка кажется сказкой, ибо доступные нам прежде инструменты всегда балансировали между скоростью и надёжностью. С одной стороны — С++, в котором огромные возможности и скорость компенсируются постоянными ошибками доступа вне выделенной памяти, к удалённой памяти, либо неожиданные результаты чтения данных, которые в это время пишет другой поток. С другой стороны есть Haskell, этакий язык-крепость (по принципу «раз оно компилируется, значит работает»), хоть и не могущий похвастаться скоростью. Где-то посередине балансируют Java, Python, C# и другие популярные (в силу своей практичности) языки. Rust же для меня выступает удачным скрещением лучших свойств С++ и Haskell, при этом сохраняя практичность на уровне конкурентов.

Что объединяет Rust с С++:

  • Вы не платите за то, что не используете. Красота кода не требует жертв производительности.
  • Предсказуемое выделение и освобождение памяти (RAII [3]).
  • Мультипарадигмальность, пусть и с небольшим уклоном в функционалку.
  • Сожительство с написанными на С/C++ библиотеками: возможность вызвать С код и быть вызванным.
  • Минимальные требования к среде (runtime), возможность написать код любого уровня и масштаба.

Что общего с Haskell:

Через тернии к звёздам

Вся магия Rust становится возможной благодаря знанию компилятором о том, кто владеет определённой сущностью (owner), кто лишь временно одалживает её (mutable borrow), а кто просто пришёл посмотреть (immutable borrow). Программируя на С++ или Java, Вы всё равно держите в голове эту информацию, пусть и в несколько ином виде. В Rust это выражается языковыми конструкциями, что позволяет компилятору проверить правильность Вашей модели, а также гарантировать её беспроблемное выполнение. Для такого программирования требуется немного иной подход, чем мы привыкли. Попытаюсь пройтись по основным моментам, которые могут занести Вас в ступор при начальном изучении:

1. Нет наследования, зато есть структуры и способности (traits [8]).
2. Указатели есть только в незащищённом коде (unsafe {}). Вместо них в безопасном коде есть ссылки, которые гарантированно указывают на существующие объекты.
3. Если у Вас неизменяемая ссылка на что-то (immutable borrow = &Object), то никто не может изменить значение, пока ссылка жива.
4. Если у Вас изменяемая ссылка (mutable borrow = &mut Object), то никто другой не может читать содержимое объекта, пока ссылка жива.
5. Разработчики языка предпочитают Mac и *nix, так что для работы под Windows нужна GNU среда [9].

У Rust очень весёлое и активное сообщество, Вам всегда будут рады на канале IRC [10] и в Reddit [11]. Уже написано приличное количество всякого добра [12], многие из проектов активно развиваются на GitHub [13]. Особой популярностью язык пользуется у разработчиков игр и графики [14]. Есть зачатки операционных систем [15]. В перспективе также маячит возможность исполнения на веб-серверах и клиентах [16]. Rust подходит для любых задач!

Единственная на сегодня, пожалуй, серьёзная проблема языка — это его бурное развитие. От версии к версии может меняться синтаксис, порой приходится переосмысливать логику, подстраиваясь под новые возможности языка. Такая ситуация продлится ещё какое-то время в этом году, пока не появится Rust-1.0. А тем временем журнал Rust 'n Stuffs [17] в еженедельной рубрике This Week in Rust оповещает нас обо всех прошедших и готовящихся изменениях, о новых статьях и перспективных проектах.

Немного обо мне

Скоро будет уже 2 года, как я перешёл на Rust, оставив позади Boo, Dart, Haskell и, конечно, С++. Первым проектом была игра [18], которую решил отложить до выхода стабильной версии языка. Сейчас активно работаю над rust-compress [19] и своим компрессором [20] данных. Верю в светлое будущее Rust и приглашаю всех принять участие!

Автор: kvark

Источник [21]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/rust/61038

Ссылки в тексте:

[1] Rust: http://rust-lang.org/

[2] Servo: https://github.com/mozilla/servo

[3] RAII: http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

[4] Алгебраические типы данных: http://en.wikipedia.org/wiki/Algebraic_data_type

[5] Сопоставление с образцом: http://en.wikipedia.org/wiki/Pattern_matching

[6] Автоматическое выведение типов: http://en.wikipedia.org/wiki/Type_inference

[7] Замыкания : http://en.wikipedia.org/wiki/Closure_%28computer_programming%29

[8] traits: http://en.wikipedia.org/wiki/Trait_%28computer_programming%29

[9] GNU среда: http://www.mingw.org/

[10] канале IRC: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust

[11] Reddit: http://reddit.com/r/rust

[12] всякого добра: http://rust-ci.org/

[13] GitHub: https://github.com/trending?l=rust

[14] игр и графики: https://github.com/mozilla/rust/wiki/Computer-Graphics-and-Game-Development

[15] операционных систем: https://github.com/mozilla/rust/wiki/Operating-system-development

[16] веб-серверах и клиентах: http://arewewebyet.com/

[17] Rust 'n Stuffs: http://blog.octayn.net/

[18] игра: https://code.google.com/p/claymore-game/

[19] rust-compress: https://github.com/alexcrichton/rust-compress

[20] компрессором: https://github.com/kvark/dark

[21] Источник: http://habrahabr.ru/post/224607/