One of things that makes Ruby shine is the ability to create Domain Specific Languages better, like
Though one can duplicate these libraries in LISP through macro, I think Ruby's implementation is more elegant. Nonetheless, I think there are cases that LISP's macro can be better than Ruby's, though I could not think of one.
So, in what area is LISP's macro better than Ruby's "ability" to create DSL, if any?
I've asked this because modern programming languages are approaching the LISP singularity, like
- C got macro expansion preprocessor, though very primitive and prone to error
- C# has attributes, though this is a read-only, exposed through reflection
- Python added decorator, that can modify the behavior of the function (and class for v 3.0), though feels quite limited.
- Ruby TMTOWTDI that makes elegant DSL, if care is applied, but in Ruby way.
I was wondering if LISP's macro is only applicable to special cases and that the other programming language features are powerful enough to raise the abstraction to meet the challenges today in software development.