Size: a a a

2020 August 24

EO

Eugene Obrezkov in Frontend UA
не знаю как тебе ответить)
источник

EO

Eugene Obrezkov in Frontend UA
по тем же причинам, почему и в других местах описывают на типах
источник

AR

Alexey Raspopov in Frontend UA
охуенный ответ, спасибо
источник

UU

Unhappy Unknown in Frontend UA
Що таке Trampoline?
источник

EO

Eugene Obrezkov in Frontend UA
Alexey Raspopov
охуенный ответ, спасибо
ну давай раскинем сценарий
вот есть у тебя трамплин без типов, ты делаешь

const fn = trampoline(() => fn());


какой будет тип у fn и как ты будешь его всовывать в остальную часть проекта, если у него не будет информации о том, что он принимает и отдает
источник

EO

Eugene Obrezkov in Frontend UA
Unhappy Unknown
Що таке Trampoline?
это одна из техник защититься от переполнения колстека
источник

AR

Alexey Raspopov in Frontend UA
Eugene Obrezkov
ну давай раскинем сценарий
вот есть у тебя трамплин без типов, ты делаешь

const fn = trampoline(() => fn());


какой будет тип у fn и как ты будешь его всовывать в остальную часть проекта, если у него не будет информации о том, что он принимает и отдает
наверно ж достаточно “пробросить” типы из функции которая передается в трамплин?
function trampoline<T>(fn: T): T

мне стало любопытно зачем прям type описывать, если это всего лишь утилита
источник

EO

Eugene Obrezkov in Frontend UA
Alexey Raspopov
наверно ж достаточно “пробросить” типы из функции которая передается в трамплин?
function trampoline<T>(fn: T): T

мне стало любопытно зачем прям type описывать, если это всего лишь утилита
трамплин это ж не факт что Т сразу, это может быть и функция, которая в пятом поколении вернёт Т
источник

AR

Alexey Raspopov in Frontend UA
это если внутренности типизировать же? для интерфейса который в остальном коде используется, достаточно сказать что сигнатура обёрнутой функции совпадает с самой функцией
источник

AR

Alexey Raspopov in Frontend UA
или я давно трамплин не писал, но это первое что в голову приходит
источник

EO

Eugene Obrezkov in Frontend UA
ну если без рекурсии, то да, трамплин это const trampoline = (fn: (…args: unknown[]) => T) => () => T как-то так
источник

EO

Eugene Obrezkov in Frontend UA
const add = trampoline<number>((a, b) => a + b);
add(2, 5)
источник

AR

Alexey Raspopov in Frontend UA
Eugene Obrezkov
ну если без рекурсии, то да, трамплин это const trampoline = (fn: (…args: unknown[]) => T) => () => T как-то так
если не нужно явно описывать инпут функции, можно даже просто сделать trampoline<T extends Function>(fn: T): T
источник

EO

Eugene Obrezkov in Frontend UA
та вот как раз надо
источник

EO

Eugene Obrezkov in Frontend UA
мне нужно для fn = trampoline() чтобы у fn был тайпчек согласно трамплину
источник

AK

Alexander Kuzmenko in Frontend UA
Eugene Obrezkov
это одна из техник защититься от переполнения колстека
А есть где почитать?
источник

EO

Eugene Obrezkov in Frontend UA
Alexander Kuzmenko
А есть где почитать?
да собственно, полно статей на эту тему - https://en.wikipedia.org/wiki/Trampoline_(computing)
источник

EO

Eugene Obrezkov in Frontend UA
> Continuation-passing style is a popular intermediate format for compilers of function languages, because many control flow constructs can be elegantly expressed and tail call optimization is easy. When compiling to a language without optimized tail calls, one can avoid stack growth via a technique called trampolining. The idea is to not make the final continuation call inside the function, but to exit and to return the continuation to a trampoline. That trampoline is simply a loop that invokes the returned continuations. Hence, there are no nested function calls and the stack won’t grow.
источник

Вт

Ві тя in Frontend UA
Eugene Obrezkov
трамплин это ж не факт что Т сразу, это может быть и функция, которая в пятом поколении вернёт Т
в вебшторме напиши трамплин и пример использования, потом Show context actions -> specify type explicitly и вебшторм сам тебе тип придумает
источник

Вт

Ві тя in Frontend UA
но мне сложно понять зачем ето, пример с добавлением чисел не дал ясности
источник