読者です 読者をやめる 読者になる 読者になる

R14A から追加された escript:create/2 を使ってみる

erlang escript

R14A から escript を生成する機能が付きました。

demo.erl

-module(demo).

-export([main/1]).

main(_Args) ->
  io:format("Hello, world!\n", []).

demo.escript を生成します

% /usr/local/erlang/R14A/bin/erl
Erlang R14A (erts-5.8) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8  (abort with ^G)
1> {ok, SourceCode} = file:read_file("demo.erl").
{ok,<<"-module(demo).\n\n-export([main/1]).\n\nmain(_Args) ->\n  io:format(\"Hello, world!\\n\", []).\n">>}
2> {ok, _, BeamCode} = compile:file("demo.erl", [binary, compressed, debug_info]).
{ok,demo,
    <<70,79,82,49,0,0,2,228,66,69,65,77,65,116,111,109,0,0,0,
      59,0,0,0,7,4,100,...>>}
3> escript:create("demo.escript", [shebang, {archive, [{"demo.erl", SourceCode}, {"demo.beam", BeamCode}], []}, {emu_args, "-smp enable -mnesia debug verbose"}]).
ok

あとは実行すればこうなります。ちなみに binary を指定しているので、中身はバイナリです。

% ./demo.escript 
Hello, world!