
Вокруг Rust в Linux-сообществе до сих пор не утихают жаркие споры. Кто-то считает его спасением, а кто-то — проклятием. В дебатах сталкиваются две позиции: сторонники видят в нем ключ к безопасности и модернизации ядра, противники опасаются усложнения и нарушения традиционных подходов.
Давайте разберем, как он появился, какие точки роста сделали его рабочим, где он уже побеждает и почему вы его недооцениваете. А также подскажем, как Rust-разработчикам сделать вклад в развитие реального open source-проекта. Детали под катом.
Как Rust рос и развивался
Rust — это язык, который вырос не из попытки придумать что-то «совсем новое», а из желания спасти будущее программирования от ошибок прошлого. Именно так о нем сказал его автор Грэйдон Хор.
В начале нулевых было два подхода к созданию ЯП: упор на скорость или на безопасность. Программы на С и C++ работали быстро, но могли дать сбой из-за случайной ошибки программиста. Java, напротив, снижал подобные риски, но взамен требовал больше времени на исполнение.
Нужно было что-то, что объединяло бы мощь С и C++ со стабильностью Java. И это не революция ради революции, а умный апгрейд идей, давно знакомых разработчикам, но теперь с гарантией безопасности.
История Rust началась в 2006 году. Тогда Грэйдон Хор, работавший в Mozilla, вечерами в порыве энтузиазма экспериментировал с новым языком. Ему хотелось решить проблему внезапного падения сервисов из-за нехватки памяти. Даже название он выбрал с иронией — Rust, в честь ржавчины (грибка). Тот факт, что эти организмы не только весьма живучи, но и быстро распространяются и переживают почти любые условия, показалось Хору отличной метафорой для языка, который должен стать одновременно надежным и быстрым.
С самого старта он задал правила игры: сначала семантика, потом синтаксис. Поэтому ранние версии Rust выглядели лаконично и даже нескольки аскетично: ключевые слова были максимум из пяти букв, а вместо привычных return или function использовались короткие ret и fn. Хор хотел, чтобы язык был строгим по смыслу и компактным в выражении.

Ключевые понятия, которые там сформировались, — ownership (кто владеет ресурсом) и borrow checker (механизм заимствования) — звучат громоздко. Но по сути это просто строгие правила для памяти: компилятор проверяет, у кого ключи памяти, и не дает двум «владельцам» ломать друг другу жизнь.
Через три года после зарождения идеи Mozilla решила финансировать разработку Rust. Уже в 2010 на конференции Mozilla Summit новый язык программирования показали публике. Интересно, что первый компилятор Rust был написан вовсе не на нем самом, а на OCaml — языке, который часто используют для создания компиляторов и академических инструментов.
Однако со временем команда разработчиков Rust переписала компилятор полностью на самом Rust, сделав его самодостаточным. Он использовал LLVM как бэкенд для генерации машинного кода. В 2011 году проект сделал исторический шаг — компилятор смог скомпилировать сам себя. Для разработчиков это был своеобразный «момент взросления»: язык доказал свою состоятельность.
Первая официальная альфа-версия the Rust lang (0.1) появилась в январе 2012 года. А в апреле 2013 года Mozilla пошла еще дальше и объявила о запуске проекта Servo. Это был браузерный движок, полностью написанный на Rust. Servo должен был показать, что Rust — это не очередной академический язык, а инструмент для создания сложных и высоконагруженных систем.
Выход первой стабильной версии Rust 1.0 в мае 2015 года обозначил готовность языка к промышленному использованию. Стабильность API позволила разработчикам создавать на Rust долгосрочные проекты без страха, что что-то внезапно сломается в следующих обновлениях.
Сильным драйвером стала интеграция инфраструктуры: пакетный менеджер Cargo, репозиторий crates.io для публикации библиотек и rustup для управления версиями компилятора. Cargo, например, стал эталоном удобного пакетного менеджера, которым вдохновлялись другие языки.
Rust сформировал свое сообщество, где можно делиться и использовать пакеты, делать сборки и управлять зависимостями без боли. Именно после 1.0 о Rust заговорили как о полноценном рабочем инструменте, а не о любопытном проекте.
В дальнейшем в нем появились развитые статические анализаторы кода, такие как Clippy, и автоматический форматировщик fmt. Инструмент Miri позволял выполнять интерпретацию кода Rust для поиска ошибок времени выполнения. Важнейший шаг — внедрение async/await, которые упростили работу с асинхронным программированием и открыли Rust дорогу в разработку масштабируемых сетевых приложений и микросервисов.
Одновременно с этим стали набирать обороты проекты по поддержке WebAssembly (WASM), где Rust занял ведущее место как язык для создания быстрых веб-приложений и новых видов интерактивного контента в браузере.

