За последние годы интерес к Rust значительно вырос. Отчасти этому способствовало то, что ведущие участники технологической индустрии, такие как Microsoft, Google и Amazon рассказали о своём опыте использования этого языка в реализации критических систем.

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

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

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

Преимущества Rust в продакшене


▍ Надёжность и стабильность


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

«Учитывая небольшой размер нашей команды, на первое место выходит стабильность инфраструктуры. В ином случае необходимость постоянного обслуживания тормозит развитие. Rust даёт нам уверенность в том, что при любом изменении кода или рефакторинге мы, скорее всего, получим рабочие программы, которые будут функционировать долгие месяцы, не требуя особого внимания», — xAI (бывший Twitter).

В качестве ещё одного примера скажу, что реестр npm в 2019 году переехал на Rust (вот соответствующий документ). Являясь крупнейшим реестром ПО в мире, эта система обрабатывает более 1,3 миллиарда скачиваний пакетов…в сутки. Npm является критической инфраструктурой для экосистемы JavaScript, поэтому стабильность для неё играет важнейшую роль.

«Больше всего я хвалю Rust за его занудность, и это серьёзная похвала», — Крис Дикинсон, бывший инженер npm.

Чем позже обнаруживаются баги, тем сложнее их исправлять. Ниже я приведу относительные затраты на устранение ошибок на разных стадиях разработки продукта. Ошибки, которые всплывают в продакшене, исправлять значительно дороже, чем те, которые мы находим ещё на этапе разработки. (Источник: NIST Costs of Software Defects)



Опрос компании Microsoft показал, что 70% их багов связаны с безопасностью. В 2018 году число CVE (Common Vulnerabilities and Exposures, общий перечень уязвимостей и рисков) в Microsoft составляло 468. На исправление одной CVE в среднем затрачивается $150,000, что, как отмечают в Microsoft, является очень умеренной оценкой. (Источник: Ryan Levick — Rust at Microsoft). Rust не смог бы предотвратить все эти баги, но значительно сократил бы их общее число.

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

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

«Мы постоянно говорим о росте производительности […] при использовании Rust, но меня, честно сказать, больше интересует повышение с его помощью стабильности», — Стефан Баумгартнер, старший архитектор продукта в Dynatrace.

▍ Предсказуемое поведение при выполнении


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

Для организаций плавное функционирование имеет первостепенную значимость, поскольку является значительным фактором затрат и может влиять на пользовательский опыт. Согласно недавнему исследованию, на дежурное решение возникающих проблем компании в среднем тратят $2,5 миллиона в год. И оплата труда дежурных инженеров составляет весомую часть этих затрат.

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

«Когда мы начали проводить нагрузочное тестирование, то были неожиданно удивлены его результатами. Задержка версии ПО, реализованной на Rust, не превышала задержку версии на Go, но при этом уже не имела резких скачков».

Вот графики из той статьи Discord. Обратите внимание, что скачки задержки, которые наблюдаются в версии на Go (фиолетовые линии), в версии на Rust (синие линии) уже отсутствуют, что отражается на времени отклика 95-го перцентиля, делая поведение программы более предсказуемым и плавным.



Ещё одним примером является сервис Cloudflare, в котором на Rust реализована служба DNS, 1.1.1.1. Инженеры компании отмечают, что веской причиной для использования Rust стала именно его предсказуемость:

«По опыту прежних реализаций мы выяснили, что для публичного сервиса пиковое быстродействие ввода-вывода не так важно, как возможность предоставления клиентам равномерной скорости».

Более того, Rust демонстрирует прекрасное поведение в среде выполнения при обработке сетевых запросов. В бенчмарке Евгения Ретунского этот язык показал наименьшую задержку и максимальную пропускную способность, сопоставимую с С и С++.

Вот график из того бенчмарка, демонстрирующий задержку 99.9 перцентиля для каждого протестированного языка. По мере роста числа запросов в секунду задержка Rust остаётся стабильной и низкой. При этом Go и Java показывают более высокую базовую задержку, а в Python в определённые моменты наблюдаются её скачки.



Автор описывает эти результаты так:

