Compiler






TEKHNIK COMPILER

Compiler Construction




Teknik kompilasi telah lama diberikan di lingkungan pendidikan tinggi bidang komputer di Indonesia. Pembahasan dalam mata kuliah ini biasanya berkisar pada teori automata, teori kompilasi, teori grammar. Praktek teknik kompilasi pun telah diberikan di lingkungan laboratorium, walau biasanya masih terbatas pada demonstrasi hal teori, ataupun sekedar pengenalan kompiler yang ada atau banyak digunakan. Beberapa universitas telah mulai memperkenalkan penggunaan perangkat pembangun kompiler.Telah banyak mahasiswa menggunakan dan memanfaatkan compiler/interpreter, tapi saat ini masih belum banyak muncul nama programmer Indonesia yang terlibat dalam proyek pembuatan compiler/interpreter. Mungkin hanya KILANG nya Prof. Dali S Naga (BASIC Indonesia), yang sempat terdengar, sayang sekarang sudah tidak ada jejaknya. Mungkin merilis KILANG dalam bentuk GPL seperti BWBASIC, adalah suatu langkah menarik untuk terus mengembangkan KILANG ini lebih lanjut.Memang ada sekelompok programmer Indonesia yang sempat akan merilis bahasa pemrograman "BATAK" tetapi hingga saat ini belum terdengar kembali. Bahasa pemrograman, JAVA, BALI, MADURA, hanyalah namanya saja yang berbau Indoensia, tapi sedikit atau malah tidak ada keterlibatan pengembang dari Indonesia.Tentu saja akan timbul pertanyaan "apa yang salah dalam pengajaran kompilasi ???" (INGAT SAYA TIDAK INGIN MENDISKREDITKAN SIAPAPUN DALAM PERNYATAAN INI). Hanya mencoba mencari langkah perbaikan yang mungkin bisa diterapkan.Walaupun sedikit sekali atau nyaris tidak ada "lowongan pekerjaan" yang membutuhkan kemampuan mengembangkan compiler ini (silahkan baca di koran ataupun majalah), bukan berarti pengetahuan itu sama sekali tak dibutuhkan dalam dunia pemrograman sehari-hari. Pada dasarnya pengetahuan pembuatan kompiler (compiler construction) ini merupakan pengetahuan dasar komputasi yang sangat baik sekali. Pengetahuan ini dimanfaatkan pada beragam aplikasi nantinya. Misal teknik parsing, pengenalan pola teks, optimasi kode dan lain sebagainya. Bahkan suatu database engine pun di bagian "front end" selalu menggunakan parsing ini. Pengetahuan tentang kompilasi akan dapat memberikan landasan bagi programmer untuk menyusun program yang efektif dan efisien.Ketika seseorang melakukan pemrograman, sebetulnya secara tidak sadar dia akan melakukan proses penambahan suatu bahasa. Misal pembuatan suatu fungsi (ataupun prosedur) pada dasarnya merupakan suatu proses "penambahan kosa-kata" dari bahasa pemrograman tersebut. Dari yang tadinya tidak memiliki fungsi tersebut hingga akhirnya ditambahkan suatu "vocabulary" untuk melakukan suatu fungsi tersebut. Untuk itulah pemahaman penyusunan kompiler merupakan suatu dasar yang utama dalam bidang ilmu komputer.




REFACTORING: Sebuah Kosep




