Обновить
134.38

Rust *

Мультипарадигмальный компилируемый язык

Сначала показывать
Порог рейтинга
Уровень сложности

Установка Rust на Windows

Время на прочтение5 мин
Охват и читатели36K
Вы можете установить Rust, просто скачав инсталлятор и дважды кликнув по нему. Хотя разработчикам, имеющим дело с более сложными инструментами, или тем, кому нужно собирать "небезопасные" (unsafe) C/C++ библиотеки из исходников, предстоит сделать немного больше. Тем не менее, если проявить немного упорства, разобраться в этом вполне реально.

Во время всего этого процесса следите за тем, что вы устанавливаете правильную версию библиотек: в данный момент для MSVC доступна только 64-битная версия Rust. Вы будете то и дело получать странные ошибки, если попробуете использовать 32-битные библиотеки. Поверьте мне.

Повторюсь: если вам нужен компилятор Rust, идите на официальный сайт и жмите "Install". Если же вы планируете работать с нативными C/C++ библиотеками, читайте дальше!
Читать дальше →

man!(D => Rust).basics

Время на прочтение7 мин
Охват и читатели8.4K
Просьба не воспринимать эту статью слишком серьёзно, переходить с D на Rust не призываю, просто после прочтения серии переводов за авторством Дмитрия aka vintage, мне стало любопытно переписать примеры кода на Rust, тем более, что автор добавил этот язык в голосование. Мой основной рабочий инструмент — С++, хотя в последнее время активно интересуюсь Rust. За D несколько раз пытался взяться, но каждый раз что-то отталкивало. Ни в коем случае не хочу сказать, что это плохой язык, просто местами он "слишком радикален" для "убийцы плюсов", например, имеется GC (пусть и отключаемый), а в других местах наоборот слишком близок к С++ со всеми его неочевидными нюансами.

Самое забавное тут то, что после изучения Rust отношение к D несколько изменилось — в плане лаконичности и выразительности последний сильно выигрывает. Впрочем, "явность" Rust-сообщество наоборот считает преимуществом. По моим ощущениям, в Rust чаще руководствуются "академической правильностью", а в D более практичный подход. Что лучше — сложный вопрос, лично я и сам не всегда могу определиться.

Впрочем, это всё очень субъективно, так что давайте вместе посмотрим на код. Код на Go приводить не буду, при желании, можно посмотреть в оригинальной статье.
Читать дальше →

Советы по написанию библиотек на Rust

Время на прочтение9 мин
Охват и читатели11K

Перевод статьи Pascal Hertleif "Good Practices for Writing Rust Libraries" (2015.10.24).



Прошел примерно год, как меня заинтересовал Rust, язык программирования от Mozilla Research, сосредоточенный на решении трёх задач: безопасность, скорость и параллелизм. Он такой же низкоуровневый, как Си или C++, имеет хорошую систему типов (с обобщениями (generics) и типажами (traits)), дружелюбный компилятор и отличный менеджер пакетов Cargo.


С выпуска Rust 1.0 прошло уже полгода (май 2015): многие библиотеки (пакеты, crates), включая некоторые мои, были опубликованы в центральном регистре crates.io. Вот неплохие практики (еще рановато называть их "лучшими"), которые помогут другим людям находить, использовать и дополнять вашу библиотеку.

Читать дальше →

Rust и Swift (вступление, первая и вторая части)

Время на прочтение7 мин
Охват и читатели13K
От переводчика: решил взяться за перевод цикла, в котором автор параллельно изучает Rust и Swift и сравнивает их между собой. Старался сохранить стиль и манеру письма оригинала, хотя местами и позволял себе сократить текст (надеюсь) без потери смысла.
Автор вначале кажется слишком предвзятым в сторону Rust, но потом его суждения становятся более взвешенными. Правда, сам я со Swift очень поверхностно знаком, а в Rust, хотелось бы думать, кое-что понимаю, так что тоже не являюсь беспристрастным в этом вопросе. Сравнение становится более интересным, начиная с четвёртой части, но, как говорится, из песни слова не выкинешь.


Rust и Swift

Сравнивая два увлекательных, новых и, очевидно, (хотя и не всегда) похожих языка программирования.

Предыстория

