Mathieu Bouchard wrote:

> On Tue, 4 Jan 2005, Florian Gro? wrote:
>>While this is a nice idea I don't feel sure about polluting the global 
>>method space with one-character names.
> 
> Hahaha, so you prefer to pollute the Ruby grammar instead?
> 
> What's that aversion for the global namespace, that is so great that
> instead it is preferred to instead add things to the _grammar_ ???

I prefer not having global methods with one-character names as those 
might already be used for something else. Just think about 'p' or the 
common variable names 'i', 'j', 'x', 'y' and so on.

The collision chance with something like 'number_literal_r' is way lower 
and that particular grammar was until now invalid meaning it will not 
cause incompatibilities either. If you think the decision to add this is 
to arbitrary please note that the feature is also present in other 
languages meaning it would already be familiar to users who are already 
used these kind of suffixes in Java, C#, C++ or Python.

>>And I think it would not cause many problems to make an yet unused
>>syntax do something meaningful.
> The syntax of Ruby is already complicated enough, imho, but a better
> reason against the 0.5R syntax is that it can only represent rationals
> that have denominators that divide a power of ten. If you allow the use of
> 0,0b,0x prefixes it doesn't change because those notations allow even less
> denominators (only powers of two). However I recall some languages use a
> notation like 2r3 to mean specifically Q(2,3), while 2/3 means something
> else (usually the float 0.666... or the 0 integer).

Actually I'm hesitant to add the suffixes for non-base-10 radixes as 
that would complicate all this quite a lot -- it would be hard to 
specify a suffix for hex literals, for example. I hope that is not too 
much of a limit for you.

> While we're at it, why not adding such syntax:
> 
>  * while Complex===3i with a lowercase i, the uppercase I,J,K suffixes
>    would be of class Quaternion.
> 
>  * 7m9 would be a literal meaning the set of all 9*m+7 numbers,
>    which is an object of class ModuloInteger.
> 
> (just kidding!)

Please note that I am not proposing hard-coding these literals. I have 
suggested to use callbacks instead as the R => Rational association does 
not belong into the core language. It belongs into the Rational library.