Salah satu faktor yang menghabiskan sumber daya terbesar dalam sebuah proses pengembangan aplikasi adalah saat menjaga kelangsungan hidupnya. Seiring dengan diimplementasikannya dalam lingkungan operasi secara riil, sebuah aplikasi atau lebih luas lagi, sebuah sistem dituntut agar senantiasa mampu memenuhi kebutuhan yag terus berkembang, jauh dari saat aplikasi tersebut dibangun, dusamping tuntutan untuk beroperasi secara baik dan benar.Untuk memebuhi tuntutan kebutuhan tersebut, perbaikan, penyesuaian atas rule yang digunakan, ataupun fitur-fitur baru ditambahkan ke dalam aplikasi tersebut. Permasalahannya, hal-hal tersebut menyebabkan tingkat kompleksitas kode atas aplikasi tersebut menjadi semakin tinggi, dan tingginya kompleksitas tersebut membuat semakin sulit bagi developer untuk terus menjaga kelangsungan hidup aplikasi tersebut.Kompleksitas ini menjadi semakin bertambah lagi dengan dirilisnya kompiler yang lebih baru ataupun software development kit (SDK) / third-party library yang kerap kali membawa perbaikan, penyesuaian, perubahan, ataupun penambahan fitur-fitur baru yang bahkan bisa saja hingga merubah perilaku kerjanya. Hal ini disebabkan tuntutan untuk memenuhi kebutuhan yang juga berkembang atas tool-tool tersebut.Bagi para developer Delphi tentunya masih bisa mengingat bagaimana perubahan yang terjadi ketika Borland merilis Delphi 6 atau bila aktif mengunakan library Developer Express ataupun FastReport masih bisa membayangkan bagaimana repotnya ketika hendak bermigrasi ke QGrid 4 dari versi sebelumnya ataupun migrasi dari FR 2.X ke versi 3 yang lebih baru.Ditambah lagi dengan kebiasaan kita sebagai developer yang umumnya cenderung mengguakan metode extreme programming yang secara lokal lebih dikenal sebagai HB (hajar bleh) programming, yang cenderung mempertinggi tingkat kompleksitas kode yang ada dan mengakibatkan aplikasi yang dibangun menjadi semakin sulit untuk dijaga kelangsungannya.Untuk mengurangi kompleksitas kode yang semakin tinggi ini, tentunya harus ada suatu teknik yang bisa digunakan developer agar dapat senantiasa menjaga aplikasi yang dibangun bisa tetap beradaptasi dengan kebutuhan yang terus berkembang dalam tingkat kompleksitas yang sedapat mungkin dijaga tetap rasional. Ada beberapa teknik yang dikenal saat ini, metode yang terbaru adalah dengan memanfaatkan modelling atau lebih dikenal dengan UML (unified modelling language), sementara konsep yang telah ada sebelumnya dikenal sebagai refactoring. Namun jika dilihat dari situasi dimana aplikasi sudah ada dan terdapat keharusan agar dapat senantiasa responsif/tanggap menjawab tuntutan pemenuhan kebutuhan yang berkembang dalam waktu yang relatif singkat, metode refactoring sepertinya bisa menjadi jawaban yang lebih rasional atas permasalahan-permasalahan di atas.Refactoring sederhananya merupakan teknik untuk memecahkan tingkat kompleksitas kode ke dalam layer-layer class abstraction yang lebih sederhana dan rasional. Proses penyederhanaan ini pun bisa berbagai macam tingkatannya, dimulai dari yang terkecil, memecah sebuah fungsi yang kompleks ke dalam fungsi-fungsi yang lebih sederhana, merestrukturisasi class abstraction dalam sebuah object class yang kompleks, ataupun memecah sebuah modul ke dalam sub-sub modul yang lebih sederhana.Namun demikian, sedapat mungkin diusahakan agar proses penyederhanaan ini tidak mempengaruhi atau bahkan merubah perilaku kerja aplikasi secara keseluruhan. Hal ini sangat penting karena tidak jarang keinginan untuk memecah kompleksitas kode dengan cara refactoring ini justru malah membuat kode menjadi semakin kompleks dan menyulitkan developer untuk melakukan tracking saat akan melakukan perubahaan terhadap kode tersebut di kemudian hari. Refactoring harus diusahakan sedapat mungkin tidak merubah perilaku ataupun code-visibility dari sisi developer, hal ini bisa dihindari jika dalam proses refactoring tersebut developer bisa secara cermat meletakkan fungsi/method dalam tingkatan visibility dan abstraction yang sesuai sehingga tetap mudah jika suatu saat harus melakukan penyesuaian atas kode tersebut.Dalam implementasinya di Delphi, untuk manajemen code-visibility atas sebuah/beberapa fungsi pada tipikal procedural programming bisa dilakukan dengan cara menghindari deklarasi atas sub-fungsi yang hanya terkait dalam unit tersebut pada blok Interface. Kompiler delphi sebenarnya mendukung fungsi di dalam fungsi, namun jika tidak benar-benar pada kasus yang spesifik, sebaiknya hindari cara seperti ini karena cenderung membuat sulit developer dalam melakukan tracing atas kode tersebut.Pada impelementasi dengan kompiler modern saat ini, sedapat mungkin gunakan model OOP dalam menyelesaikan permasalahan anda, tidak hanya karena karena fitur-fitur yang dimiliki oleh model OOP tersebut, melainkan pula OOP sangat membantu mempermudah developer memanajemen code-visibility atas object yang dibuatnya. Sedapat mungkin hanya meletakkan field-field yang benar-benar bersifat spesifik pada blok private declaration dan secara gunakan property untuk mengakses field tersebut. Bilamana dibutuhkan action atas read ataupun write value terhadap field tersebut, hendaknya diatur agar fungsi yang terkait bersifat expandable untuk meningkatkan fleksibilitas kode yang dibuat tersebut. sebagai contoh:TAppType = (atUnknown, atGLedger, atAcctRcv, atAcctPyb, atPayroll);TMyCustomClass = class(TMyBaseClass)privatefunction GetAppType: TAppType;protectedfunction InternalGetAppType: TAppType; virtual;publicproperty ApplicationID: TAppType read GetAppType;end;function TMyCustomClass.InternalGetAppType: TAppType; virtual;beginResult := atUnknown;end;function TMyCustomClass.GetAppType: TAppType;beginResult := InternalGetAppType;end;Dari contoh di atas kode terlihat semakin panjang dan inefisien untuk mendapatkan nilai atas property ApplicationID, namun keuntungan model seperti ini adalah jika suatu saat anda harus menambahkan level abstraksi baru atas class tersebut dan membutuhkan tambahan task atas fungsi pada property tersebut, hal ini masih bisa anda lakukan dengan cara menginherit fungsi InternalGetAppType, anda tidak bisa menginherit fungsi GetAppType secara langsung karena kompiler mensyaratkan fungsi yang digunakan pada sebuah property bersifat static function.Sebenarnya ada banyak hal lagi yang bisa teknik-teknik yang bisa dilakukan untuk memecahkan tingkat kompleksitas ini, dan saya yakin untuk hal ini anda bisa mencoba mengeksplorasinya secara lebih baik.
Turbo C++