Летом 2015 года я начал изучать Rust. Затем, в сентябре 2015, я взялся за Swift. На первый взгляд, сходство между двумя языками очевидно, и они достигли стабильной версии примерно в одно время: релиз Rust 1.0 состоялся в мае 2015, а релиз Swift 2.0 (который фактически похож на 1.0, поскольку 1.0 служил публичной бетой) — в июне 2015. Оба вдохновлялись такими языками, как Haskell, в то же время сохраняя С-подобный (на самом деле, конечно, ALGOL-подобный) синтаксис, более привычный многим разработчикам, на которых ориентированы эти языки.

Так что, когда я начал книгу про Swift, я не мог удержаться от сравнения. Хотя оба языка кажутся очень похожими, они также очень сильно различаются с точки зрения дизайна языка и стоящей за этим философии — и эти отличия очень интересны!
Читать дальше →

Работа с С-объединениями (union) в Rust FFI

Время на прочтение5 мин
Охват и читатели5.4K
Предлагаю вашему вниманию перевод статьи "Working with C unions in Rust FFI" за авторством Herman J. Radtke III.

Примечание: Эта статья предполагает, что читатель знаком с Rust FFI, порядком байтов (endianess) и ioctl.


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

Модули расширения Python на Rust

Время на прочтение9 мин
Охват и читатели17K


“Absolute statements are the root of all evil.
The key is balance. There are no answers, only questions.”
????


Автор статьи: zolkko.
Оптимизации

Когда говорят про оптимизацию в контексте ПО, часто подразумевают оптимизацию производительности программиста и/или оптимизацию самого ПО.

Исходя из YAGNI-принципа, Python позволяет программисту сосредоточиться на реализации ПО, избавив его от необходимости заботиться о низкоуровневых вещах: регионах памяти, в которых выделяются объекты, освобождении памяти, соглашениях о вызовах.

На обратную проблему в одной из его лекций о Haskell указал Саймон Джонс. У него был слайд со стрелкой, закрашенной градиентом. В начале было написано “no types”, посередине — “Haskell”, в конце — “Coq”. Указав на Coq, он сказал: “This stresses power over usability. Right?! You need a PhD here!”[1]. Несмотря на то, что это была шутка, мантра Python — одна из любимых программистами особенностей этого языка. По моему опыту, это то, что позволяет выпускать готовый продукт несколько быстрее.
Читать дальше →

Почему владение/заимствование в Rust такое сложное?

Время на прочтение5 мин
Охват и читатели12K
Оригинал статьи написан живущим на вашингтонщине Иваном Сагалаевым, мужем небезызвестной Алёны C++.

Сама статья.

Работать с чистыми функциями просто: вы передаете аргументы и получаете результат, при этом нет никаких побочных эффектов. С другой стороны, если функция производит побочные эффекты, такие, как изменение собственных аргументов или же глобальных объектов, то найти причины этого трудно. Мы привыкли также, что если видим что-то вроде player.set_speed(5), то можно быть уверенным, что тут собираются изменить объект player предсказуемым способом (и, возможно, посылают некоторые сигналы куда-нибудь).

Система владения/заимствования языка Rust сложна и она создает совершенно новый класс побочных эффектов.
Читать дальше →

Анонс Rust 1.7

Время на прочтение4 мин
Охват и читатели12K
Мы рады объявить новую версию Rust, 1.7. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

Как всегда, вы можете установить Rust 1.7 с соответствующей страницы официального сайта, а также посмотреть подробный список изменений для версии 1.7 на Github. Этот релиз включил в себя 1300 патчей.
Читать дальше →

Rust в деталях, часть 2

Время на прочтение27 мин
Охват и читатели16K

Часть 2: Отправка и получение сообщений


В этой серии статей мы рассматриваем процесс создания масштабируемого сервера для чата в реальном времени, во всех деталях. Цель статьи — показать пример практического применения языка Rust на фоне изучения концепций системного программирования и системных API, шаг за шагом.

Вторая часть является прямым продолжением первой, поэтому если вы ее пропустили (или забыли контекст), то рекомендую сначала ознакомиться с ней. В этой части мы продолжаем реализацию протокола WebSocket.
Читать дальше →

Traits из коробки