«В итоге Rust показал гораздо меньшие колебания задержки в сравнении с Golang, Python и особенно Java. […] Если для вашего сервиса большое значение имеет предсказуемое быстродействие, то этот язык может стать более эффективной альтернативой для всех перечисленных. Кроме того, прежде чем писать новый сервис на С или С++, стоит рассмотреть использование для этой задачи Rust», — Евгений Ретунский.

▍ Сокращение затрат


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

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

Например, у AWS есть сервис под названием Firecracker, выполняющий виртуальные машины при очень низких издержках. Он лежит в основе работы Lambda-функций и контейнеров AWS Fargate.

«Firecracker потребляет около 5 MiB памяти на каждую microVM. Вы можете запускать на одном инстансе тысячи безопасных виртуальных машин с очень разнообразными конфигурациями vCPU и памяти».

Столь эффективное задействование аппаратного обеспечения приводит к снижению затрат компании.

Firecracker позволил AWS повысить эффективность Fargate, снизив тем самым затраты конечных потребителей. В результате компании удалось сократить стоимость Fargate на 50%. (Источник таблицы и объявление AWS)



▍ Эргономика


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

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

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

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

«Помимо безопасности памяти и потоков, этот язык предоставляет средства, используемые при создании библиотек для построения абстракций, устойчивых к неправильному использованию. Такая экосистема безопасных библиотек позволяет программировать с пониманием “если компилируется, значит корректно”, чем не могут похвастаться другие передовые языки, даже предлагающие сборку мусора», — Дэвид Толнай, автор serde

Статический анализ Rust смещает показатель гарантии качества кода влево:



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

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

▍ Акцент на долгосрочной стабильности


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

Одной из известных организаций, сделавшей упор на Rust, стала Microsoft.

«В Microsoft стали активно использовать Rust, вложив $10 миллионов в то, чтобы сделать его первостепенным языком в наших системах инжиниринга, плюс $1 миллион в фонд @rustlang», — Дэвид Вестон, вице-президент Microsoft по безопасности ОС и работе с корпорациями.

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

Следом поддержка Rust появилась и в ядре Linux, что в значительной степени подкрепило позиции языка. Примечательно, что мейнтейнеры ядра ранее отказывались интегрировать в него C++.

Знаковым моментом в развитии Rust стало достижение набором инструментов Ferrocene важного этапа: теперь его версия, основанная на Rust 1.68, соответствует ISO 26262 и IEC 61508. Эта сертификация означает, что компилятор Rust отвечает жёстким стандартам безопасности, а значит является полностью пригодным для использования в сферах, требующих высокого внимания к этому аспекту, вроде автомобилестроения и авионики. Немногим языкам удалось достичь этого уровня сертификации, что является ещё одним ярким сигналом того, что Rust с нами надолго.

Более подробно по теме можете почитать статью Кэрол Николс «In It for the Long Haul».

▍ Продуктивность и удовлетворённость разработчика


Многим разработчикам нравится работать с Rust. Как показывает опрос StackOverflow, этот язык уже шесть лет подряд остаётся самым излюбленным среди программистов. При этом более 80% респондентов сообщили, что планируют продолжать использовать его и в следующем году.

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

▍ Производительность и энергоэффективность


Как уже говорилось, в качестве основной причины использования Rust нередко называют производительность. Этот язык также предлагает прекрасную поддержку многопоточных рабочих нагрузок. Такие библиотеки, как rayon и Tokio, считаются лучшими в своём роде для написания высокопроизводительных приложений.

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

В приведённом ниже бенчмарке из статьи Перейры и др. под названием «Energy Efficiency across Programming Languages» Rust по скорости сравнялся с С и С++, примерно в 2-3 раза опередил Go и в 70 раз — Python.

Язык Время (нормализованный показатель)
C
1.00
Rust 1.04
C++ 1.56
Java 1.89
Go 2.83
JavaScript 6.52
PHP 27.64
Ruby 59.34
Python 71.90
В свою очередь, этот аспект также отражается на потреблении энергии, что является ещё одним важным фактором затрат для крупных компаний.



Почему Rust может не подходить для продакшена


▍ Незрелая экосистема


Rust является относительно молодым языком. Его версия 1.0 вышла в 2015 году, поэтому и экосистема ещё довольно неразвита. Многие важные библиотеки ещё не достигли релиза 1.0.

И этот фактор приводится в качестве причины хорошенько подумать при рассмотрении использования Rust в продакшене.

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

