Version française
Home     About     Download     Resources     Contact us    
Browse thread
A Few Questions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: skaller <skaller@u...>
Subject: Re: [Caml-list] A Few Questions
On Sun, 2006-12-17 at 20:51 -0500, Jonathan T Bryant wrote:

> 3) Since CML's threads are implemented via continuations, speculative 
> computation is allowed because
> threads are simply GCed once they are not referenced any more.  Since 
> OCaml's threads are implemeted
> via system calls, is this still the case or do threads need to be 
> manually joined?  I've run into
> some instances where I can't create any more threads because the 
> "Thread limit" of 1024 has been
> reached, but in code where nowhere near that many threads should be 
> left active.  Is this limit an
> OCaml limit or a system limit?  

system limit.

> Also, what about threads that are 
> not referenced anymore but
> should still be running (i.e., "background services" and the like)?  Is 
> there any way to keep the GC
> from collecting them?

The gc doesn't collect threads in the first place.
It may collect a data structure identifying the thread if it
is unreachable.

Under Posix, if a thread is joinable it will not die until
joined. If it is detached, it will not die until it choses to.
(Assuming you don't kill it).

> 5) One possible extension is a vector type.  Is it possible as is to 
> make the type inference
> engine "as is" include the size of the underlying array as part of the 
> type information or does that
> require modifications to the type system?  

You would not want to do this. Use tuples instead.

Felix has arrays with known length as a data type,
in fact they're precisely tuples. The length type
is an anonymous sum of n units, written just 'n'.

However full manipulation is not possible. For example
you cannot have

	concat: array[t,n] * array[t,m] -> array[t,add(n,m)]


because add(n,m) cannot work with an unconstrained type variable.
In Felix, whilst

	(x:array[t,20]) + (y:array[t,30])

works correctly, you cannot concatenate arrays inside
a routine with polymorphic array bounds, even if the
instantiator would fix the bounds to a constant later.

In Ocaml there's no instantiator in the first place,
so the calculation would have to be done at run time
anyhow and require dependent typing support.

But the existing Array types in Ocaml simply drop the
length information. This avoids the problem at the 
cost of not permitting enforced array bounds checks
based on type.

Note that in theory a subscript to an array of length n
is a value of type n, which is a unit sum, so the subscript
is a value of that unit sum, and such an index never requires
any bounds checking.

oleg showed a cute way to do the dependent typing on
existing arrays, and avoid many unnecessary checks,
in existing Ocaml. Maybe he can post the URL to that again.


-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net