Поддержка макросов в оснащении

https://www.reddit.com/r/Kotlin/comments/7hoytl/kotlin_team_ama_ask_us_anything/dqt56nv/

Традиционные макросы очень трудно поддерживать в оснащении

В Java у нас уже есть Lombok @Data, что генерирует методы, почти такие же, как макросы. https://projectlombok.org/features/Data

Почему макросы трудно поддерживать в оснастке?

Инструмент может означать много разных вещей, начиная с низкого уровня двоичного кода, который реализует макропревращения, вплоть до высокого уровня среды разработки, где вы реализуете или используете свой макрос, о чем упоминает абреслав. Поскольку макросы могут изменять смысл кода, который они охватывают, у вас возникают проблемы, например, решение о том, какой тип исходного кода вы хотите показать пользователю.

Представьте, что у вас есть макрос, который префикс всех свойств с строкой, верхний регистр, естественно, исходная переменная во время конкатенации идентификатора:

someclass { prefix("longPrefix") { val a: String = "" } fun bar() { println("Look at $longPrefixA") } } 

Представляя, что это скомпилировано и работает, вам сложно ответить на дизайнерские решения, потому что вы показываете исходный источник до преобразования макроса … но не было бы полезно также видеть код после ? Кроме того, часть исходного кода зависит от выполняемого макроса, что, в свою очередь, означает, что среда IDE должна фактически компилировать и запускать ваш код во время ввода, чтобы подтвердить, что ссылка на $longPrefixA действительна. В некотором смысле вам понадобится отладчик времени компиляции для компилятора / IDE, так же, как у вас есть обычный отладчик для среды выполнения, если вы пишете макрос на первом месте.

Есть еще больше проблем, когда вы думаете о макросах управляющего потока и таких, где дерево абстрактного синтаксиса компиляции модифицируется неочевидными способами, что также является одной из причин, по которым макросы получают плохую репутацию для скрытия программы (хотя я утверждаю, что в основном это связано с наш C текстовый препроцессор предвзятая история). Даже когда вы смотрите на другие языки программирования со встроенной поддержкой макросов, их инструменты имеют тенденцию быть тусклыми, что увековечивает mem.

Макросы не сложно поддерживать в среде IDE, когда они сделаны правильно.

Ключ состоит в том, чтобы использовать один и тот же компилятор для семантических функций в среде IDE.