LINUX.ORG.RU

Как использовать fnbox в Rust?

 


0

3

Как в последнем Rust использовать следующую вещь?

#![feature(fnbox)]

Что где нужно прописать? Использую Cargo.

Так выходит, что без Box<FnOnce> просто никуда. Там, где можно было, заменил на Box<Fn>.

Выдает такие вещи:

error: use of unstable library feature 'fnbox': will be deprecated if and when `Box<FnOnce>` becomes usable (see issue #28796)

Что-то нашел вот про это, но не помогло:

#[warning(deprecated)]

Еще пытался в Cargo.toml прописать

[features]
fnbox = []

Но не понял, оно, не оно, но тоже не помогло.

Еще запускал как

$ cargo build --features fnbox

Тот же отрицательный результат.

Что делать?

★★★★★

Последнее исправление: dave (всего исправлений: 2)

Похоже, что fnbox использовать никак не получиться. Ну, а для себя, кажется, придумал что-то с Rc<Box<Fn>>, но не закончил пока

dave ★★★★★
() автор топика

Как в последнем Rust использовать следующую вещь?

«последний» == «последняя версия» или «последний» == «nightly»? Потому как эта фича похоже пока только в nightly есть.

В #28796 вон какой-то чувак советует использовать https://crates.io/crates/boxfnonce. Может имеет смысл попробовать.

Deleted
()

Еще пытался в Cargo.toml прописать

Это для conditional compilation. Совсем другое, но название то же.

Для языка нужно в начале lib.rs прописывать нужный #![feature()].

Еще запускал как

Это снова conditional compilation.

В доке чётко указано, что нужна nightly сборка. Вы её используете?

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

А, вот, что значит nightly :)

Спасибо, попробую ее. А с Rc<Box<Fn>> нисколько не решение, поскольку Rc уходит в кучу, а это именно то, чего хотелось бы всячески избежать

dave ★★★★★
() автор топика
Ответ на: комментарий от dave

Rc<Box<Fn>>

Можете объяснить мне, в чём смысл? Почему бы просто не использовать Rc<Fn()>?

numas13
()
Ответ на: комментарий от RazrFalcon

Не так написал. Имел в виду просто Rc, потому что чаще возникают Rc<U> where U: Fn. Весь цимес в том, что мне нужен полный контроль, где и когда переходить в кучу или из кучи, а иначе весь смысл теряется, да и скорость тоже. Поэтому Rc - не вариант

dave ★★★★★
() автор топика
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от dave

А это связано с другим кодом, где как раз таки нужен был бы Box<FnOnce>, если без Rc

dave ★★★★★
() автор топика
Ответ на: комментарий от dave

Какую задачу вы вообще пытаетесь решить? Я ни разу не видел Box<Fn> и не могу представить зачем он нужен, не считая коллекции функций. Хотя и тут можно лайфтаймами обойтись, насколько я знаю.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Переношу на Rust сильно функциональный код. Тесты показали, что при правильном использовании куча/стек можно получить 10-й прирост в скорости.

dave ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Вполне нормальный ответ.

Нет, не переписываю с Си++. Я, наоборот, думал перенести на Си++, но в Си++ нет полноценных замыканий из-за долбанного small size optimization, из-за чего код на Rust будет эффективнее. Да и с шаблонами на Си++ возиться совершенно не охота после traits в Rust

dave ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Спасибо, справлюсь. Просто иногда могут возникать вопросы. Я особо не вчитывался в доку и поэтому подумать не мог, что нужна nightly-сборка.

Надоело на маке и линуксе сидеть. Сегодня в выходной решил настроить окружение на винде (качать приходиться Visual C++). Вот, и попробую поставить этот nightly

dave ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Установлено. Заметил, что не везде может создать Box<FnBox> там, где может Box<FnOnce>. Видимо, одна из причин, почему эта фича не в stable.

dave ★★★★★
() автор топика

Классно получается, пусть и с nightly. Теперь понимаю, почему многие программисты мечтают писать на Rust

dave ★★★★★
() автор топика
Ответ на: комментарий от Aswed

Не знаю, что ты там придумал в своей голове, но пассаж об Rc был о том, что это связано с тем, будет Box<Fn> или Box<FnOnce>.

dave ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.