[erlang-questions] idea: service pack one

Joe Armstrong <>
Tue Nov 13 22:57:17 CET 2007


More ...

The idea of SP2 is to provide a quicker release cycle than OTP. I want to

a) add new stuff
quickly to the exisiting OTP release. SP2 can add
new features to the language. It is then up to the OTP people to
decide if they like these features
and add them to the main branch.

b) encourage community development


/Joe

On Nov 13, 2007 10:27 PM, Joe Armstrong <> wrote:
> Hi everybody,
>
> I got fired up with enthusiasm at the Erlang conference - it seems to
> me that there are a lot of *simple* things we
> can do that we should have done years ago. The reason was that even
> though many aspects of the system
> suck and can be *easily* improved we have learnt to live with the
> system (warts and all).
>
> Now that the book is done my thoughts returned to the Erlang system.
>
> Erlang is becoming popular and now needs to address the problems that
> our new users encounter.
>
> To do this I propose a project called "service pack one" (( its an
> add-on that can be bolted on top of OTP))
>
> (( I don't want to change anything in OTP - just add a free-standing
> set of scripts that modify the behavior
> of the system ))
>
> Here's a few very simple things to do:
>
> (each of the things starting +++ is a little project --- now I'd like
> volunteers for each project - most of these are pretty easy
> to hack together a quick and dirty prototype - but needs a little care
> in getting all the details right)
>
>
> 1 +++  fix nicer error messages (Done - Kenneth showed this)
>
> 2 +++ experiment with inheritance (Richard mentioned this) (( I hacked
> this together today, together with
>        some code that checks for missing calls in imported libraries))
> - I can post a longer explanation if you like
>
> 3 +++  make Erlang start fast so that people stop winging about it
> starting slowly. And fix a
>         *small*  distribution - here's a minimal version.
>
>     ((aside - who cares if Erlang starts slowly - it was designed to
> start once and never stop - we have systems
> that have run for 5 years - a two seconds start-up time amortized over
> 5 years is not *too* bad))
>
>    (( If you want to make it fast redo the boot scripts - it's all in
> the documentation ! ))
>
>   (I tried this yesterday) it's really easy
>
>
>   1) make a boot file (jboot.erl)
>
> {script, {"tiny","1.1"},
>  [{preLoaded,[erlang,erl_prim_loader,prim_file,prim_inet,init,otp_ring0]},
>   {primLoad, [tiny]},
>   {kernel_load_completed},
>   {apply, {tiny, start, []}}]}.
>
>  2) write a minimal erlang program
>      tiny.erl
>      start() -> erlang:display'hello world'), erlang:halt().
>
> 3) compile the boot file
>     systools:script2boot("jboot").
>
> 4) run
>     erl -boot jboot
>
> This runs in 0.29 secs on my macbook
>
>    (( for comparison erl -s init stop takes 1.6 seconds)
>
> 5) you also need the erl script:
>
> #!/bin/sh
> ROOTDIR=`pwd`
> BINDIR=$ROOTDIR
> EMU=beam
> PROGNAME=`echo $0 | sed 's/.*\///'`
> export EMU
> export ROOTDIR
> export BINDIR
> export PROGNAME
> exec $BINDIR/erlexec ${1+"$@"}
>
> 6) copy erlexec and beam from the distribution to a local directory.
> (these can be stripped to remove symbol table info)
>
> 7) the result is
>
> $ wc erl erlexec beam jboot.boot tiny.beam
>
>      10      20     172              erl
>       58     277   22012          erlexec
>     4247   35423 1097316  beam
>        0       5     203               jboot.boot
>        5      20     708             tiny.beam
>     4320   35745 1120411 total
>
> 1.1 MB and 6 files - not *too* bad
>
> 8) for fun I packed stdlib/kernel/compiler in an archive using
>     boot_tools:mk_lib() which packs everything a single 1.14 meg archive
>    (boot_tools is in $DIST/otp_src_R11B-4/erts/boot/src
>
> This means we can pack the compiler and base otp system into half a dozen files
>  and under 2.5 Meg
>
> (( this was my old sae sysytem that never really made it to the main release))
>
> 4 +++ compile the @spec definitions in comments into code that
> *dynamically* checks types
>         who cares if it's slow and can't be checked statically - the
> dynamic check is very useful
>         while developing
>
> 5 +++ bundle ejabberd (or yaws) in a standard configuration that ships
> with Erlang.
>           I talked to Mickael R. about this - if we shipped ejabberd
> with every Erlang
>           we could easily get tens of thousands of ejabberd servers up
> and running in
>          the twinkling of an eye.
>
> 6 ++++ fix BIFs for regexp, searching binaries etc - so people stop winging
>
> 7 ++++ fix c(Mod) and erlc so that they throw *everything* at them ie
> dynamic type checking,
>               xref, cover, dialyzer *without* you having to do anything fancy
>              the defaults for compilation should be to throw all
> checks possible into the compile
>              cycle
>
> 8 ++++ make an *erlang* packing mechanism (put the entire application
> in a .dets file - and NOT
> .tar.gz or zip file - then define a bundle structure (look at the MAC
> for inspiration) add application icons
> and a desktop interface.
>
> 9 ++++ interface to flash using flex 2. Solve the GUI problem once and
> for all as follows
>
>       repeat after me: client = flash in the browser, server = erlang.
> Intermediate protocol = flash AMF
>
>
> There are probably more things I could add - feel free to add you pet
> annoyance that can be easily
> fixed and we'll put it into service pack one.
>
>
>
> Cheers
>
> /Joe Armstrong
>



More information about the erlang-questions mailing list