Обновить
117.22

Rust *

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

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

Ещё одна статья о временах жизни (lifetimes) в Rust

Время на прочтение8 мин
Просмотры13K

Первые месяцы начинающего растомана как правило сводятся к ударам головой о концепцию времени жизни и владения. Некоторые на этом ломаются, но тем, кто смог пережить — это уже не кажется чем-то необычным или неправильным. Я опишу ключевые моменты, которые, как мне кажется, помогли быстрее и лучше адаптироваться к концепции лайфтаймов и владений.


Разумеется официальный растбук полнее и подробнее, но так же требует больше времени и терпения для полного понимания и впитывания всей информации. Я попытался избежать большого количества деталей и представить всё в порядке возрастания сложности, в попытке сделать данную статью доступней тем, кто или только начал смотреть раст, или же не очень понял начальные моменты из официального растбука.


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


Время жизни (lifetime)


Для начала нам надо освоиться с двумя вещами — конец блока и перемещение значения в другой блок. Позже мы начнём усложнять, добавив "одалживание", "мутабельность" и "скрытую мутабельность".

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

Выпуск Rust 1.33

Время на прочтение3 мин
Просмотры6.5K

Команда разработчиков Rust рада сообщить о выпуске новой версии Rust, 1.33.0. Rust — это язык программирования, который дает возможность каждому создавать надежное и эффективное программное обеспечение.


Если у вас установлена предыдущая версия Rust с помощью rustup, то для обновления Rust до версии 1.33.0 вам достаточно выполнить:


$ rustup update stable

Если у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.33.0 можно ознакомиться на GitHub.


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


Основные улучшения этого выпуска: значительное расширение возможностей const fn и стабилизация нового Pin API.


Расширение возможностей const fn


const fn теперь умеет гораздо больше, а именно:


  • безусловное (irrefutable) сопоставление с образцом (например, const fn foo((x, y): (u8, u8)) { ... })
  • let привязки (например, let x = 1;)
  • изменяемые let привязки (например, let mut x = 1;)
  • выражения присваивания (например x = y) и операторов присваивания (например, x += y), включая присваивание проекциям (например, полю структуры или результату оператора индексирования — x[3] = 42)
  • инструкции выражений (expression statements) (например, 3;)
Читать дальше →

На пальцах: ассоциированные типы в Rust и в чём их отличие от аргументов типов

Время на прочтение5 мин
Просмотры10K

Для чего в Rust есть ассоциированные типы (associated types), и в чём их отличие от аргументов типов (type arguments aka generics), ведь они так похожи? Разве недостаточно только последних, как во всех нормальных языках? У тех, кто только начинает изучать Rust, а особенно у людей, пришедших из других языков ("Это же дженерики!" — скажет умудрённый годами джавист), такой вопрос возникает регулярно. Давайте разбираться.


TL;DR Первые контролирует вызываемый код, вторые — вызывающий.

Научите меня плохому!

Бесстрашная защита. Безопасность потоков в Rust

Время на прочтение8 мин
Просмотры7K
Это вторая часть цикла статей «Бесстрашная защита». В первой мы рассказывали про безопасность памяти

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

  • Веб-сайты одновременно обслуживают несколько пользователей.
  • UI выполняет фоновую работу, которая не мешает пользователю (представьте, что каждый раз при вводе символа приложение подвисает для проверки орфографии).
  • На компьютере может одновременно выполняться несколько приложений.

Параллельные потоки ускоряют работу, но привносят набор проблем синхронизации, а именно взаимные блокировки и состояние гонки. С точки зрения безопасности, почему мы заботимся о безопасности потоков? Потому что у безопасности памяти и потоков одна и та же основная проблема: недопустимое использование ресурсов. Здесь атаки приводят к таким же последствиям, как атаки на память, включая повышение привилегий, выполнение произвольного кода (ACE) и обход проверок безопасности.
Читать дальше →

Rust новости #5 (январь 2019)

Время на прочтение8 мин
Просмотры14K

Предлагаю вашему вниманию субъективную подборку ржавых новостей за январь. В этой подборке: Rust 1.32, уход Стива Клабника и Ника Камерона, киш от Cloudflare, устройство rust-analyzer и страничной памяти, поиски GUI и async, Oxydyze конференция для встроенщиков.


КДПВ


Rust 1.32


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



Подробности в переводе новости.


Стив Клабник и Ник Камерон уходят из Mozilla


NYT firefox 1.0


Печальные новости: Стив Клабник и Ник "nrc" Камерон покидают Мозиллу.

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

Операционная система на Rust. Страничная память: продвинутый уровень

Время на прочтение21 мин
Просмотры9.1K
В этой статье объясняется, как ядру операционной системы получить доступ к фреймам физической памяти. Изучим функцию для преобразования виртуальных адресов в физические. Также разберёмся, как создавать новые сопоставления в таблицах страниц.

Этот блог выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий тикет. Все исходники для статьи здесь.

Введение


