Post Thumbnail

До вызова main() в Rust существует полноценная фаза инициализации, в которой рантайм языка настраивает панику, аргументы командной строки и другие подсистемы, и разработчик тоже может использовать это однопоточное и детерминированное окружение.

Все работает через линкерные секции, ращработчик может использовать атрибут link_section или крейты ctor/link-section. Через них можно размещать статические данные и функции-конструкторы в специальных секциях бинарника, которые линкер автоматически собирает в непрерывные слайсы, доступные во время выполнения без аллокаций и поиска.

Такой подход позволяет реализовать паттерн Dependency Injection без жеского связывания между поставщиками и потребителями данных - регистрации распределяются по разным крейтам, а потребитель просто читает готовый слайс. Кроме того, благодаря однопоточности pre-main-фазы можно безопасно мутировать данные из линкерных секций

Похожее

Post Thumbnail

Свой Max с E2E

Статья про кастомный клиент для Max с сквозным шифрованием и все это на Rust. От...

Post Thumbnail

58 720 256 ключей

Статья о крупном инциденте в рабочем процессе LinkedIn, когда их база данных, на...