LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

Это не вопрос «веры».

Если бы оптимизация по хинту restrict работала, это приносило некоторую пользу в некоторых ситуациях. Небольшую, потому что модель компиляции Rust сходна, например, с крестовыми модулями, и анализатор в состоянии оценить тело функции самостоятельно.

Но она не работает. Она сломана в LLVM, и поэтому отключена в rustc.

И эксклюзивное владение x неэксклюзивное чтение в Rust никакого отношения к restrict не имеют, они появились из-за тотальной немощи borrow checker’а в анализ сколь-нибудь сложной модели владения. Впрочем, если анализатор неспособен выявить &mut borrow на два заведомо разных элемента массива, ему уж точно не до моделей владения.

Еще ты не ответил на вторую часть моего сообщения. Так вот, в Rust по определению нет inplace construction, что приводит к смешным проблемам, в общем случае никак не решающимся, а передача всего и вся по значению приводит к огромному количеству memcpy (3-6% времени исполнения), которое также невозможно соптимизировать, не переделав полностью модель языка.

Количество изменений относительно С никак не гарантирует качество или производительность.

Исправление Siborgium, :

Это не вопрос «веры».

Если бы оптимизация по хинту restrict работала, это приносило некоторую пользу в некоторых ситуациях. Небольшую, потому что модель компиляции Rust сходна, например, с крестовыми модулями, и анализатор в состоянии оценить тело функции самостоятельно.

Но она не работает. Она сломана в LLVM, и поэтому отключена в rustc.

И эксклюзивное владение x неэксклюзивное чтение в Rust никакого отношения к restrict не имеют, они появились из-за тотальной немощи borrow checker’а в анализ сколь-нибудь сложной модели владения. Впрочем, если анализатор, неспособен выявить &mut borrow на два заведомо разных элемента массива, ему уж точно не до моделей владения.

Еще ты не ответил на вторую часть моего сообщения. Так вот, в Rust по определению нет inplace construction, что приводит к смешным проблемам, в общем случае никак не решающимся, а передача всего и вся по значению приводит к огромному количеству memcpy (3-6% времени исполнения), которое также невозможно соптимизировать, не переделав полностью модель языка.

Количество изменений относительно С никак не гарантирует качество или производительность.

Исправление Siborgium, :

Это не вопрос «веры».

Если бы оптимизация по хинту restrict работала, это приносило некоторую пользу в некоторых ситуациях. Небольшую, потому что модель компиляции Rust сходна, например, с крестовыми модулями, и анализатор в состоянии оценить тело функции самостоятельно.

Но она не работает. Она сломана в LLVM, и поэтому отключена в rustc.

Еще ты не ответил на вторую часть моего сообщения. Так вот, в Rust по определению нет inplace construction, что приводит к смешным проблемам, в общем случае никак не решающимся, а передача всего и вся по значению приводит к огромному количеству memcpy (3-6% времени исполнения), которое также невозможно соптимизировать, не переделав полностью модель языка.

Количество изменений относительно С никак не гарантирует качество или производительность.

Исправление Siborgium, :

Это не вопрос «веры».

Если бы оптимизация по хинту restrict работала, это приносило некоторую пользу в некоторых ситуациях. Небольшую, потому что модель компиляции Rust сходна, например, с крестовыми модулями, и анализатор в состоянии оценить тело функции самостоятельно.

Но она не работает. Она сломана в LLVM, и поэтому отключена в rustc.

Еще ты не ответил на вторую часть моего сообщения. Так вот, в Rust по определению нет inplace construction, что приводит к смешным проблемам, в общем случае никак не решающимся, а передача всего и вся по значению приводит к огромному количеству memcpy (3-6% времени исполнения), которое также невозможно соптимизировать, не переделав полностью модель языка.

Исходная версия Siborgium, :

Это не вопрос «веры».

Если бы оптимизация по хинту restrict работала, это приносило некоторую пользу в некоторых ситуациях. Небольшую, потому что модель компиляции Rust сходна, например, с крестовыми модулями, и анализатор в состоянии оценить тело функции самостоятельно.

Но она не работает. Она сломана в LLVM, и поэтому отключена в rustc.

Еще ты не ответил на вторую часть моего сообщения. Так вот, в Rust по определению нет inplace construction, что приводит к смешным проблемам, в общем случае никак не решающимся [1], а передача всего и вся по значению приводит к огромному количеству memcpy (3-6% времени исполнения) [2], которое также невозможно соптимизировать, не переделав полностью модель языка [3].

[1] https://github.com/rust-lang/rust/issues/28008 [2] https://github.com/rust-lang/rust/issues/64301 [3] https://internals.rust-lang.org/t/defer-memcpy-when-passing-types-that-is-copy-until-it-is-actually-moved-to-another-variable/17022/3