Size: a a a

2020 April 16

DS

Doge Shibu in rust_offtopic
Убедиться, что вывод трейтов через Generic а-ля хаскель на самом деле выходит zero-cost в расте
источник

G

Gymmasssorla in rust_offtopic
источник

AZ

Alex Zhukovsky in rust_offtopic
Alexander Krivitskiy
А... процессор будет счастлив) Но я бы не особо парился по этому поводу
Не факт что вариант с выходом лучше
источник

AK

Alexander Krivitskiy in rust_offtopic
Alex Zhukovsky
Не факт что вариант с выходом лучше
Можно такты замерить, если тебе интересно. Мне нет. Выполнение инструкций с регистрами занимает наносекунды, когда обращение к тому же кэшу микросекунды(могу нагло врать). Так что чем больше обращений к памяти тем медленнее выполнение кода.  Но я не эмбеддед, могу ошибаться, с этим лучше к ним.
источник

DS

Doge Shibu in rust_offtopic
Alexander Krivitskiy
Можно такты замерить, если тебе интересно. Мне нет. Выполнение инструкций с регистрами занимает наносекунды, когда обращение к тому же кэшу микросекунды(могу нагло врать). Так что чем больше обращений к памяти тем медленнее выполнение кода.  Но я не эмбеддед, могу ошибаться, с этим лучше к ним.
Тут ещё вопрос с предсказанием переходов.

В каких-то случаях оно может на время исполнения повлиять, если например, мы сравнимаем в цикле и у нас равные и не равные структуры случайно расположены в массиве.
источник

DS

Doge Shibu in rust_offtopic
Но это надо мерять, опять-таки
источник

AZ

Alex Zhukovsky in rust_offtopic
я точно помню что в жите шарповом есть оптимизация заменять a && b && c на a & b & c
источник

AZ

Alex Zhukovsky in rust_offtopic
как раз по этим причинам
источник

DS

Doge Shibu in rust_offtopic
Но в итоге последний получившийся вариант был вообще без ветвлений, а целиком на 128 битных операциях
источник

AZ

Alex Zhukovsky in rust_offtopic
мне кажется это похожая история
источник

DS

Doge Shibu in rust_offtopic
источник

AK

Alexander Krivitskiy in rust_offtopic
Вы мне лучше скажите, я вот такой декоратор в питоне нагородил - это сильно плохо?

Есть f такого вида

f(a1, a2, a3) - > ret

Мой декоратор работает так


@poll(f)
def wait_for_awesome_ret(ret): return ret.is_awesome()

awesome_result = wait_for_awesome_ret(a1, a2, a3)


Т.е. в декорируемую функцию нужно на самом деле аргументы f передавать.
источник

DS

Doge Shibu in rust_offtopic
Alexander Krivitskiy
Вы мне лучше скажите, я вот такой декоратор в питоне нагородил - это сильно плохо?

Есть f такого вида

f(a1, a2, a3) - > ret

Мой декоратор работает так


@poll(f)
def wait_for_awesome_ret(ret): return ret.is_awesome()

awesome_result = wait_for_awesome_ret(a1, a2, a3)


Т.е. в декорируемую функцию нужно на самом деле аргументы f передавать.
Ну IDE от такого крышу снесёт точно.
источник

AK

Alexander Krivitskiy in rust_offtopic
А как красиво создать функцию, которая принимает любую f и предикат(может быть многострочным) и генерит функцию, которая опрашивает f переодически пока предикат не выполнится и возвращает её результат? Чтобы писанины много не было? Не больше чем с этим декоратором. Думал отдельной функцией, так неудобно получается
источник

DS

Doge Shibu in rust_offtopic
Alexander Krivitskiy
А как красиво создать функцию, которая принимает любую f и предикат(может быть многострочным) и генерит функцию, которая опрашивает f переодически пока предикат не выполнится и возвращает её результат? Чтобы писанины много не было? Не больше чем с этим декоратором. Думал отдельной функцией, так неудобно получается
А аргументы одни и те же передаются каждый раз?
источник

DS

Doge Shibu in rust_offtopic
Первая ссылка в хугле:
{- | repeat action until result fulfills condition -}
until :: (Monad m) => (a -> Bool) -> m a -> m a
until p m =
  let go =
        do x <- m
           if p x
             then return x
             else go
  in  go
источник

AK

Alexander Krivitskiy in rust_offtopic
Doge Shibu
А аргументы одни и те же передаются каждый раз?
Нет, f - произвольная
f(*args, **kwargs) -> ret
источник

DS

Doge Shibu in rust_offtopic
Alexander Krivitskiy
Нет, f - произвольная
f(*args, **kwargs) -> ret
В смысле сами передаваемые аргументы меняться при каждом вызове внутри цикла?
источник

AK

Alexander Krivitskiy in rust_offtopic
Doge Shibu
Первая ссылка в хугле:
{- | repeat action until result fulfills condition -}
until :: (Monad m) => (a -> Bool) -> m a -> m a
until p m =
  let go =
        do x <- m
           if p x
             then return x
             else go
  in  go
А, нет
источник

AK

Alexander Krivitskiy in rust_offtopic
Doge Shibu
В смысле сами передаваемые аргументы меняться при каждом вызове внутри цикла?
Не
источник