Compiler, Interpreter, Bedanya Apa?

Dalam bahasa pemrograman, umumnya suatu bahasa pemrograman menggunakan 2 cara untuk menterjemahkan perintah ke dalam bahasa mesin yang dimengerti oleh komputer, yaitu secara interpret (disebut bahasa interpreter) dan secara compile (disebut bahasa compiler).

Ini berlaku untuk hampir semua bahasa pemrograman yang ada saat ini, sebut saja diantaranya:
Javascript, PHP, Java, C++, Ruby, Python, dan sebagainya.

Tulisan ini akan coba menjelaskan secara sederhana perbedaan dari 2 cara tersebut. Harapannya semoga bisa memudahkan yang baru mulai belajar ngoding.

Interpreter

Contoh kode di bawah ini adalah kode Javascript, di mana Javascript adalah salah satu bahasa interpreter:

//interpreter

function calculation(a,b) {
  return a + b;
}

for (let i=0; i<500; i++) {
  calculation(3,7);
}

Oleh Javascript, kode di atas akan dieksekusi baris per baris on the fly (aka langsung diproses saat dibaca) setiap kali program dijalankan.

Di kode ini, kita hanya membuat fungsi yang akan mengembalikan penjumlahan antara parameter a dan b. Kemudian di bawahnya kita menjalankan loop / perulangan sebanyak 500 kali, di mana yang diulang adalah fungsi calculation dengan parameter a=3 dan b=7.

Pada contoh kode loop di atas, interpreter memiliki satu kelemahan, di mana karena dia perlu interpretasi setiap kali program dijalankan, maka otomatis ini menambah waktu eksekusi program. Jika misal kode program di atas dijalankan 2 kali, maka otomatis CPU perlu melakukan eksekusi looping selama 500×2 = 1000 kali

Pada compiler, hal ini tidak perlu terjadi karena compiler language akan menghasilkan kode program final yang sudah dioptimasi, salah satunya untuk kasus looping tersebut, di mana program hasil compile tidak perlu lagi melakukan loop tersebut karena sudah diterjemahkan di awal.

Untuk melakukan interpretasi, sebuah bahasa pemrograman memerlukan mesin / engine interpreter, yang biasanya diberi nama sama dengan bahasa pemrograman tersebut. Misal:
PHP -> PHP Interpreter
Javascript -> Javascript Interpreter

Mungkin ada yang familiar dengan XAMPP / WAMPServer bagi pengguna PHP ? Nah sebenarnya di dalam bundle software tersebut ada PHP Engine, yang merupakan PHP Interpreter. PHP Engine di sini adalah software tersendiri, namun oleh XAMPP / WAMPServer dijadikan satu kesatuan bersama dengan software lain semisal MariaDB (Database), Apache (Web Server), untuk memudahkan developer pemula dalam belajar bahasa pemrograman.

Bagi developer angkatan 90-an, mereka ga mengenal XAMPP / WAMPServer, karena mereka harus membangun semua ekosistem tersebut dari awal (setup manual). Maka berbahagialah para developer yang kekinian, karena kalian sudah dimanjakan sekali saat ini. Walaupun juga memunculkan masalah di mana developer kekinian terkadang tidak mengerti bagaimana sebuah bahasa pemrograman itu kok bisa jalan di komputer mereka, tanpa tau bagaimananya.

Khusus Javascript, mesin interpreter nya terletak di dalam web browser yang digunakan (Chrome, Firefox, Edge, Opera dll).

Adapun contoh bahasa interpreter yang lain, bisa dilihat di sini -> List kumpulan bahasa pemrograman interpreter

Compiler

Mari lihat kembali kode yang sama di atas, namun kali ini kita passing dia ke mesin compiler:

//compiler

function calculation(a,b) {
  return a + b;
}

for (let i=0; i<500; i++) {
  calculation(3,7);
}

Compiler language / bahasa pemrograman berbasis compiler, tidak menerjemahkan bahasa secara on the fly / secara langsung ketika dijalankan. Namun yang terjadi adalah, compiler akan membaca semua kode dari atas sampai bawah secara satu kesatuan, kemudian mengubahnya ke kode mesin ataupun kode low level yang akan jadi program final. Ketika program final dijalankan, maka proses compiling tidak perlu dilakukan kembali, kecuali ada ubahan pada kode program. Jadi bisa dibilang compiler ini kerja ahead of time (di awal).

Sama seperti interpreter language, compiler language juga memerlukan sebuah engine / mesin khusus yang bertugas melakukan compiling. Dan kebanyakan bahasa berbasis kompilasi, memiliki lebih dari satu jenis compiler, misalnya saja C++ yang saat ini memiliki kurang lebih 30-an compiler (Lihat -> C++ Compilers).

Compiler juga memiliki keunggulan dalam hal performa dibanding Intepreter. Keunggulan performa ini didapat karena proses compiling biasanya diikuti proses optimasi kode oleh compiler. Semisal ada kode yang melakukan looping / perulangan, maka compiler akan melakukan optimasi di mana kode tersebut tidak lagi di looping pada hasil akhir kompilasi (berupa program). Berbeda dengan interpreter, di mana kode looping akan dijalankan kembali sejumlah looping tersebut selama proses translasi.