Turbo C++ merupakan kompiler C++ dengan IDE yang terintegrasi buatan Borland, terkenal karena kecepatannya dalam kompilasi dan lingking - karena itu diistilahkan dengan "Turbo". Produk ini merupakan bagian dari keluarga kompiler borland yang sangat populer termasuk Turbo Pascal, Turbo Basic, Turbo Prolog, dan Turbo C. Turbo C++ merupakan suksesor dari Turbo C yang merupakan pengembangan lebih lanjut dalam keseragaman tata cara dalam kompiler seperti halnya cara yang terdapat pada Turbo Pascal 5.5 dalam menambahkan fungsionalitas object pada versi-versi Turbo Pascal sebelumnya. Namun tidak seperti halnya Turbo Pascal, Turbo C++ senantiasa mengikuti dan mempertahankan standar-standar yang berlaku pada bahasa C++.

Keistimewaan

Dibandingkan dengan perangkat lunak sejenis pada masa itu, Turbo C++ memiliki beberapa keistimewaan dibandingkan dengan yang lain. Turbo C++ membebaskan programmer dari keharusan menuliskan program yang rumit, sebab berbasis pemrograman berorientasi objek (OOP, Object Oriented Programming). Hal ini memungkinkan program lebih cepat dikembangkan.

Sejarah versi

