[Swift-devel] numeric types still

Mihael Hategan hategan at mcs.anl.gov
Fri Jun 20 09:52:05 CDT 2008


I believe ML uses B and requires explicit conversion.
For example, it only defines +:int*int->int and +:real*real->real. So 1
+ 0.5 causes an error. You'd have to either do real(1) + 0.5 (or
presumably 1.0 + 0.5) or 1 + int(0.5).

Which doesn't look bad to me.

On Fri, 2008-06-20 at 10:41 +0000, Ben Clifford wrote:
> Numeric types bother me still. Substantially moreso now that my gsoc 
> student Milena has been working on typechecking and has reached the point 
> where the somewhat vague definitions of numerical types and implicit 
> casting are causing trouble.
> 
> Option A:
> 
> I'm very much in favour of a single numeric type, represented internally 
> by a java.lang.Double.
> 
> This is very much in line with what the implementation does at the moment 
> (for example the thread Tibi started the other day, where @extractint 
> actually uses java.lang.Double and can be used in either an int or a float 
> context in SwiftScript).
> 
> This would change (though not necessarily make worse) the behaviour of 
> integers when trying to go out of the range of what can be represented to 
> the accuracy of 1.
> 
> With integer representation, max_int+1 would roll round to min_int, those 
> being (respectively) +/- 2^31.
> 
> With double representation, the largest accurate integer is around 2^52 
> (which is larger than integer can store, though not as long as if we used 
> a long); after that I think that the problem will be that 2^52 + 1 = 2^52 
> (so incrementing will get stuck rather than rolling round). (give or take 
> a few orders of magnitude here, and assuming IEEE754 representation)
> 
> These numbers are sufficiently large to probably not cause problems any 
> time soon in real usage of SwiftScript; should accuracy prove a problem, 
> there is a clear path to move from double to some other more accuracte 
> general purpose numerical representation that does not massively change 
> the language (for example, switching to java.lang.BigDecimal).
> 
> On the downside, it changes type names - float and int both become 
> 'number' or some such. However, float and int could be deprecated and 
> internally aliases to 'number'.
> 
> I think that the actual use of numbers in SwiftScript, as counters and 
> things like that, that a rich numerical type system is not needed; and 
> that this requires straightforward code change to implement.
> 
> Option B:
> 
> We could instead define when it is appropriate to implicitly cast between 
> different types of numbers and in which direction.
> 
> I think this is more difficult to implement - it needs someone who is 
> interested in thinking about and defining the casting rules, which I think 
> no one is.
> 
> I think this also would increase, rather than decrease, the complexity of 
> the code base.
> 
> As you can probably tell, I am not in favour of option B.
> 
> I'm going offline this weekend; but Milena is lurking on this list and 
> might even come out of hiding to discuss further.
> 




More information about the Swift-devel mailing list