[Haskell-cafe] Can't Haskell catch up with Clean's
uniqueness typing?
Jan-Willem Maessen
jmaessen at alum.mit.edu
Wed Dec 7 08:21:42 EST 2005
On Dec 6, 2005, at 9:17 AM, haskell-cafe.mail.zooloo at xoxy.net wrote:
> Hi all,
>
> being occupied with learning both languages, I'm getting curious if
> Haskell couldn't achieve most of the performance gains
> resulting from uniqueness typing in Clean by *automatically*
> determining the reference count of arguments wherever
> possible and subsequently allowing them to be physically replaced
> immediately by (the corresponding part of) the
> function's result. Are there any principal obstacles, or *could*
> this be done, or *is* this even done already, e. g. in
> ghc?
Yes, this could be done. The principle obstacles are the same as for
any reference counting scheme: It imposes more run-time overhead than
GC does, unless the data structures involved are large. Let me
repeat that: accurate up-to-the-moment reference counting is
dramatically slower than GC. Techniques exist to make ref counting
fast, but they all require the equivalent of a full stack walk in
order to get an accurate count.
That said, clever techniques (like 1-bit ref counting) are available
that will get 80% of what is desired. 1-bit reference counting keeps
a single bit which says either "this is certainly the only reference"
or "other references may exist". The bit can be kept in the pointer
itself. There's still run-time overhead, though---the bit must be
masked on each pointer dereference.
Wearing my "Fortress language designer" hat, we've given serious
thought to these techniques for very large arrays. Copying such
structures is terribly expensive, or even impossible (imagine copying
a 1PB array). I'd think hard before I used them for, say, cons cells.
Shae: All this is very, very different from eager / optimistic
evaluation.
-Jan-Willem Maessen
More information about the Haskell-Cafe
mailing list