Dan Sugalski:
# At 2:51 PM +0000 3/13/02, Tim Bunce wrote:
# >On Wed, Mar 13, 2002 at 09:03:13AM -0500, Dan Sugalski wrote:
# >>  I like the fact that we're adding an arg to init to
# decide how big to
# >>  make the resulting PMC. It got me to thinking, though.
# Perhaps we'd
# >>  be even better served if we passed in something a bit
# more complex.
# >>
# >>  We are, after all, likely to get something like this at
# the perl level:
# >>
# >>       my Str @foo is dim(10, 10, 10), encoding "Shift-JIS",
# >>                      max_len(40), autochomp;
# >>
# >>  or something sort of like that. We'd really like to pass
# in the dim,
# >>  encoding, max_len, and autochomp to the init method, so
# it can init
# >>  things properly.
# >
# >You're presuming that a single 'init' *should* look after all that.
#
# More I'm presuming a single init should be able to see all the
# properties that will potentially be placed on the variable. In the
# case above, all the properties are variable properties, assuming
# they're mandatory declarations about the contents permissible in the
# array. (In this case a 10x10x10 fixed size string array that only
# holds Shift-JIS characters, strings of no more than 40 characters
# long, that are automatically chomped when put into the array)

I think autochomp is a value property, not a variable property.

# It's certainly true that value properties should either be ignored by
# the init method, or never passed to the init method in the first
# place. The question then is whether we can tell which properties are
# value properties and which are variable properties at compile time. I
# expect it'll be mixed--some we will, some we won't, in which case we
# pass in the variable and indeterminate ones and let the init method
# figure out which ones it likes and which it doesn't.
#
# >That doesn't seem very practical or extensible etc.
#
# Depends on how we pass them in. A set of key/value pairs would make
# sense, and if the keys could potentially be strings for attributes
# whose properties are unknown at compile time it's reasonably
# extensible.

I'd suggest that key=name of property, value=PMC representing the
property (see below).

# >I recall Larry saying something (roughly) along the lines that
# >attributes, like the above, could be thought of, and possibly
# >implemented as, method/function calls on the variable/value.
# >That seems like a much more extensible approach.
#
# Perhaps. We could certainly init the variable, then do a bunch of
# property assigning method calls, but that's potentially inefficient.
# Especially in the case of properties that define or restrict
# sizes--we may find ourselves creating and then recreating a PMC
# several times before the initialization is complete.
#
# In the above case, if we pass in all the properties at init time, the
# init method can potentially statically allocate 1000 pre-sized
# Shift-JIS strings and be done with it.

I'd expect it to allocate 1000 strings, but leave the Shift-JIS to the
encoding property and the string sizing to the max_len property.

# >Perhaps some kind of variable/value init framework is needed
# >and maybe an 'init' will play a part in that. But if so, I think
# >the init probably shouldn't have knowledge of what encoding, max_len,
# >and autochomp *mean*, it should just make the method/function calls.
# >There's obviously a whole bunch of potential ordering issues.
#
# But the vtable code for the PMC is where the various attributes are
# potentially given meaning. Init ought to have that information passed
# in so that it can interpret the information if its appropriate. Every
# init for every array type may not know about those properties--heck
# none of the inits for any array type might. But they potentially
# could, and it doesn't seem to make sense to restrict that possibility.
#
# Mandating that the init method must make appropriate property setting
# calls for properties unknown to it would be a reasonable thing. That
# way init can handle some things, and the rest can be punted on, but
# we don't need special case code anywhere but in init, where it's
# appropriate.

I'd suggest we have Property PMCs and a vtable method
apply_property(INTERP, prop_pmc, target_pmc).  init() would look through
a list of Properties passed to it, handle the ones it knew how, and call
apply_property on the ones it didn't know how to handle.

--Brent Dax <[EMAIL PROTECTED]>
@roles=map {"Parrot $_"} qw(embedding regexen Configure)

#define private public
    --Spotted in a C++ program just before a #include

Reply via email to