Rilis pertama dari Turbo C++ pertama kali tersedia pada tahun 1988, saat MS-DOS menguasai personal komputer. Produk ini dibundel dalam versi 1.0, berjalan pada OS/2 dan versi 1.01, berjalan pada MS-DOS. Pada perkembangannya kompiler ini dapat pula digunakan untuk menghasilkan program-program COM dan EXE, dan di paketkan bersama Borland Turbo Assembler untuk prosesor Intel x86.

Turbo C++ 3.0 dirilis pada tahun 1992, dan datang pada saat-saat munculnya rilis Microsoft Windows 3.1. Turbo C++ 3.0 pada mulanya diperkenalkan sebagai kompiler untuk platform MS-DOS yang mendukung template, mampu digunakan untuk menghasilkan kode aplikasi dalam mode terproteksi, dan menghasilkan kode yang ditujukan untuk prosesor-prosesor intel sebelumnya, seperti prosesor Intel 80186.

Setelah Windows 3.1 mulai tersedia, Turbo C++ diperdagangkan dengan dukungan MS-Windows. IDE pertama yang berbasis windows adalah Turbo C++ for Windows, diikuti dengan Turbo C++ 3.1 dan Turbo C++ 4.5. Ada anggapan mungkin saja lompatan versi dari 1.x ke versi 3.x merupakan cara untuk menyelaraskan rilis Turbo C++ dengan versi-versi Microsoft Windows.

Pada akhirnya Turbo C++ digantikan oleh Borland C++ yang lebih lengkap dan kaya akan fitur, namun pada akhirnya menghilangkan fitur yang menjadi kesuksesan jajaran produk Turbo, seperti kecepatan kompilasi dan fasilits dari IDE yang sangat baik.

Turbo C++ v1.01 for DOS saat ini didistribusikan secara gratis oleh Borland, dan bisa didonwload dari website mereka sebagai software antik.




PELAJARAN PEMROGRAMAN KOMPUTER

