OxL Справочник OxL
РусскийEnglish

Соображения для будущих ревизий

Пункты ниже не входят в действующую редакцию и не обязательны для реализаций; это материал для обсуждения в следующих ревизиях Стандарта.

  1. Одноразовые замыкания. Сейчас замыкание, которое перемещает захваченную переменную (let f = () => consume(a)), — ошибка use-after-move в месте перемещения, даже если замыкание вызывается ровно один раз (например, функция-комбинатор вида or_else); исключение — замыкание spawn, которое по определению выполняется один раз (решение реализации D-3520). Обходной путь — клонировать значение или создавать его внутри замыкания. Возможное расширение — отдельный вид функционального типа «вызываемое не более одного раза» (аналог FnOnce), который проверяется компилятором: вызов потребляет замыкание, повторный вызов или копия — ошибка. В действующей редакции от него отказались ради простоты правил владения и вывода типов замыканий; пересмотреть, если обходной путь окажется частым в стандартной библиотеке и пользовательском коде.

Исходник: docs/spec/oxl-standard.md