Le 14/11/2012 22:13, Walter Bright a écrit :
On 11/14/2012 2:53 AM, Jacob Carlborg wrote:
If "std.mytypes.mystring" is a variable of the type "string" then the
fully
qualified name is lost if it's used as an attribute. Something like this:
I am having a REALLY hard time making my point here.
struct MyString
{
string s;
}
Now use MyString as an attribute. No, the name is not lost. Yes, two
different modules can use MyString as an attribute, and impute
completely different meanings into it.
Just because it is not a builtin type does not change anything.
I seriously feel like I'm in Alice in wonderland here.
A type is a meaning associated to data. For instance, char[] is an array
of char. Note that you can store pointers, integer, or basically
anything in that memory. But you don't, because this type give you
information about what in this memory, and storing anything else would
be confusing as hell.
The same way, I can throw a FileExeption every time a problem occurs in
any of my programs. That would be insane, but i CAN do that.
Well, the same way, I can subvert attribute in any convoluted way I want
to. But that make no sens at all (and I don't expect any codebase using
such techniques to become really big).
The whole point of attaching data to a symbol via attribute is to
provide a meaning attached to that symbol. The meaning is given by the
type, like it does everywhere else.
Your MyString example or an int is a perfect example of a type that have
no meaning. Your argument is just like we shouldn't put any protection
near a precipice since people can throw themselves over it anyway. Yeah,
but at least, they'll do it on purpose and assume the consequences, and
that is a huge win.