Size: a a a

2020 March 16

E

Evgen in Frontend UA
Или мы о разных вещах говорим?
источник

EO

Eugene Obrezkov in Frontend UA
Evgen
А это разве не то, о чем написал @labeg - getClass().getDeclaredField() - это ж вроде и есть рефлексия?
да, не о разном
источник

EO

Eugene Obrezkov in Frontend UA
интроспекция - это возможность получить информацию о типе в рантайме

рефлексия - это возможность в рантайме делать интроспекцию И (если нужно) изменять поведение и прочее
источник

EO

Eugene Obrezkov in Frontend UA
просто @labeg подумал, видимо, о типах в рантайме как абстракция, не знаю как это сказать даже, не знаю о чем он подумал)
источник

E

Evgen in Frontend UA
Ну это понятно, что ТС эту информацию на момент компиляции удаляет, а если бы сохранял, то и в ТС была бы такая возможность (наверно)
источник

EO

Eugene Obrezkov in Frontend UA
Evgen
Ну это понятно, что ТС эту информацию на момент компиляции удаляет, а если бы сохранял, то и в ТС была бы такая возможность (наверно)
проблема с ТС в том, что у него целевой язык JavaScript, в котором много чего интересного
источник

DB

Dima Bildin in Frontend UA
Есть reflect metadata
источник

E

Evgen in Frontend UA
Eugene Obrezkov
проблема с ТС в том, что у него целевой язык JavaScript, в котором много чего интересного
Согласен
источник

EO

Eugene Obrezkov in Frontend UA
т.е. кодогенерация ТС ограничивает себя тем фактом, что им нужно чтобы оно в JavaScript работало

это как если бы надо было компилировать С++ на baremetal под ARM и всё что у тебя есть в наличии из целевой платформы - это инструкции ARM (ты не можешь ничего использовать из того, чего нету в ARM попросту)
источник

EO

Eugene Obrezkov in Frontend UA
Dima Bildin
Есть reflect metadata
ну вот, например, мой же случай вполне можно было реализовать в ТС

компилятор видит что у него number, а это может быть NaN и Infinity - значит эмитим код, который это проверяет - иначе - кидает RuntimeError()
источник

EO

Eugene Obrezkov in Frontend UA
в рантайме жс для этого всё необходимое есть
источник

DB

Dima Bildin in Frontend UA
Мб тс просто не дошёл до этого
источник

E

Evgen in Frontend UA
Eugene Obrezkov
т.е. кодогенерация ТС ограничивает себя тем фактом, что им нужно чтобы оно в JavaScript работало

это как если бы надо было компилировать С++ на baremetal под ARM и всё что у тебя есть в наличии из целевой платформы - это инструкции ARM (ты не можешь ничего использовать из того, чего нету в ARM попросту)
То, что скомпилированный код должен работать только на определенной архитектуре ничего не говорит о проверке типов в рантайме. Или я не прав?
источник

I

Ilya in Frontend UA
Eugene Obrezkov
ну вот, например, мой же случай вполне можно было реализовать в ТС

компилятор видит что у него number, а это может быть NaN и Infinity - значит эмитим код, который это проверяет - иначе - кидает RuntimeError()
По сути ты хочешь утиную типизацию на выходе?
источник

EO

Eugene Obrezkov in Frontend UA
Evgen
То, что скомпилированный код должен работать только на определенной архитектуре ничего не говорит о проверке типов в рантайме. Или я не прав?
не могу с уверенностью сказать, но интуиция подсказывает что ты прав
источник

EO

Eugene Obrezkov in Frontend UA
я за реализацию самой проверки на целевой архитектуре
источник

I

Ilya in Frontend UA
Ilya
По сути ты хочешь утиную типизацию на выходе?
https://github.com/pelotom/runtypes

Но оверхед на чекинг будет огромный.
источник

EO

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

I

Ilya in Frontend UA
Это контракт через валидацию
источник

ЕЛ

Евгений Лабутин in Frontend UA
Eugene Obrezkov
просто @labeg подумал, видимо, о типах в рантайме как абстракция, не знаю как это сказать даже, не знаю о чем он подумал)
имел ввиду что в рантайме типизации нет, есть код и метаинформация привязаная к этому коду, вот за счет рефлексии можно вытащить эту метаинформацию
источник