Hardware dependency

Ana Maria Abrao ana@ufu.br
Tue, 12 May 1998 00:41:33 +0000


Dear Rolf-Thomas.
I am sure that your message wasn't received as impolite attack. I
suppose that Clean team has a lot of work to do, because from
time to time they don't feel like answering mail. On other occasions,
they give us long illumintating answers. I think they are quite busy
preparing release 2.0 and the object io library for PC. Besides this,
Clean for SunOS 5.5 and for Linux is behind the versions of the language
for MacIntosh and PC. They must be working hard to bring the lagging
versions up to date. Resume of the opera: Even without inside
information, one can infer that people at Nijmegen must be in one
of those periods of intense activities, when mail accumulates without
answer in the SMTP server.

As Adrian Hey told you, Clean team is certainly aware of everything
you told. They just didn't get the time to work on these issues.
Clean proved that it is possible to implement a lazy functional
programming language for real world applications. To me, this fact
is simply exciting and amazing. Not long ago, I read a paper written
by a Danish mathematician, proving that such an implementation 
would be impossible! Proponents of functional programming languages
used to say that it was necessary to accept a certain dose of
ineficiency, in order to get a more human oriented language.
Clean team did the hard thing: To prove that things thought to
be impossible were feasible. Now, they are working on the details.
The amount of work is large, but it is clerical by nature. Clean is
like Gustave Whitehead's flight (or Gustave Weisskopf for the Germans),
which have shown that airplanes were practical machines. 
After Whitehead, came Voisin, the Wright brothers, Bleriot and many 
others who perfected his invention, giving it superior control and 
autonomy.

The next version of Clean, according to Dr Plasmeijer,
will come with much better arithmetic, including arbitrary precision
integers. While Clean team finishes their clerical work, I implemented
my
arithmetic types. They are useful for debuging and for building
prototypes. The idea is the following:

:: SaferIntegers = INT Int | ERROR | OVERFLOW;

instance / SafeNumbers
where
{ (/) (INT x) (INT 0)= ERROR
; (/) (INT x) (INT y)= INT (x/y)
; (/) _ _ = ERROR};

Start= ((INT 3)/(INT 0)) / (INT 5);

The new instances of the arithmetic classes are slower than the 
original ones. However, they aren't terribly slower. For example,
they are faster than normal arithmetic in Java, with Symantec
JIT compiler. As for the mod operator, that is very easy to
fix, even for normal integers. Don't you think so?

From the previous work of Clean team, I am confident that the
problems which you hava pointed out will be solved quite soon.
Probably, in version 2.0.