Jack is tasked to write a role "Foo".  He does his job right, and
produces a role that perfectly produces the set of behaviours that
it's supposed to.  Among other things, he defines a method
"&Foo::baz:()".  He also writes a routine, "&foo:( Foo )", which calls
&Foo::baz.

Jill is tasked to write a role "Bar".  Bar has little if anything in
common with Foo conceptually, but neither do the concepts clash with
each other.  She also does her job right, and produces a role that
perfectly produces the set of behaviors that it's supposed to.  Among
other things, she defines a method "&Bar::baz:()".  She also writes a
routine, "&bar:( Bar )", which calls &Bar::baz.

These events occur entirely independant of each other.

Bob decides to create a class "Baz does Foo does Bar".  Since the
underlying concepts of the roles do not clash, he should be able to.
However, because the independent designers of the roles both chose to
use &baz:(), a collision occurs when Bob tries this.

Here's Bob's dilemma: If he resolves the collision by having &Baz::baz
call &Foo::baz, then 'foo ( Baz )' will work properly, but 'bar ( Baz
)' will do strange things.  Likewise, having &Baz::baz call &Bar::baz
will let 'bar ( Baz )' work properly, but will cause 'foo ( Baz )' to
behave strangely.

While Bob could write a &Baz::foo method that calls &Foo::baz or a
&Baz::bar method that calls &Bar::baz, 'foo ( Baz )' or 'bar ( Baz )'
wouldn't know to call &Baz::foo or &Baz::bar (respectively) instead of
&Baz::baz, and would still act strangely.

It is not realistic to expect Bob to write a single routine that works
properly in both cases, because the underlying concepts for Foo and
Bar are so different from each other.

Since Baz does both Foo and Bar, you cannot use type-checking to
resolve this dilemma.

The way things are now, it would appear that Bob's stuck.  Short of
rewriting one of ( Foo and foo ) or ( Bar and bar ) to use a different
method name in place of baz, he can do nothing to resolve the
syntactic collision between Foo and Bar while continuing to let foo
and bar run properly.

--

Thoughts?

--
Jonathan "Dataweaver" Lang

Reply via email to