Bahasa pemrograman domain khusus

**Bahasa 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 masalah 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 *[[Skrip shell|shell script]]*, tetapi 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.

## Penggunaan
Perancangan 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 masalah 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 umum
Bahasa 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:

* polis asuransi jiwa (dikembangkan secara internal oleh perusahaan asuransi besar)
* simulasi pertempuran
* perhitungan gaji
* penagihan

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 implementasi
Bahasa 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. Sering kali, 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 data
Bahasa 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 sering kali 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 pemrograman
Seiring 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. Bahasa domain spesifik diibaratkan sebagai bor listrik: ia merupakan alat yang memiliki tenaga besar dengan berbagai macam kegunaan, tetapi 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.

## Topik bahasa khusus domain

### Bahasa Domain Khusus Eksternal dan Tertanam
DSL 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.

### Pola penggunaan
Berikut beberapa pola penggunaan untuk bahasa domain khusus:

* Pemrosesan dengan alat mandiri, yang dipanggil oleh pengguna  secara langsung, sering kali melalui *shell* atau dari berkas Makefile (misalnya, perintah grep untuk pencocokan ekspresi reguler, perintah sed, perintah lex, perintah yacc, perangkat GraphViz, dll.)
* Bahasa domain khusus yang diimplementasikan menggunakan sistem makro pada bahasa pemrograman, dan yang diubah atau diperluas menjadi bahasa tujuan umum peladen pada waktu kompilasi atau waktu nyata
* Sebagai **bahasa domain khusus tertanam** (*embedded domain-specific language*; **eDSL**) juga dikenal sebagai **bahasa domain khusus internal**, adalah DSL yang diimplementasikan sebagai pustaka dalam bahasa pemrograman peladen (*host*). Bahasa pemrograman domain khusus tertanam memanfaatkan sintaks, semantik, dan lingkungan *runtime* (pengurutan, kondisi, iterasi, fungsi, dsb.) serta menambahkan tipe data primitif khusus domain yang memungkinkan pemrogram menggunakan bahasa pemrograman peladen untuk membuat program yang menghasilkan kode dalam bahasa pemrograman yang menjadi "target". Beberapa eDSL dapat dengan mudah digabungkan menjadi satu program dan fasilitas bahasa peladen dapat digunakan untuk memperluas eDSL yang ada. Keuntungan lain yang mungkin diperoleh dengan menggunakan eDSL adalah peningkatan keamanan tipe dan perkakas IDE yang lebih baik. Contoh eDSL: SQLAlchemy "Core" sebuah eDSL SQL dalam Python, jOOQ sebuah eDSL SQL dalam Java, "sintaks metode" dalam bahasa LINQ, sebuah eDSL SQL dalam C# dan kotlinx.html sebuah eDSL HTML dalam Kotlin.
* Bahasa domain khusus yang dipanggil (pada saat *runtime* berlangsung) dari dalam program yang ditulis dalam bahasa pemrograman tujuan umum seperti C atau Perl, untuk menjalankan fungsi tertentu, sering kali mengembalikan hasil operasi ke bahasa pemrograman peladen untuk diproses lebih lanjut; umumnya, interpreter atau mesin virtual untuk bahasa domain khusus tertanam di dalam aplikasi peladen (misalnya *string format*, mesin ekspresi reguler).
* Bahasa domain khusus yang tertanam dalam aplikasi pengguna (misalnya, bahasa makro dalam *spreadsheet*) dan bahasa yang (1) digunakan untuk mengeksekusi kode yang ditulis oleh pengguna aplikasi, (2) dihasilkan secara dinamis oleh aplikasi, atau (3) keduanya.

Banyak bahasa khusus domain dapat digunakan dalam lebih dari satu cara.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 desain
Mengadopsi 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:

* Bahasa domain khusus kurang komprehensif.
* Bahasa domain khusus memiliki sintaks yang jauh lebih ekspresif untuk domainnya.
* Bahasa domain khusus harus menunjukkan redundansi minimal.

### Idiom
Dalam pemrograman, idiom adalah metode yang diterapkan oleh pemrogram untuk menangani tugas rekayasa yang bersifat umum, misalnya:

* Memastikan data telah disimpan sebelum jendela ditutup.
* Menyunting kode setiap kali parameter baris perintah berubah karena perubahan tersebut memengaruhi perilaku program.

Bahasa pemrograman tujuan umum jarang mendukung idiom seperti itu, tetapi bahasa domain khusus dapat menjelaskan hal-hal tersebut, misalnya:

* Sebuah skrip dapat menyimpan data secara otomatis.
* Bahasa domain khusus dapat membuat parameter masukan baris perintah.

## Contoh
Contoh 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 GameMaker
Bahasa 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 ColdFusion
Bahasa 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.

### FilterMeister
FilterMeister 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 MediaWiki
Fitur *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 lunak
Terdapat 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  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.

### Metakompiler
Kelas 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, dan turunannya TreeMeta.

### Unreal Engine sebelum versi 4 dan game lainnya
Unreal 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 kebijakan
Berbagai 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 statistik
Pemodel 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 pemrograman
Hasilkan 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 .

