Что пишут на rust


Язык программирования Rust и первые впечатления от него

Rust — это язык программирования общего назначения от компании Mozilla, разрабатываемый с 2010-го года. Разработчики Rust ставят перед собой задачу с одной стороны достичь производительности C/C++ (все же понимают, DSL’ем для разработки какого браузера является Rust?), а с другой — умудриться сделать язык высокоуровневым и безопасным. К окончанию 2014-го года планируется выпустить бета-версию Rust 1.0. Если все пойдет хорошо, нас ждет релиз Rust 1.0, после чего Mozilla обещает перестать ломать обратную совместимость.

В отношении Rust справедливо следующее:

  • Язык является кроссплатформенным, поддерживаются Windows (>= 7, на данный момент только x86), а также Linux и MacOS (x86 и amd64);
  • Компилятор Rust написан на Rust и использует LLVM;
  • Многое было позаимствовано из мира ФП — лямбды, замыкания, кортежи, алгебраические типы данных, паттерн матчинг, fold, map, filter, переменные по умолчанию неизменяемы;
  • Используется строгая статическая типизация с автоматическим выводом типов;
  • В языке есть метапрограммирование (типизированное);
  • Есть генерики, наследования как такового нет, только тайпклассы;
  • Нет неявного преобразования типов, размер примитивных типов как правило не зависит от платформы, нет никакого null;
  • Язык поддерживает Unicode, все строки хранятся в UTF-8 (подобно тому, как это сделано в Vala) вместе с длиной и могут содержать в себе нулевые символы;
  • В стандартной библиотеке есть легковесные потоки (upd: выпилили) и типизированные каналы для взаимодействия между ними, а также футуры;
  • У языка нет полноценного GC, данные размещаются либо в стеке, либо в куче, но память освобождается при выходе из скоупа, либо используются счетчики ссылок (для смелых есть и обычные ссылки);
  • Компилятор очень жестко следит за тем, как вы работаете с памятью, например, если он заподозрит возможность состояния гонки, программа не скомпилируется;
  • При очень сильном желании эти проверки можно обойти, что особенно удобно, например, если вы хотите слинковаться с кодом на Си;
  • Rust имеет некоторый рантайм, но на языке также можно писать и без рантайма, что позволяет использовать Rust в задачах типа разработки ядра ОС;

Идею, как я лично ее понял, можно описать примерно так. Вот у нас есть всякие языки с GC типа Java и Go. И из-за этого GC они тормозят. И есть Си, который не тормозит, но в нем можно наделать кучу ошибок, из которых многие как раз связаны с управлением памятью. А давайте возьмем Си, избавим его от родовых травм (уберем инклуды, добавим генерики, кортежи, алгебраические типы данных и тд), а касательно сборки мусора скажем следующее. Вот у сишников есть определенные паттерны управления памятью (см например RAII). Давайте использовать эти паттерны и напишем такой умный компилятор, который сделает очень сложным написание кода, в котором что-то течет или ссылается в никуда. Получим и скорость и безопасность. Профит!

Но хватит теории, перейдем к практике.

На момент написания этих строк самый простой способ установить последнюю версию Rust под Ubuntu Linux заключался в выполнении следующей команды:

Традиционный hello world:

Восклицательный знак означает всего лишь, что println в Rust — это макрос (не имеет ничего общего с макросами в Си!).

Теперь рассмотрим пример поинтереснее. Напишем программу, которая на вход принимает список URL, а возвращает HTML-код списка ссылок, в котором в качестве текста ссылок использовались соответствующие title.

Создадим новый проект:

Откроем файл Cargo.toml и исправим его таким образом:

name = «shownotegen»
version = «0.0.1»
authors = [«Eax Melanhovich «]

[dependencies.http]
git = «https://github.com/chris-morgan/rust-http.git»

В файле src/main.rc напишем:

extern crate http ;
extern crate url ;
extern crate regex ;

# [ phase ( plugin ) ]
extern crate regex_macros ;

use http :: client :: RequestWriter ;
use http :: method :: Get ;
use std :: < os , str >;
use url :: < Url , ParseError >;
use std :: io :: < BufferedReader , File , IoError >;

# [ deriving ( Show ) ]
enum GetTitleError <
InvalidUrl ( ParseError ) ,
RequestSendFailed ( IoError ) ,
ResponseReadFailed ( IoError ) ,
BodyDecodeFailed ,
ParseFailed
>

