Monday, March 15, 2010

Menggunakan erl (Erlang Emulator)

Program erl merupakan bagian dari distribusi Erlang dan digunakan untuk keperluan REPL (Read-Eval-Print Lool). Kemungkinan besar jika anda berkecimpung di Erlang, erl ini akan sering anda gunakan sehingga sebaiknya kita memahami optimasi apa saja yang bisa kita lekukan terhadap erl. Catatan: di Windows, anda sebaiknya menggunakan werl bukan erl, meskipun erl juga ada. Program erl di Windows tidak menyediakan fasilitas seperti key binding (panah atas, bawah, dan lain-lain) sehingga kemungkinan akan lebih menyulitkan. Meskipun demikian, erl di Windows tetap yang harus anda gunakan jika anda memerlukan membuat script command prompt yang memerlukan input output proses di Erlang.

Memulai erl


Jika Erlang telah terinstall, erl bisa kita eksekusi dari sembarang path berikut ini:

[bpdp@bpdp-arch erlang]$ erl
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.5  (abort with ^G)
1> 

Tanda 1> adalah tanda prompt dari erl. Pada posisi tersebut, kita bisa mengetikkan perintah-perintah Erlang ataupun menggunakan key binding yang sudah disediakan. Angka 1 menunjukkan nomor proses.

Keluar dari erl


Untuk keluar dari erl, tekan [Ctrl-G] kemudian ketikkan q diikuti tombol Enter

1> 
User switch command
 --> q
[bpdp@bpdp-arch erlang]$ 

Bisa juga dengan menggunakan perintah "q()." berikut ini:

10> q().
ok
11> [bpdp@bpdp-arch erlang]$ 

Menuliskan Perintah


Perintah yang kita tuliskan tidak akan dieksekusi jika belum ada tanda titik (.). Tanda titik di Erlang memang digunakan sebagai tanda untuk mengakhiri perintah.

3> io:format("Selamat datang\n") 
3> 
3> 
3> 
3> 
3> .
Selamat datang
ok
4> 

Tombol-tombol yang Bisa Digunakan di erl (key-binding)


Ada beberapa tombol yang bisa digunakan setelah kita masuk ke prompt erl, yaitu:

  1. Panah atas (Ctrl-P) dan panah bawah (Ctrl-N), digunakan untuk menampilkan perintah-perintah sebelumnya dan sesudahnya.
  2. Panah kiri (Ctrl-B) dan panah kanan (Ctrl-F), digunakan untuk menggerakkan kursor satu karakter ke kiri atau ke kanan.
  3. Ctrl-A, digunakan untuk menggerakkan kursor ke awal baris.
  4. Ctrl-E, digunakan untuk menggerakkan kursor ke akhir baris.
  5. Ctrl-D, digunakan untuk menghapus karakter pada posisi kursor.

Pertolongan di erl


Untuk mengakses fasilitas pertolongan di erl, kita bisa menggunakan function help() berikut ini:

4> help().
** shell internal commands **
b()        -- display all variable bindings
e(N)       -- repeat the expression in query n
f()        -- forget all variable bindings
f(X)       -- forget the binding of variable X
h()        -- history
history(N) -- set how many previous commands to keep
results(N) -- set how many previous command results to keep
catch_exception(B) -- how exceptions are handled
v(N)       -- use the value of query n
rd(R,D)    -- define a record
rf()       -- remove all record information
rf(R)      -- remove record information about R
rl()       -- display all record information
rl(R)      -- display record information about R
rp(Term)   -- display Term using the shell's record information
rr(File)   -- read record information from File (wildcards allowed)
rr(F,R)    -- read selected record information from file(s)
rr(F,R,O)  -- read selected record information with options
** commands in module c **
bt(Pid)    -- stack backtrace for a process
c(File)    -- compile and load code in file
cd(Dir)    -- change working directory
flush()    -- flush any messages sent to the shell
help()     -- help info
i()        -- information about the system
ni()       -- information about the networked system
i(X,Y,Z)   -- information about pid X,Y,Z
l(Module)  -- load or reload module
lc([File]) -- compile a list of Erlang modules
ls()       -- list files in the current directory
ls(Dir)    -- list files in directory Dir
m()        -- which modules are loaded
m(Mod)     -- information about module mod
memory()   -- memory allocation information
memory(T)  -- memory allocation information of type t
nc(File)   -- compile and load code in file on all nodes
nl(Module) -- load module on all nodes
pid(X,Y,Z) -- convert X,Y,Z to a Pid
pwd()      -- print working directory
q()        -- quit - shorthand for init:stop()
regs()     -- information about registered processes
nregs()    -- information about all registered processes
xm(M)      -- cross reference check a module
y(File)    -- generate a Yecc parser
** commands in module i (interpreter interface) **
ih()       -- print help for the i module
true
5> 

