top | item 7444617

(no title)

jf5s2 | 12 years ago

I would strongly discourage the use of compiler plug-ins, especially those which modify the bytecode. Not only does it make for code which is hard to follow and difficult debug, but most of them break with each new JDK release, often in unpredictable ways, forcing you to wait for updates.

Given the choice I always pick Scala over Java. Maintaining legacy Java code with AspectJ, Lombok and other behind-your-back bytecode manipulations are literally the bane of my existence.

discuss

order

bronty|12 years ago

There's two different issues here: (1) whether or not to use compiler plug-ins, and (2) whether or not to use compiler plug-ins for metaprogramming.

Using plug-ins for automated analysis improves the quality of your codebase. The annotations serve as a machine-checked documentation which make the code easier to debug.

As you point out though, the benefits of plug-ins for metaprogramming (such as implementing a DSL) is not always as clear-cut: you have to pay the price of maintenance, much of which is not always obvious up-front.

You face many of the same issues when designing a DSL in Scala --- the DSL may generate code that depends on a custom run-time or library.