В 2021 году была основана Rust Foundation, для поддержки развития языка, координацию усилий крупных участников и управление открытым проектом на профессиональном уровне. Одним словом — институционализация. В декабре 2022 года the Rust-programming-language стал первым языком (кроме C и Assembler), поддерживаемым при разработке Linux-ядра. А в 2023 году Stack Overflow обнаружил, что Rust является «самым любимым» языком программирования среди разработчиков.
Влияние крупных корпораций — Microsoft, Google, Amazon — сформировало мощный бэкграунд для Rust. Особое внимание сообщество уделяет образованию: язык развивается через официальные онлайн-курсы, документацию, мероприятия и конференции, а значит притягивает специалистов уровня мидл и выше.
Небольшой список рекомендаций
The Rust Programming Language — бесплатная онлайн книга. Она охватывает базовые и продвинутые концепции языка и является основным учебником для изучения Rust.
Rustlings — интерактивный тренажер с практическими упражнениями, помогающий закрепить навыки чтения и написания кода на Rust в собственном окружении разработчика. Rustlings отлично дополняет книгу.
Rust Compiler Error Index — компилятор настолько разговорчив что, во время написания программы вы будете наслаждаться простынями всяких ошибок. В этом томе все эти ошибки расписаны и рассказаны.
The Rust Reference — полное, дотошное руководство, которое расскажет и покажет что делает каждая закорючка на экране. Хотите знать как Rust разложит в памяти ваш enum? Вам сюда.
Сайт rust-lang.org, где доступна широкая коллекция документации, примеров и руководств для изучения различных аспектов языка и его экосистемы.

Selectel Tech Day — 8 октября
Разберем реальный опыт IT-команд, технический бэкстейдж и ML без спецэффектов. 15 стендов и интерактивных зон, доклады, мастер-классы, вечерняя программа и нетворкинг. Участие бесплатное: нужна только регистрация.
Rust vs C++ vs C# vs Java
Rust стал по-настоящему «рабочим» языком программирования благодаря комплексному набору факторов, которые улучшили опыт разработки и облегчили переход к промышленному применению. Рассмотрим синтаксис языка в сравнении с другими популярными решениями. Все четыре кода делают одно и то же — проверяют четность числа и выводят результат в консоль.
Rust
fn main() {
let number = 25;
if number % 2 == 0 {
println!("{} is even.", number);
} else {
println!("{} is odd.", number);
}
}
Переменная number объявляется с помощью let (по умолчанию неизменяемая). Условный оператор if проверяет остаток от деления на 2, а для вывода используется макрос println!. В Rust выражения обычно не заканчиваются точкой с запятой, если значение результата нужно вернуть или распечатать. Код компилируется в исполняемый файл с хорошей безопасностью памяти благодаря системе владения.
Такой синтаксис называют C-подобным, потому что его корни восходят к языку С, который появился еще в далеких семидесятых. Сейчас это фактически стандарт корпоративной разработки — если знаете такой синтаксис, сможете быстро пересесть на Java, Swift, C# и любой другой современный язык.
C++
#include <iostream>
int main() {
int number = 25;
if (number % 2 == 0) {
std::cout << number << " is even." << std::endl;
} else {
std::cout << number << " is odd." << std::endl;
}
return 0;
}
В C++ вводится переменная number типа int. Вывод организован через поток std::cout. Условие и оператор % работают так же, как в Rust.
Код требует явного return 0; в конце функции main. C++ имеет более сложный синтаксис и меньше гарантий безопасности памяти, чем Rust, что может привести к ошибкам. Но при этом он предоставляет тонкий контроль ресурсов.
C#
using System;
class Program
{
static void Main()
{
int number = 25;
if (number % 2 == 0)
{
Console.WriteLine($"{number} is even.");
}
else
{
Console.WriteLine($"{number} is odd.");
}
}
}
C# — язык с управляемой памятью и сборщиком мусора. Синтаксис похож на C++ с классами и методами. Вывод осуществляется через Console.WriteLine(). Интерполяция строк с помощью $"{}" делает код более читаемым. C# поддерживает асинхронное программирование и обширную стандартную библиотеку, но уступает по контролю памяти Rust.
Java
public class Main {
public static void main(String[] args) {
int number = 25;
if (number % 2 == 0) {
System.out.println(number + " is even.");
} else {
System.out.println(number + " is odd.");
}
}
}
Java — строго объектно-ориентированный язык. Все функции обязаны быть внутри классов. Вывод — через System.out.println(). Компиляция в байт-код JVM добавляет портируемость, но немного снижает производительность по сравнению с нативными языками. Управление памятью реализовано сборщиком мусора, что упрощает разработку, но снижает контроль.
Так что же сделало Rust по-настоящему рабочим
Во-первых, интеграция Cargo и crates.io кардинально снизила технические барьеры в создании, сборке и распространении программ. Cargo — это полноценный менеджер проектов, который автоматизирует управление зависимостями, компиляцию, тестирование и публикацию пакетов. Вместе с crates.io — огромным репозиторием библиотек — он стал экосистемным сердцем Rust, позволив разработчикам легко искать, использовать и мейнтейнить пакеты.
Cargo решает множество проблем, с которыми разработчики языков часто сталкиваются при работе с зависимостями: конфликтами версий, разными сборками и процессом обновления. За счет этого скорость разработки и стабильность проектов существенно выросли, а сообщество получило инструмент для активного обмена и повторного использования кода.
Вторым значимым фактором стала продуманная система backward compatibility и концепция edition — редакции языка. Rust с самого начала придерживался политики «Если работает, значит не трогай», то есть код на старых версиях продолжает работать без изменений. Вместе с этим каждое новое «издание» языка вводит улучшения и корректировки, которые могут включать улучшение синтаксиса, оптимизации и исправления устаревших паттернов, но при этом строго контролируются, чтобы не ломать существующий код.
Компании и разработчики внедряли новые версии языка в свои производственные цепочки без болезненных миграций и внезапных багов, что очень важно для долгосрочных проектов. Edition-система позволяет одновременно поддерживать несколько стандартов кода и постепенно переходить от устаревших к новым практикам.
Наконец, комплекс инструментов, ориентированных на developer experience. Автоматический форматировщик rustfmt позволяет разработчикам забыть о долгих спорах по стилю кода — он обеспечивает единый, читаемый и поддерживаемый вид программ без дополнительных усилий. Линтер Clippy помогает выявлять неочевидные ошибки, потенциальные баги и рекомендации по улучшению читаемости и производительности, что значительно сокращает количество проблем в ранних стадиях.
К тому же документация Rust — одна из самых полных и доступных в мире открытого ПО, с подробными гайдлайнами, примерами и руководствами, постоянно обновляемыми сообществом и компанией.
Где Rust уже реально работает
В таблице представлен топ ЯП по популярности на август 2025 года:

Rust активно используют в инфраструктурном сегменте для создания систем хранения данных и сетевых сервисов, а также для разработки cloud-native проектов. Язык с низкоуровневой оптимизацией и строгим контролем памяти обеспечивает высокую производительность и надежность при росте систем.
В сегменте CLI и утилит Rust также занимает лидирующие позиции. Например, ripgrep — это быстрый и эффективный инструмент для поиска текста в файловой системе, который уже стал популярным среди системных администраторов и разработчиков.
За счет компактности кода, точного контроля памяти и гарантий безопасности Rust используется для разработки приложений с ограниченными ресурсами — например, веб-приложений с поддержкой WASM. Там он помогает создавать клиентские модули, интегрируемые в браузеры, а также встраиваемое ПО для IoT и других систем с низким энергопотреблением.
Крупные международные IT-компании использующие Rust:
Amazon применяет Rust для разработки облачных сервисов, в частности, для AWS Lambda и Firecracker (миниконтейнеров для серверлесс-вычислений), где важна безопасность и скорость;
Microsoft активно переписывает критичные компоненты Windows (например, DWriteCore, GDI) из C/C++ на Rust с целью снижения уязвимостей. Также они переписывают криптографическую библиотеку SymCrypt на Rust с формальной верификацией. Есть проекты, связанные с WebAssembly: Rust-библиотека Wassette (на Rust, Wasm-runtime) и Hyperlight Wasm (для изолированного выполнения wasm-компонентов);
Dropbox переписал свою синхронизационную систему (Nucleus, Magic Pocket) на Rust, выбрав его за контроль памяти, безопасность, производительность и параллелизм;
Discord переписал некоторые бэкенд-компоненты с Go на Rust, получив 10-кратное снижение задержек и снижение использования CPU;
Solana и Polkadot — ведущие блокчейн-платформы, полностью или частично написанные на Rust;
Mozilla разработала движок Quantum, на котором работает браузер Mozilla Firefox.
Что сдерживает массовое принятие
Первое — это высокий порог входа, связанный с моделью владения памятью (ownership) и системой заимствований (borrow checker). Эти концепции требуют принципиально иного понимания управления ресурсами, нежели классические языки.
Разработчикам необходимо научиться мыслить в терминах владения и срока жизни объектов, что вызывает сложности и фрустрацию в начале. Поэтому программисты, даже опытные, откладывают переход на Rust либо проходят через длительный процесс адаптации.

Другие сдерживающие факторы — «эко-пробелы» и отсутствие зрелых и полноценных решений в ряде важных ниш. Например, в сфере разработки графических интерфейсов (GUI) пока нет полноценных фреймворков, способных конкурировать с экосистемами вроде Electron, Qt или Flutter. Это сужает возможности применения Rust для создания десктопных и мобильных приложений. Аналогичная ситуация с Data Science и ML, где Python с его богатыми библиотеками по-прежнему остается незаменимым инструментом.
Многие компании предпочитают постепенный и осторожный подход, внедряя Rust в отдельных компонентах. Этот фактор часто даже важнее технических ограничений, поскольку отражает стратегические приоритеты и ответственность за стабильность бизнес-процессов.
Что должно случиться, чтобы Rust выстрелил
Чем вам привлекателен Python? Простым синтаксисом? Что тогда привлекает людей учить С# (помимо зарплат и работы в нишевой отрасли)? Скорее всего, фича в интеграции с экосистемой Microsoft и Visual Studio. А что могло бы стать мощным катализатором роста Rust?
Это могут быть как новые проекты, так и заметные корпоративные миграции уже существующих крупных кодовых баз с других языков на Rust. Когда ведущие игроки индустрии публично заявят и докажут пользу от перехода, заинтересованность и доверие к языку резко возрастут. Это создаст эффект домино и подтолкнет многие команды пробовать и масштабировать использование Rust.
Наличие готовых CI/CD-шаблонов, поддержка интеграций с облачными платформами, а также обширные best-practices и рекомендации по архитектуре и тестированию помогут командам быстро и надежно строить проекты на Rust. Это создаст комфортную среду разработки и эксплуатации, избавит от множества технических и организационных сложностей.
Критически важными являются инструменты поддержки миграции и обучения. Это codemods — автоматизированные средства для преобразования кода и упрощения перехода с других языков или старых версий Rust, наборы шаблонов проектов, которые позволяют быстро стартовать и стандартизировать подходы, а также хорошо структурированные курсы и образовательные программы, ориентированные именно на командный рост. Такие инструменты и ресурсы значительно снизят ментальные и технические барьеры, ускорят освоение Rust и уменьшат риски при внедрении.
В этой же плоскости мы в Selectel развиваем проект OpenFix, который предлагает конкретные задачи по переписыванию критичных компонентов Linux-экосистемы с C на Rust.
Хотите сделать свой вклад в защиту и развитие Linux-сообщества и получить за это награду? В рамках OpenFix вы можете взяться за задачу по рефакторингу кода — переписать утилиту или библиотеку с C на Rust, сохраняя при этом поведение оригинала. После публикации ваше ПО будет распространяться по Пермиссивной лицензии. Значит, мейнтейнером — останетесь вы.
Кроме этого, в OpenFix есть задачи по пакетизации и поиску багов.
Выберите программу из нашего списка и напишите для нее deb-пакет.
Обычно, просят найти баг в ПО. У нас же — ты можешь принести баг, который тебе надоел в опен сорсе или в любом открытом баг-трекере, а мы оценим и заплатим за его решение.
Работа делится на удобные чекпоинты, которые мы согласовываем с вами, а оплата производится по результатам поэтапной приемки.
OpenFix — уникальная возможность совместить развитие востребованных проектов и заработать, находясь в сообществе единомышленников. Такое участие погрузит в разработку и внесет ощутимый вклад в развитие языка и его экосистемы, двигая Rust к массовому признанию и популярности.
А что вы думаете о Rust? Делитесь своим мнением и опытом работы с ним в комментариях!
Комментарии (79)