Из прошлой статьи мы узнали о принципах страничной организации памяти и о том, как работают четырёхуровневые страничные таблицы на x86_64. Мы также обнаружили, что загрузчик уже настроил иерархию таблиц страниц для нашего ядра, поэтому ядро работает на виртуальных адресах. Это повышает безопасность, но возникает проблема: как получить доступ к настоящим физическим адресам, которые хранятся в записях таблицы страниц или регистре CR3?
Читать дальше →

Бесстрашная защита. Безопасность памяти в Rust

Время на прочтение9 мин
Просмотры14K
В прошлом году Mozilla выпустила Quantum CSS для Firefox, который стал кульминацией восьми лет разработки Rust — безопасного для памяти языка системного программирования. Потребовалось более года, чтобы переписать основной компонент браузера на Rust.

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

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

QtCreator и его использование в качестве IDE для Rust

Время на прочтение3 мин
Просмотры14K
В общем попросил я у коллеги маленький гайд по тому как настроить QtCreator в качестве IDE для Rust и с его разрешения выкладываю. Сам Я использую CLion и позже напишу о том как с ним дела обстоят на этом поприще. Мопед не мой. Я просто разместил объяву. (с)

Что нужно современному программисту в первую очередь? Развитое абстрактное мышление? Сильный бэкграунд в математике? Возможно стрессоустойчивость??

Конечно же нет! Самое главное — хорошая IDE.

image

Если вы тоже, попытавшись осилить Rust, взгрустнули, взглянув на areweideyet
— добро пожаловать под кат.
Читать дальше →

Выпуск Rust 1.32

Время на прочтение5 мин
Просмотры7.9K

Команда разработчиков Rust рада сообщить о выпуске новой версии Rust, 1.32.0. Rust — это язык программирования, который дает возможность каждому создавать надежное и эффективное программное обеспечение.


Если у вас установлена предыдущая версия Rust с помощью rustup, то для обновления Rust до версии 1.32.0 вам достаточно выполнить:


$ rustup update stable

Если у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.32.0 можно ознакомиться на GitHub.


Небольшое замечание: за последнее время вышло несколько новых выпусков rustup! Чтобы обновить сам rustup, выполните rustup self update.

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


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

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

Пишем операционную систему на Rust. Страничная организация памяти

Время на прочтение17 мин
Просмотры32K
В этой статье представляем страницы, очень распространённую схему управления памятью, которую мы тоже применим в нашей ОС. Статья объясняет, почему необходима изоляция памяти, как работает сегментация, что такое виртуальная память и как страницы решают проблему фрагментации. Также исследуем схему многоуровневых таблиц страниц в архитектуре x86_64.

Этот блог выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий запрос.
Читать дальше →

Как я свою онлайн игру создавал. Часть 1: Работа с сетью

Время на прочтение4 мин
Просмотры14K


Привет всем! У меня недавно был отпуск, и появилось время спокойно попрограммировать свои домашние проекты. Захотел я, значит, свою простенькую онлайн игру сделать на Rust. Точнее, простенькую 2D стрелялку. Решил сначала сделать сетевую часть, а там уже видно будет, что да как. Так как жанр предполагает экшен во все поля, поэтому решил использовать протокол UDP. Начал проектировать архитектуру сетевой части. Понял что можно это все вынести в отдельную библиотеку. Получившуюся библиотеку я еще и на crates.io залил, под лицензией MIT, потому, что: а) Мне самому будет ее потом удобнее оттуда в свои проекты подключать. б) Может она еще кому-то пригодится и принесет пользу. За подробностями добро пожаловать под кат.
Читать дальше →

Rust новости #4 (декабрь 2018)

Время на прочтение6 мин
Просмотры6.3K

Поскольку праздники кончились, предлагаю вашему вниманию субъективную подборку ржавых новостей за декабрь. В этой подборке: безумие с растом, страшен ли раст, волна пророчеств, Rust 2018, Rust Analyzer.


КДПВ


Rust 1.31 & Rust 2018


Самое важное событие декабря — выпуск Rust 1.31 и Rust 2018, конечно. Туда очень много всего вошло:


редакция 2018, нелексические времена жизни, изменения системы модулей, дополнительные правила вывода времен жизни, const fn, новые инструменты, инструментальные проверки качества кода, документация, новый веб-сайт, улучшения в cargo.

Изменений так много, что обзор всех не получилось запихнуть в один пост, так что через несколько дней были опубликованы вспомогательные заметки:



Также, имеет смысл полистать мозиловский хорошо структурированный обзор/ликбез 2018й редакции языка: Rust 2018 is here… but what is it? (перевод, обсуждение).

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

Rust в 2019 году и далее: ограничения на рост

Время на прочтение7 мин
Просмотры6.2K
Как и просили, вот мои предложения по развитию Rust в 2019 году и далее.

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

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

TL;DR: Важно осознать проблему и запланировать явные механизмы по ограничению роста двух вещей:

  1. Обязательные общие технические артефакты, особенно само определение языка.
  2. Нагрузка на людей, участвующих в обсуждении этих артефактов.
Читать дальше →

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

Так ли страшен Rust, как его малюют

Время на прочтение10 мин
Просмотры41K

