Size: a a a

Compiler Development

2020 March 04

А

Алексей in Compiler Development
и для каждого foo<A>, foo<B> заново посещаем foo
источник

А

Алексей in Compiler Development
по другому никак, если уж выбрали мономорфизацию
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Алексей
мы знаем это при анализе foo<User>(...), значит мы должны знать это при посещении foo<T>, то есть вместо абстрактного T должен быть уже User
нет, не знаем

foo<User>()

function foo<T>() {
 // no validate call
}

validate<User>()
источник

M

MaxGraey in Compiler Development
Сразу скажу в один проход такое не провернуть. Можно сделать хинт и добавить декоратор а-ля
@serializable
function bar<T>() {}


Вот тогда получиться
источник

А

Алексей in Compiler Development
Mikhail 才藤 中村 Bashurov
нет, не знаем

foo<User>()

function foo<T>() {
 // no validate call
}

validate<User>()
когда написали foo<User> мы уже знаем, что должны зайти в foo с T=User
источник

А

Алексей in Compiler Development
зайти в foo с неизвестным T для кодогенерации не выйдет
источник

А

Алексей in Compiler Development
сорян
источник

А

Алексей in Compiler Development
Mikhail 才藤 中村 Bashurov
нет, не знаем

foo<User>()

function foo<T>() {
 // no validate call
}

validate<User>()
надо знать
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Алексей
когда написали foo<User> мы уже знаем, что должны зайти в foo с T=User
хорошо :)

function foo<T>() {
 // no validate call
}

foo<User>()

validate<User>()
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
но я вообще о том что нам вообще не надо трогать foo в этом случае
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
потому что это просто левая функция с дженериком которая в своем теле validate не зовет
источник

А

Алексей in Compiler Development
что?
источник

А

Алексей in Compiler Development
неее, так не выйдет
источник

А

Алексей in Compiler Development
заходить надо всегда
источник

А

Алексей in Compiler Development
вне зависимости от validate
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
MaxGraey
Сразу скажу в один проход такое не провернуть. Можно сделать хинт и добавить декоратор а-ля
@serializable
function bar<T>() {}


Вот тогда получиться
вы имеете ввиду именно декоратором серализаровать все в рантайм или на одном проходе добавить хинты в виде декораторов и на втором ими воспользоваться?
источник

А

Алексей in Compiler Development
дженерик есть дженерик
источник

M

MaxGraey in Compiler Development
Mikhail 才藤 中村 Bashurov
вы имеете ввиду именно декоратором серализаровать все в рантайм или на одном проходе добавить хинты в виде декораторов и на втором ими воспользоваться?
Я имею вииду по декоратору понимать что эту функцию нужно трансформировать и подготовить все для этого
источник

А

Алексей in Compiler Development
MaxGraey
Я имею вииду по декоратору понимать что эту функцию нужно трансформировать и подготовить все для этого
вот это кстати вариант
источник

M

MaxGraey in Compiler Development
Просто подсказка, такая же как tailrec или inline для aot компиляторов
источник