Lompat ke isi

Bahasa pemrograman domain khusus: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29318403; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 34: Baris 34:


== Topik bahasa khusus domain ==
== Topik bahasa khusus domain ==
=== Bahasa Domain Khusus Eksternal dan Tertanam ===
=== 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.
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.<ref>Martin Fowler. [https://martinfowler.com/books/dsl.html Domain Specific Languages].</ref>


=== Pola penggunaan ===
=== Pola penggunaan ===
Berikut beberapa pola penggunaan untuk bahasa domain khusus:
Berikut beberapa pola penggunaan untuk bahasa domain khusus:<ref>Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ''ACM Computing Surveys'', 37(4):316–344, 2005.</ref><ref>Diomidis Spinellis. [http://www.spinellis.gr/pubs/jrnl/2000-JSS-DSLPatterns/html/dslpat.html Notable design patterns for domain specific languages]. ''Journal of Systems and Software'', 56(1):91–99, February 2001.</ref>


* Pemrosesan dengan alat mandiri, yang dipanggil oleh pengguna  secara langsung, sering kali melalui ''shell'' atau dari berkas [[Make]]file (misalnya, perintah grep untuk pencocokan ekspresi reguler, perintah sed, perintah lex, perintah yacc, perangkat [[Grafik Viz|GraphViz]], dll.)
* Pemrosesan dengan alat mandiri, yang dipanggil oleh pengguna  secara langsung, sering kali melalui ''shell'' atau dari berkas [[Make]]file (misalnya, perintah grep untuk pencocokan ekspresi reguler, perintah sed, perintah lex, perintah yacc, perangkat [[Grafik Viz|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
* 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 [[Lingkungan pengembangan terpadu|IDE]] yang lebih baik. Contoh eDSL: [[SQLAlchemy]] "Core" sebuah eDSL SQL dalam [[Python (bahasa pemrograman)|Python]], [[Query Berorientasi Objek Java|jOOQ]] sebuah eDSL SQL dalam [[Java]], "sintaks metode" dalam bahasa [[Bahasa Indonesia: LINQ|LINQ]], sebuah eDSL SQL dalam [[C Sharp (bahasa pemrograman)|C#]] dan [https://github.com/Kotlin/kotlinx.html kotlinx.html] sebuah eDSL [[HTML]] dalam [[Kotlin (bahasa pemrograman)|Kotlin]].
* Sebagai '''bahasa domain khusus tertanam''' (''embedded domain-specific language''; '''eDSL''')<ref>Matthias Felleisen. [https://cacm.acm.org/magazines/2018/3/225475-a-programmable-programming-language/fulltext A Programmable Programming Language]. ''Communications of the ACM''. March 2018. Vol. 61 (3). hlm. 62–71. doi:10.1145/3127323.</ref> 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 [[Lingkungan pengembangan terpadu|IDE]] yang lebih baik. Contoh eDSL: [[SQLAlchemy]] "Core" sebuah eDSL SQL dalam [[Python (bahasa pemrograman)|Python]], [[Query Berorientasi Objek Java|jOOQ]] sebuah eDSL SQL dalam [[Java]], "sintaks metode" dalam bahasa [[Bahasa Indonesia: LINQ|LINQ]], sebuah eDSL SQL dalam [[C Sharp (bahasa pemrograman)|C#]] dan [https://github.com/Kotlin/kotlinx.html kotlinx.html] sebuah eDSL [[HTML]] dalam [[Kotlin (bahasa pemrograman)|Kotlin]].
* Bahasa domain khusus yang dipanggil (pada saat ''runtime'' berlangsung) dari dalam program yang ditulis dalam bahasa pemrograman tujuan umum seperti [[C (bahasa pemrograman)|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'', [[Ekspresi reguler|mesin ekspresi reguler]]).
* Bahasa domain khusus yang dipanggil (pada saat ''runtime'' berlangsung) dari dalam program yang ditulis dalam bahasa pemrograman tujuan umum seperti [[C (bahasa pemrograman)|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'', [[Ekspresi reguler|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.
* 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.
Baris 89: Baris 88:
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.
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 kebutuhan perangkat lunak|spesifikasi persyaratan]], browser grafik dependensi untuk menampilkan dependensi variabel, [[Consistency checker|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.
Software Cost Reduction Toolkit <ref>C. Heitmeyer. [http://chacs.nrl.navy.mil/publications/CHACS/1998/1998heitmeyer-WIFT.pdf Proceedings. 2nd IEEE Workshop on Industrial Strength Formal Specification Techniques]. IEEE. 1999. hlm. 12–13. doi:10.1109/WIFT.1998.766290. ISBN 0-7695-0081-1.</ref> adalah salah satu contohnya. Toolkit ini merupakan rangkaian utilitas yang mencakup editor spesifikasi untuk membuat [[Spesifikasi kebutuhan perangkat lunak|spesifikasi persyaratan]], browser grafik dependensi untuk menampilkan dependensi variabel, [[Consistency checker|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 [[Proses pengembangan perangkat lunak|metodologi]] rekayasa perangkat lunak terpadu yang terutama didasarkan pada pembuatan, pengoptimalan, dan penggunaan bahasa khusus domain.
Perkembangan yang lebih baru adalah pemrograman berorientasi bahasa, suatu [[Proses pengembangan perangkat lunak|metodologi]] rekayasa perangkat lunak terpadu yang terutama didasarkan pada pembuatan, pengoptimalan, dan penggunaan bahasa khusus domain.
Baris 98: Baris 97:
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 .
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.
Metacompiler yang memainkan peran penting dalam [[ilmu komputer]] dan industri komputer termasuk Meta-II,<ref>D. V. Shorre. ''Proceedings of the 1964 19th ACM national conference''. 1964. hlm. 41.301–41.3011. doi:10.1145/800257.808896.</ref> dan turunannya TreeMeta.<ref>C. Stephen Carr. [https://apps.dtic.mil/docs/citations/AD0855122 The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645]. ''University of Utah Technical Report RADC-TR-69-83''. 1969.</ref>


=== Unreal Engine sebelum versi 4 dan game lainnya ===
=== Unreal Engine sebelum versi 4 dan game lainnya ===
Baris 126: Baris 125:


== Keuntungan dan kerugian ==
== Keuntungan dan kerugian ==
Beberapa kelebihan dari bahasa domain spesifik:
Beberapa kelebihan dari bahasa domain spesifik:<ref>Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ''ACM Computing Surveys'', 37(4):316–344, 2005.doi : 10.1145/1118890.1118892</ref><ref>Diomidis Spinellis. [http://www.spinellis.gr/pubs/jrnl/2000-JSS-DSLPatterns/html/dslpat.html Notable design patterns for domain specific languages]. ''Journal of Systems and Software'', 56(1):91–99, February 2001. doi : 10.1016/S0164-1212(00)00089-3</ref>


* 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 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.<ref>Margus Freudenthal. ''Domain Specific Languages in a Customs Information System''. ''IEEE Software''. 1 January 2009. hlm. 1. doi:10.1109/MS.2009.152.</ref>
* Bahasa khusus domain memperbolehkan [[Keamanan komputer|validasi]] pada tingkat domain. Selama konstruksi bahasanya aman, kalimat apa pun yang ditulis dengannya dapat dianggap aman.
* Bahasa khusus domain memperbolehkan [[Keamanan komputer|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 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.<ref>Michael Aram. [http://www.jisajournal.com/content/pdf/s13174-015-0030-8.pdf Multilayered analysis of co-development of business information systems]. ''Journal of Internet Services and Applications''. 2015-07-01. Vol. 6 (1). doi:10.1186/s13174-015-0030-8.</ref>
* Bahasa khusus domain lebih mudah dipelajari, mengingat cakupannya terbatas.
* Bahasa khusus domain lebih mudah dipelajari, mengingat cakupannya terbatas.


Baris 141: Baris 140:
* Kesulitan dalam menyeimbangkan antara spesifisitas domain dan konstruksi bahasa pemrograman tujuan umum.
* Kesulitan dalam menyeimbangkan antara spesifisitas domain dan konstruksi bahasa pemrograman tujuan umum.
* Potensi hilangnya efisiensi prosesor dibandingkan dengan perangkat lunak yang dikodekan secara manual.
* 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.
* 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.<ref>Eric Miotto. [http://adams-project.org/standrts09/proceedings/miotto_vardanega_standrts09_final.pdf On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering].</ref>
* Para ahli non-teknis mungkin merasa kesulitan untuk menulis atau memodifikasi program DSL sendiri.
* Para ahli non-teknis mungkin merasa kesulitan untuk menulis atau memodifikasi program DSL sendiri.<ref>Margus Freudenthal. ''Domain Specific Languages in a Customs Information System''. ''IEEE Software''. 1 January 2009. hlm. 1. doi:10.1109/MS.2009.152. Freudenthal, Margus (1 January 2009). "Domain Specific Languages in a Customs Information System". ''IEEE Software'': 1. doi:10.1109/MS.2009.152.</ref>
* Meningkatnya kesulitan dalam mengintegrasikan DSL dengan komponen lain dalam sistem TI (dibandingkan dengan mengintegrasikan dengan bahasa tujuan umum).
* 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.
* Rendahnya pasokan tenaga ahli dalam DSL tertentu cenderung meningkatkan biaya tenaga kerja.
Baris 148: Baris 147:


== Perkakas untuk merancang bahasa khusus domain ==
== 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.<ref>[https://www.jetbrains.com/mps/ JetBrains MPS: Domain-Specific Language Creator].</ref>
* 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.<ref>[https://monticore.github.io/monticore/ MontiCore].</ref>
* [[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.<ref>[https://eclipse.org/Xtext/ Xtext].</ref> Proyek ini diarsipkan pada bulan April 2023.
* 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.<ref>Matthew Flatt. [http://cacm.acm.org/magazines/2012/1/144809-creating-languages-in-racket Creating Languages in Racket]. ''Communications of the ACM''. 2012.</ref>
* 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 ==
== Lihat juga ==
* [[Jargon]]
* [[Jargon]]
== Referensi ==


== Bacaan lebih lanjut ==
== Bacaan lebih lanjut ==
 
*  
*
*  
*
*  
*
*  
*
*  
*
*  
*


== Pranala luar ==
== Pranala luar ==
* " [http://catb.org/~esr/writings/taoup/html/minilanguageschapter.html Minilanguages] ", ''Seni Pemrograman Unix ,'' oleh Eric S. Raymond
* " [http://catb.org/~esr/writings/taoup/html/minilanguageschapter.html Minilanguages] ", ''Seni Pemrograman Unix ,'' oleh Eric S. Raymond
* [http://martinfowler.com/dsl.html Martin Fowler tentang bahasa khusus domain] dan [http://www.martinfowler.com/articles/languageWorkbench.html Language Workbenches] . Juga dalam [http://www.infoq.com/presentations/domain-specific-languages presentasi video]
* [http://martinfowler.com/dsl.html Martin Fowler tentang bahasa khusus domain] dan [http://www.martinfowler.com/articles/languageWorkbench.html Language Workbenches] . Juga dalam [http://www.infoq.com/presentations/domain-specific-languages presentasi video]
* [http://www.st.ewi.tudelft.nl/~arie/papers/dslbib.pdf Bahasa-bahasa Khusus Domain: Bibliografi Beranotasi]
* [http://www.st.ewi.tudelft.nl/~arie/papers/dslbib.pdf Bahasa-bahasa Khusus Domain: Bibliografi Beranotasi]  
* [http://www.venge.net/graydon/talks/mkc/html/index.html Kompiler Satu Hari: Membangun bahasa domain-spesifik kecil menggunakan OCaml]
* [http://www.venge.net/graydon/talks/mkc/html/index.html Kompiler Satu Hari: Membangun bahasa domain-spesifik kecil menggunakan OCaml]
* [http://www.usenix.org/publications/library/proceedings/dsl97 Asosiasi Usenix: Konferensi tentang Bahasa Domain-Spesifik (DSL '97)] dan [http://www.usenix.org/publications/library/proceedings/dsl99 Konferensi ke-2 tentang Bahasa Domain-Spesifik (DSL '99)]
* [http://www.usenix.org/publications/library/proceedings/dsl97 Asosiasi Usenix: Konferensi tentang Bahasa Domain-Spesifik (DSL '97)] dan [http://www.usenix.org/publications/library/proceedings/dsl99 Konferensi ke-2 tentang Bahasa Domain-Spesifik (DSL '99)]
Baris 180: Baris 172:
* [https://tomassetti.me/domain-specific-languages/ Panduan lengkap untuk Bahasa Spesifik Domain (eksternal)]
* [https://tomassetti.me/domain-specific-languages/ Panduan lengkap untuk Bahasa Spesifik Domain (eksternal)]
* [https://sites.google.com/site/simulationarchitecture/jeqn jEQN]    contoh Bahasa Domain-Spesifik internal untuk Pemodelan dan Simulasi [[Queueing Networks|Jaringan Antrean]] yang Diperluas.
* [https://sites.google.com/site/simulationarchitecture/jeqn jEQN]    contoh Bahasa Domain-Spesifik internal untuk Pemodelan dan Simulasi [[Queueing Networks|Jaringan Antrean]] yang Diperluas.
== Referensi ==
<references />


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Artikel ini diadaptasi dalam mode teks dari
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Bahasa+pemrograman+domain+khusus&oldid=29318403 Wikipedia bahasa Indonesia], revisi 29318403 (2026-06-06T06:11:32Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
[https://id.wikipedia.org/w/index.php?title=Bahasa_pemrograman_domain_khusus&oldid=29318403 Wikipedia bahasa Indonesia],
 
revisi 29318403 (2026-06-06T06:11:32Z).
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->
Gambar, media, infobox, templat navigasi, dan kategori sumber
tidak diimpor ke Wiki Unissula.
Atribusi dan lisensi mengikuti ketentuan Creative Commons
Atribusi-BerbagiSerupa (CC BY-SA) pada sumber Wikipedia.

Revisi terkini sejak 23 Agustus 2026 03.13

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 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.[1]

Pola penggunaan

Berikut beberapa pola penggunaan untuk bahasa domain khusus:[2][3]

  • 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)[4] 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 [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.

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,[6] dan turunannya TreeMeta.[7]

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:[8][9]

  • 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.[10]
  • 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.[11]
  • 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.[12]
  • Para ahli non-teknis mungkin merasa kesulitan untuk menulis atau memodifikasi program DSL sendiri.[13]
  • 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.[14]
  • 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.[15]
  • 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.[16] 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.[17]

Lihat juga

Bacaan lebih lanjut

Pranala luar

Referensi

  1. Martin Fowler. Domain Specific Languages.
  2. Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.
  3. Diomidis Spinellis. Notable design patterns for domain specific languages. Journal of Systems and Software, 56(1):91–99, February 2001.
  4. Matthias Felleisen. A Programmable Programming Language. Communications of the ACM. March 2018. Vol. 61 (3). hlm. 62–71. doi:10.1145/3127323.
  5. C. Heitmeyer. Proceedings. 2nd IEEE Workshop on Industrial Strength Formal Specification Techniques. IEEE. 1999. hlm. 12–13. doi:10.1109/WIFT.1998.766290. ISBN 0-7695-0081-1.
  6. D. V. Shorre. Proceedings of the 1964 19th ACM national conference. 1964. hlm. 41.301–41.3011. doi:10.1145/800257.808896.
  7. C. Stephen Carr. The TREE-META Compiler-Compiler System: A Meta Compiler System for the Univac 1108 and General Electric 645. University of Utah Technical Report RADC-TR-69-83. 1969.
  8. Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.doi : 10.1145/1118890.1118892
  9. Diomidis Spinellis. Notable design patterns for domain specific languages. Journal of Systems and Software, 56(1):91–99, February 2001. doi : 10.1016/S0164-1212(00)00089-3
  10. Margus Freudenthal. Domain Specific Languages in a Customs Information System. IEEE Software. 1 January 2009. hlm. 1. doi:10.1109/MS.2009.152.
  11. Michael Aram. Multilayered analysis of co-development of business information systems. Journal of Internet Services and Applications. 2015-07-01. Vol. 6 (1). doi:10.1186/s13174-015-0030-8.
  12. Eric Miotto. On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering.
  13. Margus Freudenthal. Domain Specific Languages in a Customs Information System. IEEE Software. 1 January 2009. hlm. 1. doi:10.1109/MS.2009.152. Freudenthal, Margus (1 January 2009). "Domain Specific Languages in a Customs Information System". IEEE Software: 1. doi:10.1109/MS.2009.152.
  14. JetBrains MPS: Domain-Specific Language Creator.
  15. MontiCore.
  16. Xtext.
  17. Matthew Flatt. Creating Languages in Racket. Communications of the ACM. 2012.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29318403 (2026-06-06T06:11:32Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.