Некоторое время назад я начал понимать необходимость разнообразить мой опыт программирования исключительно на C#. После некоторого изучения различных вариантов, таких как Haskell, Scala, Rust и некоторых других, выбор пал на последний. Со временем я начал обращать внимание, что Rust всё больше и больше рекламируется исключительно как "системный язык", который нужен для вырвиглазно сложных компиляторов и супер-нагруженных систем, с особыми требованиями к безопасности и многопоточности, а для вариантов попроще есть Go/Python/Java/..., в то время как я с удовольствием и весьма успешно использовал его как замену моей рабочей лошадке C#.



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

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

Мысли о Rust 2019

Время на прочтение6 мин
Просмотры17K
Коллеги, доброго вечера всем!

Мы с радостью предлагаем вам перевод по-настоящему программной статьи от Рафа Левина, чей титанический труд над развитием языка Rust вызывает уважение и пиетет:



Без ложной скромности и без шапкозакидательства, предметно и увлеченно уважаемый автор откликнулся на призыв сообщества Rust, опубликованный по ссылке в начале этой статьи. Надеемся, получилось интересно и жизнеутверждающе.
Читать дальше →

Первые шаги по Rust

Время на прочтение7 мин
Просмотры82K

image


Всем привет. Недавно познакомился с новым для себя языком программирования Rust. Я заметил, что он отличается от других, с которыми мне до этого доводилось сталкиваться. Поэтому решил покопать глубже. Результатами и своими впечатлениями хочу поделиться:


  • Начну с главной, на мой взгляд, особенности Rust
  • Опишу интересные детали синтаксиса
  • Объясню, почему Rust, скорее всего, не захватит мир

Сразу поясню, что я около десяти лет пишу на Java, так что рассуждать буду со своей колокольни.

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

Изучаю Rust: Как я UDP чат сделал c Azul

Время на прочтение16 мин
Просмотры12K


Я продолжаю изучать Rust. Я еще много не знаю, поэтому делаю много ошибок. В прошлый раз я попробовал сделать игру Змейка. Попробовал циклы, коллекции, работу с 3D Three.rs. Узнал про ggez и Amethyst. В этот раз я попробовал сделать клиент и сервер для чата. Для GUI использовал Azul. Так же смотрел Conrod, Yew и Orbtk. Попробовал многопоточность, каналы и работу с сетью. Учел ошибки прошлой статьи и постарался сделать эту более развернутой. За подробностями добро пожаловать под кат.
Читать дальше →

Выпуск Rust 1.31 и Rust 2018

Время на прочтение9 мин
Просмотры6.2K

Команда разработчиков Rust рада сообщить о выпуске новой версии Rust, 1.31.0, а также "Rust 2018". Rust — это язык программирования, который дает возможность каждому создавать надежное и эффективное программное обеспечение.


Если у вас установлена предыдущая версия Rust с помощью rustup, то для обновления Rust до версии 1.31.0 вам достаточно выполнить:


$ rustup update stable

Если у вас еще не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. С подробными примечаниями к выпуску Rust 1.31.0 можно ознакомиться на GitHub.


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


Rust 1.31, возможно, самый значительный выпуск со времен Rust 1.0! В данный выпуск включена первая итерация «Rust 2018», но это не единственное нововведение! Обзор улучшений будет длинный, поэтому вот оглавление:


  • Rust 2018
    • Нелексические времена жизни
    • Изменения системы модулей
  • Дополнительные правила вывода времен жизни
  • const fn
  • Новые инструменты
  • Инструментальные проверки качества кода
  • Документация
  • Предметные рабочие группы
  • Новый веб-сайт
  • Стабилизация стандартной библиотеки
  • Улучшения в Cargo
  • Разработчики выпуска
Читать дальше →

Вышел Rust 2018… но что это такое?

Время на прочтение11 мин
Просмотры21K
Статья написана Лин Кларк в сотрудничестве с командой разработчиков Rust («мы» в тексте). Можете прочитать также сообщение в официальном блоге Rust.

6 декабря 2018 года вышла первая версия Rust 2018. В этом релизе мы сосредоточились на производительности, чтобы разработчики Rust стали работать максимально эффективно.


Временнáя шкала показывает переход функций из бета-версии в Rust 2018 и Rust 2015. Она окружена значками для инструментов и четырёх областей: WebAssembly, embedded, networking и CLI. Красный круг — эффективность разработчика — окружает всё, кроме Rust 2015

Но вообще непросто объяснить, что такое Rust 2018.

Некоторые представляют его новой версией языка… примерно так и есть, но не совсем. Я говорю «не совсем», потому что здесь «новая версия» означает не то, что новые версии других языков.
Читать дальше →

Rust новости #3 (ноябрь 2018)

Время на прочтение9 мин
Просмотры6.5K

КДПВ про Rust2018


Предлагаю вашему вниманию субъективную подборку ржавых новостей за ноябрь. В этой подборке: Rust 2018, RustRush, видео с конференций, Amazon Lambda и Firecracker, квизы, переход exonum на actix-web, 10 причин использовать Rust.


Результаты Rust опроса 2018


график из опроса про сложность изучения тем


Опубликованы результаты ежегодного Rust-опроса (обсуждение), который шел с августа.

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