This is a p6 question, not an NQP question - I'm citing the NQP only because it's my current example. So mentioning p6 features not currently in NQP is totally appropriate.
What I mean by converting code into data is simply that a run-time version of metaprogramming will generally translate the code: $some_object.foo_method(); into data: method foo_method() { self.do_something('foo'); } In this example, the call to "foo_method" turned into a different call, with "foo" as a string(data) instead of a function. A C version, using macros, might do something like: #define function_template(name) \ void name () { return 1; } function_template(foo) This, to me, is turning (compile-time) data into code. And because it is a compile-time thing, and there's no extra overhead, it's as close to the metal as I'm likely to get. (Of course, using a template means that some possible tweak, based on "this particular method never gets used to ... blah blah ...", might not get made. But that's okay.) I'm remembering a ".assuming" modifier from a while back. Maybe that's a way to eliminate the extra step: &foo_method := &template_method.assuming($arg1 := 'foo'); Or is there a better way? =Austin Geoffrey Broadwell wrote:
I'm not entirely sure what you mean here by "translate code into data (method name into string)". The method name is already a string, which is why I offered the "call by name" syntax above. But of course if you have a code object for the method itself, you could do this in Perl 6: $obj.$method(...args...); Sadly this does not currently work in NQP-rx, though IIUC there's no reason it couldn't (and in fact I've already requested this feature because it would be useful for some function table stuff I do). Full Perl 6 offers a number of features that would be useful for calling a whole pile of dynamically-chosen methods on an object, but few have been implemented in NQP-rx. (I would assume because there hasn't been a lot of demand for it yet.) I'll let the Perl 6 gurus follow up with actual syntax examples for some of these nifty features. ;-) -'f