[erlang-questions] idea: service pack one

shahzad bhatti <>
Wed Nov 14 19:01:37 CET 2007


How about adding unit test library like eunit to the distribution. I would also like to see more mocking support (similar to jmock/mockeasy/flexmock) especially for OTP.

> 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
>>

       
---------------------------------
Get easy, one-click access to your favorites.  Make Yahoo! your homepage.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20071114/72b3ae9e/attachment.html>


More information about the erlang-questions mailing list