Вокруг Rust в Linux-сообществе до сих пор не утихают жаркие споры. Кто-то считает его спасением, а кто-то — проклятием. В дебатах сталкиваются две позиции: сторонники видят в нем ключ к безопасности и модернизации ядра, противники опасаются усложнения и нарушения традиционных подходов. 

Давайте разберем, как он появился, какие точки роста сделали его рабочим, где он уже побеждает и почему вы его недооцениваете. А также подскажем, как Rust-разработчикам сделать вклад в развитие реального open source-проекта. Детали под катом.

Как Rust рос и развивался

Rust — это язык, который вырос не из попытки придумать что-то «совсем новое», а из желания спасти будущее программирования от ошибок прошлого. Именно так о нем сказал его автор Грэйдон Хор.

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

Нужно было что-то, что объединяло бы мощь С и C++ со стабильностью Java. И это не революция ради революции, а умный апгрейд идей, давно знакомых разработчикам, но теперь с гарантией безопасности. 

История Rust началась в 2006 году. Тогда Грэйдон Хор, работавший в Mozilla, вечерами в порыве энтузиазма экспериментировал с новым языком. Ему хотелось решить проблему внезапного падения сервисов из-за нехватки памяти. Даже название он выбрал с иронией — Rust, в честь ржавчины (грибка). Тот факт, что эти организмы не только весьма живучи, но и быстро распространяются и переживают почти любые условия, показалось Хору отличной метафорой для языка, который должен стать одновременно надежным и быстрым.

С самого старта он задал правила игры: сначала семантика, потом синтаксис. Поэтому ранние версии Rust выглядели лаконично и даже нескольки аскетично: ключевые слова были максимум из пяти букв, а вместо привычных return или function использовались короткие ret и fn. Хор хотел, чтобы язык был строгим по смыслу и компактным в выражении.

Символ Rust. Источник.
Символ Rust. Источник.

Ключевые понятия, которые там сформировались, — 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 занял ведущее место как язык для создания быстрых веб-приложений и новых видов интерактивного контента в браузере.

Развитие Rust. Источник.
Развитие 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 либо проходят через длительный процесс адаптации.

