caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: skaller <skaller@users.sourceforge.net>
To: Jonathan T Bryant <jtbryant@valdosta.edu>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] A Few Questions
Date: Mon, 18 Dec 2006 14:18:02 +1100	[thread overview]
Message-ID: <1166411882.8881.42.camel@rosella.wigram> (raw)
In-Reply-To: <6471679.1166406715475.JavaMail.jtbryant@valdosta.edu>

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


  reply	other threads:[~2006-12-18  3:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-18  1:51 Jonathan T Bryant
2006-12-18  3:18 ` skaller [this message]
2006-12-19 22:31 ` [Caml-list] " Nathaniel Gray

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1166411882.8881.42.camel@rosella.wigram \
    --to=skaller@users.sourceforge.net \
    --cc=caml-list@yquem.inria.fr \
    --cc=jtbryant@valdosta.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).