zero-cost-abstractions

2 posts

Newtypes в Rust делают некорректные состояния невыразимыми на этапе компиляции бесплатно

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

Передайте с идентификатором пользователя в функцию, которая ожидает идентификатор заказа, и Rust не пожалуется. Оба типа — . Компилятор видит одинаковые типы,…

Число — это не просто число: как заставить компилятор ловить баги с единицами измерения

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

Функция просит таймаут в миллисекундах. Вы передаёте . Позже другая функция просит таймаут в секундах. Вы передаёте . Где-то между ними вызываете и ничего не…