Zara6502
10.09.2025 08:40C#
using System; class Program { static void Main() { int number = 25; if (number % 2 == 0) { Console.WriteLine($"{number} is even."); } else { Console.WriteLine($"{number} is odd."); } } }справедливости ради System/Program/Main можно опустить, код будет выглядеть вот так:
int number = 25; Console.Write(number); if (number % 2 == 0) Console.WriteLine(" is even."); else Console.WriteLine(" is odd.");можно в 2 строки записать
int number = 25; Console.WriteLine($"{number} is {((number & 1) == 0 ? "even" : "odd")}.");
developer7
10.09.2025 08:40В 2 строки лучше так:
int x = 25; Console.WriteLine(x + x % 2 > 0 ? "odd" : "even");Можно скобок расставить по вкусу

NarkkoZ
10.09.2025 08:40Как то немного подзавис с ваших "В 2 строки лучше так". Кому лучше? Мало того что читается хуже так еще и работает не правильно. С тем же успехом можно было записать в одну строку
Console.WriteLine("odd");Работает точно так же, в случае положительных чисел

Zara6502
10.09.2025 08:40Мало того что читается хуже
Программирование, как я считаю, делится на профессиональное и любительское. В профессиональном во главу угла ставится однообразие оформление и соответственно максимально комфортная читаемость кода.
В любительском, к коим например отношусь я, я привык оформлять код так как нравится и удобно мне, а так как мои привычки оформления - мои, то и читать мне мой же код очень даже комфортно, например городушку из статьи, которую я процитировал мне читать совсем некомфортно, там 800 литров воды. Плюс я люблю после выпуска кода в релиз сжимать код минимизируя число строк, чтобы при поиске и просмотре я на одном экране видел сразу много кода. Я могу все if/else сделать однострочными например. И мне читать такое комфортно. Свой код я практически не публикую. Если я его выставляю напоказ, то оформление для меня менее ценно чем факт его публикации (у меня же никто не спрашивает насколько мне удобно читать чужой код, так почему я должен об этом думать?).

JBFW
10.09.2025 08:40Вам приходилось когда-нибудь разбираться в собственном коде многолетней давности, который вы не помните как работает?
И встретить там нечто в стиле if($2<=!(a||34?42:25)){b=22;a=34;}, потому что когда-то пожадничал на пробелы и ентеры...

Zara6502
10.09.2025 08:40нет, потому что много лет назад я был дурак, не знал C# и писал на Delphi, за эти годы я Delphi забыл более чем полностью, вообще у меня горизонт памяти 3-4 месяца. Поэтому я написал что-то, сжал и забыл. Я не пишу софт уровня ядра Линукс, поэтому я к нему никогда не возвращаюсь, это либо недопроект который я забросил, или законченное решение где менять нечего.
И как я уже написал:
Программирование, как я считаю, делится на профессиональное и любительское. В профессиональном во главу угла ставится однообразие оформление и соответственно максимально комфортная читаемость кода.
В любительском, к коим например отношусь я
я думаю здесь достаточно понятно всё объяснено.

