3 ms·
Source introspection, AST manipulation and macro expansion very well may deserve their own term to distinguish them from other forms of dynamic programming. (by
by aaronblohowiak 17y ago
Source introspection, AST manipulation and macro expansion very well may deserve their own term to distinguish them from other forms of dynamic programming. (by that, i don't mean vtables, i mean the other forms of programming your control flow.) However, the term metaprogramming is already defined to mean something more expansive than those two things. I can see how you might want to distinguish the particular forms of manipulation enabled through source modification from the obvious uses of first-class functions, especially if you've gone deep down the rabbit hole, but you're going to have to use a different term.
- tumult 17y agoI just don't think first-class functions are metaprogramming. I have never heard them conflated before, and outside of the author's own writing, have yet to see another example.
- scott_s 17y agoCalling the examples just "fist-class functions" is being reductionist. The examples programmatically change the structure of the code. That fits the definition from Wikipedia: Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data ...
- tumult 17y agoIt's not manipulating the program as data. It is simply the program itself. If the program runs with its output being another program which runs, then that is a form of metaprogramming. In this case, the program is simply running. A collection of functions which accept arguments and return values directly is not what most people would consider metaprogramming. It's just a program. JavaScript is entirely capable of doing metaprogramming, but in the article posted here, it does not.
- scott_s 17y agoIt's adding structure (methods to classes) at runtime which normally would require writing source code. That is treating the program as data; it manipulates the object system as any other kind of data. You seem confident that your definition of metaprogramming is the accepted definition, but I don't see evidence of that.
- aaronblohowiak 17y ago"It's adding structure (methods to classes) at runtime which normally would require writing source code." -- the linked blog post doesn't do this, though it is possible.
- scott_s 17y agoThen what is this? sword_symbol = "*********" drew.metaclass.send(:define_method, 'swing') do |sound_effect| puts "#{name}: #{sword_symbol} #{sound_effect}" end drew.swing 'slash!!' I understand that to add the swing method without writing the source code to do it. This use is trivial, but it's easy for me to extrapolate to how one could make the newly created method depend on runtime information.
- aaronblohowiak 17y agoRuby, not javascript.