Bagian Pertama
Tutorial ini untuk siapa saja, walaupun anda belum pernah melakukan pemrograman, atau jika andapun berpengalaman dalam pemrograman dengan bahasa pemrograman lain tapi ingin mempelajari bahasa C++, ada baiknya anda mengikuti penjelasan disini.
C++ adalah sebuah bahasa pemrograman yang memiliki banyak dialek, seperti bahasa orang yang banyak memiliki dialek. Dalam C++, dialek bukan disebabkan oleh karena si pembicara berasal dari Jepang atau Indonesia, melainkan karena bahasa ini memiliki beberapa kompiler yang berbeda. Ada empat kompiler umum yaitu : C++ Borland, C++ Microsoft Visual, C/386 Watcom, dan DJGPP. Anda dapat mendownload DJGPP atau mungkin saja anda telah memiliki kompiler lain.
Setiap kompiler ini agak berbeda. Setiap kompiler akan dapat menjalankan fungsi fungsi standar C++ ANSI/ISO, tetapi masing masing kompiler juga akan dapat menjalankan fungsi fungsi nonstandard (fungsi fungsi ini, agak mirip dengan ucapan yang tidak standar yang diucapkan orang diberbagai pelosok negeri. Sebagai contoh, di New Orleans kata median disebut neutral ground). Kadang kadang pemakaian fungsi nonstandard akan menimbulkan masalah pada saat anda hendak mengkompilasi kode sumber data (source code) (yaitu program berbahasa C++ yang ditulis oleh seorang programer) mempergunakan kompiler yang berbeda. Tutorial ini tidak terlepas dari masalah seperti itu.
Bila anda belum mempunyai sebuah kompiler, disarankan agar anda segera memiliki sebuah kompiler. Sebuah kompiler sederhana sudah cukup untuk dipergunakan oleh anda dalam mengikuti tutorial ini.
Bahasa pemrograman C++ adalah bahasa yang amat berbeda. Untuk kompiler C++ berbasis DOS, akan memerlukan beberapa kata kunci (keywords); keyword sendiri tidak cukup untuk difungsikan sebagai input dan output. Walau hampir semua fungsi dalam file library tampaknya bias diakses oleh header filenya. Coba kita lihat program sesungguhnya :#include int main() { cout<<"HEY, you, I'm alive! Oh, and Hello World!"; return 0; } Marilah kita lihat elemen dari program diatas. Tanda #include adalah sebuah prosesor pengarah yang mengatakan kepada kompiler untukmeletakan kode dari header file iostream.h kedalam program. Dengan menyertakan header file, anda dapat mengakses banyak fungsi fungsi berbeda. Dalam contoh diatas, fungsi cout memerlukan file iostream.h. Pada baris berikutnya yang penting adalah int main(). Baris ini mengatakan kepada kompiler bahwa ada sebuah fungsi bernama main, yang mana fungsi itu mengembalikan sebuah integer, sehingga diberi tanda int. Tanda kurung ({ dan }) menandakan awal dan akhir fungsi dalam program diatas dan menghentikan kode lainnya. Jika anda memakai bahasa Pascal, anda akan mempergunakan perintah BEGIN dan END. Baris berikutnya dari program diatas agak aneh. Jika anda menulis sebuah program mempergunakan bahasa lain, anda akan mengetahui bahwa perintah print akan menampilkan text di layar monitor. Dalam bahasa C++ tidaklah demikian, pemakaian fungsi cout dipakai untuk menampilkan text di layar monitor anda. Itu juga memakai tanda atau symbol <;<; , yang diketahui sebagai operator pemasukan ( insertion operators). Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan output sesuai dengan input anda. Tanda semicolon ditambahkan kedalam bagian akhir dari semua fungsi yang dipanggil dalam bahasa C++; tanda seterusnya memperlihatkan variable yang anda deklarasikan. Pada baris itu juga ada kode yang memerintahkan fungsi main kembali ke 0. Pada saat satu kali kembali diproses, itu dilakukan melalui system operasi. Sebagai catatan, pendeklarasian fungsi main yang tidak diinginkan memiliki proses kembali, dapa ditambahkan - void main() - dan biasanya itu berfungsi dengan baik; namun cara ini merupakan cara yang kurang baik. Tanda kurung terakhir berperan sebagai penutup agar fungsi dihentikan. Anda bias mencobamengoperasikan fungsi ini didalam sebuah kompiler. Anda dapat melakukan cut dan paste kode diatas kedalam sebuah file, dan menyimpannya sebagai file.cpp, dan kemudian anda buka file itu dari dalam kompiler anda. Jika anda memakai baris perintah kompiler seperti yang ada dalam Borland C++ 5.5, sebaiknya anda membaca dahulu instruksi kompiler tentang bagaimana cara melakukan kompilasi (how to compile). Comment atau komentar sering dipakai dalam penulisan program. Ketika anda mengatakan kepada kompiler bahwa sebuah bagian dari program anda adalah tex komentar, kompiler tidak akan memasukan itu sebagai perintah pemrograman. Untuk membua sebuah komentar dipergunakan tanda //, yang mengaakan kepada kompiler bahwa baris berikut adalah komentar, atau memakai tanda /* dan kemudian diakhiri tanda */ untuk menandai bahwa segala yang ada antara kedua tanda ini adalah komentar. Beberapa kompiler akan mengubah warna area komentar, tetapi beberapa kompiler lain tidak. Berhati hatilah dalam menulis program anda agar kode program anda tidak dianggap sebagai komentar oleh kompiler karena dapat mempengaruhi output program yang anda buat. Selanjutnya anda harus dapa menuliskan program sederhana untuk menampilkan informasi yang anda ketikan kedalamnya. Selain itu, program juga bisa dibuat untuk menerima input. Fungsi yang dipakai adalah cin, dan diikuti dengan tanda >>.
Tentu saja sebelum anda mencoba menerima input, anda harus memiliki tempat penyimpan input. Dalam pemrograman, input dan data disimpan dalam variable. Ada beberapa jenis variable. Pada saat anda ingin mengatakan kepada kompiler sebuah variable yang anda deklarasikan, anda harus menyertakan tipe data dan nama dari variable itu. Beberapa cara dasar adalah dengan menuliskan include char, int, dan float.
Sebuah variabel char menyimpan sebuah karakter tunggal; variabel int akan menyimpan integer (bukan bilangan desimal), dan variables float akan menyimpan bilangan desimal. Setiap variable - char, int, dan float - merupakan sebuah kata kunci (keyword) yang and pergunakan pada saat anda mendeklarasikan sebuah variabel. Untuk mendeklarasikan sebuah variable anda memakai syntax type . Ini diijinkan untuk mendeklarasikan variable multiple dari jenis variable yang sama pada baris yang sama; masing masing variabelnya dipisahkan dengan tanda koma. Deklarasi sebuah variable atau sekelompok variabel dapat diikuti tanda semicolon (Catatan, tanda ini sama dengan yang diterapkan pada prosedur dimana anda akan memanggil sebuah fungsi).
Jika anda tidak memakai sebuah variable yang dideklarasikan sebelumnya. program anda tidak akan dapat dioperasikan (atau di run), dan anda akan menerima pesan error yang memberitahu anda bahwa anda telah melakukan kesalahan.
Berikut adalah beberapa contoh deklarasi variable:int x;int a, b, c, d;char letter;float the_float;
Walaupun anda boleh memiliki banyak variable dengan jenis yang sama, anda tidak dapat memiliki variable dengan nama yang sama. Begitu pula anda tidak dapat memiliki variable dan fungsi dengan nama yang sama.#include <> intmain() { int thisisanumber; cout<<"Please enter a number:"; cin>>thisisanumber; cout<<"You entered: "<>> membaca sebuah nilai ke dalam thisisanumber; user harus menekan tombol enter sebelum bilangan bias dibaca oleh program. Ingatlah, bahwa variable yang telah dideklarasikan adalah sebuah integer; jika user cenderung nmenulis bilangan decimal, itu akan diproses dengan tidak tepat (sebab komponen desimal dari bilangan itu akan ditolek). Cobalah menuliskan satu baris karakter atau bilangan desimal ketika anda mengoperasikan program diatas; hasil yang didapat bervariasi dari input ke input, tetapi bila tidak ada masalah akan tampak bagus. Ingatlah ketika mencetak sebuah variabel, tanda quotation tidak dipakai. Apabila ada tanda quotation, maka hasilnya adalah "You Entered: thisisanumber."
Apabila tanda quotation dihilangkan, maka kompiler akan menganggap itu sebuah variabel, dan karena itu program akan melakukan pengecekan atas nilai variabel agar dapat mengganti nama variabel dengan variable pada saat eksekusi fungsi output. Jangan bimbang dengan adanya dua operator pemasukan dalam satu baris program. Anda bisa juga memasukan beberapa operator pemasuka dalam satu baris selama tiap operator pemasukan menghasilkan output yang berbeda; anda perlu memisahkan literal string (yaitu string yang tertutup dalam tanda quotation) dan variabel dengan menaruh masing masing operator pemasukannya (each insertion operators) (yaitu tanda <<). Bila anda hendak mencoba untuk meletakan dua variabel bersama sama dalam satu baris program seperti tanda <;<; hasilnya adalah pesan eror; maka janganlah melakukan itu. Jangan lupa untuk mengakhiri fungsi fungsi dan deklarasi dengan sebuah tanda semicolon. Jika anda lupa memberi tanda semicolon, kompiler akan memberi anda sebuah pesan eror pada saat anda melakukan kompilasi program anda.




