Pengantar scripting di Java, Bagian 1

Kutipan dari Scripting in Java: Languages, Frameworks, dan Patterns .

Oleh Dejan Bosanac

Diterbitkan oleh Addison Wesley Professional

ISBN-10: 0-321-32193-6

ISBN-13: 978-0-321-32193-0

Sampai saat ini hanya para hardcore yang tertarik dengan pembuatan skrip pada platform Java, tetapi itu sebelum Sun meningkatkan dukungan JRE untuk bahasa yang diketik secara dinamis seperti Python, Ruby, dan JavaScript. Dalam kutipan dua bagian ini dari Scripting yang akan datang di Java: Languages, Frameworks, and Patterns (Addison Wesley Professional, Agustus 2007) Dejan Bosanac mempersempit apa yang membedakan sebagian besar bahasa scripting dari bahasa pemrograman seperti Java, lalu menjelaskan mengapa scripting adalah tambahan yang layak waktu untuk keahlian pemrograman Java Anda.

Pengantar Scripting di Java: Bahasa, Kerangka Kerja, dan Pola

Topik utama buku ini adalah sinergi teknologi scripting dan platform Java. Saya menjelaskan proyek yang dapat digunakan pengembang Java untuk menciptakan lingkungan pengembangan yang lebih kuat, dan beberapa praktik yang membuat skrip berguna.

Sebelum saya mulai membahas penerapan scripting di dunia Java, saya merangkum beberapa teori di balik scripting secara umum dan penggunaannya dalam infrastruktur teknologi informasi. Ini adalah topik dari dua bab pertama buku ini, dan ini memberi kita perspektif yang lebih baik tentang teknologi skrip serta bagaimana teknologi ini dapat berguna dalam platform Java.

Untuk memulai, kita harus mendefinisikan apa itu bahasa scripting dan menjelaskan karakteristiknya. Karakteristik mereka sangat menentukan peran di mana mereka dapat (harus) digunakan. Dalam bab ini, saya menjelaskan apa arti istilah bahasa skrip dan membahas karakteristik dasarnya.

Di akhir bab ini, saya membahas perbedaan antara bahasa skrip dan pemrograman sistem dan bagaimana perbedaan ini membuatnya sesuai untuk peran tertentu dalam pengembangan.

Latar Belakang

Definisi bahasa skrip tidak jelas dan terkadang tidak konsisten dengan bagaimana bahasa skrip digunakan di dunia nyata, jadi sebaiknya rangkum beberapa konsep dasar tentang pemrograman dan komputasi secara umum. Ringkasan ini memberikan dasar yang diperlukan untuk menentukan bahasa skrip dan mendiskusikan karakteristiknya.

Mari kita mulai dari awal. Prosesor menjalankan instruksi mesin , yang beroperasi pada data baik di register prosesor atau di memori eksternal. Sederhananya, instruksi mesin terdiri dari urutan digit biner (0s dan 1s) dan spesifik untuk prosesor tertentu yang dijalankannya. Instruksi mesin terdiri dari kode operasi yang memberi tahu prosesor operasi apa yang harus dilakukan, dan operan yang mewakili data di mana operasi harus dilakukan.

Misalnya, pertimbangkan operasi sederhana untuk menambahkan nilai yang terkandung dalam satu register ke nilai yang terkandung di register lain. Sekarang mari kita bayangkan prosesor sederhana dengan set instruksi 8-bit, di mana 5 bit pertama mewakili kode operasi (katakanlah, 00111 untuk penambahan nilai register), dan register dialamatkan oleh pola 3-bit. Contoh sederhana ini dapat kita tulis sebagai berikut:

00111 001 010

Dalam contoh ini, saya menggunakan 001 dan 010 untuk mengatasi register nomor satu dan dua (R1 dan R2, masing-masing) dari prosesor.

Metode dasar komputasi ini telah dikenal selama beberapa dekade, dan saya yakin Anda sudah familiar dengannya. Berbagai jenis prosesor memiliki strategi berbeda mengenai bagaimana seharusnya tampilan set instruksi mereka (arsitektur RISC atau CISC), tetapi dari sudut pandang pengembang perangkat lunak, satu-satunya fakta penting adalah prosesor hanya mampu mengeksekusi instruksi biner. Tidak peduli bahasa pemrograman apa yang digunakan, aplikasi yang dihasilkan adalah urutan instruksi mesin yang dijalankan oleh prosesor.

