Обновить

Немного философии Rust, возможно кому то интересно обсудить

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

Вот какой аспект. В Rust уровень владения/заимствования объектом - часть контракта. По большому счету можно составить примерно такую таблицу (на самом деле это дерево должно быть, но для упрощения привожу плоскую таблицу):

  • Просто владею объектом → T

  • Временно читаю чужой объект → &T

  • Временно изменяю чужой объект → &mut T

  • Один владелец, нужна куча → Box

  • Несколько владельцев, один поток, чтение → Rc

  • Нужны несколько владельцев, один поток, изменение → Rc<Cell> / Rc<RefCell>

  • Несколько владельцев, несколько потоков, чтение → Arc

  • Несколько владельцев, несколько потоков, изменение → Arc<Mutex> / Arc<RwLock>

По сути чем более строгий уровень доступа (или какой термин тут лучше?) - тем больше проверок сможет сделать компилятор. Если используете Rc - то уже потенциально возможны циклические ссылки и утечка памяти (с Box - это не возможно). Если RefCell - то компилятор не сможет проверить два borrow_mut() одновременно - будет рантайм проверка или паника.

И вот какая фишка. Часто LLM-ка дает уровень больше чем нужно. Как-то где можно обойтись ссылкой - добавит Rc<RefCell>. Т.е., по сути, код то рабочий, но лишние обертки и послабление компил-тайм проверок немного угнетают.

Но иногда бывает оправданно, когда в процессе уровень нужно ослабить, т.к. не всегда предусмотришь на этапе проектирования.

И далее возникла философская идея. А вот неплохо бы чтобы компилятор сам решал какой уровень применять. Т.е. начинаем от самого малого, если его не достаточно - то использует послабления. Если достаточно классической проверяемой ссылки - то использовать ее. Или если нужно множественное владение, но точно нет потоков - то Arc можно не использовать - достаточно Rc (если нет данных то ослабляем - берем Arc).

При этом все еще остаемся в рамках языка без GC - но вместо ручного выбора - выбор осуществляется компилятором при сборке.

Как вы думаете - идея имеет право на жизнь?

Теги:
+3
Комментарии3

Сбой в работе Reg.ru и проблемы с сервисами Рунета из‑за аварии на ММТС-9

18 августа 2026 года произошёл сбой в работе сервисов хостинг‑провайдера и регистратора доменов Reg.ru. Сбой в работе Рунета вызван перебоями в подаче электроэнергии на крупном узле связи, сообщил ТАСС доменный регистратор «Рег.ру». Два источника и сотрудник ММТС-9 подтвердили РБК, что на части этажей ММТС-9 нет электричества.

Сбой в работе Reg.ru и проблемы с сервисами Рунета из‑за аварии на ММТС-9

Публикации