Привет. Меня зовут Степан Кольцов. Недавно я выступал на Java Party в киевском офисе Яндекса с докладом про язык Rust, который несёт в себе очень много для будущего программирования. Некоторые коллеги утверждают, что я всегда говорю про Rust, когда у меня есть такая возможность. Сегодня я хочу поделиться этим рассказом с вами и объяснить, почему мне это кажется важным.
Для начала пара слов о том, что такое Rust. Последние 15 лет между разработчиками на Java и на C++ ведётся спор о том, какой язык программирования хуже — Java или C++. Программы на C++ глючат, падают, и в них утекает память. Программы на Java тормозят и требуют слишком много памяти.
Rust — новый современный язык программирования, разрабатываемый компанией Mozilla — решает проблемы Java и C++: программы, написанные на Rust, одновременно быстрые и безопасные. Rust является таким же низкоуровневым (в смысле close-to-metal) языком программирования, как и C++, однако в язык встроены конструкции, позволяющие на этапе компиляции доказывать, что в программе не случатся ошибки работы с памятью, как то обращение после использования, двойное удаление, использование неинициализированной памяти и т.п. В Rust для этого используется механизм borrowed pointers. Большая часть моего рассказа была посвящена описанию этого механизма.
Кроме того, Rust исправляет многие ошибки, допущенные при проектировании C++ и Java. Например, шаблоны в Rust, в отличие от C++, статически типизированы, а вместо дженериков Java используется механизм, похожий на тайпклассы Haskell.
В данный момент язык программирования Rust ещё не начал использоваться в промышленном программировании, и найти работу программистом на Rust прямо завтра, скорее всего, не получится. Однако изучать Rust стоит — чтобы лучше программировать на Java и C++ и чтобы понимать, в каком направлении развивается современное программирование.
Сам я программирую на работе в основном на Java и С++. Пользуясь этими языками, я испытываю страдания. Предполагается, что Rust меня и всех остальных от страданий избавит.
Я пристально слежу за тем, что происходит в мире Rust, и представляю, что там вообще сейчас происходит. Когда я впервые познакомился с этим языком, у меня появилось ощущение, что я был слеп, но вдруг прозрел. Раньше я был уверен, что программисту представляется бинарный выбор: либо программа пишется на C++, работает быстро и падает, либо программа пишется на Java, работает безопасно, но медленно. Оказалось, что есть еще другие подходы: программа может быть одновременно быстрой и безопасной. Почти весь мой рассказ посвящен тому, как устроена работа с памятью в Rust, ведь работа с памятью — это главная проблема С++.
Java считается безопасной средой, но при этом у программ на Java большой оверхед по памяти и CPU. Кроме того, Java не позволяет безопасно писать многопоточные программы. Java никак не гарантирует, что если объект предназначен для работы из одного потока, то его не получится использовать в разных потоках. В Rust такой проблемы нет. Java не гарантирует, что вы не забудете поставить mutex.
План рассказа рассказа (на видео):
- Примеры кода;
- Основные типы данных;
- Про то, что перемещение объектов сделано лучше, чем в C++11;
- Указатели;
- Как падают программы на C++, и как такие же программы на Rust не падают;
- Время жизни объектов в языке Rust;
- Запрет алиасинга в Rust, и какие проблемы этот запрет решает;
- Как в Rust сделан mutex.
Автор: stepancheg