Size: a a a

2020 November 18

МБ

Михаил Бондаренко... in JUG.ru
Kirill Tolkachev
а что за кейс такой интересный?
Кейс такой: есть интерфейс  A c методом  compute( Integer param) и есть реализация это интерфейса  AImpl.
и надо на этапе компиляции в классе AImpl  в метод compute добавить еще параметры и  удалить implementation интерфейса.
источник

KT

Kirill Tolkachev in JUG.ru
для чего?
источник

KT

Kirill Tolkachev in JUG.ru
удалять интерфейс звучит очень unsafe
источник

KT

Kirill Tolkachev in JUG.ru
интересно для чего такой геморой)
источник

A

Artyom in JUG.ru
В любом случае в APT это делается только через хаки. Если бы менять AST было так легко... То понять какой код у тебя будет на выходе было бы очень сложно))
Если вам надо это один раз сделать (или делать периодически), то может рассмотреть вариант с плагином для билд системы, которую вы используете и там поменять сорцы (этап process-sources в Maven, вроде, для этого)? В Гите будет явно видно, что изменилось и никаких неожиданностей после компиляции. Но вообще звучит и правда необычно. Интерфейс как бы есть, но он как бы не нужен?)
источник

J🎩

JBáruch 🎩 in JUG.ru
Artyom
В любом случае в APT это делается только через хаки. Если бы менять AST было так легко... То понять какой код у тебя будет на выходе было бы очень сложно))
Если вам надо это один раз сделать (или делать периодически), то может рассмотреть вариант с плагином для билд системы, которую вы используете и там поменять сорцы (этап process-sources в Maven, вроде, для этого)? В Гите будет явно видно, что изменилось и никаких неожиданностей после компиляции. Но вообще звучит и правда необычно. Интерфейс как бы есть, но он как бы не нужен?)
ну не надо грязи, в нормальных языках это манипуляция AST - нормальное мета-программирование, и ничего ужас-ужас в этом нет. То, что в Джаве из мета-программирования только треш под названием reflection, да и тот - через одно место, не повод для гордости.
источник

A

Artyom in JUG.ru
JBáruch 🎩
ну не надо грязи, в нормальных языках это манипуляция AST - нормальное мета-программирование, и ничего ужас-ужас в этом нет. То, что в Джаве из мета-программирования только треш под названием reflection, да и тот - через одно место, не повод для гордости.
Не отрицаю, может где-то и норм сделано. Ну вот кейс прям что-то удалить, как в примере выше, мне сложно судить насколько это нормально. В сорцах был один метод, в классцах другой? Если сверху запилить ещё один метод - это ладно, но менять существующий...
источник

A

Artyom in JUG.ru
В каких-то ЯП можно такое проворачивать на этапе компиляции? Интересно в каких)
источник

ЕИ

Ерлан Ибраев... in JUG.ru
Михаил Бондаренко
Кейс такой: есть интерфейс  A c методом  compute( Integer param) и есть реализация это интерфейса  AImpl.
и надо на этапе компиляции в классе AImpl  в метод compute добавить еще параметры и  удалить implementation интерфейса.
В рантайме понятно, как такое можно сделать.
Но на этапе компиляции... Это да надо смотреть как реализовано в lombok.
источник

A

Artyom in JUG.ru
Там это сделано через internal API. Например, для sun'овского javac надо смотреть в сторону классов из пакета "com.sun.source.util", если правильно помню. Есть ещё вариант как Jabel реализован - через "com.sun.source.util.Plugin" (https://github.com/bsideup/jabel/blob/master/jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/JabelCompilerPlugin.java).
источник

VI

Valeriy 🐻 Ivannikov... in JUG.ru
JBáruch 🎩
ну не надо грязи, в нормальных языках это манипуляция AST - нормальное мета-программирование, и ничего ужас-ужас в этом нет. То, что в Джаве из мета-программирования только треш под названием reflection, да и тот - через одно место, не повод для гордости.
хм
а можно пример нормальных языков? Я сам только в грязной и лютой джаве копался, ну и в Котлине (еще чистом и невинном, не смотря на делегат)
я бы почитал с удовольствием, а то чет с утра с гуглом не сложилось и ничего толкового не могу найти
источник

IU

Ivan Ugliansky in JUG.ru
макросы в скале
источник

J🎩

JBáruch 🎩 in JUG.ru
Artyom
Не отрицаю, может где-то и норм сделано. Ну вот кейс прям что-то удалить, как в примере выше, мне сложно судить насколько это нормально. В сорцах был один метод, в классцах другой? Если сверху запилить ещё один метод - это ладно, но менять существующий...
Ну это уже дизайнеру фичи решать. Язык либо предоставляет хорошие возможности мета-програмирования, либо нет.
источник

J🎩

JBáruch 🎩 in JUG.ru
Artyom
В каких-то ЯП можно такое проворачивать на этапе компиляции? Интересно в каких)
Groovy же.
источник

J🎩

JBáruch 🎩 in JUG.ru
Valeriy 🐻 Ivannikov
хм
а можно пример нормальных языков? Я сам только в грязной и лютой джаве копался, ну и в Котлине (еще чистом и невинном, не смотря на делегат)
я бы почитал с удовольствием, а то чет с утра с гуглом не сложилось и ничего толкового не могу найти
источник

VI

Valeriy 🐻 Ivannikov... in JUG.ru
предположим
а помимо? было же "в нормальных языках"
любовь к груви с вашей стороны достаточна известна
источник

VI

Valeriy 🐻 Ivannikov... in JUG.ru
просто если загуглить Баруха - то там будут всякие выступления вида "Давайте уволим всех тестировщиков", "Давайте уволим всех Java разработчиков"
источник

J🎩

JBáruch 🎩 in JUG.ru
Valeriy 🐻 Ivannikov
предположим
а помимо? было же "в нормальных языках"
любовь к груви с вашей стороны достаточна известна
В Скале
источник

J🎩

JBáruch 🎩 in JUG.ru
Valeriy 🐻 Ivannikov
просто если загуглить Баруха - то там будут всякие выступления вида "Давайте уволим всех тестировщиков", "Давайте уволим всех Java разработчиков"
И «мета-программирование на Груви».
источник

J🎩

JBáruch 🎩 in JUG.ru
Но я не очень понял, это был тезис «что вообще Барух понимает в программировании»?
источник