[erlang-questions] idea: service pack one

Joe Armstrong <>
Tue Nov 13 22:48:47 CET 2007


Re: flex 2 - has anybody got a *simple* example of a flex 2
application that can communicate with
erlang (through AMF) - I'm just reading up on flex 2/air it seems to
be a perfect (client side) fit to Erlang

/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