[erlang-questions] escript lives

Wayne Vucenic <>
Sun Oct 15 21:33:33 CEST 2006


Hi Joe,

> 9) I start writing a book. <<The book please buy it>>.

I'm definitely looking forward to your new book.  Is it available yet?

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

I'd like to get this working on Windows.  I decided to start with Mac OS X
as I expected that to be easier.  It wasn't hard to get it running, but I
did encounter several of those abnormalities:

I'm using Erlang R11B-1 on Mac OS X 10.4.7 with bash.

Mini:~/erlang/escript-4.0 wayne$ make
erlc escript.erl
make: *** No rule to make target `.beam', needed by `all'.  Stop.

as the erlc line above suggests, it actually did make the .beam file,
so I'm not sure why it thinks it needs to remake it but can't.

Mini:~/erlang/escript-4.0 wayne$ ls
Makefile        escript.erl     factorial       fibi            make_d_output
escript.beam    escript.html    fibc            history         mk_escript.sh
Mini:~/erlang/escript-4.0 wayne$ make
make: *** No rule to make target `.beam', needed by `all'.  Stop.

I've attached the output from "make -d", in case that sheds some light on this.

to work around this, I changed the Makefile line

all: ${BEAM_FILES} escript

to

all: escript.beam escript

this gets us past the .beam error, but now it has trouble making escript

Mini:~/erlang/escript-4.0 wayne$ make
./mk_escript.sh
make: ./mk_escript.sh: Command not found
make: *** [escript] Error 127

so I tried running mk_escript.sh directly, rather than with make

Mini:~/erlang/escript-4.0 wayne$ ./mk_escript.sh
: bad interpreter: No such file or directory

apparently it doesn't like the
#! /bin/bash
line, but that is the correct path to bash:

Mini:~/erlang/escript-4.0 wayne$ which bash
/bin/bash

so I removed the #! line and tried again

Mini:~/erlang/escript-4.0 wayne$ ./mk_escript.sh
: command not foundne 9:

(the above is not a typo, it really did say "foundne")

Now it apparently doesn't like that line 9 is blank, so I remove line 9

And it works:

Mini:~/erlang/escript-4.0 wayne$ ./mk_escript.sh
Mini:~/erlang/escript-4.0 wayne$ ./fibc 20
fib 20 = 10946

Let me know if you'd like me to try anything else on OS X.

It may be a little while before I have time to try this on Windows,
but when I do I'll post my results.

Wayne

---

Wayne Vucenic
No Bugs Software
Ruby, C#, and Erlang Agile Contract Programming in Silicon Valley


On 10/5/06, Joe Armstrong <> wrote:
> 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
>
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: make_d_output.zip
Type: application/zip
Size: 3341 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20061015/df7590cb/attachment.zip>


More information about the erlang-questions mailing list