13.07.2015 Views

BAB II LANDASAN TEORI

BAB II LANDASAN TEORI

BAB II LANDASAN TEORI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>BAB</strong> <strong>II</strong><strong>LANDASAN</strong> <strong>TEORI</strong>2.1 SEKILAS TENTANG BAHASA ERLANGErlang merupakan bahasa pemrograman untuk keperluan umum yang sifatnyakonkuren. Bahasa ini didesain oleh perusahaan Ericsson untuk mendukung aplikasiyang terdistribusi, soft-real-time dan juga non-stop. Erlang memang awalnyamerupakan bahasa proprietary di dalam lingkungan Ericsson, tetapi akhirnyadikeluarkan secara open source pada tahun 1998. Implementasi Erlang oleh Ericssonsecara utama sifatnya interpreter, tetapi ia juga dilengkapi dengan kompiler yangbernama HiPE (tetapi tidak didukung oleh setiap platform) [1].Membuat dan mengatur proses di dalam Erlang merupakan hal yang sangatmudah, dimana terkadang threads sering dianggap sebagai sesuatu yang rumit padabeberapa bahasa pemrograman yang lainnya.Erlang berasal dari nama A. K. Erlang. Hal ini sering kali menimbulkan salahkaprah dimana orang sering berpikir Erlang adalah singkatan dari Ericsson Language.Wajar saja, karena memang Erlang adalah bahasa yang digunakan secara intensif dikalangan Ericsson [1].5


62.1.1 KARAKTERISTIK ERLANGKarakteristik dan atribut yang dimiliki oleh antara lain [2]:1. Concurrent, Erlang memiliki proses yang berbasiskan konkurensi.Mekanisme konkurensi di dalam Erlang dapat dikategorikan light-weightproses. Sebagai contoh proses dalam erlang hanya membutuhkan memoriyang sedikit. Selain itu membuat dan menghapus suatu proses hanyamembutuhkan perhitungan yang sedikit begitu juga dengan pengiriman pesanantar proses.2. Real-time, Erlang dimaksudkan untuk pemrograman suatu sistem yang Realtimedi mana dalam sistem tersebut dibutuhkan waktu respon yang sangatcepat.3. Continuous operation, Erlang memungkinkan penggantian kode walaupunsistem sedang berjalan dan juga memungkinkan untuk menjalankan suatukode yang lama atau yang baru dalam waktu bersamaan. Karakteristiktersebut sangat berguna dalam suatu sistem yang non-stop.4. Memory management, Memori dialokasikan secara otomatis ketikadiperlukan, dan didealokasi apabila tidak lagi digunakan.5. Distribution, Sistem terdistribusi dapat dilakukan dengan mudah denganmenggunakan Erlang.


7Erlang sangat cocok untuk aplikasi yang membutuhkan pengolahan sistemterdistribusi, soft real time, sistem konkurensi, misal untuk sistem telekomunikasiuntuk mengendalikan switch atau pengkonversi protokol. Juga untuk server untukaplikasi Internet, misal mail server, WAP server. Bisa juga untuk aplikasitelekomunikasi, misal untuk messaging layanan mobil. Erlang bisa juga digunakanaplikasi database yang membutuhkan persyaratan soft real time [3].Lingkungan pemrograman Erlang telah menyediakan pustaka (library)lengkapyang disebut OTP (Open Telecommunication Platform). Pustaka ini menyediakandukungan yang dapat digunakan untuk menyelesaikan masalah jaringan dan sistemtelekomunikasi. Pustaka OTP yang menyertai Erlang telah memberikan dukunganseperti [3] :• Dukungan O&M yaitu untuk penyediaan operasi SASL, EVA, INETS andSNMP dan berbagai penanganan perawatan sistem melalui web browser atauSNMP.• Dukungan CORBA• Dukungan Database, menggunakan Mnesia dan Mnemosnye untuk databaserealtime yang ada di RAM. Ada juga driver untuk database ODBC.• ASN.1. tersedia kompiler ASN.1 yang menghasilkan kode Erlang. ASN.1adalah enkode yang banyak digunakan di telekomunikasi• Pustaka standar, yang berisi koleksi berbagai modul, misal untuk string, list,regular exporession dan berbagai fungsi standard lainnya.


8• Komponen struktur, yang dapat digunakan untuk membuat subsystem clientserver, state machine dan supervised fault-tolerant system.• Dukugan GUI dan grafik.Erlang juga cukup kecil untuk dapat dijalankan di lingkungan embedded,misal yang menggunakan sistem operasi seperti Linux atau VxWorks. Erlang dapatdijalankan di prosesor 32 bit dengan RAM 16 MB. Ukuran mesin virtual Erlanghanyalah 2 MB. Dengan ukuran 2 MB ini sudah terdiri dari mesin virtual (beamemulator), dan hampir sebagian besar pustaka aseperti stdlib, sasl, kernel, inets danberbagai pustaka lainnya. Tapi tentu saja perlu dilakukan kompilasi yang takmenyertakan informasi debug dan dikompres[3]..


