Size: a a a

Rust — русскоговорящее сообществo

2020 August 30

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Mikail Bagishov
Компилятор не обязан оптимизировать const fn
Строго говоря, он и работать не обязан, мы ж его не покупаем
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
У слова обязан есть совершенно конкретное значение
источник

JC

Julian =) Coffee in Rust — русскоговорящее сообществo
Ivan Boldyrev
Компилятор никому ничего не обязан, но если он будет плох, им не будут пользоваться.
Монополистом всегда будут пользоваться :D
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
То которое MUST во всяких RFC-шках
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
И вот именно этой обязанности у компилятора нет.
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
Mikail Bagishov
У слова обязан есть совершенно конкретное значение
У слова "обязан" есть несколько значений, я понимаю, что ты выбираешь то, что тебе нравится больше :)
источник

МП

Максим Петров... in Rust — русскоговорящее сообществo
Andrey Vlasov
Строго говоря, он и работать не обязан, мы ж его не покупаем
Даже в коммерческих лицензиях порой попадается в тексте "as is"
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ivan Boldyrev
У слова "обязан" есть несколько значений, я понимаю, что ты выбираешь то, что тебе нравится больше :)
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
И что? Мы пишем rfc или в чятике обсуждаем производительность компилятора?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ivan Boldyrev
Компилятор никому ничего не обязан, но если он будет плох, им не будут пользоваться.
const fn f()-> u32 {
   f()
}

fn main(){
  let x = f();
   println!("{}, x)

}
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ivan Boldyrev
И что? Мы пишем rfc или в чятике обсуждаем производительность компилятора?
В спецификации раста слово обязан будет иметт похожее значение.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
const fn f()-> u32 {
   f()
}

fn main(){
  let x = f();
   println!("{}, x)

}
Удачного инлайна :)
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
Mikail Bagishov
В спецификации раста слово обязан будет иметт похожее значение.
Ты сейчас вместо обсуждения проблемы занимаешься словесным онанизмом. И ведёшь себя как сбербанковская тётка - где карту открывали, там и закрывайте.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Mikail Bagishov
const fn f()-> u32 {
   f()
}

fn main(){
  let x = f();
   println!("{}, x)

}
Окей, вот конкретная проблема
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Компилятор в любом случае должен ориентироваться на анализы и эвристики для таких вещей. А если они есть, то нам что, жалко что ли и для не-const функций их применять?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Вроде бы, чтобы зафорсить вычисление на стадии компиляции, надо в const или static запихнуть.
источник

AZ

Andrey Zgarbul in Rust — русскоговорящее сообществo
Пока вот это не стабилизируют все, что вы тут нафлудили не имеет смысла https://github.com/rust-lang/rust/issues/67792
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Mikail Bagishov
Окей, вот конкретная проблема
При компиляции программы сообщаешь о переполнении стека
Чем не решение?
источник

IB

Ivan Boldyrev in Rust — русскоговорящее сообществo
Как же другие языки оптимизируют код без const-трейтов? 😁
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Andrey Vlasov
При компиляции программы сообщаешь о переполнении стека
Чем не решение?
Представь, что это была не функция main, а просто какая-то
#[no_mangle] pub extern "C" функция.
Тогда, если ты дашь ошибку компиляции, ты отвергнешь совершенно корректную программу, в которой эта функция просто никогда не вызывалась.
источник