developer7
10.09.2025 08:40Никогда не встречал деление программирования на любительское и профессиональное. Даже интересно было в уме повыбивать критерии для одного и для другого.
От себя могу высказать некоторые жизненные наблюдения. Да - когда работаешь в кровавом энтерпоайзе требуют некоторое соблюдение стилистики кода когда работаешь в текущей команде.
Но! Продакшен компании это в 99.99 легаси код. Который разрабатывается годами. И команды там меняются часто. Более того типичный кейс - тебе прилетает таска, исправить баг, или новя фича. Время строго ограничено. Тебе платят деньги не за красивость, и да же не за код. Тебе платят деньги за закрытые таски. Думаю не надо тут дальше рассказывать про приоритеты которые выбираются... Про рефакторинг я вообще не говорю. Никогда бизнес не поймёт зачем надо что то переделывать просто так. Да это же вредительство!
И возьмём программинг для себя так сказать. Для души. Ооо! Тут просто рай для перфекционизма. Не вопрос 10 раз полностью переделать архитекутру и переписать почти весь код, когда 10 раз попадаются какие то новые вводные данные. Разумеется это продолжается пока тебе это интересно (не выгоришь).
Так что я бы определил что "профессиональный" код ужасный но он продаётся. "Любительский" красив, но почти всегда уходит в забвение...
Сейчас проффесиональный код ещё больше поражён раковой опухолью ИИ. Часто слышу что в компаниях заставляют писать с помощью ИИ. NVidea вроде вообще хвасталась что мол половину кода драйверов написана ИИ. А потом.... Туча тем в инете. Как работающие всегда вещи стали жрать в 10 раз больше ресурсов. Про баги и дыры и не говорю.
Сам изучаю работу LLM. И знаю как там что работает. Она может нагородить на каждый запрос пару листов кода - который будет впринципе делать то что подали в промт. Пару листов кода на каждый запрос. И это просто вавилонская башня кода...
P.S. Ну я тоже в своё время на дельфи много программил. В те времена С# то и не было (C# 1.0 вышла в 2002 году с релизом Microsoft Visual Studio .NET, Delphi же с 1995 года ). Отличная среда. Кстаи даже сейчас продолжает жить. Только несколько преобразовался.

Zara6502
10.09.2025 08:40а еще когда программируешь на ассемблере для старых систем, где даже 1 байт это овердофига и ты применяешь разные хаки и хитровыверты то читаемость кода скажу я вам практически нулевая. Да, нужно комментировать, но я не Билл Гейтс и не пишу Бейсиков на 6500 строк кода.

developer7
10.09.2025 08:40Согласен - вся левая часть ушла в тернарный оператор. Это был просто пример как можно было бы ещё подсократить запись, а в проекте всегда надо проходить в тестах по всем веткам кода. Это просто золотое правило. Ну я и намёк дал насчёт скобочек...
Console.WriteLine(x + (x % 2 > 0 ? "odd" : "even"));Что косается читаемости.
Читаемость - чем проще тем лучше. Чем меньше всяких символом для понимания тем лучше. Тут конечно меру знать надо. Символы должны быть чётко понятны тому кто читает. Машинный код - это уже наверно перебор. Но я например когда прогал на асме натренировался что вполне неплохо читал почти машинный код.
Что же касается одной строки - то если условие if и далее 2 коротких значения то почти всегда читаемость через тернарный оператор выглядит нагляднее.
Если это сложение строк и строки короткие - то читаемость в одну строку почти всегда нагляднее.
P.S. А вообще это всё вкусовщина. И спор тут - что лучше красное или лёгкое. Я постоянно пользуюсь тернарными операторами, мне так удобнее. А кого то от них в дрожь бросает. Вкусовщина короче.

Zara6502
10.09.2025 08:40В 2 строки лучше так
в C# конкатенация строк считается моветоном (не моё, со мной спорить не нужно).
ну и чутка исправлю, а то не будет работать правильно:
int x = 25; Console.WriteLine(x + (x % 2 > 0 ? " is odd" : " is even"));
developer7
10.09.2025 08:40Если сложение строк идёт в одном примере то компилятор преобразует это в string.Concat. Тут как раз такой пример.

Dhwtj
10.09.2025 08:40Rust хороший учебный язык, как и хаскель

David_Osipov
10.09.2025 08:40Вот с этим согласен. Вместо Питона я решил начать обучение с Rust, чтобы он бил по рукам за ошибки и учил правильной статической типизации. Но, имхо, это обучения для того, кто хочет программистом стать, а не кодером.

Dhwtj
10.09.2025 08:40Кодер это, видимо, закончивший колледж / ПТУ?

David_Osipov
10.09.2025 08:40Тут скорее думал про людей, закончивших курсы "Стань программистом за месяц", которые изучают только синтаксис, а про CS не слышали. И пишут код с нулевым понятием оптимизации, безопасности, дубливарониями и прочего и прочего.

WASD1
10.09.2025 08:40В теорее да - сам об этом думал.
Но в принципе я растом довольно сильно разочарован.
При разработке на Rust ты не решаешь задачу "выразить Х" и "разработать функциональность Y". Ты решаешь задачу: "как выразить то, что ты и без того знаешь именно на Rust". Вот если честно - не уверен, что это прям хорошо при обучении программированию.

feelamee
10.09.2025 08:40Интересно, что первый компилятор Rust был написан вовсе не на нем самом
а что.. это возможно? и правда интересно

forever_live
10.09.2025 08:40Ну, могу предложить грязный хак: написать сначала интерпретатор.

okhsunrog
10.09.2025 08:40Так фишка раста в том, что все гарантии и проверки на этапе компиляции, а не исполнения. Совсем разные парадигмы. В чем преимущество писать интерпретатор на другом языке, а потом компилятор? Чтобы интерпретировать компилятор? Звучит очень странно

GospodinKolhoznik
10.09.2025 08:40Ну на хорошем интерпретароре написать компилятор горазно легче, чем на ассемблере.

