在 Sat, 18 Apr 2009 03:45:43 +0800,Nick Sabalausky <a...@a.a> 写道:
"Andrei Alexandrescu" <seewebsiteforem...@erdani.org> wrote in message
news:gsak2p$1s8...@digitalmars.com...
I think there's merit in binding via strings. It makes for very flexible
code that is future-proof, dynamic-linking-friendly, and hot-swappable
without recompiling (e.g. you don't need to recompile because you now
implement an interface etc.) Reflection is very useful as well.
I think D can and should allow string lookup for its methods. It's a
low-complexity proposition that adds a very interesting tool to D's
arsenal.
That's a separate issue. I absolutely agree with the usefulness of being
able to invoke static methods via a string identifier at runtime. But I
think opDotExp is an extremely flawed way to do it. A much better way
would
be through a reflection mechanism:
The opDot func can be extremely restrictive by looking up a former added
table which are function fingerprints registered by a method call like
dynamo.addMethod("myfunc", &myfunc);
dynamo.Lenght or dynamo.mymethud would just result runtime exception,
because you didn't register these functions.
class Foo
{
void bar() {}
}
auto foo = new Foo();
traits(foo).func("bar").invoke();
That way, you can have the benefits of
runtime-string-identifier-invocation
(and have it on *every* class/method), but without completely loosing
compile-time checking on the members of every class which is capable of
using it.
If anything, this agreed-fest shows that the rift between static typing
and dynamic typing is alive and well. I've seen many discussions in
which
people were mystified how anyone gets anything done in a
statically-typed
OO language.
...Doesn't necessarily mean both sides have valid points. Just that
there's
disagreement. Outside of diplomacy, it doesn't make any sense to agree
with
something you disagree with, or disagree with something you agree with,
just
for the sake a closing a rift. Better to just continue debating the
issues
with logical arguments. If nothing gets accomplished, well ok, fine, but
so
what? That's a lot better than coming to hasty-but-wrong agreement just
for
the sake of agreement.
I guess what I'm saying is, people coming to an agreement is all fine and
dandy, but the most important thing is to arrive at the *correct*
agreement.
If one group of people insist that "2+2=0" and another group insists that
"2+2=10", then it's far better to keep analyzing and debating until
"2+2=4"
is discovered and proven than to say "let's all be happy!" and hastily
agree
that "2+2=5". Again, outside of diplomacy, people disagreeing is not the
real problem, the real problem is that the best answer either hasn't been
found or hasn't been unquestionably shown to be best.
--
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/