Size: a a a

2018 August 08

ПФ

Паша Финкельштейн in graalvm_ru
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
при записи оно выглядит как будто бы это адовейший перфоманс хит
но на самом деле там со временем срабатывает оптимизация, которая его выкидывает?
источник

ПФ

Паша Финкельштейн in graalvm_ru
а, ну так это Тагир использовал в StreamEx
источник

ПФ

Паша Финкельштейн in graalvm_ru
В C2 кидалово исклюючения элиминейтится
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
факториал может и не оптимизироваться)
источник

OS

Oleg Shelajev in graalvm_ru
мне кажется основная проблема в том что tailrec — это допольнительный кейворд
источник

ПФ

Паша Финкельштейн in graalvm_ru
Oleg Shelajev
мне кажется основная проблема в том что tailrec — это допольнительный кейворд
да. Но его можно пытаться подставить за человека
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
грубо говоря, у тебя есть функция

вызвать_метод() { try() { вызвать обычным способом } catch { запомнить что это tail call, что-то сделать }}
источник

OS

Oleg Shelajev in graalvm_ru
а как?
источник

OS

Oleg Shelajev in graalvm_ru
это про подставить за человека
источник

ПФ

Паша Финкельштейн in graalvm_ru
Oleg Shelajev
а как?
собственно если сейчас написать в котлине факториал и обавить туда тейлрек — он скажет что извини, не хвосторекурсивно, не оптимизирую
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
если при обработке экзепшена TailCallException будет еще один tail call и еще один экзепшен, который цепанет все тот же самый код, оно может все это и не вывезти. А может и вывезти. Кто знает?)
источник

ПФ

Паша Финкельштейн in graalvm_ru
значит можно пытаться подставить всюду и если не хвосторекурсивно на самом деле —не включать
источник

ПФ

Паша Финкельштейн in graalvm_ru
Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀
если при обработке экзепшена TailCallException будет еще один tail call и еще один экзепшен, который цепанет все тот же самый код, оно может все это и не вывезти. А может и вывезти. Кто знает?)
оптимизировать хвостовую рекурсию кидания исключения в конструкторе?
источник

ПФ

Паша Финкельштейн in graalvm_ru
public TailCallException(String reason){throw new TailCallException(reason);}
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
хз, я не знаю как эта оптимизация по элиминации экзепшенов работает)
источник

ПФ

Паша Финкельштейн in graalvm_ru
Oleg Shelajev
а как?
Продолжая отвечать на вопрос — если мы можем представить себе одну переменную, которая сможет хранить состояние нашего рекурсивного вызова — значит можно оптимизировать
источник

ПФ

Паша Финкельштейн in graalvm_ru
потому можно усложнить до двух переменных
источник

OC

Oleg Chirukhin ☄️ 🧙🏻‍♂️🚀 in graalvm_ru
если начнут кдиаться самые настоящие экзепшены, может мало не показаться. Даже если с конструктором оно будет формально корректно работать
источник

ПФ

Паша Финкельштейн in graalvm_ru
одна для состояния, другая для проверки условия
источник

ПФ

Паша Финкельштейн in graalvm_ru
Теперь у меня там нет ни одной новости 😞
источник