### Gherkin
Gherkin 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 lainnya
Contoh lain yang menonjol dari bahasa khusus domain meliputi:

* Game Description Language
* Bahasa Pemetaan OpenGL
* Gradle
* Skrip Aksi

## Keuntungan dan kerugian
Beberapa kelebihan dari bahasa domain spesifik:

* Bahasa khusus domain memungkinkan solusi diungkapkan dalam idiom dan pada tingkat abstraksi domain masalah. Idenya adalah bahwa para pakar domain sendiri dapat memahami, memvalidasi, memodifikasi, dan bahkan sering kali mengembangkan program bahasa khusus domain. Namun, hal ini jarang terjadi.
* Bahasa khusus domain memperbolehkan validasi pada tingkat domain. Selama konstruksi bahasanya aman, kalimat apa pun yang ditulis dengannya dapat dianggap aman.
* Bahasa yang spesifik pada suatu domain dapat membantu mengalihkan pengembangan sistem informasi bisnis dari pengembang perangkat lunak tradisional ke kelompok pakar domain yang lebih besar (meskipun memiliki keahlian teknis yang lebih sedikit) yang memiliki pengetahuan yang lebih mendalam tentang domain tersebut.
* Bahasa khusus domain lebih mudah dipelajari, mengingat cakupannya terbatas.

Beberapa kelemahan bahasa spesifik domain:

* Biaya belajar bahasa baru
* Penerapan terbatas
* Biaya perancangan, penerapan, dan pemeliharaan bahasa khusus domain serta alat yang diperlukan untuk mengembangkannya ( IDE )
* Menemukan, menetapkan, dan memelihara ruang lingkup yang tepat.
* Kesulitan dalam menyeimbangkan antara spesifisitas domain dan konstruksi bahasa pemrograman tujuan umum.
* Potensi hilangnya efisiensi prosesor dibandingkan dengan perangkat lunak yang dikodekan secara manual.
* Perkembangan bahasa-bahasa non-standar spesifik domain yang serupa, misalnya, DSL yang digunakan dalam satu perusahaan asuransi versus DSL yang digunakan dalam perusahaan asuransi lain.
* Para ahli non-teknis mungkin merasa kesulitan untuk menulis atau memodifikasi program DSL sendiri.
* Meningkatnya kesulitan dalam mengintegrasikan DSL dengan komponen lain dalam sistem TI (dibandingkan dengan mengintegrasikan dengan bahasa tujuan umum).
* Rendahnya pasokan tenaga ahli dalam DSL tertentu cenderung meningkatkan biaya tenaga kerja.
* Lebih sulit menemukan contoh kode.

## Perkakas untuk merancang bahasa khusus domain

* JetBrains MPS adalah alat untuk merancang bahasa khusus domain. Ia menggunakan penyuntingan proyeksi yang memungkinkan mengatasi keterbatasan pengurai bahasa dan membangun penyunting DSL, seperti penyunting tabel dan diagram. Ini mengimplementasikan pemrograman berorientasi bahasa. MPS menggabungkan lingkungan untuk definisi bahasa, workbench bahasa, dan Lingkungan Pengembangan Terpadu (IDE) untuk bahasa tersebut.
* MontiCore adalah ruang kerja bahasa untuk pengembangan bahasa spesifik domain yang efisien. Ini memproses format tata bahasa yang diperluas yang mendefinisikan DSL dan menghasilkan komponen Java untuk memproses dokumen DSL.
* Xtext adalah kerangka kerja perangkat lunak sumber terbuka untuk mengembangkan bahasa pemrograman dan bahasa khusus domain (DSL). Tidak seperti generator parser standar, Xtext tidak hanya menghasilkan parser tetapi juga model kelas untuk pohon sintaksis abstrak. Selain itu, ia menyediakan IDE berbasis Eclipse yang berfitur lengkap dan dapat disesuaikan. Proyek ini diarsipkan pada bulan April 2023.
* Racket adalah rantai alat bahasa lintas platform yang mencakup kode asli, kompiler JIT dan JavaScript, IDE (selain mendukung Emacs, Vim, VSCode dan lainnya) dan alat baris perintah yang dirancang untuk mengakomodasi pembuatan bahasa khusus domain dan bahasa tujuan umum.

## Lihat juga

* Jargon

## Referensi


## Bacaan lebih lanjut

* 
* 
* 
* 
* 
* 

## Pranala luar

* " Minilanguages ", *Seni Pemrograman Unix ,* oleh Eric S. Raymond
* Martin Fowler tentang bahasa khusus domain dan Language Workbenches . Juga dalam presentasi video
* Bahasa-bahasa Khusus Domain: Bibliografi Beranotasi 
* Kompiler Satu Hari: Membangun bahasa domain-spesifik kecil menggunakan OCaml
* Asosiasi Usenix: Konferensi tentang Bahasa Domain-Spesifik (DSL '97) dan Konferensi ke-2 tentang Bahasa Domain-Spesifik (DSL '99)
* Bahasa Internal Khusus Domain
* Panduan lengkap untuk Bahasa Spesifik Domain (eksternal)
* jEQN    contoh Bahasa Domain-Spesifik internal untuk Pemodelan dan Simulasi Jaringan Antrean yang Diperluas.