Adapun contoh bahasa pemrograman berbasis compiler, bisa dilihat di sini -> List lengkap bahasa pemrograman berbasis compiler

Kekurangan Dan Kelebihan

Nah, kita sudah tau perbedaannya, sekarang kita kupas kekurangan dan kelebihannya pada tabel di bawah ini.

Note:
– PROS -> Kelebihan
– CONS -> Kekurangan

Tipe Bahasa PROS CONS
Interpreter

– Lebih cepat dalam hal development flow dan debug, karena langsung diterjemahkan on the fly

– Program yang dihasilkan dari bahasa interpreter biasanya kalah performanya oleh compiler language. Hal ini terjadi karena proses interpretasi biasanya tidak melalui optimasi seperti compiler. dan setiap jalannya program selalu harus diinterpretasi, yang mana otomatis menambahkan waktu eksekusi

Compiler

– Program yang dihasilkan dari bahasa compiler biasanya lebih baik performanya. Ini dikarenakan bahasa yang dicompile juga sudah melalui proses optimasi ketika dicompile ke kode final dan proses compile ini juga hanya satu kali sebelum program di finalisasi, berbeda dengan interpreter yang harus dilakukan setiap saat program dijalankan

– Lebih lambat dalam hal development flow dan debug, karena butuh dicompile terlebih dahulu ke low level language

 

Membangun Environment Testing Android di Ubuntu Menggunakan Appium

Appium adalah framework testing yang diperuntukkan untuk melakukan test pada aplikasi mobile pada android dan ios baik itu aplikasi native, berbasis web ataupun hybrid. Keunggulan dari appium adalah kita dapat membuat test menggunakan berbagai macam bahasa seperti Java, Python, PHP, Ruby, Javascript. Info lebih lanjut dapat dilihat pada website resmi appium.

Tanpa panjang lebar, mari kita memulai melakukan persiapan yaitu membangun environment untuk testing menggunakan appium di ubuntu. Pada artikel kali ini saya menggunakan Ubuntu desktop versi 15.10 64 bit dan akan menjalankan testing menggunakan Ruby dengan Rspec (akan dibahas di artikel selanjutnya).

  • Instalasi Ruby
~$:sudo apt-get remove --purge -y ruby
~$:\curl -sSL https://get.rvm.io | bash
~$:echo "source $HOME/.rvm/scripts/rvm" >> ~/.bashrc
~$:source ~/.bashrc
~$:rvm install 2.2.3
~$:rvm use 2.2.3
~$:gem install bundler

Pada perintah di atas, kita akan menghapus ruby bawaan ubuntu (jika ada) dan menggantinya menggunakan RVM (Ruby Version Manager) dan menginstall ruby versi stable saat ini (2.2.3). Selain itu kita juga menginstall gem bundler.

  • Instalasi Oracle JDK 8
~$:sudo apt-get purge openjdk-\*
~$:sudo add-apt-repository ppa:webupd8team/java
~$:sudo apt-get update
~$:sudo apt-get install oracle-java8-installer

Pada perintah di atas, kita memastikan menghapus openjdk bawaan ubuntu (jika ada) dan menginstall oracle java8 menggunakan ppa java dari webupd8team

  • Instalasi Android Studio + SDK
    • Download android studio terbaru di sini.
    • Ekstrak file hasil download:
~$:cd ~/Downloads/
~$:tar zxvf android-studio-ide-linux.zip //sesuaikan dengan nama file download
~$:cd android-studio/bin
~$:./studio.sh

Perintah di atas akan menjalankan android studio. Masuk ke Configure => SDK Manager. Pada Tab SDK Platforms, check pada kotak Show Package Details, lalu centang pada komponen Platform, Google APIs, ARM EABI v7a System Image, Intel x86 Atom System Image sesuai pada gambar di bawah. Lakukan untuk API Level dari 17 sampai API Level terakhir (Pada artikel ini sampao API Level 23).

SDK Platforms
Pada tab SDK Tools, klik lagi pada box Show Package Details, dan centang pada semua komponen Android SDK Build-Tools yang tidak Obselete seperti pada gambar di bawah.

SDK Tools
Klik Apply, lalu install untuk memulai instalasi. Proses instalasi akan memakan waktu lumayan lama (besarnya bisa mencapai 5 GB), karena itu pastikan anda tidak sedang menggunakan koneksi yang dilimit oleh paket data. Jika sudah selesai maka klik finish dan akhiri program android studio.

  • Konfigurasi .bashrc

Edit file ~/.bashrc anda dan masukkan line berikut ke dalamnya, lalu jalankan command source ~/.bashrc

export ANDROID_HOME=$HOME/Android/Sdk                          
export ANDROID_SDK=$ANDROID_HOME                               
PATH=$PATH:$ANDROID_HOME/build-tools                           
PATH=$PATH:$ANDROID_HOME/platform-tools                        
PATH=$PATH:$ANDROID_HOME/tools                                 
export JAVA_HOME=(/usr/lib/jvm/java-8-oracle)                    
export PATH=$JAVA_HOME/jre/bin:$PATH                             
                                                               
