Size: a a a

Compiler Development

2020 March 04

А

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

А

Алексей in Compiler Development
причём только для валидации
источник

А

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

А

Алексей in Compiler Development
тогда достаточно будет один раз в foo зайти
источник

M中

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

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Evgenii Moiseenko
вам случайно не type reification нужен?
https://eli.thegreenplace.net/2018/type-erasure-and-reification/
да, это оно
буду знать что гуглить, спасибо!
источник

MM

Mikhail Maltsev in Compiler Development
А откуда вообще берутся N проходов? Почему нельзя за первый проход запомнить все generic-и, а дальше сделать ещё один проход, который уже всё мономофизирует?
источник

M中

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

А

Алексей in Compiler Development
Mikhail Maltsev
А откуда вообще берутся N проходов? Почему нельзя за первый проход запомнить все generic-и, а дальше сделать ещё один проход, который уже всё мономофизирует?
проходов по foo будет несколько
источник

А

Алексей in Compiler Development
в любом случае
источник

А

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

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Mikhail Maltsev
А откуда вообще берутся N проходов? Почему нельзя за первый проход запомнить все generic-и, а дальше сделать ещё один проход, который уже всё мономофизирует?
это как раз и предложили выше
я не то чтобы рассматривал решение через n проходов, просто хотел этого избежать)
источник

А

Алексей in Compiler Development
Mikhail Maltsev
А откуда вообще берутся N проходов? Почему нельзя за первый проход запомнить все generic-и, а дальше сделать ещё один проход, который уже всё мономофизирует?
за один проход запомнить все дженерики - это значит всё равно потом залезть N раз в foo, пройдясь по всем запомненным дженерикам
источник

MM

Mikhail Maltsev in Compiler Development
Да, разумеется, без этого не обойтись. Просто не обязательно N раз бежать по всему коду.
источник

А

Алексей in Compiler Development
Mikhail Maltsev
Да, разумеется, без этого не обойтись. Просто не обязательно N раз бежать по всему коду.
ну это понятно
источник

А

Алексей in Compiler Development
но запоминать кстати всё равно придётся
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Mikhail Maltsev
Да, разумеется, без этого не обойтись. Просто не обязательно N раз бежать по всему коду.
а, ну это ограничение апи
я внедряюсь в уже существующий пайплайн плагинов которым дан апи визитора
источник

M

MaxGraey in Compiler Development
Вообще то это может вылиться не в N проходов а намного хуже)

class Boo<T> {
  boo<U>() {
    …
  }
}

class A<T> {
  t = new Boo<T>()
  foo<U>() {
      this.t.boo<U>()
  }
}

ну и понятное дело все может быть куда сложнее и цикличнее. Да исобственно вся программа может содержать кучу дженериков а validate вызов скрыт под огромными слоями абстракций
источник

AT

Alexander Tchitchigin in Compiler Development
А что насчёт всунуть метод validate в нужные типы посредством monkey patching и заменить вызовы функции на вызовы этого метода?
источник

M中

Mikhail 才藤 中村 Bashurov in Compiler Development
Alexander Tchitchigin
А что насчёт всунуть метод validate в нужные типы посредством monkey patching и заменить вызовы функции на вызовы этого метода?
дак нет типов в рантайме, type erasure в деле
источник