okhsunrog
10.09.2025 08:40Зачем на ассемблере? На другом высокоуровневом языке программирования. Ocaml очень даже хорошо для этого подходит, кстати

GospodinKolhoznik
10.09.2025 08:40Ну Ocaml это что-то на богатом!
Максимум, что будет при таком подходе это или интерпритатор а-ля Basic, где каждый оператор Бэйсика будет просто вызывать соответствующую подпрограмму в ассемблере. Или это будет компилятор, написаный на asm, но сначала будет очень примитивный компилятор, с минимумом возможностей.
Я некоторое время назад баловался написанием собственной ОС (потом забросил, кончено, как и все нормальные люди). И тогда мне стало понятно, примерно как создавался Си. Само ядро языка Си достаточно маленькое, и почти ничего не может, только примитивные операции. Чтобы появилась возможность сделать хотя бы массив, нужно выделить память, т.е. нужен системный вызов, выделяющий память. На смеси доступных примитивных операций Си и ассемблера пишется malloc() для ОС. Причём сначала это будет довольно примитивная и далёкая от оптимальности операция malloc(), можно даже без free() - потом добавим))). Зато наш язык Си становится уже гораздо богаче. И так далее язык дорабатывается параллельно с доработкой самой ОС.
А чтобы получить Ocaml это надо ещё ого-го сколько предварительной работы проделать.

okhsunrog
10.09.2025 08:40Я вас не понимаю. Зачем нам получать Ocaml? Он уже есть. Можно взять и начать писать на нём компилятор для своего языка.
А чтобы сделать массив, память выделять не надо, его вполне можно хранить на стеке, или в bss. В embedded Rust часто пишут no_std и no_alloc код, там аллокатора и вовсе нет, ничего выделить нельзя

domix32
10.09.2025 08:40А в 2023 году Stack Overflow обнаружил,
такой себе историограф из вас. это статья на github появилась в 2023, а сам SO уже несколько лет подряд в ежегодных опросах получал его в качестве лидера списка. И ЕМНИП это было ещё до выхода 1.0. Аналогичная история с Rust Foundation - как организация они емнип появились в 2018, отделившись от сущности Mozilla.
оператор % работают так же, как в Rust.
оператор % в Rust и C++ работают не также. Скормите отрицательное число и получите различные цифры. В Rust для аналога плюсов в Rust используют функцию rem_euclid.
движок Quantum
это не движок, а подсистема для рендеринга веб-технологий - html, css и прочие. Сам движок Firefox все ещё написан на плюсах и его пока не планируется полностью переводить на Rust.
в сфере разработки графических интерфейсов (GUI) пока нет полноценных фреймворков, способных конкурировать с экосистемами вроде Electron, Qt или Flutter
are you sure about that? Есть и биндинги к QT/Gtk и есть альтернатива тому же Electron, причем жрёт памяти оно заметно меньше.

JordanCpp
10.09.2025 08:40Когда появится стандарт rust, вот тогда и будет продакшн. И уже нельзя будет менять язык максимально просто и удобно. Надо будет задумываться об обратной совместимости.

okhsunrog
10.09.2025 08:40Можно будет менять. Для этого есть editions. Вы читали статью? И обратную совместимость именно они и обеспечивают, вы можете мигрировать на новый edition тогда, когда удобно. Или не мигрировать вовсе. И среди зависимостей могут быть крейты с разными edition, вполне можно взять крейт, написанный для старого edition и добавить в новый проект с edition 2024, к примеру, и собрать самым свежим компилятором

Cfyz
10.09.2025 08:40можно взять крейт, написанный для старого edition и добавить в новый проект с edition 2024, к примеру, и собрать самым свежим компилятором
Вот тут любопытный момент, кстати. Это возможно потому что
As a result, changes found in new Rust editions tend to be 'skin deep'. All Rust code - regardless of edition - will ultimately compile down to the same internal representation within the compiler
Но в контексте стандартизации и изменений в языке речт конечно же идет не о просто новых фичах языка (это и в C++ можно легко использовать библиотеку на C++17 в проекте на C++23), а о бинарно несовместимых изменениях, когда "same internal representation" становится помехой.
Если ABI не менять, то получится точно то же самое, что и с текущим C++, коотрый тащит всю обратную совместимость и разные ошибки/неоптимальные решения в стандартной библиотеке уже не починить. А если ABI можно менять, то код в одинаковое представление уже не соберется по построению.
Это может и не быть проблемой, если, как с большинством кода на Rust сейчас, все всегда собирать с нуля одним компилятором. Но опять-таки, то же самое сработало бы и в случае C++ -- ан нет, пересборка всего всегда с нуля не вариант.

okhsunrog
10.09.2025 08:40Дело в том, что Rust совсем не гарантирует бинарную совместимость, у него сейчас нет стабильного ABI, они сейчас могут представлять данные в памяти так, как хотят. Даже в пределах одной версии компилятора, компилятор в разных программах может по-разному компоновать в памяти структуры данных. Все библиотеки раста (крейты) предоставляются именно в виде исходных кодов, которые на этапе компиляции статически линкуются. С другой стороны, именно отсутствие гарантированного бинарного интерфейса позволяет компилятору не ограничиваться рамками, и делать очень интересные оптимизации, об этом подробно написано в Rustonomicon. А если уж очень нужно сделать библиотеку на Rust, которая подгружается динамически, используют сишный ABI