fn main ( ) <
let args = os :: args ( ) ;
match args. len ( ) <
0 => unreachable ! ( ) ,
2 =><
let path = Path :: new ( args [ 1 ] . as_slice ( ) ) ;
let mut file = BufferedReader :: new ( File :: open ( & path ) ) ;
for line in file. lines ( ) <
let tmp = line. unwrap ( ) ;
let url = tmp. trim ( ) ;
let text = match get_title ( url. as_slice ( ) ) <
Ok ( title ) => title ,
Err ( err ) => format ! ( «NO TITLE (<>)» , err ) . to_string ( ) ,
> ;
println ! ( «
» <> » ><> » , url , text ) ;
>
> ,
_ => println ! ( «Usage: <> » , args [ 0 ] ) ,
> ;
>

fn get_title ( url : & str ) — > Result String , GetTitleError > <
let body = try ! ( get_html ( url ) ) ;
let re = regex ! ( r «(?is) (.*?) » ) ;
match re. captures ( body. as_slice ( ) ) <
Some ( cap ) => Ok ( cap. at ( 1 ) . to_string ( ) ) ,
None => Err ( ParseFailed ) ,
>
>

Читайте также:  Где в айфоне список заблокированных номеров

let request : RequestWriter = RequestWriter :: new ( Get , url ) . unwrap ( ) ;

let mut response = match request. read_response ( ) <
Ok ( resp ) => resp ,
Err ( ( _ , err ) ) => return Err ( RequestSendFailed ( err ) ) ,
> ;

match response. read_to_end ( ) <
Ok ( body ) => <
match str :: from_utf8 ( body. as_slice ( ) ) <
Some ( rslt ) => Ok ( rslt. to_string ( ) ) ,
None => Err ( BodyDecodeFailed ) ,
>
> ,
Err ( err ) => Err ( ResponseReadFailed ( err ) ) ,
>
>

Как вы уже поняли, описание проекта и его зависимостей задается в файле Cargo.toml. Сборка, тестирование, запуск проекта и так далее, производятся при помощи команд вроде cargo build , cargo test и cargo run . В общем, все очень похоже на Rebar из мира Erlang. Попробуйте собрать программу и проверьте, что она работает.

При написании этой заметки я еще хотел рассказать про настройку Vim, но оказалось, что в Ubuntu 14.04 он из коробки умеет подсвечивать синтаксис Rust. Также был обнаружен плагин для IntelliJ IDEA, но сам я его не пробовал. Судя по описанию, в нем реализована только подсветка синтаксиса для .rs файлов.

Мои первые впечатления от Rust следующие. Язык выглядит очень годно. Одно только наличие генериков делают его на голову выше Go. Писать на Rust оказалось на удивление легко и приятно. В этом смысле опыт был похож на опыт программирования на скриптовых языках. Опять же, чего мне не удалось испытать, программируя на Go. При совершении мной глупых ошибок компилятор поправлял меня, а после компиляции код оказывался рабочим с первого раза. В этом смысле Rust напомнил мне Haskell и OCaml.

С другой стороны, меня печалит, что приходится (1) следить за пунктуацией, расставлять запятые и точки с запытой, или (2) помнить о различиях между &str и String и постоянно расставлять to_string() и as_slice() . Возможно, это приходит с опытом. Но вообще-то говоря, мне не хотелось бы думать о таких вещах. Также на момент написания этих строк многие вещи остаются для меня непонятными. В какой именно момент происходит переключение контекста в легковесных процессах? Есть ли жизнь без нормальных исключений и GC? Что, если я хочу сделать двусвязный список? Как не запутаться во всех этих видах указателей, borrowing и так далее?

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

  • Сайт языка содержит много гайдов, документации и т.д.;
  • Попросить помощи можно на официальном форуме проекта;
  • Есть книга Programming Rust, и она была переведена на русский;
  • Другая заслуживающая внимания книга: The Rust Programming Language;
  • Существует операционная система Redox, написанная на Rust;
  • Rocket — веб-фреймворк, написанный на языке Rust;
  • На GitHub была найдена книга, посвященная программированию на Rust под микроконтроллеры STM32;

А что вы думаете о Rust?

Дополнение: После публикации заметки список ссылок по теме был обновлен. Также вас может заинтересовать заметка Критика языка Rust и почему C/C++ никогда не умрет.

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

Rust — это системный язык, его главное достоинство заключается в быстрой обработке компьютером и высокой степени безопасности. В нём исключены практически все причины падения серверов. Другим преимуществом является устранение неопределённости в доступе к информации от нескольких пользователей. Разработкой языка занимается Mozilla. Он лёг в основу современного и инновационного браузера Servo .

Что общего у Rust и других языков?

В перечисленные определения сложно поверить, это выглядит нереалистичным заявлением, так как ранее все языки выбирали одну из сторон: надёжность или производительность.

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

Уклон в сторону надёжности лучшим образом демонстрирует язык Haskell, который имеет компилируемую природу и обеспечивает высокие показатели безопасности. Всё, что можно компилировать, будет исправно работать. Главный недостаток – это низкая производительность, сложно представить проект, требующий высокой скорости написанный на Haskell.