SEJARAH PASCAL


Pascal dari Wirth

Bahasa Pascal pertama kali didesain pada tahun 1971 oleh Niklaus Wirth, seorang profesor dari Polytechnic of Zurich, Switzerland. Bahasa Pascal didesain sebagai penyederhanaan bahasa Algol untuk keperluan pendidikan, sejak tahun 1960.

Ketika Pascal didesain, telah ada sekian banyak bahasa pemrograman, namun hanya sedikit yang digunakan secara luas: FORTRAN, C, Assembler, COBOL. Ide kunci dari bahasa baru ini adalah urutan, yang diatur melalui konsep tipe data yang sangat kuat, dan memerlukan deklarasi dan kontrol program yang terstruktur. Bahasa ini juga didesain untuk menjadi alat bantu pengajaran bagi siswa kelas pemrograman.

Turbo Pascal

Kompiler Pascal dari Borland yang begitu terkenal diseluruh dunia, dikenal dengan nama Turbo Pascal, diperkenalkan pada tahun 1983, mengimplementasikan "Pascal User Manual and Report" oleh Jensen dan Wirth. Kompiler Turbo Pascal telah menjadi salah satu dari kompiler terlaris sepanjang masa, dan membuat bahasa ini sangat populer pada platform PC, dikarenakan keseimbangan antara kemudahan penggunaan dan kemampuan/kekuatan.

