Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Использование системы типов

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

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

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

This slide should take about 5 minutes.

Дополнительные моменты, которые может упомянуть докладчик:

  • Система типов Rust во многом заимствует идеи из языков функционального программирования.

    Например, перечисления Rust в языках вроде Haskell и OCaml известны как «алгебраические типы данных». При поиске руководства по проектированию с помощью типов можно черпать вдохновение в материалах для функциональных языков. «Domain Modeling Made Functional» — отличный ресурс по этой теме с примерами на F#.

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

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

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

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

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

Этот сегмент займёт около 7 часов 30 минут. Он включает:

СлайдДлительность
Использование системы типов5 минут
Паттерн newtype20 минут
RAII1 час 50 минут
Трейты-расширения1 час 5 минут
Паттерн typestate1 час 5 минут
Инварианты анализатора заимствований1 час 30 минут
Типы-токены1 час 35 минут