Kenal JavaScript: Perkenalan
Kenal JavaScript merupakan salah satu seri tentang JavaScript. Seri ini memperkenalkan hal-hal dasar seputar JavaScript. Setiap minggu akan ada 1-2 artikel baru pada seri ini.
Story ini merupakan story pertama dari seri ‘Kenal JavaScript’, yang juga merupakan seri pertama saya. Pada story kali ini saya akan membahas asal usul dan pendahuluan tentang JavaScript.
Apa itu JavaScript?
JavaScript merupakan salah satu bahasa pemrograman interpreted yang sangat ringan dengan first-class function. Lebih detail, JavaScript merupakan prototype-based programming language, multi-paradigma, juga dynamic language yang mendukung paradigma object-oriented, imperative, dan declarative.
Pada umumnya JavaScript digunakan untuk front-end web development sebagai bahasa scripting untuk halaman web. Oleh karena itu, hampir semua web browser populer mendukung JavaScript, namun belum tentu mendukung semua versi JavaScript. Walaupun begitu, saat ini juga sudah ada non-browser environment yang menggunakan JavaScript contohnya seperti node.js (server-side) dan Apache CouchDB (database).
Sejarah JavaScript
Nama JavaScript bukan nama asli dari bahasa ini. Pada awal masa pengembangan dan peluncuran pada bulan Mei 1995, JavaScript bernama Mocha. Kemudian pada September 1995 berganti menjadi LiveScript. Beberapa bulan kemudian, Desember 1995, berubah menjadi JavaScript setelah mendapatkan trademark license dari Sun, pemegang lisensi Java. Hal ini merupakan bagian dari marketing Sun, sekarang Oracle, saat Java populer pada saat itu. Penamaan JavaScript tidak mengindikasikan bahwa JavaScript merupakan pengembangan bahasa Java atau turunan dari bahasa Java.
Pada awalnya JavaScript dikembangkan oleh Brendan Eich yang bekerja kepada Netscape. Pada saat itu hanya Netscape Navigator yang mendukung JavaScript. Tidak lama kemudian Microsoft ‘mengadopsi’ JavaScript pada Internet Explorer dan menyebut implementasi JavaScript mereka sebagai JScript. Pada tahun 1996–1997 , JavaScript ‘diakuisisi’ oleh ECMA, organisasi yang berdedikasi dalam standarisasi ICT di dunia, sekarang Ecma International, untuk dijadikan standar scripting language pada web browser agar tidak hanya Netscape yang bisa menggunakan JavaScript dan semua browser memiliki spesifikasi standar JavaScript yang sama. Pada periode ini lahirlah spesifikasi standar scripting language pertama untuk browser, yaitu ECMA-262 yang dinamakan ECMAScript. Sejak akuisisi tersebut JavaScript hanya merupakan implementasi dari ECMA-262, bukan merupakan standar, walaupun memang JavaScript merupakan implementasi ECMA-262 yang paling populer. Bahasa lain yang mengimplementasi ECMA-262 adalah ActionScript (Macromedia Flash), JScript (Microsoft), dll. Bahasa-bahasa tersebut mengadopsi standar dari ECMA yang sama namun mungkin saja memilki implementasi yang berbeda.
Versi ECMA-262
Sejak peluncuran ECMA-262, term ‘versi JavaScript’ menjadi kurang relevan lagi karena semua browser dan JavaScript Engine didalamnya mengacu pada standar ECMA-262, walaupun memang ada versi JavaScript sampai versi 1.8.5 namun sudah tidak digunakan lagi sekarang. Oleh karena itu, saat ini kita bisa katakan bahwa pemakaian term versi JavaScript dapat diinterpretasikan sama dengan pemakaian term versi ECMA-262. Saat ini yang membedakan hanyalah versi JavaScript/ECMAScript engine pada setiap browser. Setiap browser memiliki JavaScript engine masing-masing seperti V8 (Google Chrome), SpiderMonkey (Mozilla Firefox), JavaScriptCore/Nitro (Apple Safari), Chakra (Microsoft Edge), dll. Sejak peluncuran pertama pada bulan Juni 1997 hingga saat ini (Juli 2017), telah ada 8 versi ECMA-262 dipublikasikan oleh Ecma International. Berikut daftar versi tersebut:
- ECMA-262 1st Edition (ECMAScript 1 atau ES1), Juni 1997
- ECMA-262 2nd Edition (ES2), Agustus 1998
- ECMA-262 3rd Edition (ES3), Desember 1999
- **ECMA-262 4th Edition** (ES4), penyusunan dihentikan Juli 2008, TIDAK DIPUBLIKASIKAN
- ECMA-262 5th Edition (ES5), Desember 2009
- ECMA-262 5.1 Edition (ES5), Juni 2011
- ECMA-262 6th Edition (ES6/ES2015), Juni 2015
- ECMA-262 7th Edition (ES2016), Juni 2016
- ECMA-262 8th Edition (ES2017), Juni 2017
Terdapat banyak peristiwa bersejarah dan menarik dari daftar versi ECMA-262 diatas. Saya akan membahas beberapa hal tersebut sedikit.
ES4 Tidak dipublikasikan!
Edisi keempat dari ECMA-262 dapat dikatakan merupakan versi paling kontroversial, baik dari segi fitur maupun proses penyusunan. Pada awalnya ES4 direncanakan oleh Ecma Technical Committee 39 (TC39) sebagai update besar dan ambisius sejak terakhir ES3 tahun 1999 dipublikasikan. Langkah ini tampaknya tidak disetujui oleh beberapa perusahaan yang mengadopsi JavaScript seperti Yahoo, Microsoft, Google, dan beberapa perusahaan lainnya, karena mereka merasa update tersebut terlalu ambisius. Para perusahaan tersebut akhirnya membuat sub-committee mereka sendiri untuk mendesain update dari ES3 yang tidak terlalu ambisius, yang mereka beri nama ECMAScript 3.1. Perdebatan dan head-to-head antara kedua committee diatas tidak kunjung selesai sehingga akhirnya kedua belah pihak mencapai kesepakatan bahwa ECMAScript 3.1 dan ECMAScript 4 akan dikerjakan secara paralel dengan koordinasi antara kedua committee tersebut. Lebih lanjut, ECMAScript 3.1 akan tetap menjadi subset dari ECMAScript 4, termasuk semantik dan sintaksnya.
Ternyata kesepakatan tersebut bukanlah akhir dari cekcok antar kedua tim tersebut. Perbedaan filosofi kedua tim berakibat pada seringnya terjadi pelanggaran terhadap kesepakatan-kesepakatan yang telah dibuat. Kondisi tersebut semakin memperkuat keraguan para pihak bahwa tim oposisi, yang terdiri dari para perusahaan teknologi, nantinya tidak akan mengadopsi ES4 dari tim Ecma TC39, jika nantinya diluncurkan.
Kedua tim akhirnya mencapai kesepakatan baru pada bulan Juli 2008. Brendan Eich, yang merupakan anggota tim Ecma TC39, mengumumkan bahwa Ecma TC39 akan fokus pada pengerjaan ECMAScript 3.1 dan berkomitmen untuk melakukan kolaborasi penuh dengan semua pihak dan vendor. Lebih lanjut, Ecma TC39 menjanjikan bahwa setidaknya akan ada dua fitur yang dapat dijalankan dan diimplementasikan pada awal 2009.
Pada April 2009, Ecma TC39 mempublikasikan draft akhir dari edisi kelima (Ya, edisi kelima) dan diekspektasikan testing implementasi fitur selesai pertengahan Juli tahun yang sama. Pada 3 Desember 2009, ECMA-262 edisi kelima akhirnya rilis.
Fitur-fitur ES4 tidak langsung serta merta dimasukkan dalam draft ES5 pada tahun 2009. Banyak fitur ambisius pada ES4 sama sekali dihapuskan atau bahkan dialihkan untuk ES6. Anda bisa bayangkan beberapa fitur seperti class, module, dll yang baru muncul pada ES6 sudah ada pada draft ES4. Mungkin ES4 memang terlalu ambisius?
ES6 menjadi ES2015
Anda pernah mendengar term ES6 dan ES2015? Apa bedanya? Keduanya merujuk pada hal yang sama, yaitu ECMA-262 6th Edition. Mengapa ada dua sebutan untuk hal yang sama? Pada awalnya ECMA-262 dinamakan ES6 dengan konvensi yang sama seperti sebelumnya, ES5, ES4, dsb. Penamaan tersebut disengaja sebagai konvensi nama ECMA-262 6th Edition dan direncanakan digunakan untuk versi selanjutnya, versi 7, 8, dst. Namun konvensi nama tersebut diganti menjadi ES2015, 2015 merupakan tahun rilis ECMA-262 6th Edition. Alasan bergantinya konvensi nama tersebut secara pasti tidak dapat diketahui karena kedua nama tersebut bukan merupakan official name yang dirilis oleh Ecma sehingga tidak ada yang bisa dijadikan patokan. Konvensi ini akan digunakan untuk versi ECMA-262 seterusnya, ES2016, ES2017, dst.
Versi 5.1 tidak ada penambahan fitur baru, hanya fixes
Versi 5.1 merupakan salah satu rilis versi yang tidak terlalu signifikan karena tidak menambah fitur baru pada ECMA-262, hanya memperbaiki, fix, beberapa hal saja. Oleh karena itu juga dinamakan versi 5.1. Beberapa orang bahkan tidak menyebut versi 5.1 sebagai major version, sehingga mereka merujuk ES5 pada ECMAScript 5th Edition yang dirilis pada tahun 2009, bukan versi 5.1 yang rilis pada 2011.
Browser modern saat ini baru mendukung ES2015
Sampai artikel ini ditulis ECMA-262 secara resmi telah mempublikasikan versi 8, ECMAScript 2017 8th Edition. Namun fitur-fitur pada spesifikasi standar tersebut belum dapat langsung kita nikmati. Kenapa? Karena browser andalan yang sering kita gunakan belum mengimplementasi fitur-fitur tersebut. Ecma International hanya bertanggung jawab untuk mempublikasikan standar baru dan tidak bertanggung jawab terhadap bagaimana implementasi maupun siapa yang mengimplementasi standar tersebut. Hal ini bisa dilihat sebagai gap.
Browser modern seperti Chrome, Safari, Edge, Firefox saat ini baru mendukung sampai ECMA-262 2015 6th Edition, ES2015. “Saya pernah lihat beberapa orang telah menggunakan fitur dari ES2016 dan bisa dijalankan di browser, bagaimana bisa?” Saya rasa orang tersebut menggunakan transpiler seperti Babel untuk menjalankan kode tersebut. Babel memungkinkan kita untuk menulis kode dalam standar terbaru dan menjalankan pada browser yang belum mendukung versi tersebut. Bagaimana bisa? Babel mentransformasikan kode JavaScript versi terbaru ke versi-versi sebelumnya sehingga browser lama pun bisa menjalankan kode tersebut.
Jika Anda ingin melihat perkembangan support dari browser terhadap ECMA-262, Anda bisa mengunjungi laman http://kangax.github.io/compat-table/
ECMA-262 akan diperbaharui secara berkala dan dalan jangka waktu yang lebih singkat seterusnya
Sejak ECMA-262 6th Edition dirilis, Ecma International berkomitmen untuk melakukan perubahan yang berkala dan dalam jangka waktu yang lebih singkat daripada sebelumnya terhadap ECMA-262. Dapat kita lihat sejak ES2015, setiap tahunnya Ecma International selalu merilis versi baru setiap tahun.
Mengapa Ecma International dapat merilis banyak fitur baru dalam waktu yang singkat? Karena sejak ES2015, setiap orang dapat ikut berkontribusi untuk menyumbang ide fitur mereka untuk versi ECMA-262 selanjutnya. Proposal terhadap fitur baru perlu melalui beberapa tahap sebelum akhirnya disetujui dan resmi masuk standar yang akan dirilis. Anda dapat melihat perkembangan draft terakhir dari ECMA-262 pada Github tc39 https://github.com/tc39/ecma262.
Mengapa Spesifikasi ECMA-262 Perlu Ada?
ECMA-262 merupakan sebuah standar yang dikeluarkan organisasi standarisasi independen internasional yang tidak berpihak pada perusahaan manapun di industri teknologi. Salah satu tujuan utama JavaScript dijadikan standar ECMA-262 adalah untuk mencegah klaim status kepemilikan dari ECMA-262 sehingga ECMA-262 dapat digunakan dan diimplementasi siapapun secara bebas. Bahkan saat ini, siapa pun dapat ikut berkontribusi memberikan ide fitur baru pada ECMA-262. Hal ini bisa terjadi karena ECMA-262 dikelola secara independen dan terbuka oleh organisasi standarisasi. Hal ini dapat berdampak positif bagi perkembangan ECMA-262 itu sendiri karena membuka posibilitas ide-ide baru dari pengguna ECMA-262 di seluruh dunia.
Fakta Menarik
- Vanilla JS?? Framework JavaScript? Plug-in JavaScript???
Jika Anda sering mendengar term Vanilla JS dan bingung apa itu vanilla JS, jangan bingung :P Vanilla JavaScript hanyalah sebuah term yang merujuk pada penggunaan JavaScript tanpa menggunakan 3rd party library, plugins, atau extension tambahan. Jadi jika Anda mengembangkan aplikasi pure hanya dengan JavaScript itu sendiri tanpa install 3rd library apapun, Anda sedang menggunakan Vanilla JS. Ada sebuah website, yang menurut saya, memanfaatkan term Vanilla JS sebagai sebuah joke. Saya rasa cukup lucu untuk orang awam JavaScript. Anda dapat mengunjungi http://vanilla-js.com dan coba download ‘package’ Vanilla JS setelah memilih beberapa fitur yang diinginkan. *that’s part of the joke, indeed - Siapapun, juga Anda, dapat berpartisipasi dalam revisi versi ECMAScript Language Specification!
Silakan kunjungi https://tc39.github.io/process-document/ untuk proses detailnya.
Pada artikel seri Kenal JavaScript selanjutnya saya akan mulai membahas teknis coding. Cukup pada artikel ini saja kita hanya membahas sejarah :)
Ada beberapa hal menarik lainnya seputar JavaScript yang tidak masuk lingkup story ini. Anda dapat baca lebih lanjut dari tautan-tautan sumber dibawah.
Selanjutnya: Kenal JavaScript: node.js, Text Editor, dan Tools Lainnya
Sumber dan bahan baca lanjut: