On Wed, 6 Aug 2014, Eliot Miranda wrote:It's more like undefined behavior than a bug IMHO, though the lack of #isLiteral makes me think that the Fractions are not intentional. Interesting how Nicolas's SqNumberParser behaves the same way as the previous number parser in this case.
Hi Levente,
On Wed, Aug 6, 2014 at 11:43 AM, Levente Uzonyi <leves@elte.hu> wrote:
�� �� �� On Wed, 6 Aug 2014, Eliot Miranda wrote:
�� �� �� �� �� �� Hi All,
�� �� �� �� �� �� �� �� Squeak trunk also suffers from the Float parsed as a Fraction bug:
�� �� �� �� �� �� 1e-8 class Fraction
�� �� �� �� �� �� 1.0e8 class Float
I'm not entirely sure about it being a bug. I've checked Squeak 3.8 (pre-SqNumberParser), and it also parsed that literal as a Fraction. If I want a Float, I can be explicit and use 1.0e-8.
IMO it very much *is* a bug. ��Smalltalk-80 has never supported Fraction literals. ��They're always written as division expressions. ��Fraction answers false to isLiteral. ��Just because it worked that way
doesn't mean it was right. ��I suspect no one noticed. ��Allowing Fraction literals feels like a big change to me.
I don't think that anyone ever used this "feature" before, so doing what other dialects do is probably the best way to resolve this.
�� �� �� I made a modified version of Fraction >> #printOn:base: which outputs the literal format if possible. The change "fixes" the debugger (note that itw was way less broken in Squeak than in Pharo
�� �� �� anyway).
�� �� �� The only drawback I found is that some fractions become a bit more "complex" when printed, e.g. 3/4 => 75e-2
OK, but is this the right fix? ��What does everybody think? ��Keep the language unchanged or add Fraction literals and add another incompatibility with other dialects?
I did not propose to make all fractions literals. My implementation simply prints decimal fractions with the exponent notation, e.g. 3/4 is printed as 75-e2, but 2/3 is still printed as (2/3).If Fractions are literals
- what is the semantics of 1/0 (easy, it is not a literal, but needs to be stated)?
- what is [1/0.1] on: ZeroDivide do: [:ex| #error] ? ��Is it 10.0 or #error, i.e. is 1/0.1 10.0 or 1 / 0 followed by the Integer 1?
Levente
��
�� �� �� Levente
�� �� �� �� �� �� --
�� �� �� �� �� �� eek! Eliot
--
best,Eliot