Нейтральную позицию, некоего баланса занимают Python , Java , С# и остальные. В них уклон поставлен в практичность.

Rust вобрал в себя лучшие характеристики C++ и Haskell, а также смог сохранить достаточную практичность и функциональность от остальных конкурентов.

Читайте также:  Все жду когда мне это пригодится

В чем же прелесть языка Rust?

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

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

Этому языку необходим несколько отличающийся подход. Несмотря на непривычность, алгоритм достаточно очевидный и эффективный. Теперь мы определимся с основами языка, которые способны завести в тупик при начале изучения:

  1. Полностью устранена система наследования, для замены используется особая структура и способности, подробнее traits .
  2. Присутствуют указатели исключительно в коде, который не подвергается дополнительной защите, то есть внутри функции unsafe <> . Для их замены в безопасном коде используются ссылки, которые обеспечивают правильное указание на имеющиеся объекты.
  3. Если ссылка статическая и ведёт к определённому элементу, например, immutable borrow = &Object , до момента смерти ссылки она не может изменяться любым пользователем.
  4. При наличии изменяющейся ссылки mutable borrow = &mut Object , нельзя прочитать содержимое любому другому пользователю весь период жизни ссылки.
  5. Разработчики делают акцент на Mac и *nix платформы, из-за этого работать на системе Windows можно только с использованием среды GNU .

Достаточно важна целевая аудитория, у языка Rust достаточное активное содружество, развитая система общения и обучения. Рекомендуем посетить канал IRC или Reddit . До сегодняшнего дня уже написано много интересных программ , а большинство из них до сих пор постоянно развиваются, их проекты можно найти на GitHub .

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

Главным, а, наверное, и единственным, недостатком является его чрезмерно активное развитие. По мере выхода новых версий несколько изменяется синтаксис, периодически появляется необходимость изменять логику поведения и разработки, чтобы подстроиться под появившиеся возможности. Ситуация будет продолжать ещё некоторое время до момента выхода Rust-1.0 .

Следить за изменениями в языке программирования помогает постоянная рубрика «This Week in Rust», которую можно найти в Rust ‘n Stuffs по ссылке . Здесь всегда есть информация о предшествующих и прошедших изменениях, а также перспективах развития языка.

Итак, хотим представить вашему вниманию недавнего именинника (15 мая 2016 года ему исполнился год) — Rust. Это универсальный язык программирования, разрабатываемый компанией Mozilla, три основных принципа которого: скорость, безопасность и эргономика. Сами создатели нескромно считают его одним наиболее вероятных наследников C/C++. Согласно опросу портала StackOverflow, именно Rust сегодня наиболее любимый разработчиками язык. Итак, давайте подробнее разбираться в том, что же он из себя представляет.

Rust для новичка

Не хочется никого обманывать, поэтому далее ответственное заявление: Rust довольно сложен для обучения. Во-первых, это обусловлено молодостью языка и, как следствие, малым количеством литературы. Во-вторых, выучить его человеку далёкому от программирования, возможно будет даже проще, чем знакомому с другими языками. Так, например, готового IT-специалиста будет сильно раздражать необходимость прописывать малейшие операции, а отсутствие как такового наследования в языке и просто поставит в тупик.

Впрочем, Rust быстро развивается (каждые 6 недель выходит новый релиз), сообщество растёт, а найти информацию в интернете уже не составляет никакого труда.

Как изучать

Почти всё необходимое вы можете найти на официальном сайте. Кроме того, сообщество последователей Rust весьма обширно и доброжелательно, поэтому за советом всегда можно обратиться в IRC (есть русский раздел) и официальный форум. Кроме того, понемногу стали появляться книги, в том числе электронные. Пока трудно оценить их качество, но факт такой имеется.

Для тех, кто прошёл начальную стадию знакомства, на GiHub можно найти уйму полезного материала, в том числе RFC и коммиты. Кроме того, вы можете посетить лично или хотя бы посмотреть интернет-трансляцию одной из конференций по Rust, намеченных на вторую половину года. Вот календарь:

  • 9-10 сентября конференция RustConf в Портленде, США;
  • 17 сентября конференция европейского сообществ RustFest в Берлине, Германия;
  • 27 октября конференция Rust Belt Rust в Питтсбурге, США;

Ну а чтобы познакомиться с теми, кто считает Rust своим призванием, и заодно спросить у них все премудрости, можете связаться с организаторами и участниками встреч поклонников языка в Москве.

Читайте также:  Смартфон нокиа на виндовс

Особенности

Немного дублируя то, о чём было сказано ранее, выделим основные плюсы и минусы языка Rust.

Плюсы:

  • Безопасная работа с памятью;
  • Высокое быстродействие;
  • Алгебраический тип данных;
  • Предсказуемость компиляции;