Время на прочтение7 мин
Охват и читатели9.8K
В стандартной библиотеке языка Rust есть несколько трейтов, которые можно объявить "на халяву" с помощью derive. Эти трейты обязательно пригодятся при объявлении собственных структур, они очень часто встречаются в различных open-source библиотеках, но их реализация генерируется компилятором и может вызывать вопросы.
Часто видите:

#[derive(RustcEncodable, RustcDecodable, Clone, Eq, Default)]
struct Foo {
}

и не понимаете, что это и где?
Тогда вам под кат!

Neon: Node + Rust

Время на прочтение5 мин
Охват и читатели10K
Предлагаю вашему вниманию перевод статьи "Neon: Node + Rust".

Javascript программистам, которых заинтриговала rust-овская тема бесстрашного программирования (сделать системное [низкоуровневое] программирование безопасным и прикольным), но при этом ждущих вдохновений или волшебных пендалей — их есть у меня! Я тут поработал немного над Neon — набором API и тулзов, которые делают реально легким процесс написания нативных расширений под Node на Rust.

TL;DR:


  • Neon — это API для создания быстрых, надежных нативных расширений Node на Rust
  • Neon позволяет использовать параллелизм Rust-а с гарантированной потокобезопасностью
  • Neon-cli позволяет легко и непринужденно создавать Neon проект и дает легкий старт… и наконец...
  • проекту требуется помощь!

Читать дальше →

Rust и парадокс Блаба

Время на прочтение11 мин
Охват и читатели33K

Несколько недель назад я наткнулся на сравнительный анализ Rust, D и Go от Андрея Александреску. Андрей, уважаемый член сообщества C++ и главный разработчик языка программирования D, нанес Rust сокрушительный удар под конец своего повествования, высказав нечто, что выглядит довольно проницательным наблюдением:



Чтение кода на Rust навевает шутки о том, как «друзья не позволяют друзьям пропускать день ног» и вызывает в голове комические образы мужчин с халкообразным торсом, балансирующим на тощих ногах. Rust ставит во главу угла безопасность и ювелирное обращение с памятью. В действительности, это довольно редко является настоящий проблемой, и такой подход превращает процесс мышления и написания кода в монотонный и скучный процесс.



После нескольких встреч с Андреем, увидев некоторые из его выступлений, я убедился, что он любит подшучивать. Тем не менее, давайте проглотим наживку. Эта шутка смешная только потому, что она выглядит смешной, или может быть потому, что в ней только доля шутки?

Читать дальше →

Анонс Rust 1.6

Время на прочтение2 мин
Охват и читатели8.5K
Привет в 2016-м году! Мы рады объявить первый в этом году релиз Rust — 1.6. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

Как всегда, вы можете установить Rust 1.6 с соответствующей страницы нашего сайта, а также посмотреть подробный список изменений для версии 1.6 на Github. Этот релиз включил в себя 1100 патчей.

Что вошло в стабильную версию 1.6


В этот релиз вошли ряд небольших доработок, одно большое нововведение и изменение на Crates.io.
Читать дальше →

Ближайшие события

Rust 1.5: Cargo с блэкджеком

Время на прочтение3 мин
Охват и читатели12K
Под новогодние праздники был выпущен Rust 1.5. Так как близится релиз 1.6, хочу наверстать упущенное, и рассказать о том, что появилось в последней стабильной версии. Существенные изменения затронули Cargo!
Читать дальше →

Архитектура браузерного движка Servo

Время на прочтение8 мин
Охват и читатели13K
От переводчика. Позвольте представить на суд хабрасообщества перевод части документации о браузерном движке Servo. Этот движок разрабатывается сообществом Mozilla на языке Rust, и является, пожалуй, самым большим активным проектом на этом языке. В этом документе рассказывается об архитектуре движка, как разработчики используют Rust совместно с C++ и с какими трудностями они столкнулись при разработке. Оригинал доступен в wiki проекта на github.

Это очень поверхностный обзор архитектуры Servo. Servo остаётся прототипом, и некоторые части архитектуры ещё не представлены в виде кода. Некоторые важные аспекты системы ещё не были подробно рассмотрены.

Обзор и цели



Читать дальше →

ProDBG переходит на Rust

Время на прочтение4 мин
Охват и читатели10K

