On Tue, 8 May 2012, jn...@jnthn.net via RT wrote:

On Mon May 07 16:21:12 2012, gfldex wrote:
package A { class Str {}; our sub foo() { return Str.new } }

This type cannot box a native string

Run it with -e and you see it's actually a compile-time error too:

===SORRY!===
This type cannot box a native string

Looking in to what happens, things go wrong like this.

* You change the meaning of Str

I do not agree here. S10 says: "Likewise every typename has an associated package namespace, even if unused.", as I understand it I therefore do not change the bahaviour of CORE::Str but add GLOBAL::A::Str . When I call A::foo I expect to get a A::Str that does nothing and should not interfere with CORE::Str . What is the point in having namespaces if the compiler ignores it?

* The compiler now wants to create a string constant (as part of
installing &foo in the package, I think)

The question is what Str it should use.

* It looks up the Str type
* Your Str type doesn't actually work like a replacement for CORE::Str
should, so that fails

Im not sure if I actually wanted to overwrite CORE::Str, probably not. (Warning, rethorical question incomming!) Where can I find a complete list of built-ins so I can keep track of what names I should not use in my user-defined namespace?

Quite frankly, that list is fairly long already and you can't really expect new users (read: all those perl5 folk we want to convert) to keep track of it.

So, this is working as designed. Generally, Perl 6 does not draw a
distinction between built-ins and user-space things; it goes against the
goal of language extensibility.

Fair enough, overwriting builtins may or may not be a good idea. However, the error message does not indicate what the problem is. The first thing I thought after reading it was: "What type and what native string? I never did any native string!".

A warning that I define a type in my very own namespace, that is then going to be used by the compiler instead of a built-in might help a lot. Don't get me wrong. Extensebility is great to have. From the perspective of a language implementator it makes perfectly sense. From a #perl6user perspective it's quite confusing.

I can't really put my finger on the spot but there is something wrong here. :-|

have a nice day

Reply via email to