English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[ANN] coThreads 0.10
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-09-20 (08:15)
From: Zheng Li <li@p...>
Subject: Re: [ANN] coThreads 0.10


First note that the naming convention follows the standard threads library in
OCaml: Threads and coThreads (both with 's') refer to the library (*.cm(x)a);
Thread and Cothread (neither with 's') are modules (*.cm[ox]) inside.

skaller <skaller@users.sourceforge.net> writes:
>> The Thread module interfaces from the three engines differ with each
>> other! Note that this is not the problem from coThreads, it's a problem of
>> standard Threads library:
> Why don't you just use a different module name?
The different module name *is* Cothread, a compatible super set of Thread
module. Use this module instead if you want to have object-level
compatibility. In short, all the three engines have the two libraries with
isomorphic structures (quite simple) :

  threads.cm(x)a = threads.cm[ox], mutex.cm[ox], condition.cm[ox], event.cm[ox]
cothreads.cm(x)a = threads.cm[ox], mutex.cm[ox], condition.cm[ox], event.cm[ox], cothread.cm[ox], stm.cm[ox]

See, we also provide the compatible "threads.cm(x)a" for the process
engine. Think about the following scenario:

 - If you're working on legacy code, you don't care STM and don't care
   object-level compatibility, the only thing you're interested is to running
   your code with process to speedup, then the only thing to change in your
   Makefile is the include path e.g. "-I +threads" -> "-I +process", you can
   still using Thread module and "threads.cma", they are present in process

 - You have several projects, some of them using traditional Threads, some
   using coThreads, you don't want to bother to remember that. So simply
   changing all linking library from threads.cma to cothreads.cma is fine,
   because coThreads library contains every modules in Threads library.

 - You have some legacy code written in standard Threads, and you'd like to
   have it run with processes. Though you don't care about the newly introduced
   modules of coThreads, you do want to have a single copy of object files for
   each engines. In such case, you need to add one line to any source code
   which makes use of the Thread module:

   module Thread = Cothread

   because Thread module (the only module in Threads and coThreads) don't have
   object-level compatibility, and change any occurrence of “threads.cm(x)a” to
   “cothreads.cm(x)a” in your Makefile. 

For more explanation, see http://cothreads.sourceforge.net/doc/compatibility

Zheng Li