This seems to be one of the ideas that just comes up again and again in the Java community. While it has its uses, it comes with a free downsides. The biggest is that debugging becomes very difficult, especially as the code becomes complex. Imagine building it a framework with a subtle is bug and your newest junior engineer struggling with it.
I never hear this idea coming up. Can you provide a reference? In any case what is the alternative? More of the same conventional code generation that destroys everyone's productivity? And is no easier to debug. In fact the just-in-time approach improves the debugging situation with uniform tooling (see the IntelliJ support).
This reminds me of AspectJ in that its a language extension with many similar features (extension methods etc). As useful as those features were, the syntactic sugar you get is confusing to new contributors to a project.
Here's a scenario thats played out. In the extension methods example on the Manifold README, it's highlighted that you can add your own methods to Java types. If any dev saw this in the project and they were unaware of manifold, it wouldn't be immediately clear what enables the addition of methods to the Java String type. They would figure it out eventually by either investigating or by debugging. These features blur the lines between programming language and framework.
Where I get weary about adding a dependency is when I see documentation with ~100 line boilerplate examples peppered with terms I've never heard before. Just because you use the word simple when describing something complex does not make it so.
As the OP points out just-in-time code generation is a huge improvement over conventional alternatives. If anything it represents a step forward considering developer productivity.
5 comments
[ 15.9 ms ] story [ 27.6 ms ] threadHere's a scenario thats played out. In the extension methods example on the Manifold README, it's highlighted that you can add your own methods to Java types. If any dev saw this in the project and they were unaware of manifold, it wouldn't be immediately clear what enables the addition of methods to the Java String type. They would figure it out eventually by either investigating or by debugging. These features blur the lines between programming language and framework.
Where I get weary about adding a dependency is when I see documentation with ~100 line boilerplate examples peppered with terms I've never heard before. Just because you use the word simple when describing something complex does not make it so.
I think you mean either "wary" or "leery" but not both at the same time!