Bahasa pemrograman domain khususBahasa pemrograman domain spesifik (domain specific language; bahasa pemrograman tujuan khusus; DSL) adalah bahasa komputer yang dikhususkan untuk domain perangkat lunak tertentu. Hal ini berbeda dengan bahasa pemrograman tujuan umum (GPL), yang dapat digunakan untuk merancang perangkat lunak di semua domain secara luas. Ada ragam jenis DSL, mulai dari bahasa yang banyak digunakan untuk domain khusus yang digunakan secara luas, seperti HTML untuk halaman web, hingga bahasa pemrograman yang hanya digunakan untuk mengoperasikan satu atau beberapa perangkat lunak, seperti kode lunak MUSH. DSL dapat dibagi lagi berdasarkan jenis bahasanya, dan mencakup bahasa markah (markup) domain khusus, bahasa pemodelan domain khusus (lebih umum, bahasa spesifikasi), dan bahasa pemrograman domain khusus. Bahasa komputer yang digunakan secara khusus pada suatu domain selalu ada di era komputer, tetapi istilah "bahasa domain khusus" menjadi lebih populer karena munculnya pemodelan khusus domain. DSL yang berstruktur lebih sederhana, khususnya yang digunakan oleh satu macam perangkat lunak saja, terkadang secara informal disebut bahasa mini. Garis pembeda antara bahasa pemrograman tujuan umum (GPL) dan bahasa pemrograman untuk domain spesifik (DSL) tidak terdefinisi dengan jelas, karena suatu bahasa pemrograman mungkin memiliki beberapa fitur khusus untuk memecahkan suatu masalah dalam domain tertentu namun secara bersamaan fitur khusus tersebut dapat diterapkan secara lebih luas, atau sebaliknya mungkin fitur yang tersedia secara prinsip mampu diterapkan untuk ragam permasalahan tetapi dalam praktiknya lebih sering digunakan dalam pembuatan kode untuk domain pemrograman tertentu. Misalnya, bahasa pemrograman Perl pada awalnya dikembangkan sebagai bahasa pemroses teks dan bahasa perekat, untuk domain yang sama dengan AWK dan shell script, namun pada perkembangan kemudian digunakan sebagai bahasa pemrograman untuk tujuan umum. Sebaliknya, PostScript adalah bahasa dengan sifat Turing lengkap, dan pada prinsipnya dapat digunakan untuk memproses tugas apa pun, tetapi dalam praktiknya secara terbatas digunakan sebagai bahasa deskripsi halaman. PenggunaanPerancangan dan penggunaan bahasa-bahasa pemrograman DSL yang tepat merupakan topik penting dari kajian rekayasa domain dengan menggunakan bahasa yang sesuai dengan kebutuhan domain yang ada – ini dapat berupa penggunaan bahasa DSL atau GPL yang sudah ada, atau pengembangan bahasa DSL baru. Kajian pemrograman berorientasi bahasa membahas perancangan bahasa pemrograman tujuan khusus untuk mengekspresikan masalah sebagai bagian standar dari proses pemecahan masalah. Membuat bahasa pemrograman domain khusus (dengan perangkat lunak yang mendukungnya), lebih dipilih daripada menggunakan kembali bahasa yang sudah ada, dapat memberikan bermanfaat jika bahasa pemrograman tersebut mempermudah dan memperjelas ekspresi suatu jenis masalah atau solusi tertentu diungkapkan lebih jelas ketimbang menggunakan bahasa yang sudah ada, dan apabila permasalahan sejenis sering muncul. Secara pragmatis, DSL dapat dikhususkan pada domain masalah tertentu, teknik representasi masalah tertentu, teknik solusi tertentu, atau aspek lain dari suatu domain. Tinjauan umumBahasa pemrograman domain spesifik dirancang khusus untuk memecahkan masalah dalam domain tertentu dan tidak dimaksudkan untuk dapat memecahkan masalah di luar domain tersebut (meskipun secara teknis hal tersebut bisa dilakukan). Sebaliknya, bahasa pemrograman tujuan umum dibuat untuk memecahkan masalah lintas domain. Domain tersebut bisa merupakan sebagai area bisnis. Beberapa contoh bidang bisnis meliputi:
Bahasa pemrograman domain spesifik dikategorikan di antara bahasa pemrograman kecil dan bahasa skrip, dan sering dipergunakan dengan cara mirip pustaka pemrograman. Batasan antara konsep-konsep ini cukup kabur, seperti batasan antara bahasa skrip dan bahasa pemrograman tujuan umum. Dalam desain dan implementasiBahasa pemrograman domain-spesifik adalah bahasa (bisa juga rangkaian sintaks atau tata bahasa yang dideklarasikan) dengan tujuan yang sangat spesifik dalam desain dan implementasi program. Bahasa pemrograman spesifik domain dapat berupa bahasa pembuat diagram visual, seperti yang dibuat oleh Sistem Pemodelan Eclipse Generik, perancang abstraksi terprogram, seperti Kerangka Pemodelan Eclipse, atau bahasa tekstual. Sebagai contoh, dalam command line, perintah grep memiliki sintaks ekspresi reguler untuk mencari dan mencocokkan pola dalam suatu berkas teks. Perintah sed mendefinisikan sintaks untuk mencocokkan dan mengganti ekspresi reguler. Seringkali, bahasa-bahasa kecil ini dapat digunakan bersama-sama di dalam sebuah program cangkang (shell) untuk melakukan tugas-tugas pemrograman yang lebih kompleks. Sebagaimana yang telah disampaikan sebelumnya, batasan antara bahasa pemrograman domain spesifik dan bahasa skrip agak kabur, namun bahasa pemrograman domain spesifik sering kali kekurangan fungsi tingkat rendah untuk mengakses sistem berkas, kontrol antarproses, dan fungsi lain yang menjadi ciri bahasa pemrograman berfitur lengkap, skrip atau lainnya. Banyak bahasa pemrograman domain spesifik tidak mengkompilasi kode pengguna menjadi bytecode atau kode yang dapat dieksekusi, tetapi dapat mengkompilasinya menjadi berbagai jenis objek media: kode GraphViz mengekspor berkas ke bentuk PostScript, GIF, JPEG, dll. Sedangkan, kode Csound mengkompilasi berkas menjadi berkas audio, dan bahasa pemrograman domain spesifik untuk keperluan ray-tracing seperti POV mengkompilasi kode menjadi berkas grafik. Bahasa definisi dataBahasa definisi data (data definition language; DDL) seperti SQL merupakan contoh yang menarik: bahasa ini dapat dikategorikan sebagai DSL karena bahasa ini digunakan secara spesifik pada domain tertentu (mengakses dan mengelola basis data relasional), dan seringkali digunakan untuk memanggil data dari aplikasi lain. SQL memiliki lebih banyak kata kunci dan fungsi dibandingkan dengan bahasa skrip lain, dan sering dianggap sebagai bahasa yang berdiri sendiri, salah satu alasannya adalah karena manipulasi basis data yang prevalen dalam pemrograman SQL dan jumlah penguasaan yang dibutuhkan untuk menjadi pakar dalam bahasa tersebut. Lebih jauh lagi, batasan antara GPL dan DSL menjadi semakin kabur karena banyak bahasa domain-spesifik telah memiliki akses melalui API, dan dengan demikian dapat diakses dari bahasa pemrograman lain tanpa memutus aliran eksekusi atau memanggil proses terpisah, dan dengan demikian dapat beroperasi sebagai pustaka pemrograman. Perkakas pemrogramanSeiring waktu, beberapa DSL berkembang hingga menyertakan alat pemrograman berfitur lengkap, yang semakin memperumit kategorisasi bahasa tersebut adalah bahasa domain khusus atau bukan. Contohnya adalah bahasa fungsional XSLT, yang secara khusus dirancang untuk mengubah satu grafik XML ke grafik lain, yang telah diperluas sejak awal pembuatannya untuk memungkinkan berbagai bentuk interaksi bahasa pemrograman dengan sistem berkas, manipulasi string dan tanggal, serta pengetikan data. Bahasa domain khusus dapat ditemukan dalam ragam bidang. Sebagai contoh dalam bidang rekayasa berbasis model, terdapat bahasa pemrograman OCL, bahasa pemrograman untuk mendekorasi model dengan pernyataan atau bahasa pemrograman QVT, bahasa transformasi domain khusus. Akan tetapi, bahasa pemrograman seperti UML atau yang serupa dengannya biasanya merupakan bahasa pemodelan serba guna. Untuk meringkas, dapat digunakan analogi sebagai berikut: bahasa pemrograman yang berukuran kecil dapat diibaratkan sebagai pisau, yang dapat digunakan dalam ragam cara berbeda, mulai memotong makanan hingga menebang pohon.[butuh klarifikasi] Bahasa domain spesifik diibaratkan sebagai bor listrik: ia merupakan alat yang memiliki tenaga besar dengan berbagai macam kegunaan, namun memiliki konteks yang spesifik, yaitu melubangi suatu permukaan atau benda. Bahasa pemrograman tujuan umum dapat digambarkan sebagai meja kerja yang lengkap, dengan berbagai alat tersedia untuk melakukan berbagai tugas. Bahasa domain khusus sebaiknya digunakan oleh pemrogram yang, ketika melihat meja kerja mereka saat ini, menyadari bahwa mereka membutuhkan bor khusus untuk menyelesaikan tugas tertentu dan menemukan bahwa bahasa domain khusus tugas tersebut menyediakan kegunaan yang tepat.[butuh rujukan] Topik bahasa khusus domainBahasa Domain Khusus Eksternal dan TertanamDSL yang diimplementasikan melalui interpreter atau compiler independen dikenal sebagai Bahasa Domain Khusus Eksternal. Contoh yang terkenal termasuk TeX atau AWK. Kategori lain yang dikenal sebagai Bahasa Domain Khusus Tertanam (atau Internal) biasanya diimplementasikan dalam bahasa peladen (host) sebagai pustaka dan cenderung digunakan terbatas mengikuti sintaks bahasa peladen, meskipun ini bergantung pada kemampuan yang dimiliki oleh bahasa peladen. [1] Pola penggunaanBerikut beberapa pola penggunaan untuk bahasa domain khusus:[2][3]
Banyak bahasa khusus domain dapat digunakan dalam lebih dari satu cara.[butuh rujukan]Kode DSL yang tertanam dalam bahasa peladen mungkin memiliki dukungan sintaks khusus, seperti regex dalam bahasa sed, AWK, Perl atau JavaScript, atau dapat diteruskan sebagai string. Tujuan desainMengadopsi pendekatan bahasa khusus domain untuk rekayasa perangkat lunak melibatkan baik risiko dan peluang. Bahasa domain khusus yang dirancang dengan baik mampu menemukan keseimbangan yang tepat antara keduanya. Bahasa domain khusus memiliki tujuan desain penting yang berbeda dengan bahasa pemrograman tujuan umum:
IdiomDalam pemrograman, idiom adalah metode yang diterapkan oleh pemrogram untuk menangani tugas rekayasa yang bersifat umum, misalnya:
Bahasa pemrograman tujuan umum jarang mendukung idiom seperti itu, tetapi bahasa domain khusus dapat menjelaskan hal-hal tersebut, misalnya:
ContohContoh bahasa pemrograman domain-spesifik meliputi HTML, Logo untuk menggambar seperti pensil, bahasa deskripsi perangkat keras Verilog dan VHDL, MATLAB dan GNU Octave untuk pemrograman matriks, Mathematica, Maple dan Maxima untuk matematika simbolik, Bahasa Spesifikasi dan Deskripsi untuk sistem reaktif dan terdistribusi, rumus dan makro spreadsheet, SQL untuk kueri basis data relasional, tata bahasa YACC untuk membuat parser, ekspresi reguler untuk menentukan lexer, Sistem Pemodelan Eclipse Generik untuk membuat bahasa diagram, Csound untuk sintesis suara dan musik, dan bahasa input GraphViz dan GrGen, paket perangkat lunak yang digunakan untuk tata letak grafik dan penulisan ulang grafik, Bahasa Konfigurasi Hashicorp yang digunakan untuk Terraform dan alat Hashicorp lainnya, Puppet juga memiliki bahasa konfigurasinya sendiri. Bahasa GameMakerBahasa skrip GML yang digunakan oleh GameMaker Studio adalah bahasa khusus domain yang ditujukan untuk programmer pemula agar dapat mempelajari pemrograman dengan mudah. Sementara bahasa tersebut berfungsi sebagai campuran beberapa bahasa termasuk Delphi, C++, dan BASIC . Sebagian besar fungsi dalam bahasa itu setelah dikompilasi pada kenyataannya memanggil fungsi runtime yang ditulis dalam bahasa khusus untuk platform yang dituju, sehingga implementasi akhirnya tidak terlihat oleh pengguna. Bahasa tersebut terutama berfungsi untuk memudahkan siapa saja mempelajari bahasa tersebut dan mengembangkan permainan, dan berkat GM runtime yang menangani putaran permainan utama dan mengelola implementasi fungsi yang dipanggil, permainan yang paling sederhana hanya memerlukan beberapa baris kode, bukan ribuan. Bahasa Markup ColdFusionBahasa skrip terkait ColdFusion adalah contoh lain dari bahasa khusus domain untuk situs web berbasis data. Bahasa skrip ini digunakan untuk menyatukan bahasa dan layanan seperti Java, . NET, C++, SMS, email, server email, http, ftp, exchange, layanan direktori, dan sistem berkas untuk digunakan di situs web. ColdFusion Markup Language (CFML) mencakup serangkaian tag yang dapat digunakan di halaman ColdFusion untuk berinteraksi dengan sumber data, memanipulasi data, dan menampilkan keluaran. Sintaks tag CFML mirip dengan sintaksis elemen HTML. FilterMeisterFilterMeister adalah lingkungan pemrograman, dengan bahasa pemrograman yang berbasis pada C, untuk tujuan khusus yaitu membuat plug-in filter pemrosesan gambar yang kompatibel dengan Photoshop ; FilterMeister berjalan sebagai plug-in Photoshop itu sendiri dan dapat memuat dan mengeksekusi skrip atau mengompilasi dan mengekspornya sebagai plug-in independen. Meskipun bahasa FilterMeister mereproduksi sebagian besar bahasa C dan pustaka fungsi, ia hanya berisi fitur-fitur yang dapat digunakan dalam konteks plug-in Photoshop dan menambahkan sejumlah fitur spesifik yang hanya berguna dalam domain spesifik ini. Templat MediaWikiFitur Templat MediaWiki adalah bahasa khusus domain tertanam yang tujuan dasarnya adalah untuk mendukung pembuatan templat halaman dan transklusi (penyertaan melalui referensi) halaman MediaWiki ke halaman MediaWiki lainnya. Penggunaan untuk rekayasa perangkat lunakTerdapat minat yang besar dalam bahasa domain khusus untuk meningkatkan produktivitas dan kualitas rekayasa perangkat lunak. Bahasa domain khusus mungkin dapat menyediakan seperangkat alat yang tangguh untuk rekayasa perangkat lunak yang efisien. Alat-alat seperti itu mulai digunakan dalam pengembangan sistem perangkat lunak penting. Software Cost Reduction Toolkit [5] adalah salah satu contohnya. Toolkit ini merupakan rangkaian utilitas yang mencakup editor spesifikasi untuk membuat spesifikasi persyaratan, browser grafik dependensi untuk menampilkan dependensi variabel, pemeriksa konsistensi untuk menemukan kasus yang hilang dalam rumus yang terbentuk dengan baik dalam spesifikasi, pemeriksa model dan pembuktian teorema untuk memeriksa properti program terhadap spesifikasi, serta generator invarian yang secara otomatis membuat invarian berdasarkan persyaratan. Perkembangan yang lebih baru adalah pemrograman berorientasi bahasa, suatu metodologi rekayasa perangkat lunak terpadu yang terutama didasarkan pada pembuatan, pengoptimalan, dan penggunaan bahasa khusus domain. MetakompilerKelas alat penulisan kompiler yang disebut metacompiler berfungsi untuk melengkapi pemrograman berorientasi bahasa dan semua jenis bahasa khusus domain lainnya. Metacompiler juga dapat digunakan untuk menghasilkan pengurai dan pembuat kode untuk bahasa khusus domain. Selain itu, metacompiler mengkompilasi bahasa logam khusus domain khusus untuk domain metapemrograman. Selain mengurai bahasa domain-spesifik, metakompiler berguna untuk menghasilkan berbagai macam alat rekayasa dan analisis perangkat lunak. Metodologi meta-compiler sering ditemukan dalam sistem transformasi program . Metacompiler yang memainkan peran penting dalam ilmu komputer dan industri komputer termasuk Meta-II,[6] dan turunannya TreeMeta.[7] Unreal Engine sebelum versi 4 dan game lainnyaUnreal dan Unreal Tournament meluncurkan bahasa yang disebut UnrealScript . Hal ini memungkinkan pengembangan modifikasi yang cepat dibandingkan dengan pesaingnya Quake (menggunakan mesin Id Tech 2 ). Mesin Id Tech menggunakan kode C standar yang berarti C harus dipelajari dan diterapkan dengan benar, sementara UnrealScript dioptimalkan untuk kemudahan penggunaan dan efisiensi. Demikian pula, pengembangan permainan yang lebih baru memperkenalkan bahasa mereka sendiri yang spesifik, satu contoh yang lebih umum adalah Lua untuk skrip. Mesin aturan untuk otomatisasi kebijakanBerbagai mesin aturan bisnis telah dikembangkan untuk mengotomatiskan kebijakan dan aturan bisnis yang digunakan baik di pemerintahan maupun industri swasta. ILOG, Oracle Policy Automation, DTRules, Drools dan lainnya menyediakan dukungan untuk DSL yang ditujukan untuk mendukung berbagai domain masalah. DTRules melangkah lebih jauh dengan mendefinisikan antarmuka untuk penggunaan beberapa DSL dalam satu set aturan. Tujuan dari mesin aturan bisnis adalah untuk mendefinisikan representasi logika bisnis dalam cara yang dapat dibaca manusia semaksimal mungkin. Hal ini memungkinkan para ahli dan pengembang subjek untuk bekerja dengan dan memahami representasi logika bisnis yang sama. Sebagian besar mesin aturan menyediakan pendekatan untuk menyederhanakan struktur kontrol untuk logika bisnis (misalnya, menggunakan aturan deklaratif atau tabel keputusan ) yang dipadukan dengan alternatif sintaksis pemrograman yang mendukung DSL. Bahasa pemodelan statistikPemodel statistik telah membuat bahasa domain khusus seperti R (implementasi bahasa S), Bugs, Jags, dan Stan. Bahasa-bahasa ini menawarkan sintaksis untuk menggambarkan model Bayesian dan metode untuk menyelesaikannya melalui simulasi. Hasilkan model dan layanan ke berbagai Bahasa pemrogramanHasilkan penanganan dan layanan objek berdasarkan Bahasa Deskripsi Antarmuka untuk bahasa khusus domain seperti JavaScript untuk aplikasi web, HTML untuk dokumentasi, C++ untuk kode berkinerja tinggi, dll. Hal ini dilakukan oleh kerangka kerja lintas bahasa seperti Apache Thrift atau Google Protocol Buffers . GherkinGherkin adalah bahasa yang digunakan untuk menentukan kasus uji untuk memeriksa perilaku perangkat lunak tanpa menentukan bagaimana perilaku tersebut diimplementasikan. Ini dirancang untuk dibaca dan digunakan oleh pengguna non-teknis yang menggunakan desain berorientasi baris dan sintaksis bahasa alami. Selanjutnya, pengujian yang didefinisikan dengan Gherkin harus diterapkan pada bahasa pemrograman umum. Langkah-langkah dalam program Gherkin kemudian berfungsi sebagai sintaksis untuk pemanggilan metode yang dapat diakses oleh orang-orang yang tidak berpartisipasi dalam pengembangan. Contoh lainnyaContoh lain yang menonjol dari bahasa khusus domain meliputi:
Keuntungan dan kerugianBeberapa kelebihan dari bahasa domain spesifik:[2][3]
Beberapa kelemahan bahasa spesifik domain:
Perkakas untuk merancang bahasa khusus domain
Lihat jugaReferensi
Bacaan lebih lanjut
Tautan eksternal
|