อ่าน 8 นาที
ภาษาเฉพาะโดเมน
ภาษาเฉพาะโดเมน ( DSL ) คือ ภาษาคอมพิวเตอร์ ที่เชี่ยวชาญเฉพาะด้านการใช้งานใน โดเมน ใดโดเมนหนึ่ง โดยเฉพาะ ซึ่งแตกต่างจาก ภาษาทั่วไป (GPL) ที่สามารถใช้งานได้อย่างกว้างขวางในหลายโดเมน...
ภาษาเฉพาะโดเมน
ภาษาเฉพาะโดเมน ( DSL )คือภาษาคอมพิวเตอร์ที่เชี่ยวชาญเฉพาะด้านการใช้งานในโดเมน ใดโดเมนหนึ่ง โดยเฉพาะ ซึ่งแตกต่างจากภาษาทั่วไป (GPL) ที่สามารถใช้งานได้อย่างกว้างขวางในหลายโดเมน DSL มีหลากหลายประเภท ตั้งแต่ภาษาที่ใช้กันอย่างแพร่หลายในโดเมนทั่วไป เช่นHTMLสำหรับเว็บเพจ ไปจนถึงภาษาที่ใช้โดยซอฟต์แวร์เพียงชิ้นเดียวหรือเพียงไม่กี่ชิ้น เช่น ซอฟต์โค้ด MUSH DSL ยังสามารถแบ่งย่อยออกไปตามประเภทของภาษาได้อีก เช่นภาษามาร์กอัป เฉพาะโดเมน ภาษา สร้างแบบจำลองเฉพาะโดเมน(โดยทั่วไปเรียกว่าภาษากำหนดคุณสมบัติ ) และภาษาโปรแกรมเฉพาะโดเมนภาษาคอมพิวเตอร์เฉพาะทางมีมาโดยตลอดในยุคคอมพิวเตอร์ แต่คำว่า "ภาษาเฉพาะโดเมน" ได้รับความนิยมมากขึ้นเนื่องจากการเพิ่มขึ้นของการสร้างแบบจำลองเฉพาะโดเมน DSL ที่เรียบง่ายกว่า โดยเฉพาะอย่างยิ่งที่ใช้โดยแอปพลิเคชันเดียว บางครั้งเรียกอย่างไม่เป็นทางการว่าภาษาขนาดเล็ก
เส้นแบ่งระหว่างภาษาโปรแกรมอเนกประสงค์และภาษาโปรแกรมเฉพาะด้านนั้นไม่ชัดเจนเสมอไป เพราะภาษาหนึ่งอาจมีคุณสมบัติเฉพาะสำหรับโดเมนที่กำหนด แต่สามารถนำไปประยุกต์ใช้ได้ในวงกว้าง หรือในทางกลับกัน อาจมีความสามารถในการประยุกต์ใช้ได้อย่างกว้างขวางในทางทฤษฎี แต่ในทางปฏิบัติแล้วมักใช้เฉพาะในโดเมนที่เฉพาะเจาะจงเท่านั้น ตัวอย่างเช่นPerlเดิมทีพัฒนาขึ้นเป็นภาษาสำหรับการประมวลผลข้อความและการเชื่อมต่อข้อมูล ในโดเมนเดียวกับAWKและสคริปต์เชลล์แต่ต่อมาส่วนใหญ่ถูกใช้เป็นภาษาโปรแกรมอเนกประสงค์ ในทางตรงกันข้ามPostScriptเป็น ภาษา ที่สมบูรณ์แบบตามทฤษฎีของ Turingและในทางทฤษฎีสามารถใช้กับงานใดก็ได้ แต่ในทางปฏิบัติแล้วมักใช้เป็นภาษาสำหรับการอธิบายหน้าเอกสารเท่านั้น
ใช้
การออกแบบและการใช้ภาษาเฉพาะโดเมน (DSL) ที่เหมาะสมเป็นส่วนสำคัญของการวิศวกรรมโดเมนโดยใช้ภาษาที่เหมาะสมกับโดเมนนั้นๆ ซึ่งอาจประกอบด้วยการใช้ DSL หรือ GPL ที่มีอยู่แล้ว หรือการพัฒนา DSL ใหม่การเขียนโปรแกรมเชิงภาษาถือว่าการสร้างภาษาเฉพาะทางเพื่อแสดงปัญหาเป็นส่วนหนึ่งของกระบวนการแก้ปัญหา การสร้างภาษาเฉพาะโดเมน (พร้อมซอฟต์แวร์ที่รองรับ) แทนที่จะใช้ภาษาที่มีอยู่แล้ว อาจคุ้มค่าหากภาษานั้นช่วยให้สามารถแสดงปัญหาหรือวิธีแก้ปัญหาเฉพาะประเภทได้อย่างชัดเจนกว่าภาษาที่มีอยู่ และปัญหาประเภทนั้นปรากฏขึ้นบ่อยครั้งพอสมควร ในทางปฏิบัติ DSL อาจมีความเชี่ยวชาญเฉพาะด้านสำหรับโดเมนปัญหาเฉพาะ เทคนิคการแสดงปัญหาเฉพาะ เทคนิคการแก้ปัญหาเฉพาะ หรือด้านอื่นๆ ของโดเมน
ภาพรวม
ภาษาเฉพาะโดเมนถูกสร้างขึ้นมาเพื่อแก้ปัญหาในโดเมนเฉพาะเจาะจงเท่านั้น และไม่ได้มีจุดประสงค์ที่จะแก้ปัญหาในโดเมนอื่น (แม้ว่าในทางเทคนิคอาจเป็นไปได้ก็ตาม) ในทางตรงกันข้าม ภาษาอเนกประสงค์ถูกสร้างขึ้นมาเพื่อแก้ปัญหาในหลายโดเมน โดเมนนั้นอาจเป็นสาขาธุรกิจก็ได้ ตัวอย่างของสาขาธุรกิจ ได้แก่:
- กรมธรรม์ประกันชีวิต (จัดทำขึ้นภายในโดยบริษัทประกันภัยขนาดใหญ่)
- การจำลองการต่อสู้
- การคำนวณเงินเดือน
- การเรียกเก็บเงิน
ภาษาเฉพาะโดเมนอยู่ระหว่างภาษาโปรแกรมขนาดเล็กกับภาษาสคริปต์และมักถูกใช้ในลักษณะเดียวกับไลบรารีการเขียนโปรแกรมขอบเขตระหว่างแนวคิดเหล่านี้ค่อนข้างคลุมเครือ คล้ายกับขอบเขตระหว่างภาษาสคริปต์และภาษาโปรแกรมทั่วไป
ในการออกแบบและการดำเนินการ
ภาษาเฉพาะโดเมน (Domain-specific languages) คือภาษา (หรือบ่อยครั้งคือไวยากรณ์หรือโครงสร้างไวยากรณ์ที่ประกาศไว้) ที่มีเป้าหมายเฉพาะเจาะจงมากในการออกแบบและการใช้งาน ภาษาเฉพาะโดเมนอาจเป็นภาษาสำหรับการสร้างแผนภาพแบบภาพ เช่น ภาษาที่สร้างโดยGeneric Eclipse Modeling Systemภาษาสำหรับการเขียนโปรแกรม เช่นEclipse Modeling Frameworkหรือภาษาข้อความ ตัวอย่างเช่น ยูทิลิตี้บรรทัดคำสั่งgrepมีไวยากรณ์นิพจน์ปกติ ที่ใช้จับคู่รูปแบบในบรรทัดข้อความ ยู ทิลิตี้ sedกำหนดไวยากรณ์สำหรับการจับคู่และแทนที่นิพจน์ปกติ บ่อยครั้งที่ภาษาขนาดเล็กเหล่านี้สามารถใช้ร่วมกันภายในเชลล์เพื่อทำงานเขียนโปรแกรมที่ซับซ้อนมากขึ้นได้
เส้นแบ่งระหว่างภาษาเฉพาะโดเมนและภาษาสคริปต์นั้นค่อนข้างคลุมเครือ แต่ภาษาเฉพาะโดเมนส่วนใหญ่มักขาดฟังก์ชันระดับต่ำสำหรับ การเข้าถึง ระบบไฟล์การควบคุมระหว่างกระบวนการ และฟังก์ชันอื่นๆ ที่เป็นลักษณะเฉพาะของภาษาโปรแกรมที่มีคุณสมบัติครบถ้วน ไม่ว่าจะเป็นภาษาสคริปต์หรือไม่ก็ตาม ภาษาเฉพาะโดเมนหลายภาษาไม่ได้คอมไพล์เป็นไบต์โค้ดหรือโค้ดที่สามารถเรียกใช้งานได้ แต่จะคอมไพล์เป็นวัตถุสื่อประเภทต่างๆ เช่น GraphViz ส่งออกเป็นPostScript , Graphics Interchange Format ( GIF ), Joint Photographic Experts Group ( JPEG ) เป็นต้น ในขณะที่Csoundคอมไพล์เป็นไฟล์เสียง และ ภาษาเฉพาะโดเมน สำหรับการติดตามรังสีเช่น Persistence of Vision Ray Tracer ( POV-Ray ) จะคอมไพล์เป็นไฟล์กราฟิก
ภาษานิยามข้อมูล
ภาษาสำหรับการกำหนดโครงสร้างข้อมูลอย่างSQLนั้นเป็นกรณีที่น่าสนใจ: อาจกล่าวได้ว่าเป็นภาษาเฉพาะโดเมน เนื่องจากมีความเฉพาะเจาะจงกับโดเมนที่เฉพาะเจาะจง (ในกรณีของ SQL คือการเข้าถึงและจัดการฐานข้อมูลเชิงสัมพันธ์) และมักถูกเรียกใช้จากแอปพลิเคชันอื่น แต่ SQL มีคำหลักและฟังก์ชันมากกว่าภาษาสคริปต์หลายภาษา และมักถูกมองว่าเป็นภาษาที่สมบูรณ์แบบ ส่วนหนึ่งเป็นเพราะการจัดการฐานข้อมูลเป็นที่แพร่หลายในการเขียนโปรแกรม และระดับความเชี่ยวชาญที่จำเป็นในการเป็นผู้เชี่ยวชาญในภาษาดังกล่าว
ยิ่งไปกว่านั้น ภาษาเฉพาะโดเมนหลายภาษายังเปิดเผย API และสามารถเข้าถึงได้จากภาษาโปรแกรมอื่น ๆ โดยไม่ขัดจังหวะการทำงานหรือเรียกใช้กระบวนการแยกต่างหาก จึงสามารถทำงานในฐานะไลบรารีการเขียนโปรแกรมได้
เครื่องมือการเขียนโปรแกรม
ภาษาเฉพาะโดเมนบางภาษาจะขยายตัวขึ้นเรื่อยๆ จนรวมถึงเครื่องมือการเขียนโปรแกรมที่มีคุณสมบัติครบถ้วน ซึ่งยิ่งทำให้คำถามที่ว่าภาษาใดเป็นภาษาเฉพาะโดเมนหรือไม่นั้นซับซ้อนยิ่งขึ้น ตัวอย่างที่ดีคือภาษาเชิงฟังก์ชัน Extensible Stylesheet Language Transformation ( XSLT ) ซึ่งออกแบบมาโดยเฉพาะเพื่อแปลงกราฟ XML หนึ่งไปเป็นอีกกราฟหนึ่ง และได้รับการพัฒนาต่อยอดมาตั้งแต่เริ่มแรก (โดยเฉพาะในเวอร์ชัน 2.0) เพื่อให้สามารถโต้ตอบกับระบบไฟล์ในรูปแบบต่างๆ การจัดการสตริงและวันที่ และการกำหนดประเภทข้อมูลได้
ในวิศวกรรมที่ขับเคลื่อนด้วยแบบจำลอง เราสามารถพบตัวอย่างของภาษาเฉพาะโดเมนได้มากมาย เช่นภาษาข้อจำกัดของวัตถุ (OCL) ซึ่งเป็นภาษาสำหรับตกแต่งแบบจำลองด้วยข้อกำหนด หรือภาษาการสอบถาม/การแสดงผล/การแปลง ( QVT ) ซึ่งเป็นภาษาการแปลงเฉพาะโดเมน อย่างไรก็ตาม ภาษาต่างๆ เช่นภาษาการสร้างแบบจำลองแบบรวม (UML) โดยทั่วไปแล้วเป็นภาษาการสร้างแบบจำลองอเนกประสงค์
โดยสรุปแล้ว การเปรียบเทียบจะช่วยให้เข้าใจได้ง่ายขึ้น: ภาษาโปรแกรมขนาดเล็กเปรียบเสมือนมีด ซึ่งสามารถใช้งานได้หลายพันวิธี ตั้งแต่ตัดอาหารไปจนถึงป้องกันตัวภาษาโปรแกรมเฉพาะด้านเปรียบเสมือนสว่านไฟฟ้า: มันเป็นเครื่องมือทรงพลังที่มีการใช้งานหลากหลาย แต่มีบริบทเฉพาะเจาะจง นั่นคือการเจาะรูภาษาโปรแกรมอเนกประสงค์เปรียบเสมือนโต๊ะทำงานที่ครบครัน มีเครื่องมือหลากหลายชนิดสำหรับการทำงานที่หลากหลาย ภาษาโปรแกรมเฉพาะด้านควรถูกใช้โดยโปรแกรมเมอร์ที่มองเห็นเครื่องมือที่มีอยู่แล้วและรู้สึกว่าต้องการสว่านที่ดีกว่า และพบว่าภาษาโปรแกรมเฉพาะด้านนั้นตอบโจทย์ได้อย่างลงตัว
หัวข้อภาษาเฉพาะโดเมน
ภาษาเฉพาะโดเมนภายนอกและฝังตัว
ภาษา DSL ที่ใช้งานผ่านตัวแปลหรือคอมไพเลอร์อิสระเรียกว่าภาษาเฉพาะโดเมนภายนอกตัวอย่างที่รู้จักกันดี ได้แก่ TeX หรือ AWK ภาษาเฉพาะโดเมนแบบฝังตัว (หรือภายใน)จะถูกนำไปใช้ในอีกหมวดหมู่หนึ่ง โดยทั่วไปจะใช้งานภายในภาษาโฮสต์ในรูปแบบของไลบรารี และมักจะจำกัดอยู่เฉพาะไวยากรณ์ของภาษาโฮสต์ แม้ว่าสิ่งนี้จะขึ้นอยู่กับความสามารถของภาษาโฮสต์ก็ตาม[ 1 ]
รูปแบบการใช้งาน
มีรูปแบบการใช้งานหลายแบบสำหรับภาษาเฉพาะโดเมน: [ 2 ] [ 3 ]
- การประมวลผลด้วยเครื่องมือแบบสแตนด์อโลน ซึ่งเรียกใช้งานโดยตรงผ่านการดำเนินการของผู้ใช้ บ่อยครั้งผ่านทางบรรทัดคำสั่งหรือจากไฟล์ Makefile (เช่น grep สำหรับการจับคู่ด้วยนิพจน์ปกติ, sed, lex, yacc , ชุด เครื่องมือ GraphVizเป็นต้น)
- ภาษาเฉพาะโดเมนซึ่งถูกนำไปใช้โดยใช้ระบบมาโครของภาษาโปรแกรม และซึ่งจะถูกแปลงหรือขยายไปเป็นภาษาทั่วไปหลักในระหว่างการคอมไพล์หรือแบบเรียลไทม์
- เช่นภาษาเฉพาะโดเมนแบบฝังตัว ( eDSL ) [ 4 ]หรือที่รู้จักกันในชื่อภาษาเฉพาะโดเมนภายในคือ DSL ที่ถูกนำไปใช้เป็นไลบรารีในภาษาโปรแกรม "โฮสต์" ภาษาเฉพาะโดเมนแบบฝังตัวใช้ประโยชน์จากไวยากรณ์ความหมายและ สภาพแวดล้อม ของระบบรันไทม์ (การจัดลำดับ เงื่อนไข การวนซ้ำ ฟังก์ชัน ฯลฯ) และเพิ่มพรีมิทีฟเฉพาะโดเมนที่อนุญาตให้นักเขียนโปรแกรมใช้ภาษาโปรแกรม "โฮสต์" เพื่อสร้างโปรแกรมที่สร้างโค้ดในภาษาโปรแกรม "เป้าหมาย" สามารถรวม eDSL หลายตัวเข้าด้วยกันในโปรแกรมเดียวได้อย่างง่ายดาย และสามารถใช้สิ่งอำนวยความสะดวกของภาษาโฮสต์เพื่อขยาย eDSL ที่มีอยู่ได้ ข้อดีอื่นๆ ที่เป็นไปได้ของการใช้ eDSL ได้แก่ความปลอดภัยของประเภท ที่ดีขึ้น และ เครื่องมือ สภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) ที่ดีขึ้น ตัวอย่าง eDSL: SQLAlchemy "Core" ซึ่งเป็น SQL eDSL ในPython , JOOQ Object Oriented Querying (jOOQ) ซึ่งเป็น SQL eDSL ในJava , Language Integrated Query 's ( LINQ) "method syntax" ซึ่งเป็น SQL eDSL ในC#และ kotlinx.html ซึ่งเป็นHTML eDSL ในKotlin [ 5 ]
- ภาษาเฉพาะโดเมน (Domain-specific languages) คือภาษาที่ถูกเรียกใช้ (ในขณะรันไทม์ ) จากโปรแกรมที่เขียนด้วยภาษาโปรแกรมทั่วไป เช่นCหรือPerlเพื่อทำหน้าที่เฉพาะอย่าง โดยมักจะส่งผลลัพธ์ของการดำเนินการกลับไปยังภาษาโปรแกรม "โฮสต์" เพื่อประมวลผลต่อไป โดยทั่วไปแล้ว ตัวแปลภาษาหรือเครื่องเสมือนสำหรับภาษาเฉพาะโดเมนจะถูกฝังอยู่ในแอปพลิเคชันโฮสต์ (เช่นสตริงรูปแบบเครื่องมือประมวลผลนิพจน์ปกติ )
- ภาษาเฉพาะโดเมนที่ฝังอยู่ในแอปพลิเคชันของผู้ใช้ (เช่น ภาษามาโครภายในสเปรดชีต) [ 6 ]และซึ่ง (1) ใช้ในการดำเนินการโค้ดที่เขียนโดยผู้ใช้แอปพลิเคชัน (2) สร้างขึ้นแบบไดนามิกโดยแอปพลิเคชัน หรือ (3) ทั้งสองอย่าง
เป้าหมายการออกแบบ
การนำภาษาเฉพาะโดเมนมาใช้ในวิศวกรรมซอฟต์แวร์นั้นมีทั้งความเสี่ยงและโอกาส ภาษาเฉพาะโดเมนที่ออกแบบมาอย่างดีจะสามารถสร้างสมดุลที่เหมาะสมระหว่างสิ่งเหล่านี้ได้
ภาษาเฉพาะโดเมนมีเป้าหมายการออกแบบที่สำคัญซึ่งแตกต่างจากภาษาทั่วไป:
- ภาษาเฉพาะโดเมนนั้นมีความครอบคลุมน้อยกว่า
- ภาษาเฉพาะโดเมนมีความสามารถในการแสดงออกได้ดีกว่ามากในโดเมนนั้นๆ
- ภาษาเฉพาะโดเมนควรมีส่วนที่ซ้ำซ้อน น้อย ที่สุด
สำนวน
ในด้านการเขียนโปรแกรม สำนวน(idioms)คือวิธีการที่โปรแกรมเมอร์กำหนดขึ้นเพื่อจัดการกับงานพัฒนาทั่วไป เช่น:
- โปรดตรวจสอบให้แน่ใจว่าได้บันทึกข้อมูลก่อนปิดหน้าต่าง
- แก้ไขโค้ดทุกครั้งที่มีการเปลี่ยนแปลงพารามิเตอร์ในบรรทัดคำสั่ง เนื่องจากจะมีผลต่อพฤติกรรมของโปรแกรม
ภาษาโปรแกรมทั่วไปมักไม่รองรับสำนวนดังกล่าว แต่ภาษาเฉพาะด้านสามารถอธิบายสำนวนเหล่านั้นได้ เช่น:
- สคริปต์สามารถบันทึกข้อมูลโดยอัตโนมัติได้
- ภาษาเฉพาะโดเมนสามารถกำหนดพารามิเตอร์ให้กับอินพุตบรรทัดคำสั่งได้
ตัวอย่าง
ตัวอย่างของภาษาโปรแกรมเฉพาะโดเมน ได้แก่HTML , Logoสำหรับการวาดภาพคล้ายดินสอ, VerilogและVHDLภาษาสำหรับการอธิบายฮาร์ดแวร์, MATLABและGNU Octaveสำหรับการเขียนโปรแกรมเมทริกซ์, Mathematica , MapleและMaximaสำหรับคณิตศาสตร์เชิง สัญลักษณ์ , ภาษาสำหรับการกำหนดและอธิบายระบบแบบตอบสนองและแบบกระจาย, สูตรและมาโครใน สเปรดชีต, SQLสำหรับการสืบค้นฐานข้อมูลเชิง สัมพันธ์, ไวยากรณ์ Yaccสำหรับการสร้างตัวแยกวิเคราะห์ , นิพจน์ปกติสำหรับการระบุ ตัว แยกคำ , ระบบการสร้างแบบจำลอง Generic Eclipseสำหรับการสร้างภาษาสำหรับการสร้างแผนภาพ, Csoundสำหรับการสังเคราะห์เสียงและดนตรี, และภาษาอินพุตของGraphVizและGrGenซึ่งเป็นแพ็กเกจซอฟต์แวร์ที่ใช้สำหรับการจัดวางกราฟและการเขียนกราฟ ใหม่ , ภาษาการกำหนดค่า HashiCorpที่ใช้สำหรับTerraformและเครื่องมือ HashiCorp อื่นๆ และPuppetก็มีภาษาการกำหนดค่า ของตัวเอง ด้วย
ภาษา GameMaker
GML เป็นภาษาเฉพาะโดเมนที่ใช้ในGameMaker Studioออกแบบมาเพื่อช่วยให้โปรแกรมเมอร์มือใหม่เรียนรู้พื้นฐานการเขียนโค้ดได้ง่ายขึ้น มันทำงานโดยการผสมผสานภาษาต่างๆ หลายภาษาเข้าด้วยกัน เช่นDelphi , C++และBASICฟังก์ชันส่วนใหญ่ใน GML เมื่อคอมไพล์แล้ว จะเรียกใช้ฟังก์ชันรันไทม์ที่เขียนด้วยภาษาเฉพาะของแพลตฟอร์มเป้าหมาย ดังนั้น การใช้งานขั้นสุดท้ายจึงถูกซ่อนไว้จากผู้ใช้ เป้าหมายหลักของภาษานี้คือการลดอุปสรรคในการเริ่มต้นพัฒนาเกม รันไทม์ของ GameMaker ซึ่งจัดการลูปหลักของเกมและจัดการการใช้งานฟังก์ชัน ช่วยให้เกมง่ายๆ สามารถใช้โค้ดเพียงไม่กี่บรรทัดแทนที่จะเป็นหลายพันบรรทัด
ภาษามาร์กอัปโคลด์ฟิวชั่น
ภาษาสคริปต์ที่เกี่ยวข้องกับ ColdFusionเป็นอีกตัวอย่างหนึ่งของภาษาเฉพาะโดเมนสำหรับเว็บไซต์ที่ขับเคลื่อนด้วยข้อมูล ภาษาดังกล่าวใช้ในการเชื่อมต่อภาษาและบริการต่างๆ เช่น Java, .NET , C++, SMS, อีเมล , เซิร์ฟเวอร์อีเมล, http, ftp, exchange, บริการไดเร็กทอรี และระบบไฟล์เพื่อใช้ในเว็บไซต์
ภาษามาร์กอัป ColdFusion (CFML) ประกอบด้วยชุดแท็กที่สามารถใช้ในหน้าเว็บ ColdFusion เพื่อโต้ตอบกับแหล่งข้อมูล จัดการข้อมูล และแสดงผลลัพธ์ ไวยากรณ์ของแท็ก CFML คล้ายกับไวยากรณ์ขององค์ประกอบ HTML
ฟิลเตอร์ไมสเตอร์
FilterMeister คือสภาพแวดล้อมการเขียนโปรแกรม โดยใช้ภาษาโปรแกรมที่อิงตามภาษา C สำหรับวัตถุประสงค์เฉพาะในการสร้าง ปลั๊กอินฟิลเตอร์ประมวลผลภาพที่ใช้งานร่วมกับ Photoshopได้ FilterMeister ทำงานเป็นปลั๊กอินของ Photoshop และสามารถโหลดและเรียกใช้สคริปต์ หรือคอมไพล์และส่งออกเป็นปลั๊กอินอิสระได้ แม้ว่าภาษาของ FilterMeister จะจำลองส่วนสำคัญของภาษา C และไลบรารีฟังก์ชัน แต่ก็มีเฉพาะคุณสมบัติที่สามารถใช้งานได้ในบริบทของปลั๊กอิน Photoshop เท่านั้น และเพิ่มคุณสมบัติเฉพาะบางอย่างที่ใช้งานได้เฉพาะในโดเมนนี้เท่านั้น
เทมเพลต MediaWiki
คุณลักษณะเทมเพลตของMediaWikiเป็นภาษาเฉพาะโดเมนที่ฝังไว้ ซึ่งมีวัตถุประสงค์พื้นฐานคือเพื่อสนับสนุนการสร้างเทมเพลตหน้าและการรวม (รวมโดยการอ้างอิง) ของหน้า MediaWiki ลงในหน้า MediaWiki อื่น ๆ
วิศวกรรมซอฟต์แวร์ใช้
ภาษาเฉพาะโดเมนได้รับความสนใจอย่างมากในการปรับปรุงประสิทธิภาพและคุณภาพของงานวิศวกรรมซอฟต์แวร์ภาษาเฉพาะโดเมนอาจเป็นชุดเครื่องมือที่แข็งแกร่งสำหรับการพัฒนาซอฟต์แวร์อย่างมีประสิทธิภาพ เครื่องมือเหล่านี้เริ่มเข้ามามีบทบาทในการพัฒนาซอฟต์แวร์ระบบที่สำคัญแล้ว
ชุดเครื่องมือลดต้นทุนซอฟต์แวร์[ 7 ]เป็นตัวอย่างหนึ่งของสิ่งนี้ ชุดเครื่องมือนี้เป็นชุดยูทิลิตี้ที่ประกอบด้วยตัวแก้ไขข้อกำหนดเพื่อสร้างข้อกำหนดความต้องการตัวเรียกดูกราฟการพึ่งพาเพื่อแสดงการพึ่งพาของตัวแปรตัวตรวจสอบความสอดคล้องเพื่อตรวจจับกรณีที่ขาดหายไปในสูตรที่มีรูปแบบดีในข้อกำหนดตัวตรวจสอบแบบจำลองและตัวพิสูจน์ทฤษฎีบทเพื่อตรวจสอบคุณสมบัติของโปรแกรมเทียบกับข้อกำหนด และตัวสร้างตัวแปรคงที่ที่สร้างตัวแปรคงที่โดยอัตโนมัติตามข้อกำหนด
พัฒนาการล่าสุดคือการเขียนโปรแกรมเชิงภาษา ซึ่ง เป็นระเบียบวิธีทางวิศวกรรมซอฟต์แวร์แบบบูรณาการที่เน้นการสร้าง การปรับแต่ง และการใช้ภาษาเฉพาะด้านเป็นหลัก
เมตาคอมไพเลอร์
เครื่องมือเขียนคอมไพเลอร์ที่เรียกว่า เมตาคอมไพเลอร์ เป็น ส่วนเสริม ของ การเขียนโปรแกรมเชิงภาษาและภาษาเฉพาะโดเมนรูปแบบอื่นๆ ทั้งหมดคอมไพเลอร์ประเภทนี้มีประโยชน์สำหรับการสร้างตัวแยกวิเคราะห์และตัวสร้างโค้ดสำหรับภาษาเฉพาะโดเมน และเมตาคอมไพเลอร์จะคอมไพล์ภาษาเมตา เฉพาะโดเมน ที่ออกแบบมาโดยเฉพาะสำหรับโดเมนของการเขียนโปรแกรมเชิงเมตา
นอกจากการวิเคราะห์ภาษาเฉพาะโดเมนแล้ว เมตาคอมไพเลอร์ยังมีประโยชน์ในการสร้างเครื่องมือทางวิศวกรรมซอฟต์แวร์และการวิเคราะห์ที่หลากหลาย ระเบียบวิธีเมตาคอมไพเลอร์มักพบได้ในระบบ การแปลงโปรแกรม
เมตาคอมไพเลอร์ที่มีบทบาทสำคัญทั้งในวิทยาศาสตร์คอมพิวเตอร์และอุตสาหกรรมคอมพิวเตอร์ ได้แก่META II [ 8 ]และTreeMeta ซึ่งเป็นรุ่นต่อจาก META II [ 9 ]
Unreal Engine เวอร์ชันก่อน 4 และเกมอื่นๆ
เกม UnrealและUnreal Tournamentเปิดตัวภาษาโปรแกรมที่ชื่อว่าUnrealScriptซึ่งช่วยให้การพัฒนาและปรับแต่งเกมทำได้รวดเร็วกว่าเกมคู่แข่งอย่างQuake (ที่ใช้ เอนจิ้น Id Tech 2 ) เอนจิ้น Id Tech ใช้ โค้ด ภาษา C มาตรฐาน หมายความว่าผู้เล่นต้องเรียนรู้และใช้งานภาษา C อย่างถูกต้อง ในขณะที่ UnrealScript ถูกออกแบบมาเพื่อให้ใช้งานง่ายและมีประสิทธิภาพ ในทำนองเดียวกัน เกมรุ่นใหม่ๆ ก็ได้แนะนำภาษาโปรแกรมเฉพาะของตนเองสำหรับการพัฒนาเช่นกัน ตัวอย่างที่พบได้ทั่วไปอีกอย่างหนึ่งคือLuaสำหรับการเขียนสคริปต์
กลไกการกำหนดกฎเกณฑ์สำหรับการทำงานอัตโนมัติของนโยบาย
มีการพัฒนาเครื่องมือจัดการกฎทางธุรกิจต่างๆ มากมาย เพื่อใช้ในการสร้างระบบอัตโนมัติสำหรับนโยบายและกฎทางธุรกิจที่ใช้ในทั้งภาครัฐและภาคเอกชน ILOG , Oracle Policy Automation , DTRules, Droolsและอื่นๆ ให้การสนับสนุน DSL ที่มุ่งเน้นการแก้ปัญหาในหลากหลายด้าน DTRules ถึงขั้นกำหนดอินเทอร์เฟซสำหรับการใช้งาน DSL หลายตัวภายในชุดกฎเดียวกัน
จุดประสงค์ของระบบสร้างกฎทางธุรกิจคือการกำหนดรูปแบบการแสดงตรรกะทางธุรกิจในรูปแบบที่มนุษย์อ่านได้ง่ายที่สุด ซึ่งช่วยให้ทั้งผู้เชี่ยวชาญเฉพาะด้านและนักพัฒนาสามารถทำงานและเข้าใจรูปแบบการแสดงตรรกะทางธุรกิจเดียวกันได้ ระบบสร้างกฎส่วนใหญ่จะนำเสนอทั้งวิธีการลดความซับซ้อนของโครงสร้างการควบคุมสำหรับตรรกะทางธุรกิจ (เช่น การใช้กฎแบบประกาศหรือตารางการตัดสินใจ ) ควบคู่ไปกับทางเลือกอื่นนอกเหนือจากไวยากรณ์การเขียนโปรแกรม โดยใช้ภาษาเฉพาะโดเมน (DSL) แทน
ภาษาการสร้างแบบจำลองทางสถิติ
นักสร้างแบบจำลองทางสถิติได้พัฒนาภาษาเฉพาะด้าน เช่นR (ซึ่งเป็นการนำ ภาษา S มาใช้ ), Bugs , JagsและStanภาษาเหล่านี้มีไวยากรณ์สำหรับอธิบายแบบจำลองเบย์เซียนและสร้างวิธีการแก้ปัญหาโดยใช้การจำลอง
สร้างโมเดลและบริการสำหรับภาษาโปรแกรมหลายภาษา
สร้างการจัดการวัตถุและบริการโดยอิงจากภาษาอธิบายอินเทอร์เฟซ (Interface Description Language)สำหรับภาษาเฉพาะโดเมน เช่น JavaScript สำหรับเว็บแอปพลิเคชัน HTML สำหรับเอกสาร C++ สำหรับโค้ดประสิทธิภาพสูง เป็นต้น ซึ่งทำได้โดยเฟรมเวิร์กข้ามภาษา เช่นApache ThriftหรือGoogle Protocol Buffers
แตงกวาดอง
Gherkinเป็นภาษาที่ออกแบบมาเพื่อกำหนดกรณีทดสอบเพื่อตรวจสอบพฤติกรรมของซอฟต์แวร์ โดยไม่ต้องระบุวิธีการใช้งานพฤติกรรมนั้น มันถูกออกแบบมาให้ผู้ใช้ที่ไม่ใช่ผู้เชี่ยวชาญด้านเทคนิคสามารถอ่านและใช้งานได้ง่าย โดยใช้ไวยากรณ์ภาษาธรรมชาติและการออกแบบที่เน้นบรรทัดต่อบรรทัดจากนั้น การทดสอบที่กำหนดด้วย Gherkin จะต้องถูกนำไปใช้ในภาษาโปรแกรมทั่วไป ขั้นตอนในโปรแกรม Gherkin จะทำหน้าที่เป็นไวยากรณ์สำหรับการเรียกใช้เมธอดที่ผู้ที่ไม่ใช่ผู้พัฒนาสามารถเข้าถึงได้
ตัวอย่างอื่นๆ
ตัวอย่างที่โดดเด่นอื่นๆ ของภาษาเฉพาะโดเมน ได้แก่:
ข้อดีและข้อเสีย
- ภาษาเฉพาะโดเมนช่วยให้สามารถแสดงวิธีแก้ปัญหาได้ในรูปแบบและระดับนามธรรมของโดเมนปัญหา แนวคิดคือผู้เชี่ยวชาญในโดเมนเองอาจเข้าใจ ตรวจสอบ แก้ไข และบ่อยครั้งถึงขั้นพัฒนาโปรแกรมภาษาเฉพาะโดเมนได้ อย่างไรก็ตาม เรื่องนี้เกิดขึ้นไม่บ่อยนัก[ 10 ]
- ภาษาเฉพาะโดเมนช่วยให้สามารถตรวจสอบความถูกต้องได้ในระดับโดเมน ตราบใดที่โครงสร้างของภาษามีความปลอดภัย ประโยคใดๆ ที่เขียนด้วยโครงสร้างเหล่านั้นก็ถือว่าปลอดภัยเช่นกัน
- ภาษาเฉพาะโดเมนสามารถช่วยเปลี่ยนการพัฒนาระบบสารสนเทศทางธุรกิจจากนักพัฒนาซอฟต์แวร์แบบดั้งเดิมไปสู่กลุ่มผู้เชี่ยวชาญเฉพาะโดเมนที่มีขนาดใหญ่กว่า (แม้จะมีทักษะทางเทคนิคน้อยกว่า) ซึ่งมีความรู้เชิงลึกเกี่ยวกับโดเมนมากกว่า[ 11 ]
- ภาษาเฉพาะโดเมนเรียนรู้ได้ง่ายกว่า เนื่องจากมีขอบเขตการใช้งานที่จำกัด
ข้อเสียบางประการ:
- ค่าใช้จ่ายในการเรียนภาษาใหม่
- ขอบเขตการใช้งานที่จำกัด
- ต้นทุนในการออกแบบ พัฒนา และบำรุงรักษาภาษาโปรแกรมและเครื่องมือที่จำเป็นสำหรับการพัฒนาด้วยภาษาโปรแกรมนั้น: สภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE)
- การค้นหา กำหนด และรักษาขอบเขตที่เหมาะสม
- ความยากลำบากในการสร้างสมดุลระหว่างข้อจำกัดเฉพาะด้านและโครงสร้างภาษาโปรแกรมอเนกประสงค์
- ประสิทธิภาพการประมวลผลอาจลดลงเมื่อเทียบกับซอฟต์แวร์ที่เขียนโค้ดด้วยมือ
- การแพร่กระจายของภาษาเฉพาะโดเมนที่ไม่เป็นมาตรฐานที่คล้ายคลึงกัน เช่น DSL ที่ใช้ในบริษัทประกันภัยแห่งหนึ่งเทียบกับ DSL ที่ใช้ในบริษัทประกันภัยอีกแห่งหนึ่ง[ 12 ]
- ผู้เชี่ยวชาญที่ไม่ใช่ด้านเทคนิคอาจพบว่าการเขียนหรือแก้ไขโปรแกรม DSL ด้วยตนเองเป็นเรื่องยาก[ 10 ]
- ความยากลำบากในการผสานรวม DSL กับส่วนประกอบอื่นๆ ของระบบไอทีเพิ่มมากขึ้น เมื่อเทียบกับการผสานรวมกับภาษาโปรแกรมทั่วไป
- การขาดแคลนผู้เชี่ยวชาญใน DSL เฉพาะด้าน ส่งผลให้ต้นทุนแรงงานสูงขึ้น
- การหาตัวอย่างโค้ดทำได้ยากขึ้น
เครื่องมือสำหรับการออกแบบภาษาเฉพาะโดเมน
- JetBrains MPSเป็นเครื่องมือสำหรับการออกแบบภาษาเฉพาะโดเมน โดยใช้การแก้ไขแบบโปรเจคชันซึ่งช่วยให้เอาชนะข้อจำกัดของตัวแยกวิเคราะห์ภาษาและสร้างตัวแก้ไข DSL เช่น ตัวแก้ไขที่มีตารางและไดอะแกรม มันใช้การเขียนโปรแกรมเชิงภาษา MPS รวมสภาพแวดล้อมสำหรับการกำหนดภาษาเวิร์กเบนช์ภาษาและสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) สำหรับภาษาดังกล่าว[ 13 ]
- MontiCoreเป็นเวิร์กเบนช์ภาษาสำหรับการพัฒนาภาษาเฉพาะโดเมนอย่างมีประสิทธิภาพ โดยจะประมวลผลรูปแบบไวยากรณ์ที่ขยายออกไปซึ่งกำหนด DSL และสร้างส่วนประกอบ Java สำหรับการประมวลผลเอกสาร DSL [ 14 ]
- Xtextเป็นเฟรมเวิร์กซอฟต์แวร์โอเพนซอร์สสำหรับการพัฒนาภาษาโปรแกรมและภาษาเฉพาะโดเมน (DSL) แตกต่างจากตัวสร้างตัวแยกวิเคราะห์มาตรฐาน Xtext ไม่เพียงแต่สร้างตัวแยกวิเคราะห์เท่านั้น แต่ยังสร้างแบบจำลองคลาสสำหรับต้นไม้ไวยากรณ์นามธรรมอีกด้วย นอกจากนี้ยังมี IDE ที่มีคุณสมบัติครบถ้วนและปรับแต่งได้บน Eclipse [ 15 ]โครงการนี้ถูกเก็บถาวรในเดือนเมษายน 2023
- Racketเป็นชุดเครื่องมือภาษาข้ามแพลตฟอร์ม ซึ่งรวมถึงโค้ดเนทีฟ คอมไพเลอร์ JIT และ JavaScript IDE (นอกเหนือจากการรองรับ Emacs, Vim, VSCode และอื่นๆ) และเครื่องมือบรรทัดคำสั่งที่ออกแบบมาเพื่อรองรับการสร้างภาษาทั้งเฉพาะโดเมนและภาษาอเนกประสงค์[ 16 ] [ 17 ]
ดูเพิ่มเติม
- เวิร์กเบนช์ภาษา
- ภาษาอธิบายสถาปัตยกรรม
- ภาษาเพื่อวัตถุประสงค์เฉพาะ
- ศัพท์เฉพาะ
- การนามธรรมเชิงอภิภาษา
- โดเมนการเขียนโปรแกรม
อ่านเพิ่มเติม
- Mernik, Marjan; Heering, Jan & Sloane, Anthony M. (2005). "เมื่อไรและอย่างไรจึงควรพัฒนาภาษาเฉพาะโดเมน" . ACM Computing Surveys . 37 (4): 316– 344. doi : 10.1145/1118890.1118892 . S2CID 207158373 .
- Spinellis, Diomidis (2001). "รูปแบบการออกแบบที่โดดเด่นสำหรับภาษาเฉพาะโดเมน" วารสารระบบและซอฟต์แวร์ 56 ( 1): 91– 99. doi : 10.1016/S0164-1212(00)00089-3 .
- Parr, Terence (2007). เอกสารอ้างอิง ANTLR ฉบับสมบูรณ์: การสร้างภาษาเฉพาะโดเมน . สำนักพิมพ์ Pragmatic Bookshelf. ISBN 978-0-9787392-5-6.
- Larus, James (2009). "การใช้จ่ายเงินปันผลของมัวร์". Communications of the ACM . 52 (5): 62– 69. doi : 10.1145/1506409.1506425 . ISSN 0001-0782 . S2CID 2803479 .
- Werner Schuster (15 มิถุนายน 2550). "Ruby DSL คืออะไร และอะไรที่ไม่ใช่?" . C4Media . สืบค้นเมื่อ8 กันยายน 2552 .
- ฟาวเลอร์, มาร์ติน (2011). ภาษาเฉพาะโดเมน . แอดดิสัน-เวสลีย์. ISBN 978-0-321-71294-3.
ลิงก์ภายนอก
- " ภาษาขนาดเล็ก " ในหนังสือ " ศิลปะแห่งการเขียนโปรแกรม Unix"โดยเอริค เอส. เรย์มอนด์
- มาร์ติน ฟาวเลอร์ พูดถึงภาษาเฉพาะโดเมนและLanguage Workbenchนอกจากนี้ยังมีวิดีโอการนำเสนอ ด้วย
- ภาษาเฉพาะโดเมน: บรรณานุกรมพร้อมคำอธิบาย ( เก็บถาวรเมื่อ 2016-03-16 ที่Wayback Machine)
- "คอมไพเลอร์หนึ่งวัน: การสร้างภาษาเฉพาะโดเมนขนาดเล็กโดยใช้ OCaml" www.venge.net เก็บถาวรจากต้นฉบับเมื่อ 10 มิถุนายน 2025
- สมาคม Usenix: การประชุมเกี่ยวกับภาษาเฉพาะโดเมน (DSL '97)และการประชุมเกี่ยวกับภาษาเฉพาะโดเมนครั้งที่ 2 (DSL '99)
- ภาษาเฉพาะโดเมนภายใน
- คู่มือฉบับสมบูรณ์เกี่ยวกับภาษาเฉพาะโดเมน (ภายนอก)
- jEQN เก็บถาวรเมื่อ 31 มกราคม 2021 ที่Wayback Machineตัวอย่างของภาษาเฉพาะโดเมนภายในสำหรับการสร้างแบบจำลองและการจำลองเครือข่ายคิว แบบ ขยาย
- บทความ
- DSL ภายนอกที่ใช้เทคโนโลยี Eclipse
- "การสร้างภาษาเฉพาะโดเมนบนกรอบภาษา" 1997. CiteSeerX 10.1.1.50.4685
{{cite journal}}: การอ้างอิงวารสารต้องใช้|journal=( ความช่วยเหลือ ) - การใช้งาน Acceleo ร่วมกับ GMF: การสร้างงานนำเสนอจากแบบจำลอง MindMap DSL เก็บถาวรเมื่อ 30 กรกฎาคม 2016 ที่Wayback Machine
- UML เทียบกับภาษาเฉพาะโดเมน
- Sagar Sen และคณะ (2009). "การตัดแต่งแบบจำลองเมตา". CiteSeerX 10.1.1.156.6008 .
{{cite journal}}: การอ้างอิงวารสารต้องใช้|journal=( ความช่วยเหลือ )
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ภาษาเฉพาะโดเมน
ภาษาเฉพาะโดเมน ( DSL ) คือ ภาษาคอมพิวเตอร์ ที่เชี่ยวชาญเฉพาะด้านการใช้งานใน โดเมน ใดโดเมนหนึ่ง โดยเฉพาะ ซึ่งแตกต่างจาก ภาษาทั่วไป (GPL) ที่สามารถใช้งานได้อย่างกว้างขวางในหลายโดเมน...
ใช้
การออกแบบและการใช้ภาษาเฉพาะโดเมน (DSL) ที่เหมาะสมเป็นส่วนสำคัญของ การวิศวกรรมโดเมน โดยใช้ภาษาที่เหมาะสมกับโดเมนนั้นๆ ซึ่งอาจประกอบด้วยการใช้ DSL หรือ GPL ที่มีอยู่แล้ว หรือการพัฒนา DSL ใหม่ การเขียนโปรแกรมเชิงภาษา...
ภาพรวม
ภาษาเฉพาะโดเมนถูกสร้างขึ้นมาเพื่อแก้ปัญหาในโดเมนเฉพาะเจาะจงเท่านั้น และไม่ได้มีจุดประสงค์ที่จะแก้ปัญหาในโดเมนอื่น (แม้ว่าในทางเทคนิคอาจเป็นไปได้ก็ตาม) ในทางตรงกันข้าม ภาษาอเนกประสงค์ถูกสร้างขึ้นมาเพื่อแก้ปัญหาในหลายโดเมน โดเมนนั้นอาจเป็นสาขาธุรกิจก็ได้...
ในการออกแบบและการดำเนินการ
ภาษาเฉพาะโดเมน (Domain-specific languages) คือภาษา (หรือบ่อยครั้งคือไวยากรณ์หรือโครงสร้างไวยากรณ์ที่ประกาศไว้) ที่มีเป้าหมายเฉพาะเจาะจงมากในการออกแบบและการใช้งาน ภาษาเฉพาะโดเมนอาจเป็นภาษาสำหรับการสร้างแผนภาพแบบภาพ เช่น ภาษาที่สร้างโดย Generic Eclipse Modeling...