Turbo Pascal memperkenalkan suatu Integrated Development Environment (IDE) dimana Anda dapat mengedit code (dalam sebuah editor yang kompatibel dengan WordStar), menjalankan kompiler, melihat kesalahan yang ada, dan melompat kembali ke baris yang mengandung kesalahan tersebut. Hal ini mungkin kedengarannya sangat sepele pada dewasa ini, tapi pada masa sebelumnya Anda harus keluar dari editor, kembali ke DOS; menjalankan kompiler dari command-line, menuliskan nomor baris yang salah, membuka editor dan melompat ke baris tersebut.

Terlebih lagi Borland menjual Turbo Pascal seharga 49 dollar, dimana kompiler Pascal dari Microsoft dijual dengan harga ratusan dollar. Keberhasilan Turbo Pascal selama sekian tahun juga dikarenakan Microsoft membatalkan produk kompiler Pascal mereka.

Delphi's Pascal

Setelah 9 versi dari kompiler Turbo dan Borland Pascal, yang secara perlahan mengembangkan bahasa ini, Borland meluncurkan Delphi pada tahun 1995, mengubah Pascal menjadi sebuah bahasa pemrograman visual.

Delphi mengembangkan bahasa Pascal dalam sekian banyak cara, termasuk pengembangan berorientasi objek yang berbeda dari produk Object Pascal lain, termasuk dari kompiler Borland Pascal with Objects.


Teknik Kompiler

Delapan teknik yang dapat digunakan untuk men-debug program komputer dari model simulasi:

Teknik 1:

Dalam mengembangkan model simulasi, tulis dan debug program komputer dalam bentuk modul atau subprogram.

Teknik 2:

Disarankan agar lebih dari satu orang membaca program komputer jika model simulasi yang dikembangkan besar. Penulis program itu sendiri mungkin tidak dapat memberikan kritik yang baik.

Teknik 3:

Jalankan simulasi dengan beberapa setting parameter input dan lihat apakah outputnya masuk akal.

Teknik 4:

Lakukan “trace”, di mana status sistem yang disimulasi, yaitu: daftar event, variabel status, cacahan statistik, dsb., dicetak setelah masing-masing event terjadi dan dibandingkan dengan perhitungan manual untuk melihat apakah program bekerja sebagaimana mestinya.

Teknik 5:

Jika mungkin, model harus dijalankan dengan asumsi-asumsi yang disederhanakan di mana karakteristik yang sebenarnya diketahui atau dapat dihitung dengan mudah.


Teknik 6:

Pada beberapa model simulasi, akan sangat menolong jika ada animasi output simulasi yang dapat diteliti.

Teknik 7:

Tuliskan mean dan varians sampel untuk setiap distribusi probabilitas input simulasi dan bandingkan dengan mean dan varians yang diinginkan (mis., historikal).

Langkah ini menentukan apakah nilai-nilai input dibangkitkan dengan benar dari distribusi-distribusi tsb.

