COPL, the Tandem, PLITS and JAVA (WAS Re: Eppur si sugat)

Joe Armstrong joe@REDACTED
Wed May 28 10:11:28 CEST 2003


On Wed, 28 May 2003, Peter-Henry Mander wrote:

> A bit of dictionary hacking leads me to believe joe was alluding to 
> Galilei; 'Eppur si muove' 'Still the Earth moves'
> 
> "And yet it still sucks!" == Eppur si sugat

Right on - I had great trouble with this.

It turns out (According to one source) that "Eppur si mnove" is not
good 'ol Latin but is 15'th century Florentine Italian - I cannot confirm this
(Francisco - help!!!!)


I guessed that "muove" must be moves - so I needed the Latin
for sucks.

I then typed "sucks latin" into google hoping to find a latin translation
for "sucks" -

  This was a  mistake - goggle obligingly coughed  up several pages of
references to young  latin ladies who sucked things  - the things being
sucked were not lollipops - I say no more.

> 
> Am I right? Everyone else seems or pretends to know exactly what Joe said!
> 
> As for the debate, it looks as if you are all fighting over how to 
> formalise the OO "method." Joe, from the FP camp desires to see the 
> formal definition of OO to enable comparison with the formal definition 
> of any FP language. Such definition _does_not_exist_ for OO, because it 
> has grown out of day-to-day experience and "best practices" of 
> programmers in the trenches who don't necessarily have time or the 
> inclination to write a thesis about how they get results.
> 
> OO is no more than a bunch of good recipes for hackers.
> 
> And like recipes, there's always more than one way to get similar 
> results. This doesn't mean that they're bad. I get results using OO 
> methods when digging my trench. Unfortunately some marketing bright 
> spark came up with a "OOh!" to "Wow!" management, and the rest is 
> history. In this world the best technical solution doesn't even win on 
> merit, and I think Joe (and I) get upset because of that.
> 

  This is precisely the reason why my latest ploy is to call Erlang
a COPL.

  "Concurrency Oriented Programming" is  intended to be analogy of OOP
- ie nobody  knows what  it is but  everybody recoginised a  COPL when
they see one.

  The "thing" about Erlang (and about COPL) is

	- Isolated processes
	- Pure message passing

  It is  just the  lack of isolation  that *prevents* Java  from being
used for anything sensible.

<<quote>> 

  ... the  only safe way  to execute multiple applications  written in
the  Java programming  language,  on the  same  computer is  to use  a
separate JVM for  each of them, and execute each JVM  in a separate OS
process.

  ...  In particular, the abstraction  of a process, offered by modern
OSes, is thew  role module in terms of  features; isolation from other
computations,  resources  accountability  and  control,  and  ease  of
termination and resource reclamation.}


  ...  tasks cannot directly share  objects, and that the only way for
tasks  to  communicate  is  to  use  standard,  copying  communication
mechanisms, ...

  -- Czajkowski and  Dayn\`{e}s In Multitasking  without comprimise: a
virtual machine evolution, Proceedings of the OOPSLA '01 conference on
Object Oriented Programming Systems Languages and Applications},

<</quote>>

The above quote is from two guys at Sun - amazing.

  Their  paper  says  basically  -   if  you  want  to  run  two  Java
applications on the same machine you  have to fire up two JVMs and run
each one as a separate OS process.  So despite the fact that Java is a
"safe"  language  (with GC  etc)  you  still  need the  protection  as
provided by OS processes.

  Despite  this fact  Java  is  still used  as  a systems  programming
language --  amazing, since  *nobody* knows how  to run  multiple Java
applications on  the same machine *without* protecting  them within OS
processes (what  do you do, give  *every* programmer an  OS process to
play in ... :-) - Until this problem is solved Java should not be used
for systems  applications (it was, after all,  *designed* for applets,
where it works well and the abstractions are appropriate) ...

  As  for  pure   message  passing  -  In  1978   PLITS  was  invented
(Programming language  in the sky) -  this was a  pure message passing
system  -  The  authors  of  PLITS argued  that  "complex  concurrency
patterns"  and "shared  memory" was  no-no. They  thought  that shared
memory models just didn't  work with complex concurrency pattern, they
thought that programming such a system would be impossibly difficult.

  The  PLITS people  just  cared about  pure  message passing  between
isolated processes - "communicating black boxes" they didn't even care
about what  language was *inside*  the black box (this  is *precisely*
the XML/SOAP philosophy of black boxes communicating via XML messages,
or the UBF philosophy)

  Having introduced the idea of a COPL I talk about fault-tolerance.

  To  make a fault-tolerant  applications you  need TWO  computers AND
they cannot share data (because If you only have one computer it might
crash) - thus you need isolation and pure message passing.

  The basis of fault-tolerant computations rests upon three things:

	a) isolation of components
	b) pure message passing
	c) stable storage

  a) the computers  must be isolated - if one  crashes the other must
continue

  Since the computers are isolated, they can share no data, therefore
the *only* way they can interact is by pure message passing (point b)

  c) stable storage is storage which survives a crash - you need this to
recover *after* a crash has occurred.

  Now a) and b) are built into Erlang. c) can be achieved in a number
of different  ways - mnesia, asynchronous replications,  etc. there are
lots of ways of doing this.

  The  conclusion  of  all  this  is  that  if  you  want  to  make  a
fault-tolerant system you *have* to get interested in COPLS.

  My current way of describing Erlang/OTP is saying that

  "it is a software emulation of the Tandem computer"

  Read Jim Gray's 1985 paper

  "Why do computers stop and what can be done about it?

  and you will immediately be struck by the similarity in the design of
the Tandem and of the Erlang/OTP system.

  The Tandem  was for many  years (and possible  still is) one  of the
best known architectures for making fault-tolerant systems -

  Incidentally, the tandem used "fail-fast  processors" the idea was it a
failure occurs (ie an error which cannot be corrected) die as soon as
possible - *exactly* the "let it crash philosophy" in Erlang.

  /Joe




> Pete.
> 
> Chris Pressey wrote:
> > On Tue, 27 May 2003 10:40:00 +0200 (CEST)
> > Joe Armstrong <joe@REDACTED> wrote:
> > 
> > 
> >>   Eppur si sugat (was that right?)
> > 
> > 
> > (Not sure - Google just gave me a blank look when I tried it...)
> > 
> >
> 
> 
> (interesting but marginally mathematical related stuff deleted.)
> 
> 




More information about the erlang-questions mailing list