Немного о ProDBG от переводчика и автора проекта


КДПВ ProDBG — это новый дебаггер, который сейчас разрабатывает Daniel Collin. Одна из целей проекта — поддержка множества архитектур и операционных систем. Изначально пишется на C/C++, заложена поддержка плагинов. На данный момент находится на ранней стадии разработки, и в основном нацелен на MacOS. Далее передаю слово автору поста.


Как известно тем из вас, кто читает меня в Твиттере, я не очень люблю C++. У него свои обычные проблемы с заголовочными файлами, отстойными шаблонами, и так далее. И большая проблема — найти альтернативу. Я рассматривал вариант перейти на C#, но сделать так, чтобы он хорошо заработал на всех платформах, кажется очень сложной задачей (например, на данный момент поддержка x86 на Mac практически отсутствует). К тому же некоторым людям такой выбор будет не по вкусу.

Мне нравится (Common) Lisp. Я восхищаюсь устройством его макросов, в нём есть та элегантность, которая встречается не во всех языках. Однако он кажется каким-то чужеродным для многих людей, так что вкладывать в проект станет намного сложнее. К тому же я хочу по возможности использовать язык без сборщика мусора, и хотя Lisp можно сильно ускорить, сделать это не так уж просто.
Читать дальше →

Rust в 2016 году

Время на прочтение5 мин
Охват и читатели21K
2015 год был значительным годом для Rust: мы выпустили версию 1.0, стабилизировали большинство элементов языка и кучу библиотек, значительно выросли как сообщество, а также реорганизовали управление проектом. Может показаться что 2016 год не будет таким же интересным (будет трудно превзойти выпуск 1.0), но это будет супер-важный год для Rust, в котором произойдет много захватывающих вещей. В этой статье я расскажу о том, что, как я думаю, должно произойти. Это не официальная позиция и не обещание разработчиков Rust.

2015


Прежде чем мы поговорим о будущем, вот несколько цифр за прошлый год:

В 2015 году силами сообщества Rust:

Читать дальше →

Создание функции на Rust, которая возвращает String или &str

Время на прочтение7 мин
Охват и читатели11K

От переводчика


КДПВ Это последняя статья из цикла про работу со строками и памятью в Rust от Herman Radtke, которую я перевожу. Мне она показалась наиболее полезной, и изначально я хотел начать перевод с неё, но потом мне показалось, что остальные статьи в серии тоже нужны, для создания контекста и введения в более простые, но очень важные, моменты языка, без которых эта статья теряет свою полезность.


Мы узнали как создать функцию, которая принимает String или &str (англ.) в качестве аргумента. Теперь я хочу показать вам как создать функцию, которая возвращает String или &str. Ещё я хочу обсудить, почему нам это может понадобиться.
Читать дальше →

String и &str в функциях Rust

Время на прочтение6 мин
Охват и читатели25K
КДПВ
Этот пост посвящается всем тем, кого смущает необходимость использовать to_string(), чтобы заставить программы компилироваться. И я надеюсь пролить немного света на вопрос о том, почему в Rust два строковых типа String и &str.
Читать дальше →

Создание функции на Rust, которая принимает String или &str

Время на прочтение3 мин
Охват и читатели12K

От переводчика


КДПВСтатья — одна из серии постов, рассказывающих об использовании некоторых полезных библиотечных типажей и связанных с ними идиом Rust на примере строковых типов данных. Информация бесспорно полезная как для начинающих программистов на Rust, так и для тех, кто уже успел себя немного попробовать в этом языке, но ещё не совсем освоился с богатой библиотекой типажей. Оригинальный пост содержит несколько неточностей и опечаток в коде, которые я постарался исправить в процессе перевода, однако в общем и целом описанные подходы и мотивация правильные, подходящие под понятие «лучших практик», а потому заслуживают внимания.


В моём последнем посте (англ.) мы много говорили об использовании &str как предпочтительного типа для функций, принимающих строковые аргументы. Ближе к концу поста мы обсудили, когда лучше использовать String, а когда &str в структурах (struct). Хотя я думаю, что в целом совет хорош, но в некоторых случаях использование &str вместо String не оптимально. Для таких случаев нам понадобится другая стратегия.
Читать дальше →