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 (*)