Тем не менее библиотеки для типичных задач вроде парсинга JSON или обработки сетевых взаимодействий являются очень надёжными и считаются лучшими в своём классе. В них редко происходят кардинальные изменения, и такие важные крейты, как serde или tokio уже миновали свой релиз 1.0.

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

Более подробный разбор текущего положения дел с async/await освещён в другой нашей статье.

▍ Недостаток разработчиков


Из предыдущего пункта также вытекает тот факт, что сообщество Rust всё ещё относительно невелико. Трудно найти Rust-разработчиков профессионального уровня.

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

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

«За последние два года сообщество Rust увеличилось почти втрое, достигнув 3,7 миллиона пользователей, из которых 0,6 миллиона присоединились только за последние полгода. […] Кроме того, вокруг этого языка выстроилось верное сообщество разработчиков, заинтересованных в обеспечении безопасности приложений и использования памяти», — State of the Developer Nation 24th Edition — отчёт Q1 2023.




▍ Инструменты


Среди прекрасных инструментов, которые делают использование Rust столь удобным, можно выделить сargo, rustfmt, clippy и rust-analyzer. В нём по-прежнему недостаточно хорошо реализована поддержка отладки, но она стабильно улучшается. С поддержкой профилирования дела обстоят аналогичным образом. Также следует отметить, что Rust отлично интегрируется с существующими инструментами вроде GDB или perf, хотя не для всех платформ этот процесс оказывается простым. Актуальная информация по этой теме приведена в статье, посвящённой инструментам профилирования в Rust.

Недавно в JetBrains анонсировали выход RustRover, новой IDE для Rust на основе IntelliJ. Это говорит о том, что компания считает удачным вкладом создание инструментов для Rust и считает его перспективным языком.

▍ Сложность освоения


Известно, что Rust осваивается небыстро. Это сложный язык со множеством продвинутых возможностей.

В ходе опроса 2022 Annual Rust Survey на вопрос «Почему вы не используете Rust?» респонденты в качестве основной причины назвали сложность освоения:



В более раннем опросе 2020 года респондентов попросили оценить степень сложности различных аспектов Rust и получили такие результаты:



Самыми трудными по мнению участников опроса являются аннотации времени жизни (Lifetimes), а также принципы владения и заимствования (ownership and borrowing). Хотя в реальных приложениях обозначение времени жизни не составляет особых проблем, так как компилятор зачастую выводит этот параметр по дефолту, используя функциональность lifetime elision (опускание времени жизни). А вот принципы владения и заимствования являются очень важными и для профессионального использования языка требуют тщательного освоения.

В случае внедрения Rust также важно отчётливо обозначать перед командой ваши ожидания. Это не тот язык, который можно изучить за несколько дней. Здесь потребуется практика, которая позволит усвоить принципы владения/заимствования и наработать необходимые навыки.

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

Как правило, на выработку высокой продуктивности в Rust уходит несколько месяцев:

«Судя по нашим исследованиям, более 2/3 опрошенных уже к концу двух месяцев изучения Rust начинают вносить уверенный вклад в построение базы кода. При этом одна треть за тот же срок и даже раньше достигают уровня продуктивности, сопоставимого с программированием на других языках. По истечении четырёх месяцев число таких специалистов уже начинает превышать 50%», — Google.

В Microsoft сделали аналогичные выводы:

«По истечении нескольких недель усердного изучения Rust кривая обучения начинает выравниваться. Тем не менее эти изначальные усилия вполне окупают себя ввиду вышеупомянутого повышения безопасности. Мы также заметили, что как только разработчики успешно проходят этот начальный этап обучения, они начинают писать код с той же лёгкостью, что и на любом другом языке. Главное иметь в виду, что изначально будет нелегко».

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

▍ Длительность компиляции


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

«Медленная сборка стала главной проблемой, заявленной разработчиками при использовании Rust. Лишь чуть более 40% опрошенных сочли её скорость приемлемой», — Google.

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

Продолжительность компиляции — это известная проблема Rust, и команда его разработчиков непрерывно работает над ускорением этого процесса. И стоит отметить, что небезуспешно — компилятор Rust постепенно набирает скорость. Например, с 2018 года он стал вдвое быстрее обрабатывать команду cargo check, которая чаще всего используется для быстрой проверки ошибок:



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

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

Заключение


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

