trying to explain some words
Paul Dufresne
dufrp@oricom.ca
Fri, 16 Jul 1999 18:41:39 -0400
Hey, that 2 emails I receive on private e-mail!
I don't understand these and the authors don't explain why they reply
privately. Oh, maybe that's my mystake, and I should set my reply-to
field on the list. I'll try to configure that on my mail reader.
Anyway, since no comment was on the e-mail saying I should not reply
on the list, I'll reply on the list.
On Fri, Jul 16, 1999 at 01:51:52AM +0300, Sami Mäkelä wrote:
> Paul Dufresne wrote:
>
> > On Thu, Jul 15, 1999 at 08:47:04PM +0200, LeDudu@gmx.net wrote:
> > > Hi there
> > > Cool all that thing bout CALM JOE and Pi Calcululus, but what does it
> > > mean???
> > First, it is CAML not CALM.
> > It is not JOE, but join-calculus.
> >
> > CAML is an implementation of the ML
> > language. ML is a functionnal language, but is not that far of
> > plain procedural language that you may know like C. It has normal
> > looping, and you can have affectations (like a=4). But a functionnal
> > language is different from procedural language like C,C++,Pascal, etc.
> > by the fact that you can have functions that receive functions as
> > parameters, return them (not just pointers to functions but really
> > functions), you can store functions in variables, lists, etc.
> >
>
> actually ML is a family of languages and for example SML doesn't have looping
> constructs AFAIK
>
Hum, well, frankly I did not used ML much. I wanted to tell that
ML is easier to learn from someone coming from C world than Haskell
or Clean can be. I remember the first time I had read on ML (Caml-Light
tutorial actually) and I was finding it very weird. And this tutorial
is too hard to a newcomer, when they give mathematical description of
how to do a type inference system I get lost and began to search for
others languages. But I later found that what I was finding so weird
was normal stuff in Scheme, Clean and Haskell (all functionnal languages
I suppose). Actually, I guess I would suggest a newcomer to functionnal
language to learn Scheme in the first place (I am not a real Scheme
programmer but I had read R5RS more than one time). My personnal
opinion is that from the simplest to learn to the hardest (for someone
that had learned procedural languages like C or Pascal), I would
put Scheme, ML family, Concurrent-Clean and then Haskell.
> > ML is not object-oriented. ML used to be a big compiler, but
> > some have made a much less bigger one, CAML. (pronounce like camel).
> >
>
> there was a compiler called CAML that was very big and slow. you probably
> mean CAML-light
>
I never saw the big CAML, but yes the CAML I know is the 'light' one.
>
> > Later some have made an object-oriented version of it, called OCAML
> > (Objective CAML).
> >
> > Functionnal programming langages are based on something that mathematicians
> > called lambda-calculus. This is merely a mathematical notation that let
> > you express the fact that you create a function, that you execute it
> > (function application), etc. Lambda Calculus appeared in mathematics in
> > about 1920, but it is only 'recently' that some programming language
> > begin to allow all what the lambda calculus let you do.
> >
> > PI calculus is a mathematical notation that let you express multiple
> > process running at the same time and speaking each other through
> > channels. Pict is a programming language based on Pi-calculus.
> > Pi-Calculus appeared in 1989 I think.
> >
> > What Fare was telling me, is that there is a new mathematical-model
> > called join-calculus that could be seen as a new kind of pi-calculus.
> > And with it a new language Jo(in-calculus)ML that is a kind of
> > ML in which you can easily express communication between process along
> > channels. Af first glance the main difference with pi-calculus is
> > that it integrate better with functions in the language (that is
> > with lambda-calculus, but I may be wrong on that since I am just
> > beginning to read about it.
> >
>
> i think that main difference between pi-calculus and join-calculus is that
> join uses some kind of nondeterministic pattern matching and pi-calculus uses
> asynchronous communication channels
Like I said I am just beginning to read the tutorial. But up to now I have
seen that they seem to have synchrounous channel (that return value and
so that when you send something on that channel (name) you are blocked
until the return-value came back, and there is asynchrounous channel
that don't block when you send something through (because there is
nothing to wait for). Glancing through one paper, I also saw that
they have added stuff to the join-calculus (locations) to make it easier
to migrate applications from one machine to an other. So this make an
other difference with 'plain' pi-calculus.
Reading on the Clean list, someone was saying that as soon many messages
are concurrently sent through a same channel, there is some undeterminism
going on in the sense that you can't tell in which order the receiver
will receive the stuff. So at first glance, this characteristic should
be shared by join-calculus and pi-calculus, but who am I to obstinate? :)
> > In JoML (or was it JoCAML), you can program functions on your machine
> > that will be able to be called from an other machine elsewhere on the
> > Internet. This is what the join-calculus have made easier in ML. So,
> > pi or join-calculus are related to distributed stuff (programs or
> > databases that have different parts running on different computers on
> > a network).
The other private e-mail was asking me why not just program these
communication stuff through the Internet in plain C. My answer
was that JOCAML free you from having to take care of concurrent access
to a ressource (coding of semaphores and others locks) and that kind
of situations can have hard to find bugs when programmed in C.
I hope this is not a stupid answer.
I invite people to read the Tunes's pages on programming languages.
Search in the Review project on http://www.tunes.org. I have tried to
reorganize this page on the wiki server too, some months ago.