Akuma
10.09.2025 08:40Ещё один минус - дооолгая компиляция. Да, с каждой версией она вроде бы ускоряется, но блин. Это реально долго.
Если локально обычно мощные CPU и лишние 30 секунд вроде и не критичны, да и прод редко компилитсч локально. То сборка на воркере в гитхаб может легко занимать минут 20. Это ужас.

Format-X22
10.09.2025 08:40Я когда в одной большой корпорации с оранжевой птицей работал - там сборка JS фронта на джаве была. Причем там JS, не TS был (TS ещё не придумали). Минуты три собирало, что весьма печалило если надо консоль-лог воткнуть и задебажить. Но ребятам из джава-команды не нравилось как был сборщик написан. Потому они с костылей переписали как надо, красиво и эффективно. С тех пор сборка JS-фронта начала занимать 40 минут, а я ходил пить чай, в буквальном смысле. Потом уволился конечно.
Так что если время сборки уменьшается от версии к версии - это даже очень хорошо.

Akuma
10.09.2025 08:40У меня части проекта и на JS и на Go и на Rust. Раст больнее всего ждать конечно. Туда вфигачивают всякие кеширования пакетов и прочее, но на деле работает так себе и один фиг долго.
Go - локально мгновенно. На гитхабе чуть больше минуты.

domix32
10.09.2025 08:40Кстати, совершенно не понимаю этой проблемы. Я может конечно что-то не то собираю, но в сравнении с теми же плюсами разница - небо и земля. zellij или helix со всей их многоступенчатой сборкой занимали минут 10 в худшем случае.

Akuma
10.09.2025 08:40Смотря с чем сравнивать, да. Я к Rust пришел после Go и там разница на порядки. В Go вообще об этом не думал как-то.

feelamee
10.09.2025 08:40О какой многоступенчатой и сложной сборке вы говорите? helix и до 100KLOC не дошел, а zellij еле перевалил за 150. Большая часть времени скорее всего уходит на сборку их зависимостей (у helix под 40, а у zellij около 20). Если вы хотите посмотреть на реально сложную и большую сборку, то попробуйте собрать chromium..
(и да, 10 минут это ужасно долго)

SWATOPLUS
10.09.2025 08:40Я бы ещё приводил сравнение с zig. Он имеет очень хорошую интеграцию с c/cpp/mm и тоже более безопасен.

blind_oracle
10.09.2025 08:40К сожалению он пока достаточно нишевый.

domix32
10.09.2025 08:40скорее нестабильный. пока ещё до 1.0 не добрался. поэтому пользуются им в основном энтузиасты и стартаперы. аналогичная история с Odin

redfox0
10.09.2025 08:40Выберите программу из нашего списка и напишите для нее deb-пакет.
rpm-пакет можно?

techno_mot Автор
10.09.2025 08:40Оставьте заявку на сайте, мы свяжемся с вами и обсудим детали.

redfox0
10.09.2025 08:40Почитал ваши правила, хотите, чтобы в репозитории debian sid появился пакет. Как мне кажется, это более честная цель с учётом оплаты.

Hemml
10.09.2025 08:40Сколько разных компиляторов есть для Rust?

domix32
10.09.2025 08:40два с половиной. собственно официальный и GNU Rust в GCC. Остальные можно считать недокомпиляторами, ибо занимаются в основном анализом кода типа Miri или потрохов для RustRover.Отдельно есть некоторое количество бэкэндов, но это тоже только часть полного цикла компиляции, а не полноценный компилятор.

Arkaim23
10.09.2025 08:40Все языки/фреймворки/технологии хороши для своего времени и своих текущих целей. Так в мире повелось, что все изменяется и нет ничего вечного (ибо будет застой, а этого природа не терпит). Rust привнес несколько иной подход, который решает боли, накопившиеся за десятилетия (может на данный момент и не на 100%, как этого бы хотелось, но и нет в мире ничего 100 процентного).
Вот, к примеру, в 2013 году (а может и раньше) стали появляться фреймворки фронтовые, которые предлагали virtual dom, потому что на тот момент браузеры не очень легко переживали перерисовку содержимого. Сейчас же (уже как несколько лет) браузеры исправили в своей работе этот недостаток и этот vdom вообщем-то нафиг и не нужен (на медиуме уже давно разоблачили всех). Сейчас бы уже массово веб-компоненты надо внедрять и новые технологии, но упоротые фронты продолжают молиться на свои старые фреймворки как на святую корову (ибо переучиваться очень больно и не хочется).

