[racket] Blog post about Racket

From: Hendrik Boom (hendrik at topoi.pooq.com)
Date: Tue May 13 11:04:34 EDT 2014

On Tue, May 13, 2014 at 09:53:27AM +0200, Konrad Hinsen wrote:
> Matthias Felleisen writes:
> 
>  > > Note however that I didn't look at performance, which is not
>  > > really important for most of what I do.
>  > 
>  > In hindsight that is obvious from your use of Python :-) It should
>  > have clicked in me, but I am just so used to think "scientific 
>  > computation ~ simulations of nuclear bombs, aircraft wings, oil
>  > platforms, and such" and that's when performance is the overriding 
>  > concern. 
> 
> That's a very common misconception. High-performance computing is the
> most visible part of scientific computing, but not what most
> scientists write code for. Mundane tasks such as file format
> conversion take much more of our time.
> 
> That said, it's interesting to look at why Python became such a
> popular language in science. Python code rarely has great performance,
> but Python makes interfacing to C and Fortran code very easy. Most
> domain-specific scientific libraries for Python have a C library at
> their core. One reason for this simplicity of interfacing is Python's
> reference-counting approach to garbage collection. In many scientific
> applications, the bulk of the data is held in NumPy arrays, which is
> just a C/Fortran array plus some bookkeeping information for Python.
> Both sides can work on the data, with no copying and no access
> restrictions due to garbage collection.
> 
> The price we pay for this is of course the dangers of C and its
> explicit memory management. I'd really love to get away from this (and
> I know I am not alone), but there is no GC-based language yet (as far
> as I know) that is convenient enough for scientific computing.  The
> most frequent problem (also in Racket) is GC ruining performance for
> short-lived small data items (think of complex numbers or points in 3D
> space). Even if the GC overhead itself is small with a good
> generational GC, GC tends to prevent other code optimizations
> that are crucial for performance.

There's Modula 3, which is not nearly as well-known as it ought to be.
It is type-safe, garbage-collected, object-oriented (as well as 
traditionally procedure-oriented), and doesn't have any significant 
overhead for complex numbers.  Complex numbers simply don't need to be 
stored as separate garbage-collected objects, any more than integers 
do.  It interfaces well with Fortran and C.

You mark modules as being UNSAFE, which allows you to use UNTRACED 
pointers to non-garbage-collected storage (such as that used by C and 
Fortran).  Of course, when you do that to a module, you can evade 
type-safety as well, which is why it's normally only done when it's 
absolutely necessary.

See the links in its Wikipedia article for details.

-- hendrik 

Posted on the users mailing list.