- PVSM.RU - https://www.pvsm.ru -
Rust [1] — системный язык программирования, который исполняется чертовски быстро, предотвращает почти все падения, а также устраняет неопределённости совместного доступа к данным. Он разрабатывается Mozilla как инструмент для создания обозревателя нового поколения — Servo [2].
Данное определение языка кажется сказкой, ибо доступные нам прежде инструменты всегда балансировали между скоростью и надёжностью. С одной стороны — С++, в котором огромные возможности и скорость компенсируются постоянными ошибками доступа вне выделенной памяти, к удалённой памяти, либо неожиданные результаты чтения данных, которые в это время пишет другой поток. С другой стороны есть Haskell, этакий язык-крепость (по принципу «раз оно компилируется, значит работает»), хоть и не могущий похвастаться скоростью. Где-то посередине балансируют Java, Python, C# и другие популярные (в силу своей практичности) языки. Rust же для меня выступает удачным скрещением лучших свойств С++ и Haskell, при этом сохраняя практичность на уровне конкурентов.
Что объединяет Rust с С++:
Что общего с 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/
Нажмите здесь для печати.