All you're talking about is taking your abstraction and calling it a "tool".
A basic abstraction remains untouched in the underlying implementation. It's just a call away.
There are semantic and technical differences between abstraction and meta-programming.
All you're talking about is taking your abstraction and calling it a "tool".