С другой стороны, этот язык всё ещё довольно молод, и его экосистема не успела достаточно развиться. Он также непрост в освоении и отличается длительной компиляцией.

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

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

Узнавайте о новых акциях и промокодах первыми из нашего Telegram-канала ????

Комментарии (15)


  1. Expurple
    17.11.2023 15:40
    +10

    Всё так. Пишем сейчас CRUD на расте, кайфуем от точного моделирования данных и отсутствия багов, но местами натыкаемся на сырость библиотек


    1. Ratenti
      17.11.2023 15:40

      почему не на java или c#?


      1. Expurple
        17.11.2023 15:40
        +6

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


  1. kovserg
    17.11.2023 15:40

    Как всё прекрасно. Как в мультике про корову.

    ps: https://youtu.be/TGfQu0bQTKc?t=211


    1. PsyHaSTe
      17.11.2023 15:40
      +5

      Мультик про корову очень хороший, но не к месту

      Второй видос низкопробное кловунярство. Над растом можно посмеяться куда умнее скажем

      Но чел несет не очень смешную и уместную пургу.


      1. Centimo
        17.11.2023 15:40

        Блин, шутка хороша. Придётся даже аниме заценить.

        Hidden text

        Sabagebu!


  1. boldape
    17.11.2023 15:40

    Для меня самая большая проблема с растом это дебаг. Я использую ВСкод на винде и пробовал оба дебагера мракософтовский оказался по лучше, но все равно ставишь бряку в каком нибудь мод.рс и он останавливается во всех зависимостях которые выполняют код в мод.рс в этой строке по номеру. Это какой сюр конечно. Посмотреть строку целиком длиннее какой то фиксированном величины не возможно, а у меня много скульных квериков которые генерируется, а не константы. Есть интеграционный тест, который тестируют асинхронщину, запускаю под отладчиком никаких проблем, запускаю через карго где то паникует в токио, но у меня паники отлавливаются на границе с ффи и тест все равно зелёный, а почему оно паникует не понятно. Пропустить код зависимостей при пошаговом исполнении нельзя, а то рискуешь все начинать сначала т.к. твой код тоже пропускается. Значение констант сгенерированных макросами не отображается ни в айдэе ни в отладчике(он вообще ни про какие константы не в курсе). Многие переменные "оптимизированны" даже в дебажной/дев сборке и увидеть значение в отладчике не получается.

    Короче по сравнению с отладкой в настоящий студии это конечно испытание времён 2000 годов, а то и раньше.


    1. Ratenti
      17.11.2023 15:40
      +1

      Так почему RustRover не используете или плагин к  IntelliJ IDEA и CLion ?


      1. boldape
        17.11.2023 15:40
        -1

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


  1. codecity
    17.11.2023 15:40

    Еще все-же ООП полноценное - это важно для многих сценариев, особенно когда дело касается GUI. Как бы было модное веяние - что ООП суть тлен, не нужно и т.д. Однако большинство промышленных языков высокого уровня, уровнем повыше C, имеют ООП в арсенале.


    1. boldape
      17.11.2023 15:40

      А чего именно не хватает расту для реализации гуя в стиле ооп?


      1. codecity
        17.11.2023 15:40
        +1

        А чего именно не хватает расту для реализации гуя в стиле ооп?

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

        Зачем лишать себя такого удобного инструмента как ООП? Да, можно без него - но это банально не удобно.


        1. boldape
          17.11.2023 15:40

          Ну я написал свой простенький макрос инхерит + естественно трэйты правда у меня 1 уровень наследования (но макросу пофиг сколько уровней), разницы с с++ по количеству кода/многословности не наблюдаю. Конечно мой макрос не покрывает все возможности с++ наследования, но обычное одиночное наследование вроде работает, а это примерно 146% потребностей всех гуи библиотек на с++ с которыми я работал.

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


  1. nameisBegemot
    17.11.2023 15:40

    Какое главное событие в моей жизни (когда Раст займёт место С++)?

    Главное событие в твоей жизни у тебя впереди (ждём этого уже много лет)


  1. alexdora
    17.11.2023 15:40
    +1

    Большое спасибо за статью, наконец-то кто-то написал статью про Rust без подтекста:
    X язык "какуля" потому что он не Rust. И приятно увидеть результаты графические с объяснением.