Дерево Rust. Источник.
Дерево 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)


  1. JBFW
    10.09.2025 08:40

    Еще одна вещь, которая, как мне кажется, препятствует "широкому принятию Rust" - это вайб "вы все больные и не лечитесь, а у нас Rust!" - который проскакивает буквально при любом упоминании о том, что что-то где-то переписали на Rust (даже название ripgrep).

    умрите, жалкие, недостойные недоязыки кривопрограммирования...
    умрите, жалкие, недостойные недоязыки кривопрограммирования...

    Ну и, кто-то конечно захочет присоединиться к элите, а кто-то наоборот...


    1. jaha33
      10.09.2025 08:40

      Ну или как с картинкой про писуары и линукс.

      Еще по Rust на удивление очень мало литературы, как переведенной на ру так и на английском.

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


      1. GospodinKolhoznik
        10.09.2025 08:40

        Так ведь за Go стоит одна небольшая корпорация, которая не жалеет денег на его раскрутку. При такой финансовой и информационной поддержке даже язык Фокал стал бы популярнее чем Rust.


        1. jaha33
          10.09.2025 08:40

          Может быть, но у этой корпорации практически все инициативы или новые проекты нежизнеспособные и их хоронят. А Go массам зашел, причем без явных принудиловок.

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

          Вроде как язык для всего, а нишы для него нет


          1. okhsunrog
            10.09.2025 08:40

            Странно, как это не используют, когда куча продуктов на нём написана, в том числе довольно известных


          1. Format-X22
            10.09.2025 08:40

            Ядро Linux, помимо C и C++, теперь с Rust. Для фронтенда на JS сделали сборщик популярный - https://swc.rs/ Где-то тут было про Tauri, кросплатформа фронта на всё через встроенный вебвью, там и десктоп и мобилки. В блокчейнах смарт-контракты на Rust у Solana. Это тот самый блокчейн где трамп-коин запускали. Вот за встроенное железо сказать не могу, но думаю там тоже чего-нить есть. Это меньше чем на других языках, но и расту не 30 лет. Ну и IDE от JetBrains отдельная есть, что показатель - они сделали ставку на популярность, другие языки плагинами - а тут отдельная IDE.


            1. Dancho67
              10.09.2025 08:40

              Простите, но в каком месте вы увидели плюсы в ядре Линукс?
              Если хочется Хруста на встройке, есть embedded-hal и его реализации для разных платформ.


              1. jaha33
                10.09.2025 08:40

                Есть нюанс. На расте почти весь hal реализован через unsafe. Возможно иначе никак, т.к. надо напрямую с регистрами работать, но и как будто бы это не очень хорошо.


                1. qwerty19106
                  10.09.2025 08:40

                  Работа с регистрами по определению unsafe, но в С и С++ нет такого ключевого слова, так что по кол-ву unsafe сравнивать некорректно.

                  Но поверх unsafe можно построить safe API, и этим повсеместно пользуются. Приведу простой пример:

                  Если взять стандартную библиотеку любого языка, то там 90% кода будет unsafe из-за системных вызовов, передачи указателей в ядро ОС, арифметики указателей ради быстродействия и т.д. Стандартной библиотекой пользуется любой программист на этом языке.


                  1. Siemargl
                    10.09.2025 08:40

                    Если взять стандартную библиотеку любого языка, то там 90% кода будет unsafe из-за системных вызовов, передачи указателей в ядро ОС, арифметики указателей ради быстродействия и т.д

                    Это не так. домыслы


          1. Lewigh
            10.09.2025 08:40

            А Go массам зашел, причем без явных принудиловок.

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

            Вроде как язык для всего, а нишы для него нет

            Go в массы не зашел, поначалу это был довольно презираемый язык. А вот компаниям зашел. Потому что язык минималистичный и можно переучивать с других стеков быстро разрабов, что для найма очень круто. И вот уже когда компании начали двигать тему тогда и появилось массовое сообщество. Прибавляем к этому что язык используется в основном в серверной разработке - одного из самых востребованных направлений.

            Rust - это во-первых не язык для всего. Можно конечно на нем написать что угодно но не очень нужно. Это язык конкурент C++ в куда более узкой нише высокопроизводительных вычислений и тонкой работы с памятью. Поэтому естественно востребованность не будет ни в какое сравнение с написанием вэб серверов. Во-вторых, это сложный язык на который нужно потратить время и силы. Классика вакансий мало - разработчиков мало, разработчиков мало - вакансий мало.


          1. Quintanar
            10.09.2025 08:40

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


            1. Lewigh
              10.09.2025 08:40

              Go делали не для масс а для себя и своих задач. Никаких масс изначально не было. Кому он должен был заходить, джавистам или дотнетчикам или питонистам? С какого перепуга? Изначально язык активно хаяли за примитивность. В массы он пошел после того как компании начали активно у себя продвигать и появились вакансии и появились те самые массы.


              1. domix32
                10.09.2025 08:40

                У гугла в кампании была масса плюс ещё кучка пользователей их GAE. На выбор были плюсы и питон. Плюсы сложно во всех отношениях - сложно учить, сложно писать, сложно аудировать, сложно собирать и деплоить, питон не слишком производительный плюс с асинхронщиной тогда были проблемы. Поэтому сделали Go, чтобы получить пересечение этих двух миров - просто, как питон, батарейки под задачи включены и производительность на своих задачах сопоставима с плюсами. Всё в едином бинаре как бонус.


    1. Dhwtj
      10.09.2025 08:40

      Most desired and admired languages, stackoverflow 2024
      Most desired and admired languages, stackoverflow 2024


    1. EvilFox
      10.09.2025 08:40

      ))))

      к элите


    1. Lewigh
      10.09.2025 08:40

      Еще одна вещь, которая, как мне кажется, препятствует "широкому принятию Rust" - это вайб "вы все больные и не лечитесь, а у нас Rust!"

      Да не. Я Вам умоляю. Все такие. Зайдите в компанию джавистов и скажите просто что Java даже не то что плоха а хотя бы несовершенна. С высокой вероятностью ответом будет истерика и рассказы про то что в JVM волшебные оптимизации и Java давно быстрее C и C++ и вообще это самый лучший и совершенный язык. Или можно зайти к функциональщикам и что-нибудь интересное сказать. И я не утрирую честное слово, после нескольких таких раз я понял что нет в rust разрабах ничего особенного в этом плане по сравнению с другими стеками.


      1. Dhwtj
        10.09.2025 08:40

        Ага

        Я тут пару раз сказал против пхп

        Прибежали и заминусовали


      1. vvzvlad
        10.09.2025 08:40

        Вот только чет никто не носится с криками “Надо переписать все на Java!! Тогда волшебным образом все станет безопасно!"


        1. severgun
          10.09.2025 08:40

          Так вы проспали этот момент или скорее всего еще не родились тогда. Это было.


          1. vvzvlad
            10.09.2025 08:40

            А, ну тогда все ок. У растаманов это тоже пройдет.


    1. ccapt
      10.09.2025 08:40

      то есть разработчиками на других языках мешают подозрения в посягательстве на их чсв?


  1. Zara6502
    10.09.2025 08:40

    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.");
            }
        }
    }

    справедливости ради 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")}.");


    1. developer7
      10.09.2025 08:40

      В 2 строки лучше так:

      int x = 25;
      Console.WriteLine(x + x % 2 > 0 ? "odd" : "even");
      
      

      Можно скобок расставить по вкусу


      1. NarkkoZ
        10.09.2025 08:40

        Как то немного подзавис с ваших "В 2 строки лучше так". Кому лучше? Мало того что читается хуже так еще и работает не правильно. С тем же успехом можно было записать в одну строку

        Console.WriteLine("odd");

        Работает точно так же, в случае положительных чисел


        1. Zara6502
          10.09.2025 08:40

          Мало того что читается хуже

          Программирование, как я считаю, делится на профессиональное и любительское. В профессиональном во главу угла ставится однообразие оформление и соответственно максимально комфортная читаемость кода.

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


          1. JBFW
            10.09.2025 08:40

            Вам приходилось когда-нибудь разбираться в собственном коде многолетней давности, который вы не помните как работает?

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


            1. Zara6502
              10.09.2025 08:40

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

              И как я уже написал:

              Программирование, как я считаю, делится на профессиональное и любительское. В профессиональном во главу угла ставится однообразие оформление и соответственно максимально комфортная читаемость кода.

              В любительском, к коим например отношусь я

              я думаю здесь достаточно понятно всё объяснено.


              1. 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 года ). Отличная среда. Кстаи даже сейчас продолжает жить. Только несколько преобразовался.


            1. Zara6502
              10.09.2025 08:40

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


        1. developer7
          10.09.2025 08:40

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

          Console.WriteLine(x + (x % 2 > 0 ? "odd" : "even"));

          Что косается читаемости.

          Читаемость - чем проще тем лучше. Чем меньше всяких символом для понимания тем лучше. Тут конечно меру знать надо. Символы должны быть чётко понятны тому кто читает. Машинный код - это уже наверно перебор. Но я например когда прогал на асме натренировался что вполне неплохо читал почти машинный код.

          Что же касается одной строки - то если условие if и далее 2 коротких значения то почти всегда читаемость через тернарный оператор выглядит нагляднее.

          Если это сложение строк и строки короткие - то читаемость в одну строку почти всегда нагляднее.

          P.S. А вообще это всё вкусовщина. И спор тут - что лучше красное или лёгкое. Я постоянно пользуюсь тернарными операторами, мне так удобнее. А кого то от них в дрожь бросает. Вкусовщина короче.


          1. vvzvlad
            10.09.2025 08:40

            Легкое лучше, я им дышу. А красное это цвет.


      1. Zara6502
        10.09.2025 08:40

        В 2 строки лучше так

        в C# конкатенация строк считается моветоном (не моё, со мной спорить не нужно).

        ну и чутка исправлю, а то не будет работать правильно:

        int x = 25;
        Console.WriteLine(x + (x % 2 > 0 ? " is odd" : " is even"));


        1. developer7
          10.09.2025 08:40

          Если сложение строк идёт в одном примере то компилятор преобразует это в string.Concat. Тут как раз такой пример.


  1. Dhwtj
    10.09.2025 08:40

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


    1. domix32
      10.09.2025 08:40

    1. David_Osipov
      10.09.2025 08:40

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


      1. Dhwtj
        10.09.2025 08:40

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


        1. David_Osipov
          10.09.2025 08:40

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


    1. WASD1
      10.09.2025 08:40

      В теорее да - сам об этом думал.

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


  1. feelamee
    10.09.2025 08:40

    Интересно, что первый компилятор Rust был написан вовсе не на нем самом

    а что.. это возможно? и правда интересно


    1. 016
      10.09.2025 08:40

      Да. Как только компилятор языка(например, на C) способен компилировать сам себя, пишут компилятор на нем. Дальнейшие версии компилятора пишутся на прошлых, постепенно дорабатывая компилятор и язык


      1. bogolt
        10.09.2025 08:40

        первый компилятор языка Си писали же не на Си правда?


        1. GospodinKolhoznik
          10.09.2025 08:40

          Самый первый компилятор C написан на B, а тот уже на ассемблере.


    1. forever_live
      10.09.2025 08:40

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


      1. okhsunrog
        10.09.2025 08:40

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


        1. GospodinKolhoznik
          10.09.2025 08:40

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


          1. okhsunrog
            10.09.2025 08:40

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


            1. GospodinKolhoznik
              10.09.2025 08:40

              Ну Ocaml это что-то на богатом!

              Максимум, что будет при таком подходе это или интерпритатор а-ля Basic, где каждый оператор Бэйсика будет просто вызывать соответствующую подпрограмму в ассемблере. Или это будет компилятор, написаный на asm, но сначала будет очень примитивный компилятор, с минимумом возможностей.

              Я некоторое время назад баловался написанием собственной ОС (потом забросил, кончено, как и все нормальные люди). И тогда мне стало понятно, примерно как создавался Си. Само ядро языка Си достаточно маленькое, и почти ничего не может, только примитивные операции. Чтобы появилась возможность сделать хотя бы массив, нужно выделить память, т.е. нужен системный вызов, выделяющий память. На смеси доступных примитивных операций Си и ассемблера пишется malloc() для ОС. Причём сначала это будет довольно примитивная и далёкая от оптимальности операция malloc(), можно даже без free() - потом добавим))). Зато наш язык Си становится уже гораздо богаче. И так далее язык дорабатывается параллельно с доработкой самой ОС.

              А чтобы получить Ocaml это надо ещё ого-го сколько предварительной работы проделать.


              1. okhsunrog
                10.09.2025 08:40

                Я вас не понимаю. Зачем нам получать Ocaml? Он уже есть. Можно взять и начать писать на нём компилятор для своего языка.

                А чтобы сделать массив, память выделять не надо, его вполне можно хранить на стеке, или в bss. В embedded Rust часто пишут no_std и no_alloc код, там аллокатора и вовсе нет, ничего выделить нельзя


  1. Bombesko
    10.09.2025 08:40

    А как же tauri?


  1. 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, причем жрёт памяти оно заметно меньше.


  1. JordanCpp
    10.09.2025 08:40

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



    1. okhsunrog
      10.09.2025 08:40

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


      1. 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++ -- ан нет, пересборка всего всегда с нуля не вариант.


        1. okhsunrog
          10.09.2025 08:40

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


  1. Akuma
    10.09.2025 08:40

    Ещё один минус - дооолгая компиляция. Да, с каждой версией она вроде бы ускоряется, но блин. Это реально долго.

    Если локально обычно мощные CPU и лишние 30 секунд вроде и не критичны, да и прод редко компилитсч локально. То сборка на воркере в гитхаб может легко занимать минут 20. Это ужас.


    1. Format-X22
      10.09.2025 08:40

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

      Так что если время сборки уменьшается от версии к версии - это даже очень хорошо.


      1. Akuma
        10.09.2025 08:40

        У меня части проекта и на JS и на Go и на Rust. Раст больнее всего ждать конечно. Туда вфигачивают всякие кеширования пакетов и прочее, но на деле работает так себе и один фиг долго.

        Go - локально мгновенно. На гитхабе чуть больше минуты.


      1. Anarchist
        10.09.2025 08:40

        Не в java дело тут было, в рукожопии. Увы, всё больше их и больше.


    1. blind_oracle
      10.09.2025 08:40

      Смотря в сравнении с чем. В плюсах дело ещё хуже.


    1. domix32
      10.09.2025 08:40

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


      1. Akuma
        10.09.2025 08:40

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


      1. feelamee
        10.09.2025 08:40

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


  1. SWATOPLUS
    10.09.2025 08:40

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


    1. blind_oracle
      10.09.2025 08:40

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


      1. domix32
        10.09.2025 08:40

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


    1. domix32
      10.09.2025 08:40

      mm это яблочный objective-c?


  1. Livefish
    10.09.2025 08:40

    "Обязательный" return 0 в примере с С++ совсем необязательный


  1. redfox0
    10.09.2025 08:40

    Выберите программу из нашего списка и напишите для нее deb-пакет.

    rpm-пакет можно?


    1. techno_mot Автор
      10.09.2025 08:40

      Оставьте заявку на сайте, мы свяжемся с вами и обсудим детали.


      1. redfox0
        10.09.2025 08:40

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


  1. Hemml
    10.09.2025 08:40

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


    1. domix32
      10.09.2025 08:40

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


  1. llolik
    10.09.2025 08:40

    Про GUI: биндинги для GTK, вполне зрелые и официальные. Да, не полностью на Rust (сам GTK на C сделан, хотя они думают в будущем задействовать и Rust), но GUI, в принципе, делать можно.


    1. okhsunrog
      10.09.2025 08:40

      Relm4 ещё очень крутой проект, поверх gtk4-rs. Советую посмотреть


  1. Arkaim23
    10.09.2025 08:40

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

    Вот, к примеру, в 2013 году (а может и раньше) стали появляться фреймворки фронтовые, которые предлагали virtual dom, потому что на тот момент браузеры не очень легко переживали перерисовку содержимого. Сейчас же (уже как несколько лет) браузеры исправили в своей работе этот недостаток и этот vdom вообщем-то нафиг и не нужен (на медиуме уже давно разоблачили всех). Сейчас бы уже массово веб-компоненты надо внедрять и новые технологии, но упоротые фронты продолжают молиться на свои старые фреймворки как на святую корову (ибо переучиваться очень больно и не хочется).


    1. domix32
      10.09.2025 08:40

      на свои старые фреймворки

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