92.2 DASAR PEMROGRAMAN ERLANG2.2.1 Modul2.2.1.1 Modul SyntaxPengkodean Erlang dipisah dalam beberapa modul. Sebuah modul berisiatribut dan deklarasi fungsi, masing-masing diakhiri dengan titik(.). Contoh :-module(m).-export([fact/1]).% module attribute% module attributefact(N) when N>0 -> % beginning of function declarationN * fact(N-1); % |fact(0) -> % |1. % end of function declaration2.2.1.2 Modul AttributesAtribut modul mendefinisikan beberapa properti dari sebuah modul. Sebuahatribut modul terdiri dari sebuah tag dan sebuah nilai.-Tag(Value).%Tag harus atom


102.2.1.3 Pre-Defined Module AttributesModul yang sudah tersedia dalam Erlang harus diletakkan sebelum deklarasifungsi apapun. Contoh :• -module(Module). %Deklarasi modul. Untuk mendefinisikan namamodul.• -export(Functions) %Mendefinisikan fungsi yang dapat digunakandiluar modul tersebut• -import(Module, Functions). %Mengambil fungsi dari modul yang lain.• -compile(Options). %Compiler options.2.2.2 Fungsi2.2.2.1 Sintak Deklarasi FungsiBentuk umum :Name(Pattern1A,…..PatternN) ->BodyA;…;Name(Pattern1B,…..PatternN) ->BodyB;…;Nama fungsi merupakan atom. Setiap argument merupakan pattern. Contoh :fact(N) when N>0 ->N * fact(N-1);% first clause head% first clause bodyfact(0) ->% second clause head1. % second clause body


112.2.2.2 Fungsi Built-InFungsi built-in merupakan fungsi yang sudah disediakan. Contoh :1> size({a,b,c}).32> atom to list('Erlang')."Erlang"2.2.3 Expressions2.2.3.1 VariableVariabel harus dimulai dengan huruf besar atau underscore (_) dan dapatmengandung karakter alphanumeric, underscore dan @. Contoh :XName1PhoneNumberPhone_number__HeightVariabel anynomous dilambangkan dengan underscore (_) dan dapat digunakanketika variable dibutuhkan tapi nilainya diabaikan. Contoh :[H|-] = [1,2,3]


122.2.3.2 IfSama dengan bahasa pemrograman yang lain if digunakan untuk pemilihan.Bentuk umum :ifEndGuardSeq1 ->Body1;...;GuardSeqN ->BodyNContoh :is greater than(X, Y) ->ifX>Y ->true;true ->falseend% works as an 'else' branch


132.2.3.3 CaseBentuk umum :case Expr ofPattern1 [when GuardSeq1] ->Body1;...;PatternN [when GuardSeqN] ->BodyNEndContoh :is valid signal(Signal) ->case Signal of{signal, What, From, To} ->true;{signal, What, To} ->true;Else ->falseend.2.2.3.4 SendSend dilambangkan dengan tanda seru (!). digunakan untuk mengirim pesanantar proses. Bentuk umum :Expr1!Expr2Mengirim nilai Expr2 sebagai pesan ke Expr1. Expr1 harus Pid, nama yang telahderegister(atom) atau tuple {Name,Node}. Dimana Name dan Node adalah atom.


142.2.3.5 ReceiveDigunakan untuk menerima pesan.Bentuk umum :receivePattern1 [when GuardSeq1] ->Body1;...;PatternN [when GuardSeqN] ->BodyNendContoh :wait for onhook() ->receiveonhook ->disconnect(),idle();{connect, B} ->B ! {busy, self()},wait_for_onhook()end.


152.2.4 Macro2.2.4.1 Mendefinisikan dan menggunakan MacroSebuah macro didefinisikan dengan cara berikut :-define(Const, Replacement).-define(Func(Var1,...,VarN), Replacement).Definisi macro ditempatkan diantara atribut dan deklarasi fungsi dari sebuahmodul. Jika macro digunakan oleh beberapa modul, disarankan untuk menempatkandefinisi macro dalam file yang dinclude.Macro digunakan dengan cara berikut :?Const?Func(Arg1,...,ArgN)Macro dipisahkan selama dikompilasi. Sebuah macro simple ?Const akan dirubahdengan ReplacementContoh :-define(TMEOUT,200).…