Минусы:

  • Некоторая избыточность кода;
  • Высокая интенсивность развития языка и, как следствие, отсутствие хорошей актуальной литературы для изучения;
  • Необходимость чётко и однозначно прописывать параметры для компиляции.

На самом деле к отличиям, вроде замены наследования на способности, быстро привыкаешь. Как только глаза привыкли, руки набились, Rust превращается во вполне рабочий язык, проще и функциональнее C++, но уступающий по «красивости» многим другим языкам программирования. Фактически же главное отличие Rust от конкурентов и предшественников — именно скорость и безопасность.

Востребованность

На сегодняшний день Rust популярен сред разработчиков игр, графики и операционных систем. Однако по понятным причинам количество стационарных мест, где бы требовались узкопрофильные знатоки Rust, в мире и уже тем более в России крайне невелико. Тем не менее, пока не видно никаких предпосылок, что язык канет в лету, больше похоже на планомерный захват мира. А значит хорошие навыки использования Rust в будущем помогут найти высокооплачиваемую интересную работу как в нашей стране, так и за рубежом.

Еще востребованного: профессия «Веб-разработчик».

Итак, хотим представить вашему вниманию недавнего именинника (15 мая 2016 года ему исполнился год) — Rust. Это универсальный язык программирования, разрабатываемый компанией Mozilla, три основных принципа которого: скорость, безопасность и эргономика. Сами создатели нескромно считают его одним наиболее вероятных наследников C/C++. Согласно опросу портала StackOverflow, именно Rust сегодня наиболее любимый разработчиками язык. Итак, давайте подробнее разбираться в том, что же он из себя представляет.

Rust для новичка

Не хочется никого обманывать, поэтому далее ответственное заявление: Rust довольно сложен для обучения. Во-первых, это обусловлено молодостью языка и, как следствие, малым количеством литературы. Во-вторых, выучить его человеку далёкому от программирования, возможно будет даже проще, чем знакомому с другими языками. Так, например, готового IT-специалиста будет сильно раздражать необходимость прописывать малейшие операции, а отсутствие как такового наследования в языке и просто поставит в тупик.

Впрочем, Rust быстро развивается (каждые 6 недель выходит новый релиз), сообщество растёт, а найти информацию в интернете уже не составляет никакого труда.

Как изучать

Почти всё необходимое вы можете найти на официальном сайте. Кроме того, сообщество последователей Rust весьма обширно и доброжелательно, поэтому за советом всегда можно обратиться в IRC (есть русский раздел) и официальный форум. Кроме того, понемногу стали появляться книги, в том числе электронные. Пока трудно оценить их качество, но факт такой имеется.

Для тех, кто прошёл начальную стадию знакомства, на GiHub можно найти уйму полезного материала, в том числе RFC и коммиты. Кроме того, вы можете посетить лично или хотя бы посмотреть интернет-трансляцию одной из конференций по Rust, намеченных на вторую половину года. Вот календарь:

  • 9-10 сентября конференция RustConf в Портленде, США;
  • 17 сентября конференция европейского сообществ RustFest в Берлине, Германия;
  • 27 октября конференция Rust Belt Rust в Питтсбурге, США;

Ну а чтобы познакомиться с теми, кто считает Rust своим призванием, и заодно спросить у них все премудрости, можете связаться с организаторами и участниками встреч поклонников языка в Москве.

Особенности

Немного дублируя то, о чём было сказано ранее, выделим основные плюсы и минусы языка Rust.

Плюсы:

  • Безопасная работа с памятью;
  • Высокое быстродействие;
  • Алгебраический тип данных;
  • Предсказуемость компиляции;

Минусы:

  • Некоторая избыточность кода;
  • Высокая интенсивность развития языка и, как следствие, отсутствие хорошей актуальной литературы для изучения;
  • Необходимость чётко и однозначно прописывать параметры для компиляции.

На самом деле к отличиям, вроде замены наследования на способности, быстро привыкаешь. Как только глаза привыкли, руки набились, Rust превращается во вполне рабочий язык, проще и функциональнее C++, но уступающий по «красивости» многим другим языкам программирования. Фактически же главное отличие Rust от конкурентов и предшественников — именно скорость и безопасность.

Востребованность

На сегодняшний день Rust популярен сред разработчиков игр, графики и операционных систем. Однако по понятным причинам количество стационарных мест, где бы требовались узкопрофильные знатоки Rust, в мире и уже тем более в России крайне невелико. Тем не менее, пока не видно никаких предпосылок, что язык канет в лету, больше похоже на планомерный захват мира. А значит хорошие навыки использования Rust в будущем помогут найти высокооплачиваемую интересную работу как в нашей стране, так и за рубежом.

Еще востребованного: профессия «Веб-разработчик».

9726552