export PATH
  • Instalasi NPM + grunt, grunt-cli dan appium
~$:sudo apt-get remove --purge -y node nodejs
~$:curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash
~$:~/.nvm/nvm.sh
~$:nvm install 4.2.3
~$:nvm use 4.2.3
~$:npm install -g grunt grunt-cli appium --verbose

Pada perintah di atas, kita memastikan untuk menghapus nodejs bawaan ubuntu (jika ada) dan melakukan instalasi NVM (Node Version Manager) kemudian dari sana kita menginstall nodejs versi 4.2.3 (LTS) kemudian dilanjutkan dengan menginstall grunt, grunt-cli dan appium menggunakan npm.

Jika instalasi telah selesai, jalankan command: appium

Jika instalasi berhasil, maka akan muncul tulisan seperti di bawah ini:

info: Welcome to Appium v1.4.16 (REV ae6877eff263066b26328d457bd285c0cc62430d)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: Console LogLevel: debug

Selamat, persiapan environment untuk mobile testing menggunakan appium untuk android di ubuntu telah berhasil. Nantikan artikel selanjutnya yang akan membahas testing sederhana menggunakan Ruby dan Rspec.

PHP Script – Membentuk Segitiga Siku-Siku Dengan Karakter Bintang (*)

Pada tutorial ini, saya iseng mem-posting tugas kuliah saya (master dimohon tidak membully 😀 ) di mana tugasnya cukup sederhana, yaitu membuat script untuk membentuk segitiga siku-siku yang tingginya disesuaikan dengan inputan user (integer/angka) dan digambarkan dengan mencetak karakter bintang yang membentuk segitiga siku-siku tersebut.

Continue reading PHP Script – Membentuk Segitiga Siku-Siku Dengan Karakter Bintang (*)

Membangun Web Server Lokal Dengan Bitnami WAMP Server

Untuk seorang web programmer, salah satu aplikasi atau layanan yang wajib tersedia pada pc/laptop mereka adalah web server. Dahulu, programmer web diharuskan menginstalasi servis/aplikasi yang diperlukan dalam membangun web server satu per-satu, seperti php library, apache web server, dan database (MySQL server). Hal ini memerlukan waktu terutama dalam sisi konfigurasi yang harus dilakukan manual juga, seperti menghubungkan php library dengan web server.

Continue reading Membangun Web Server Lokal Dengan Bitnami WAMP Server

Sharing File Menggunakan Google Drive

Google Drive adalah salah satu layanan dari Google. Inc berbasis cloud untuk menyimpan serta mengedit file. Ada beberapa file yang secara default didukung untuk bisa langsung diedit dari google drive, yaitu file Document, Presentation, Spreadsheet, Form, Drawing, dan Map. Dengan bantuan Add-On, kita juga bisa mengedit file-file lain secara langsung semisal script bahasa pemrograman.
Continue reading Sharing File Menggunakan Google Drive

Nginx – Alternatif Web Server Open Source

Nginx (baca : engine x) adalah web server dengan kode terbuka dan bisa berjalan pada sistem Unix, Linux, BSD, Mac OS X, Solaris, AIX, HP-AUX, dan Windows. Nginx juga bisa digunakan sebagai proxy server yang mendukung protokol HTTP, IMAP, SMTP dan POP3. Nginx terkenal karena kemampuannya meng-handle banyak koneksi secara bersamaan (10.000 koneksi lebih) dengan pemakaian memory yang sekecil mungkin.

Continue reading Nginx – Alternatif Web Server Open Source

Tips & Trick – Menjalankan Banyak Akun Yahoo Messenger Secara Bersamaan

Normalnya aplikasi Yahoo Messenger pada windows hanya mengijinkan menjalankan satu aplikasi messenger saja. Namun bagaimana bila anda memerlukan 2 akun yahoo messenger online secara bersamaan? sedangkan anda hanya memiliki satu komputer saja? Mudah saja, caranya dengan melakukan perubahan pada kode registry windows.

Ikuti langkah berikut :

Continue reading Tips & Trick – Menjalankan Banyak Akun Yahoo Messenger Secara Bersamaan

Windows – Mengubah Attribut Hidden File Melalui Command Prompt

Jika anda menggunakan windows sebagai sistem operasi, mungkin pernah/sering mengalami file anda tiba-tiba hilang diakibatkan oleh virus (biasanya data di dalam flashdisk). Namun ketika dicekkan melalui windows explorer ternyata flashdisk anda/direktori lokasi file hilang tersebut ukurannya masih sama, mengindikasikan file masih ada namun attribut nya menjadi “tersembunyi” (hidden) oleh virus. Normalnya untuk mengubah attribut file bisa dilakukan dengan meng-klik kanan pada file dan klik properties, namun karena file “tidak terlihat oleh mata”, tentu kita tidak bisa melakukannya dengan cara normal bukan?

Untuk mengatasi hal ini bisa dilakukan dengan fasilitas command prompt windows (cmd). Command prompt windows bisa diakses dengan 2 cara, yaitu:

Continue reading Windows – Mengubah Attribut Hidden File Melalui Command Prompt