Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Runtime introspection: What good is it?

by Joost (Canon)
on Jul 06, 2008 at 13:13 UTC ( [id://695820]=note: print w/replies, xml ) Need Help??


in reply to Runtime introspection: What good is it?

Premise: There's nothing that can be done with run-time introspection that cannot be done (better) by compile-time decision taking.

Except that compile-time decision taking can only be done at compile time. And many of the languages that that have no or only limited introspection also don't have a compiler available at run time.

Once your framework becomes generic enough, it can become too constricting to force a static interface on its components. And the static interface may even turn out to be slower than the one that uses introspection and related techniques.

Consider, for example, an OO-relational mapping layer where the fields are all accessible via methods (or public properties, if you must):

my $object = ....; $object->field1 = 2; my $d = $object->field1; # ...
In many languages, this is much faster than the alternative:
my $object = ....; $object->set("field1",2); my $d = $object->get("field1");
But when you do need to have generic routines (for instance, to print the contents of some object), you need some functionality like:
for my $field ($object->fields) { print $object->$field(); }
Otherwise you're stuck with implementing all the "reflection" stuff in the API, which generally means the API will be ugly and slow.

Aside: all of this was already well understood and implemented in the 70s with Smalltalk. Why the static OO guys seem to think runtime inspection, "duck typing" and meta programming is something newfangled and scary is beyond me.

Replies are listed 'Best First'.
Re^2: Runtime introspection: What good is it?
by chromatic (Archbishop) on Jul 07, 2008 at 05:49 UTC
    Why the static OO guys seem to think runtime inspection, "duck typing" and meta programming is something newfangled and scary is beyond me.

    Java dragged C++ kicking and screaming to the easy half of Lisp, circa 1972.

      Now that should someday be a chapter's introductory quote in a programming book yet to be written.

A reply falls below the community's threshold of quality. You may see it by logging in.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://695820]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2024-03-28 17:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found