Apa yang telah berubah dari waktu ke waktu adalah bagaimana orang membuat urutan di mana instruksi mesin dijalankan. Urutan instruksi mesin yang teratur ini disebut program komputer . Karena perangkat keras menjadi lebih terjangkau dan lebih kuat, ekspektasi pengguna meningkat. Seluruh tujuan pengembangan perangkat lunak sebagai disiplin ilmu adalah untuk menyediakan mekanisme yang memungkinkan pengembang membuat aplikasi yang lebih kompleks dengan upaya yang sama (atau bahkan lebih sedikit) seperti sebelumnya.

Set instruksi prosesor tertentu disebut bahasa mesinnya . Bahasa mesin diklasifikasikan sebagai bahasa pemrograman generasi pertama. Program yang ditulis dengan cara ini biasanya sangat cepat karena dioptimalkan untuk arsitektur prosesor tertentu. Namun terlepas dari manfaat ini, sulit (jika bukan tidak mungkin) bagi manusia untuk menulis aplikasi yang besar dan aman dalam bahasa mesin karena manusia tidak pandai menangani urutan 0 dan 1 yang besar.

Dalam upaya untuk memecahkan masalah ini, pengembang mulai membuat simbol untuk pola biner tertentu, dan dengan ini, bahasa rakitan diperkenalkan. Bahasa assembly adalah bahasa pemrograman generasi kedua . Instruksi dalam bahasa assembly hanya satu tingkat di atas instruksi mesin, yang menggantikan digit biner dengan kata kunci yang mudah diingat seperti ADD, SUB, dan seterusnya. Dengan demikian, Anda dapat menulis ulang contoh instruksi sederhana sebelumnya dalam bahasa assembly sebagai berikut:

TAMBAHKAN R1, R2

Dalam contoh ini, kata kunci ADD mewakili kode operasi dari instruksi, dan R1 dan R2 mendefinisikan register yang terlibat dalam operasi tersebut. Bahkan jika Anda mengamati hanya contoh sederhana ini, bahasa assembly jelas membuat program lebih mudah dibaca oleh manusia dan dengan demikian memungkinkan pembuatan aplikasi yang lebih kompleks.

Meskipun lebih berorientasi pada manusia, bagaimanapun, bahasa generasi kedua tidak memperluas kemampuan prosesor dengan cara apapun.

Masukkan bahasa tingkat tinggi , yang memungkinkan pengembang mengekspresikan diri mereka dalam bentuk semantik tingkat tinggi. Seperti yang mungkin sudah Anda duga, bahasa-bahasa ini disebut sebagai bahasa pemrograman generasi ketiga . Bahasa tingkat tinggi menyediakan berbagai loop, struktur data, objek, dan lain-lain yang kuat, sehingga lebih mudah untuk menyusun banyak aplikasi dengannya.

Seiring waktu, beragam bahasa pemrograman tingkat tinggi diperkenalkan, dan karakteristiknya sangat bervariasi. Beberapa karakteristik ini mengkategorikan bahasa pemrograman sebagai bahasa scripting (atau dinamis), seperti yang kita lihat di bagian selanjutnya.

Juga, ada perbedaan dalam cara bahasa pemrograman dijalankan di mesin host. Biasanya, kompiler menerjemahkan konstruksi bahasa tingkat tinggi ke dalam instruksi mesin yang berada di memori. Meskipun program yang ditulis dengan cara ini pada awalnya sedikit kurang efisien daripada program yang ditulis dalam bahasa assembly karena ketidakmampuan kompiler awal untuk menggunakan sumber daya sistem secara efisien, seiring dengan berjalannya waktu, compiler dan mesin meningkat, membuat bahasa pemrograman sistem lebih unggul daripada bahasa assembly. Akhirnya, bahasa tingkat tinggi menjadi populer di berbagai bidang pengembangan, dari aplikasi bisnis dan permainan hingga perangkat lunak komunikasi dan implementasi sistem operasi.

