[erlang-questions] escript lives
Joe Armstrong
erlang@REDACTED
Thu Oct 5 10:22:10 CEST 2006
I have made escript work again. 'twas lost - but now it is found.
Escript is a scripting interface to Erlang (see the history below)
Questions: This is tested only on Solaris and bash on R11B
The script bit needs some funny quoting that may not work on other systems.
I would be grateful if you could let me know of any abnormalities that occur
on other platforms -
also if any windows users can run this I'd like to know what you think the
best way to
set this up is.
/Joe
1) 3-april-2001
Joe Armstrong amd Robert Virding write escript.
This is a pure erlang applications that allows erlang modules
to be used as scripts:
Example:
./factorial 123
factorial 123 = 1214630436702532967576624324188129585545
4217088483382315328918161829235892362167
6688311569606126402021707358352212940477
8259109157041165147218602951990626164673
0733907419814952960000000000000000000000
000000
The file factorial contains the following:
#!/usr/bin/env escript
%%
%% Usage:
%% factorial <Int>
%% Example of an interpreted script
-export([main/1]).
main([X]) ->
case (catch list_to_integer(X)) of
{'EXIT', _} ->
usage();
J ->
N = fac(J),
io:format("factorial ~w = ~w~n",[J, N])
end;
main(_) ->
usage().
usage() ->
io:format("Usage factorial <Int>~n").
fac(0) -> 1;
fac(N) ->
N * fac(N-1).
2) Escript has a rather long startup time
time ./factorial 1
...
real 0m0.745s
So I investigated why. The reason has to do with code loading ...
3) I wrote SAE - stand-alone Erlang to solve this
Then I implemented escript in SAE
escript with SAE started very quickly (0.0N) seconds (ish)
4) Integration of SAE with the standard release was pretty difficult
(lots of modules have to be changed)
5) SAE never made it into the main release - but parts of it
found there way into the bootstrap compiler.
6) escript ran for a while on SAE - but every new release
of ERlang required major effort to get it running again.
7) Escript stops working on the latest version of the system,
because it now depends upon SAE which is broken.
...
8) I stop using escript and forget about it.
9) I start writing a book. <<The book please buy it>>.
10) I want to describe loads of *useful* and little known tools.
11) I want make sure that escript works.
12) I google escript - since Iäve now *lost* the code
13) Google finds escript on MY web site (holy cows) - irony yes.
This is the old "pure-erlang" version "pre SAE"
14) I compile this version
It is broken.
It depends upon a hacked version of erl_eval
this needs syncing with the latest version.
15) I look at the latest version of erl_eval
I find this comment:
%% Is used by standalone Erlang (escript).
%% Also used by shell.erl.
-export([match_clause/4]).
I suspect that erl_eval.erl is "up to date" with my hacked version,
I check - it is.
16) I wonder.
"is escript" in the *current* system?
17) I check
yes - it's in erts/boot/src/escript.erl
18) Does it work?
no
19) I fix it
It works
20) Is it installed by default?
No
21) Is it documented
No
22) I fix it - fix the documentation
and post to the Erlang list
/Joe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20061005/b89c7302/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: escript-4.0.tgz
Type: application/x-gzip
Size: 5354 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20061005/b89c7302/attachment.bin>
More information about the erlang-questions
mailing list