16Call(Request) ->Server:call(refserver, Request, ?TIMEOUT).?TIMEOUT akan diganti dengan ‘200’ sehingga menjadi :Call(Request) ->Server:call(refserver, Request, 200).2.2.5 Concurrent Programming2.2.5.1 ProsesSalah satu alasan utama kenapa kita menggunakan erlang daripada bahasafungsional yang lain ialah kemampuan erlang untuk menangani konkurensi danpemrograman terdistribusi. Dengan konkurensi artinya suatu program yang dapatmenangani beberapa tugas dalam waktu yang sama. Sebagai contoh system operasimoderen memungkinkan kita menggunakan aplikasi word, winamp, dan proses printyang semuanya berjalan bersamaan. Dalam erlang kita menyebut setiap tugas yangdijalankan sebagai proses [4].


172.2.5.2 Komunikasi antar ProsesDalam contoh berikut kita membuat dua proses yang akan saling berhubungansatu sama lain :module(tut15).-export([start/0, ping/2, pong/0]).ping(0, Pong_PID) ->Pong_PID ! finished,io:format("ping finished~n", []);ping(N, Pong_PID) ->Pong_PID ! {ping, self()},receivepong ->io:format("Ping received pong~n", [])end,ping(N - 1, Pong_PID).pong() ->receivefinished ->io:format("Pong finished~n", []);{ping, Ping_PID} ->io:format("Pong received ping~n", []),Ping_PID ! pong,pong()end.start() ->Pong_PID = spawn(tut15, pong, []),spawn(tut15, ping, [3, Pong_PID]).1> c(tut15).{ok,tut15}2> tut15: start().


19pong()end.Kode receive memungkinkan suatu proses untuk menunggu pesan dari proses yanglain. Mempunyai bentuk umum :receivepattern1 ->actions1;pattern2 ->actions2;....patternNactionsNend.Dalam keadaan tersebut proses “pong” sedang menunggu pesan. Jika atom finishedditerima maka “pong” menampilkan kalimat “Pong finished” pada shell dan tidak adalagi yang dilakukan sehingga program akan dihentikan. Jika “pong” menerima pesandengan format :{ping, Ping_PID}Maka proses “pong” akan menampilkan kalimat “Pong received ping” kemudianmengirimkan atom pong ke proses “ping” dengan kode sebagai berikut :


20Ping_PID ! pongSetelah mengirimkan pesan ke proses “ping”, “pong” akan memangil fungsi pong()kembali yang menyebabkan “pong” dalam keadaan menunggu pesan kembali.Sekarang pada proses “ping” klausa kedua akan dijalankan , karena argument yangditerima yaitu :tut15:ping(3, Pong_PID) dan bukan tut15:ping(0, Pong_PID).Klausa kedua tersebut mengirimkan pesan ke “pong”Pong_PID ! {ping, self()},self() disini berfungsi untuk menghasilkan nilai pid dari proses yang menjalankanfungsi self() tersebut. Dalam kasus ini pid dari “ping”. Kemudian “ping” akanmenunggu balasan dari “pong”receivepong ->io:format("Ping received pong~n", [])end,dan menampilkan kalimat “Ping received pong” apabila balasan tersebut sudahditerima. Setelah itu “ping” memanggil fungsi ping() kembali


21ping(N - 1, Pong_PID)N-1 mengakibatkan argument yang pertama dikurangi dengan satu (N-1) sampaihasilnya 0. Apabila keadaan tersebut terpenuhi maka “ping” akan menjalankan klausayang pertama, yaitu :ping(0, Pong_PID) ->Pong_PID ! finished,io:format("ping finished~n", []);Atom finished dikirim ke proses “pong” dan kalimat “ping finished” akanditampilkan dan kemudian proses dihentikan karena sudah tidak ada lagi yangdilakukan2.2.6 Pemrograman Terdistribusi pada ErlangSistem Erlang yang akan berkomunikasi harus memiliki magic cookie yangsama. Cara yang paling mudah ialah dengan membuat file yang bernama“.erlang.cookie” yang ditempatkan pada direktori home. Pada windows direktorihome ialah yang ditunjukkan oleh $HOME [4]. Contoh pembuatan magic cookiepada shell Unix dan Linux :$ cd$ cat > .erlang.cookiethis_is_very_secret


22$ chmod 400 .erlang.cookiePerintah chmod di atas menjadikan file .erlang.cookie hanya dapat diaksesoleh pemilik file tersebut dan ini merupakan persyaratan.Untuk menjalankan sistem erlang yang ingin berhubungan dengan sistemerlang yang lain maka sistem tersebut harus diberi nama dengan perintah :Bu : erl -sname my_name(catatan: Perintah erl –sname mengasumsikan bahwa semua node yang berjalanberada dalam satu domain apabila ingin berhubungan dengan domain yang berbedadapat digunakan perintah erl –name nama_lengkap, contoh :erl –name ryan@www.supernova.or.id )Apabila kita ingin bereksperimen dengan sistem erlang terdistribusi , tapi kitahanya mempunyai satu komputer, kita masih bisa menjalankan dua sistem erlangyang terpisah dalam satu komputer tetapi harus dengan nama yang berbeda. Setiapsistem erlang yang berjalan pada sebuah komputer disebut node.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!