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
next prev parent 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