Perintah-perintah di erl


Ada banyak perintah-perintah di erl yang bisa kita gunakan dan secara sepintas bisa kita lihat pada pembahasan tentang help(). Beberapa diantaranya akan kita bahas di bawah ini.

b() - digunakan untuk menampilkan variabel-variabel Erlang yang telah kita definisikan:

23> Versi = '4.8'.
'4.8'
24> b().
Versi = '4.8'
ok
25> 

f() - digunakan untuk menghapus semua definisi variabel:

25> f().
ok
26> b().
ok
27> 

f(X) - digunakan untuk menghapus definisi variabel X:

29> Versi = '4.8'.
'4.8'
30> b().
Versi = '4.8'
ok
31> f(Versi).     
ok
32> b().     
ok
33> 

h() - digunakan untuk menampilkan history perintah yang kita ketikkan (dan hasilnya).
history(N) - digunakan untuk menetapkan jumlah penyimpanan history sebanyak N perintah.
results(N) - digunakan untuk menetapkan jumlah penyimpanan hasil sebanyak N hasil perintah.
c(File) - digunakan untuk mengkompilasi file .erl menjadi ,beam sekaligus me-load modul yang ada pada file tersebut di sesi erl yang aktif. Ada beberapa cara yang bisa dilakukan:

1> c('tut1.erl').
{ok,tut1}
2> c(tut1).
{ok,tut1}
3> c(tut1.erl).
{ok,tut1}
4> 

i() - digunakan untuk menampilkan informasi tentang sistem Erlang yang tersedia.
ni() - digunakan untuk menampilkan informasi tentang sistem network Erlang yang tersedia.
pwd() - menampikan direktori aktif saat ini.
l(Module) - digunakan untuk me-load modul
ls() - digunakan untuk menampilkan daftar file dan direktori di direktori aktif saat ini.
ls(Dir) - digunakan untuk menampilkan daftar file dan direktori di direktori Dir.
m() - digunakan untuk menampilkan daftar modul yang di-load:

2> m().
Module                File
application           /usr/lib/erlang/lib/kernel-2.13.5/ebin/application.beam
application_controll  /usr/lib/erlang/lib/kernel-2.13.5/ebin/application_controller.beam
application_master    /usr/lib/erlang/lib/kernel-2.13.5/ebin/application_master.beam
beam_lib              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/beam_lib.beam
c                     /usr/lib/erlang/lib/stdlib-1.16.5/ebin/c.beam
code                  /usr/lib/erlang/lib/kernel-2.13.5/ebin/code.beam
code_server           /usr/lib/erlang/lib/kernel-2.13.5/ebin/code_server.beam
dict                  /usr/lib/erlang/lib/stdlib-1.16.5/ebin/dict.beam
edlin                 /usr/lib/erlang/lib/stdlib-1.16.5/ebin/edlin.beam
erl_distribution      /usr/lib/erlang/lib/kernel-2.13.5/ebin/erl_distribution.beam
erl_eval              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/erl_eval.beam
erl_internal          /usr/lib/erlang/lib/stdlib-1.16.5/ebin/erl_internal.beam
erl_lint              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/erl_lint.beam
erl_parse             /usr/lib/erlang/lib/stdlib-1.16.5/ebin/erl_parse.beam
erl_prim_loader       preloaded
erl_scan              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/erl_scan.beam
erlang                preloaded
error_handler         /usr/lib/erlang/lib/kernel-2.13.5/ebin/error_handler.beam
error_logger          /usr/lib/erlang/lib/kernel-2.13.5/ebin/error_logger.beam
error_logger_tty_h    /usr/lib/erlang/lib/stdlib-1.16.5/ebin/error_logger_tty_h.beam
ets                   /usr/lib/erlang/lib/stdlib-1.16.5/ebin/ets.beam
file                  /usr/lib/erlang/lib/kernel-2.13.5/ebin/file.beam
file_io_server        /usr/lib/erlang/lib/kernel-2.13.5/ebin/file_io_server.beam
file_server           /usr/lib/erlang/lib/kernel-2.13.5/ebin/file_server.beam
filename              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/filename.beam
gb_sets               /usr/lib/erlang/lib/stdlib-1.16.5/ebin/gb_sets.beam
gb_trees              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/gb_trees.beam
gen                   /usr/lib/erlang/lib/stdlib-1.16.5/ebin/gen.beam
gen_event             /usr/lib/erlang/lib/stdlib-1.16.5/ebin/gen_event.beam
gen_server            /usr/lib/erlang/lib/stdlib-1.16.5/ebin/gen_server.beam
global                /usr/lib/erlang/lib/kernel-2.13.5/ebin/global.beam
global_group          /usr/lib/erlang/lib/kernel-2.13.5/ebin/global_group.beam
group                 /usr/lib/erlang/lib/kernel-2.13.5/ebin/group.beam
heart                 /usr/lib/erlang/lib/kernel-2.13.5/ebin/heart.beam
hipe_unified_loader   /usr/lib/erlang/lib/kernel-2.13.5/ebin/hipe_unified_loader.beam
inet                  /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet.beam
inet_config           /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet_config.beam
inet_db               /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet_db.beam
inet_gethost_native   /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet_gethost_native.beam
inet_parse            /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet_parse.beam
inet_udp              /usr/lib/erlang/lib/kernel-2.13.5/ebin/inet_udp.beam
init                  preloaded
io                    /usr/lib/erlang/lib/stdlib-1.16.5/ebin/io.beam
io_lib                /usr/lib/erlang/lib/stdlib-1.16.5/ebin/io_lib.beam
io_lib_format         /usr/lib/erlang/lib/stdlib-1.16.5/ebin/io_lib_format.beam
io_lib_pretty         /usr/lib/erlang/lib/stdlib-1.16.5/ebin/io_lib_pretty.beam
kernel                /usr/lib/erlang/lib/kernel-2.13.5/ebin/kernel.beam
kernel_config         /usr/lib/erlang/lib/kernel-2.13.5/ebin/kernel_config.beam
lists                 /usr/lib/erlang/lib/stdlib-1.16.5/ebin/lists.beam
net_kernel            /usr/lib/erlang/lib/kernel-2.13.5/ebin/net_kernel.beam
orddict               /usr/lib/erlang/lib/stdlib-1.16.5/ebin/orddict.beam
ordsets               /usr/lib/erlang/lib/stdlib-1.16.5/ebin/ordsets.beam
os                    /usr/lib/erlang/lib/kernel-2.13.5/ebin/os.beam
otp_ring0             preloaded
packages              /usr/lib/erlang/lib/kernel-2.13.5/ebin/packages.beam
prim_file             preloaded
prim_inet             preloaded
prim_zip              preloaded
proc_lib              /usr/lib/erlang/lib/stdlib-1.16.5/ebin/proc_lib.beam
proplists             /usr/lib/erlang/lib/stdlib-1.16.5/ebin/proplists.beam
ram_file              /usr/lib/erlang/lib/kernel-2.13.5/ebin/ram_file.beam
rpc                   /usr/lib/erlang/lib/kernel-2.13.5/ebin/rpc.beam
sets                  /usr/lib/erlang/lib/stdlib-1.16.5/ebin/sets.beam
shell                 /usr/lib/erlang/lib/stdlib-1.16.5/ebin/shell.beam
shell_default         /usr/lib/erlang/lib/stdlib-1.16.5/ebin/shell_default.beam
standard_error        /usr/lib/erlang/lib/kernel-2.13.5/ebin/standard_error.beam
supervisor            /usr/lib/erlang/lib/stdlib-1.16.5/ebin/supervisor.beam
supervisor_bridge     /usr/lib/erlang/lib/stdlib-1.16.5/ebin/supervisor_bridge.beam
sys                   /usr/lib/erlang/lib/stdlib-1.16.5/ebin/sys.beam
unicode               /usr/lib/erlang/lib/stdlib-1.16.5/ebin/unicode.beam
user_drv              /usr/lib/erlang/lib/kernel-2.13.5/ebin/user_drv.beam
user_sup              /usr/lib/erlang/lib/kernel-2.13.5/ebin/user_sup.beam
zlib                  preloaded
ok
3> 

m(Module) - digunakan untuk menampilkan informasi tentang modul Module:

4> m(application).
Module application compiled: Date: February 22 2010, Time: 19.36
Compiler options:  [{cwd,"/net/isildur/ldisk/daily_build/otp_prebuild_r13b04.2010-02-22_20/otp_src_R13B04/lib/kernel/src"},
                    {outdir,"/net/isildur/ldisk/daily_build/otp_prebuild_r13b04.2010-02-22_20/otp_src_R13B04/lib/kernel/src/../ebin"},
                    {i,"/net/isildur/ldisk/daily_build/otp_prebuild_r13b04.2010-02-22_20/otp_src_R13B04/lib/kernel/src/../include"},
                    debug_info]
