On Sun, 23 Oct 2011 13:48:03 -0400, Jacob Carlborg <d...@me.com> wrote:
On 2011-10-23 18:03, Robert Jacques wrote:
On Sun, 23 Oct 2011 07:06:42 -0400, Timon Gehr <timon.g...@gmx.ch> wrote:
[snip]
The module can generate RTTI for all types recursively from the starting
point iff that information is statically available. It does not have to
be. A module that comes as .di + static library binary could return a
reference to a private class that has a publicly exported base class.
How would you generate RTTI for a statically invisible class?

You're not supposed to be able to. Runtime reflection should only apply
to public data members.

It's not enough. Take this for example:

class Foo < ActiveRecord::Base
     before_save :bar

     private

     def bar
     end
end

The above code is an example from Ruby on Rails. The "before_save" call
sets up a callback, "bar", that will called before saving the model. The
callback method will be called using reflection.

Using a short, cryptic stub from another programming language is not an 
effective communication tool. Case in point: all I understand is that something 
is returning a delegate to something, and reflection never enters the picture.

But, for sake of argument, let me assume that ActiveRecord needs to reflect Foo 
for rails to work (i.e. ActiveRecord::Base's ctor reflects this). At a very 
fundamental level, this isn't an argument for or against RTTI in D; in D you'd 
do this with a mixin of some sort. When looking a use cases/features from other 
languages, always remember to first ask oneself a) how would I do it in D 
today? b) Is language X's solution 'better, faster, stronger' in some way?

I mean, considering that Ruby is a dynamic language, would bar even be 
considered private from inside the super-class's ctor? Is Ruby's private even 
comparable to D's private? Given that Ruby, by design, requires fields to be 
private and for all external accesses to happen via methods, should we consider 
a way to violate that contract an example of mis-feature?

Reply via email to