Anton
Да
Sherzod
Я бы использовал Олю
Sherzod
Ида полтора часа запускается
Filipp
https://doc.rust-lang.org/book/second-edition/ch13-04-performance.html
The iterator version ended up slightly faster! We're not going to go through the benchmark code here, as the point is not to prove that they're exactly equivalent, but to get a general sense of how these two implementations compare.
...
The point is this: iterators, while a high-level abstraction, get compiled down to roughly the same code as if you'd written the lower-level code yourself. Iterators are one of Rust's zero-cost abstractions, by which we mean using the abstraction imposes no additional runtime overhead in the same way that Bjarne Stroustrup, the original designer and implementer of C++, defines zero-overhead:
...
Filipp
фигово, что код не показали, но, может, когда допишут second edition, он тут будет
Sherzod
Спасибо за прояснения. А то со смартфона не удобно гуглить и компилировать :(
Sherzod
Anton
Как обещал:
https://godbolt.org/g/CTTZ8z
Anton
Если нигде не ошибся, примерно что-то такое получается:
https://pastebin.com/rHhrywRf
Anton
Честно говоря, трудно понять, что там происходит, в таком виде)
Anton
Декомпилировал руками
Anton
Там же справа асм
Anton
Я мог ошибиться где-нибудь
Anton
Говорю же, просто переписал асм руками построчно и привёл к сишному формату
Anton
Там 15 строк всего
123
а еще можно заюзать Ida Pro + Hex-Rays ;d
Anton
Можно, но это надо скачивать, крэк искать)
123
Тогда x96dbg, он вроде тоже могёт
dukeBarman
Ещё можно retdec заюзать, онлайновый. Для не критичных бинарников (они декомпилят у себя на сервере)
dukeBarman
https://retdec.com/
Anonymous
это хвостовая рекурсия? как вам кодец вообще, можно ли было красивее сделать рекурсивный подсчет фибоначчи?
Anonymous
чтобы в нем аккумулировать значение
Anonymous
я не знаю, оптимизирует?
Влод
будет смешно если нет
Sherzod
А чо, вам строчек жалко, иф и ретурн на одной линии?
Sherzod
Ну раз уж так, то и ретурн убрали бы
Влод
чтобы лишнее имя не плодить?
Anonymous
Anonymous
mismatched types
expected (), found i32
note: expected type ()
found type i32
Anonymous
вот такая вот
Anonymous
fib_helper(prev: i32, cur: i32, n: i32) -> i32
но я же хочу вернуть i32 :(
Danila Matveev
компилятор говорит что не хочешь
Danila Matveev
кто-то нам врет
Влод
иф стейтмент ожидает ()
Anonymous
Влод
нужно return if n == 0 {cur} else {...}
Anonymous
вахх
Anonymous
точно, спасибо, так даже симпатичнее стало
Danila Matveev
для начала выкини нафиг return
лучше его избегать в принципе
if {} else {}
где оба выражения должны быть типа резльтата
Anonymous
а как сделать так, чтобы замыкание увидело само себя?
Влод
Anonymous
я думал да 🤔
Anonymous
https://stackoverflow.com/questions/16946888/is-it-possible-to-make-a-recursive-closure-in-rust
Влод
такой архаизм... конечно синтаксис не важен но выглядит плохо
Влод
а лямбда без замыкания бывает в расте?
Влод
ну тип нельзя явно сказать чтобы не капчурила?
Влод
Влод
хотя это получается не лямбда конечно
Anonymous
ну крч сложно сделать рекурсивное замыкание
Anton
https://godbolt.org/g/N63T4m
Соптимизировал
Anton
Правда там вообще непонятно, что происходит
Anton
Компиляторы слишком умные стали
k0rs4r
Ого. Заинлайнил fib_helper с агрументами. Рекурсию превратил в цикл и цикл развернул, отдельно по 8 итераций за одну обрабатывает, отдельно остаток. Не думал что такое могут
k0rs4r
а с SSE или AVX можно собрать как-то ?
Судзумия
պլհկ
-C target_cpu=native
k0rs4r
да, уже увидел что можно указать CPU и что LLVM умеет в это, просто задача не векторизируется потому не генерит
Alex
ребят может кто расскажет почему у Rust нет стабильного ABI?
k0rs4r
если исходники декомпилируемого модуля доступны возможно в С проще будет перевести из LLVM IR
Alex
C++ несколько лет без стабильного ABI был?
Alex
жескачь
123
c++ настолько стабильный что нестабильный
Мерль
Спасибо
Судзумия
найс
Oleg
Товарищи, представим, что у меня есть какая-то глупая функция типа
https://gist.github.com/Odomontois/2208fce3d68b3050fbf5cbc0daad5ed0
Dmitry
Представили
Dmitry
Сочувствуем.
Oleg
так вот, теперь я хочу, вернуть не какой-нибудь Vec, а самый непосредственно итератор
Oleg
Тип у этого итератора, учитывая лямбды я никогда не запишу, но хочу вернуть, удостоверившись, что этот тип действительно реализует Iterator<T>
Oleg
И если моё решение - это impl Trait, получаю ли я дополнительный боксинг/runtime dispatch из-за него?
Dmitry
Не знаю что тебе сказать на это, но я бы не стал, например, итераторы возвращать.
Oleg
Oleg
Если я не хочу промежуточных аллокаций