Teknik 8:

Gunakan paket simulasi untuk memperkecil jumlah baris kode yang dibutuhkan.


Pandangan Umum Mengenai Validasi

1. Ekperimen dengan model simulasi merupakan pengganti dari eksperimen dengan sistem yang ada atau yang diusulkan. Dengan demikian, tujuan ideal dari validasi adalah menjamin bahwa model simulasi cukup baik sehingga dapat digunakan untuk mengambil keputusan bagi sistem.

2. Kemudahan atau kesulitan proses validasi bergantung pada kompleksitas sistem yang dimodelkan dan apakah versi sistem tersebut sudah ada.

3. Model simulasi dari sistem yang kompleks hanya dapat merupakan pendekatan sistem yang sebenarnya.

4. Model simulasi harus selalu dikembangkan untuk sekumpulan tujuan tertentu. Model yang valid untuk satu tujuan belum tentu valid untuk tujuan lainnya.

5. Catatan asumsi-asumsi model simulasi harus di-update secara teratur, dan akhirnya menjadi laporan akhir.

6. Model simulasi harus divalidasi relatif terhadap ukuran-ukuran kinerja yang nanatinya dipakai untuk pengambilan keputusan.

7. Validasi bukan sesuatu yang harus diusahakan setelah model simulasi selesai dikembangkan, melainkan, pengembangan model dan validasi harus dilakukan bersama-sama sepanjang studi simulasi.

8. Umumnya tidak mungkin melakukan validasi statistik antara data output model dan data output sistem ybs (jika ada), bergantung pada sifat data tsb.


Pendekatan Tiga Langkah untuk Mengembangkan Model Simulasi yang Valid dan Credible

1. Mengembangkan model dengan High Face Validity, yaitu, model yang dipermukaannya tampak masuk akal bagi orang-orang yang memiliki pengetahuan tentang sistem yang dipelajari.

Pemodel simulasi harus menggunakan semua informasi dari:

- Wawancara dengan “pakar’ sistem.

- Observasi sistem.

- Teori yang ada.

*

- Hasil yang relevan dari model simulasi yang mirip.

*

- Pengalaman/Intuisi

*

2. Menguji Asumsi-asumsi model secara empiris.

Tujuannya adalah secara kuantitatif menguji asumsi-asumsi yang dibuat pada tahap awal pengembangan model. Salah satu alat bantu yang paling berguna adalah analisis sensitifitas. Cara ini dapat digunakan untuk mennetukan apakah output simulasi berubah secara signifikan ketika nilai parameter input diubah. Cara: dengan menggunakan metode bilangan acak umum.

3. Menentukan seberapa representatif data output simulasi.

Jika data output model simulasi memperlihatkan hasil yang “bagus” ketika dibandingkan dengan data output sistem yang sebenarnya atau yang diharapkan, maka model sistem tersebut “valid”.

Prosedur Statistik untuk Membandingkan Observasi Dunia Nyata dengan Data Output Simulasi

1. Pendekatan Inspeksi

Pendekatan inspeksi dasar: model diberi input dengan data acak, dan hasilnya dibandingkan dengan observasi dunia nyata.

Pendekatan inspeksi korelasi:

Data input sistem historis Data input sistem historis


Sistem yang sebenarnya Model simulasi

bandingkan

Data output sistem Data output model

2. Pendekatan Interval Konfidensi Berdasarkan Data Independen

3. Pendekatan Time-Series


EKSPERIMEN DISAIN

Untuk setiap disain sistem yang akan disimulasikan, harus dibuat keputusan untuk isu-isu seperti:

- Kondisi awal untuk menjalankan simulasi.

- Lama periode warmup (jika ada).

- Lama jalannya simulasi.

- Banyaknya simulasi-simulasi independen (replikasi) untuk setiap alternatif.

Tipe-tipe simulasi berdasarkan analisis output:

1. Terminating simulation

2. Nonterminating simulation:

a. Steady-state parameters

b. Steady-state cycle parameters

c. Other parameters.