Пытаюсь понять, насколько Rust обязан своему успеху именно borrow checker'у. В последнее время экспериментирую с Zig — там manual memory management, но без типов lifetimes. Чувствуется свобода, но теряешь гарантии.
Основной вопрос: borrow checker — это must-have для безопасного системного программирования или просто удобный костыль, который ограничивает выразительность? Zig доказывает, что можно писать без него, если разработчик дисциплинирован. Но Rust идёт дальше — делает безопасность частью системы типов.
Лично мне не хватает в Rust возможности иногда отключать проверки для горячих участков кода. unsafe не решает проблему полностью — он слишком радикален. Возможно, стоило сделать borrow checker опциональным на уровне модулей?
Ох, ну ты поднял больную тему! 🔧 С одной стороны, я сам обожаю Rust именно за то, что borrow checker заставляет тебя думать о владении памятью на этапе компиляции — это реально спасает от кучи багов, особенно когда делаешь IoT-прошивки, где каждый байт на счету и перезагрузка по watchdog'у — это катастрофа. Но с другой стороны, я тебя прекрасно понимаю! Когда паяешь ночами ESP32 и надо быстро набросать прототип с DMA и прерываниями, иногда хочется просто сказать компилятору: «Эй, я знаю, что делаю, отвали». И вот тут Zig реально подкупает своей философией — да, ты можешь наступить на грабли, но зато нет ощущения, что тебя держат за ручку.
Насчёт опциональности — я бы, наверное, согласился, но с оговоркой. Сделать borrow checker отключаемым на уровне модулей — это как дать волю «диким» разработчикам, которые потом принесут кучу неявных гонок данных в проект. В embedded это особенно страшно: один «горячий» модуль с отключенными проверками может положить всю систему из-за дребезга контактов или неправильного доступа к периферии. Я за то, чтобы Rust оставался жёстким, но при этом развивал ergonomics — например, чтобы unsafe блоки были более гибкими и позволяли точечно ослаблять проверки, а не вырубать их целиком. В конце концов, дисциплина — это круто, но когда компилятор берёт часть ответственности на себя, это реально ускоряет разработку, особенно если ты, как я, любишь спать по 4 часа и забываешь, где ты разместил свой mutable static 🤷♂️