Object file: /usr/lib/erlang/lib/kernel-2.13.5/ebin/application.beam
Exports: 
behaviour_info/1              module_info/1
get_all_env/0                 permit/2
get_all_env/1                 set_env/3
get_all_key/0                 set_env/4
get_all_key/1                 start/1
get_application/0             start/2
get_application/1             start_boot/1
get_env/1                     start_boot/2
get_env/2                     start_type/0
get_key/1                     stop/1
get_key/2                     takeover/2
info/0                        unload/1
load/2                        unset_env/2
load/1                        unset_env/3
loaded_applications/0         which_applications/0
module_info/0                 which_applications/1
ok
5> 

ih() - digunakan untuk menampilkan informasi tentang modul i:

5> ih().
iv()         -- print the current version of the interpreter
im()         -- pop up a monitor window
ii(Mod)      -- interpret Mod(s) (or AbsMod(s))
ii(Mod,Op)   -- interpret Mod(s) (or AbsMod(s))
                use Op as options (same as for compile)
iq(Mod)      -- do not interpret Mod(s)
ini(Mod)     -- ii/1 at all Erlang nodes
ini(Mod,Op)  -- ii/2 at all Erlang nodes
inq(Mod)     -- iq at all Erlang nodes
ib(Mod,Line) -- set a break point at Line in Mod
ib(M,F,Arity)-- set a break point in M:F/Arity
ibd(Mod,Line)-- disable the break point at Line in Mod
ibe(Mod,Line)-- enable the break point at Line in Mod
iba(M,L,Action)-- set a new action at break
ibc(M,L,Action)-- set a new condition for break
ir(Mod,Line) -- remove the break point at Line in Mod
ir(M,F,Arity)-- remove the break point in M:F/Arity
ir(Mod)      -- remove all break points in Mod
ir()         -- remove all existing break points
il()         -- list all interpreted modules
ip()         -- print status of all interpreted processes
ic()         -- remove all terminated interpreted processes
ipb()        -- list all break points
ipb(Mod)     -- list all break points in Mod
ia(Pid)      -- attach to Pid
ia(X,Y,Z)    -- attach to pid(X,Y,Z)
ia(Pid,Fun)  -- use own Fun = {M,F} as attach application
ia(X,Y,Z,Fun)-- use own Fun = {M,F} as attach application
iaa([Flag])  -- set automatic attach to process
                Flag is init,break and exit
iaa([Fl],Fun)-- use own Fun = {M,F} as attach application
ist(Flag)    -- set stack trace flag
                Flag is all (true),no_tail or false
ok
6> 

Beberapa perintah lainnya (misalnya yang terkait dengan record) sebaiknya dipelajari saat mempelajari modul yang terkait.

Menggunakan erl Untuk Membaca Dokumentasi


Untuk membaca dokumentasi, kita bisa menggunakan argumen -man pada saat memanggil erl sebagai berikut:

[bpdp@bpdp-arch erlang]$ erl -man erl

erl(1)                                          User Commands                                         erl(1)

NAME
       erl - The Erlang Emulator

DESCRIPTION
       The  erl  program  starts  an Erlang runtime system. The exact details (for example, whether erl is a
       script or a program and which other programs it calls) are system-dependent.

       Windows users probably wants to use the werl program instead, which  runs  in  its  own  window  with
       scrollbars  and supports command-line editing. The erl program on Windows provides no line editing in
       its shell, and on Windows 95 there is no way to scroll back  to  text  which  has  scrolled  off  the
       screen. The erl program must be used, however, in pipelines or if you want to redirect standard input
       or output.

EXPORTS
       erl arguments

              Starts an Erlang runtime system.

              The arguments can be divided into emulator flags , flags and plain arguments :

...
...

Pada bagian bawah, biasanya terdapat SEE ALSO yang berisi beberapa manpage yang juga bisa anda panggil dengan cara seperti di atas:

...
...
         ERL_EPMD_PORT :
           This  environment  variable can contain the port number to use when communicating with epmd . The
           default port will work fine in most cases. A different port can be specified to  allow  nodes  of
           independent  clusters to co-exist on the same host. All nodes in a cluster must use the same epmd
           port number.

SEE ALSO
       init(3) , erl_prim_loader(3) , erl_boot_server(3) , code(3) , application(3) ,  heart(3)  ,  net_ker‐
       nel(3) , auth(3) , make(3) , epmd(1) , erts_alloc(3)

Ericsson AB                                      erts 5.7.5                                           erl(1)

Catatan: fasilitas ini hanya tersedia di OS berbasis UNIX (Linux, BSD, dan lain-lain). Windows tidak menyediakan fasilitas ini karena memang keterbatasan dari Windows yang tidak menyediakan sistem manpage.

0 comments:

Post a Comment