Tetapi ada cara lain untuk mengubah konstruksi semantik tingkat tinggi menjadi instruksi mesin, dan itu adalah menafsirkannya saat dieksekusi. Dengan cara ini, aplikasi Anda berada dalam skrip, dalam bentuk aslinya, dan konstruksi diubah saat runtime oleh program yang disebut interpreter . Pada dasarnya, Anda menjalankan interpreter yang membaca pernyataan aplikasi Anda dan kemudian menjalankannya. Disebut skrip atau bahasa dinamis , bahasa semacam itu menawarkan tingkat abstraksi yang lebih tinggi daripada yang ditawarkan oleh bahasa pemrograman sistem, dan kita membahasnya secara rinci nanti di bab ini.

Bahasa dengan karakteristik ini sangat cocok untuk tugas tertentu, seperti otomatisasi proses, administrasi sistem, dan merekatkan komponen perangkat lunak yang ada bersama-sama; singkatnya, di mana saja sintaks yang ketat dan batasan yang diperkenalkan oleh bahasa pemrograman sistem menghalangi antara pengembang dan pekerjaan mereka. Penjelasan tentang peran biasa bahasa skrip adalah fokus dari Bab 2, "Aplikasi yang Sesuai untuk Bahasa Skrip."

Tapi apa hubungan semua ini dengan Anda sebagai pengembang Java? Untuk menjawab pertanyaan ini, pertama-tama mari kita rangkum secara singkat sejarah platform Java. Seiring dengan semakin beragamnya platform, semakin sulit bagi pengembang untuk menulis perangkat lunak yang dapat berjalan di sebagian besar sistem yang tersedia. Ini adalah saat Sun mengembangkan Java, yang menawarkan kesederhanaan "tulis sekali, jalankan di mana saja".

Ide utama di balik platform Java adalah mengimplementasikan prosesor virtual sebagai komponen perangkat lunak, yang disebut mesin virtual . Ketika kita memiliki mesin virtual seperti itu, kita dapat menulis dan mengkompilasi kode untuk prosesor tersebut, alih-alih platform perangkat keras atau sistem operasi tertentu. Output dari proses kompilasi ini disebut bytecode , dan secara praktis merepresentasikan kode mesin dari mesin virtual yang ditargetkan. Ketika aplikasi dijalankan, mesin virtual dimulai, dan bytecode diinterpretasikan. Jelas bahwa aplikasi yang dikembangkan dengan cara ini dapat berjalan di platform apa pun dengan mesin virtual yang sesuai terpasang. Pendekatan pengembangan perangkat lunak ini menemukan banyak kegunaan menarik.

Motivasi utama untuk penemuan platform Java adalah untuk menciptakan lingkungan untuk pengembangan perangkat lunak klien yang mudah dibawa-bawa dan sadar jaringan. Tetapi sebagian besar karena penalti kinerja yang diperkenalkan oleh mesin virtual, Java sekarang paling cocok di bidang pengembangan perangkat lunak server. Hal ini jelas terlihat dengan meningkatnya kecepatan komputer pribadi, semakin banyak aplikasi desktop yang ditulis dalam Java. Tren ini terus berlanjut.

Salah satu persyaratan dasar bahasa skrip adalah memiliki penerjemah atau semacam mesin virtual. Platform Java hadir dengan Java Virtual Machine (JVM), yang memungkinkannya menjadi tuan rumah bagi berbagai bahasa skrip. Ada minat yang tumbuh di daerah ini hari ini di masyarakat Jawa. Ada beberapa proyek yang mencoba menyediakan pengembang Java dengan kekuatan yang sama dengan yang dimiliki oleh pengembang bahasa skrip tradisional. Selain itu, ada cara untuk menjalankan aplikasi Anda yang sudah ada yang ditulis dalam bahasa dinamis seperti Python di dalam JVM dan mengintegrasikannya dengan aplikasi atau modul Java lain.

Inilah yang kita bahas dalam buku ini. Kami mengambil pendekatan skrip untuk pemrograman, sambil membahas semua kekuatan dan kelemahan pendekatan ini, cara terbaik menggunakan skrip dalam arsitektur aplikasi, dan alat apa yang tersedia saat ini di dalam JVM.