Erlang is getting too big (Long and a lot of shouting :-)

Joe Armstrong joe@REDACTED
Tue Oct 14 10:01:42 CEST 2003


  Is Erlang big?

  Should it grow?

  Before we all get to overexcited about this I'd like to get my own 5
cents in ...

  When  discussing  language  design/properties  all  things  are  not
equally important - we are talking as if they were.

  For many years I have thought about what makes a language successful.
  
  Here are two good answers:

	1) - Somebody makes money by using language X
	2) - X is superbly good at solving some particular problem
	     that no other language can solve adequately 

  The guy who say 1) also said (paraphrased) " I became interested in
Erlang  because I discovered  that people  were prepared  to invest
their own $ in it".

  For point 2)  - sure you can write anything  in any language (Turing
equivalence) - but this does not mean it is equally difficult. I guess
if Erlang is  10 to 100 times better than language  X for a particular
application then it  has some chance of succeeding  in that particular
niche.

  So to succeed 1) and 2) have to satisfied

	<< note I haven't mentioned deep guards :-) or parameterised modules >>

  Simplicity (though I love it) is not on my list - whatever else Java/C++/Perl
have it's certainly not simplicity ...

  Cobra and the XML morass are certainly not simple ... and programming things
like the windows API are so complicated that entire tool-making industries have
emerged to try and hide bits of the complexity.

  Entire armies of consultant *love* complexity - 

  Complexity = Job opportunities

  Back to the argument.

  IMNSHO Erlang is good at concurrency.

  It should be is was DESIGNED TO BE GOOD AT CONCURRENCY (The guy four
doors down  the corridor  wonders why I  am pounding the  keyboard so
hard :-)

  I think (I  KNOW) that language changes that  are aimed at improving
the concurrency are  essential. The world will not  stand still - what
we have done with processes in  Erlang will one day be done in Java/C#
(whatever).

  So what should we do?

  I have said this before:

	- Improve the *isolation* between processes

  This I consider the single most important change to the language.

  I consider ISOLATION (you're banging the keyboard again) to be the
single most important property that a language has.

  What is ISOLATION?

  Two processes are  isolated if one process cannot  bugger up another
process.

  This is "pretty  easy to achieve" on different  machines.  Suppose I
run  one process  in Sweden  and the  second process  runs  on Richard
O'Keefe's machine  in new Zealand -  suppose I write in  Erlang and he
writes in smalltalk - then I hope errors in my program would not crash
his program.

  The *difficult*  bit is  doing it  on the same  machine in  the same
language.

  What is it  that buggers up software projects -  bugs in one program
propagate to other programs.

  -- Yikes  Gadzookes bother  and  blast -  my incomparably  beautiful
fault-free  well tested program  crashed because  I linked  it together
with a program that contained an error.

  The only  way that I  know of to  stop errors propagating is  to use
processes  (ie virtual  machines) -  PROCESSES  ARE USED  TO STOP  THE
PROPAGATION OF ERRORS.

  Erlang was designed for large software projects.

  The principle reason why large software projects fail is because the
software never works.

  The main reason why software doesn't work is that errors propagate between
modules - bad code buggers up good code.

  Unless you can  stop the propagation of errors you  will never be able
to write any decent software.

  For this reason I do not care about syntactic sugar.

  Where should we be going?
  =========================

  * improve concurrency

  I'd like to see more processes with better isolation -

  * GC of everything

  atom tables, code

  * First Order Code

  First order code with GC would be *wonderful* - even better than
structs (which is just sugar)

  * Agent extensions

  SECURITY (sorry I'm shouting again)

  * Interoperability

  This is the "wrapper" stuff I keep yacking on about - integration
of UBF contracts with the language.

  We should not  add things which makes programming  a little bit more
convenient (which is after all what a lot of the language changes do) -
we should add thing so we can easily write applications that nobody else can
write.
   
  Erlang is good at one thing - making large reliable systems.

  That is what it was designed to  do - so YES to all changes aimed at
making it easier to build reliable system software - NO to everything else.

  /Joe

PS - any pleeeeese add the version number of the language to files.

-module(foo).
-version(5.0). <--------------- the language version

Then If we do change the language the compiler can figure out what
went wrong!!!!!







More information about the erlang-questions mailing list