domix32
10.09.2025 08:40на свои старые фреймворки
эк вы их. а кто переписывать их будет со старых фреймворков? И чего ради переписывать то, что и так работает как задумано? Веб в этом плане достаточно прагматичен, иначе и до банкротства пару шагов останется.
JBFW
Еще одна вещь, которая, как мне кажется, препятствует "широкому принятию Rust" - это вайб "вы все больные и не лечитесь, а у нас Rust!" - который проскакивает буквально при любом упоминании о том, что что-то где-то переписали на Rust (даже название ripgrep).
Ну и, кто-то конечно захочет присоединиться к элите, а кто-то наоборот...
jaha33
Ну или как с картинкой про писуары и линукс.
Еще по Rust на удивление очень мало литературы, как переведенной на ру так и на английском.
Даже если взять одногодку Раста - Go, то по Go разительно больше литературы и полезной информации.
GospodinKolhoznik
Так ведь за Go стоит одна небольшая корпорация, которая не жалеет денег на его раскрутку. При такой финансовой и информационной поддержке даже язык Фокал стал бы популярнее чем Rust.
jaha33
Может быть, но у этой корпорации практически все инициативы или новые проекты нежизнеспособные и их хоронят. А Go массам зашел, причем без явных принудиловок.
А вот с Rust загадка дыры, куча хвалебной информации, мол можно реализовывать проекты от embedded до чего угодно, но прям по крупному его как будто бы не используют. Есть какие то пристрелочные начинания и на этом все.
Вроде как язык для всего, а нишы для него нет
okhsunrog
Странно, как это не используют, когда куча продуктов на нём написана, в том числе довольно известных
Format-X22
Ядро Linux, помимо C и C++, теперь с Rust. Для фронтенда на JS сделали сборщик популярный - https://swc.rs/ Где-то тут было про Tauri, кросплатформа фронта на всё через встроенный вебвью, там и десктоп и мобилки. В блокчейнах смарт-контракты на Rust у Solana. Это тот самый блокчейн где трамп-коин запускали. Вот за встроенное железо сказать не могу, но думаю там тоже чего-нить есть. Это меньше чем на других языках, но и расту не 30 лет. Ну и IDE от JetBrains отдельная есть, что показатель - они сделали ставку на популярность, другие языки плагинами - а тут отдельная IDE.
Dancho67
Простите, но в каком месте вы увидели плюсы в ядре Линукс?
Если хочется Хруста на встройке, есть embedded-hal и его реализации для разных платформ.
jaha33
Есть нюанс. На расте почти весь hal реализован через unsafe. Возможно иначе никак, т.к. надо напрямую с регистрами работать, но и как будто бы это не очень хорошо.
qwerty19106
Работа с регистрами по определению unsafe, но в С и С++ нет такого ключевого слова, так что по кол-ву unsafe сравнивать некорректно.
Но поверх unsafe можно построить safe API, и этим повсеместно пользуются. Приведу простой пример:
Если взять стандартную библиотеку любого языка, то там 90% кода будет unsafe из-за системных вызовов, передачи указателей в ядро ОС, арифметики указателей ради быстродействия и т.д. Стандартной библиотекой пользуется любой программист на этом языке.
Siemargl
Это не так. домыслы
Lewigh
Go в массы не зашел, поначалу это был довольно презираемый язык. А вот компаниям зашел. Потому что язык минималистичный и можно переучивать с других стеков быстро разрабов, что для найма очень круто. И вот уже когда компании начали двигать тему тогда и появилось массовое сообщество. Прибавляем к этому что язык используется в основном в серверной разработке - одного из самых востребованных направлений.
Rust - это во-первых не язык для всего. Можно конечно на нем написать что угодно но не очень нужно. Это язык конкурент C++ в куда более узкой нише высокопроизводительных вычислений и тонкой работы с памятью. Поэтому естественно востребованность не будет ни в какое сравнение с написанием вэб серверов. Во-вторых, это сложный язык на который нужно потратить время и силы. Классика вакансий мало - разработчиков мало, разработчиков мало - вакансий мало.
Quintanar
Go зашел массам, потому что его специально сделали для масс. Т.е. официально сделали потупее, чтобы джун мог начать вырабатывать кодосодержащий продукт в кратчайшие сроки.
Lewigh
Go делали не для масс а для себя и своих задач. Никаких масс изначально не было. Кому он должен был заходить, джавистам или дотнетчикам или питонистам? С какого перепуга? Изначально язык активно хаяли за примитивность. В массы он пошел после того как компании начали активно у себя продвигать и появились вакансии и появились те самые массы.
domix32
У гугла в кампании была масса плюс ещё кучка пользователей их GAE. На выбор были плюсы и питон. Плюсы сложно во всех отношениях - сложно учить, сложно писать, сложно аудировать, сложно собирать и деплоить, питон не слишком производительный плюс с асинхронщиной тогда были проблемы. Поэтому сделали Go, чтобы получить пересечение этих двух миров - просто, как питон, батарейки под задачи включены и производительность на своих задачах сопоставима с плюсами. Всё в едином бинаре как бонус.
Dhwtj
EvilFox
))))
Lewigh
Да не. Я Вам умоляю. Все такие. Зайдите в компанию джавистов и скажите просто что Java даже не то что плоха а хотя бы несовершенна. С высокой вероятностью ответом будет истерика и рассказы про то что в JVM волшебные оптимизации и Java давно быстрее C и C++ и вообще это самый лучший и совершенный язык. Или можно зайти к функциональщикам и что-нибудь интересное сказать. И я не утрирую честное слово, после нескольких таких раз я понял что нет в rust разрабах ничего особенного в этом плане по сравнению с другими стеками.
Dhwtj
Ага
Я тут пару раз сказал против пхп
Прибежали и заминусовали
vvzvlad
Вот только чет никто не носится с криками “Надо переписать все на Java!! Тогда волшебным образом все станет безопасно!"
severgun
Так вы проспали этот момент или скорее всего еще не родились тогда. Это было.
vvzvlad
А, ну тогда все ок. У растаманов это тоже пройдет.
ccapt
то есть разработчиками на других языках мешают подозрения в посягательстве на их чсв?