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