ขณะที่ค่อนข้างใหม่กับแนวคิดของ litterate เขียนโปรแกรมตัวเอง (และมันจึงเป็นไปได้ว่าฉันหายไปเรือทั้งหมด) ก็ดูเหมือนมากที่สอดคล้องกับแนวคิดของการเป็นDSL
แนวคิดเบื้องหลัง DSL คือการแยกโดเมนของปัญหาให้เป็นไวยากรณ์ที่เน้นภาษาที่เรียบง่ายและเป็นธรรมชาติซึ่งสามารถใช้ในการสร้างอัลกอริทึมสำหรับการแก้ปัญหาเหล่านั้น
สำหรับฉันแล้วความคิดเดียวกันหรืออย่างน้อยก็พื้นฐานที่สำคัญของมันก็คือความสัมพันธ์ที่เหมือนกันหรืออย่างน้อยก็เกี่ยวข้องกับการเขียนโปรแกรมความรู้
ยกตัวอย่างเช่นในโลกที่มีแรงสั่นสะเทือนมีการผลักดันให้ใช้ DSL อย่างสม่ำเสมอมากขึ้นและสร้าง DSL ใหม่เพื่อแก้ไขปัญหาที่พบบ่อย การผลักดันนี้มาจากเครื่องมือทั้งสองในภาษา (ผู้สร้างง่าย) รวมถึงไลบรารีหลักที่สนับสนุน API ที่ใช้ DSL
จากแนวโน้มที่อย่างน้อยในมุมหนึ่งของโลกที่มีต่อการเขียนโปรแกรมความรู้ฉันจะบอกว่ามันเป็นวิธีการที่ดีที่จะมุ่งมั่น
น่าเสียดายที่ระดับความคิดที่จำเป็นในการสร้างdsl ที่ดีนั้นมักจะเกินกว่าโปรแกรมเมอร์ส่วนใหญ่จากสิ่งที่ฉันเคยเห็น ฉันรู้ว่าฉันต้องต่อสู้กับแนวคิดบางอย่างที่ต้องการเป็นครั้งคราว อาจเป็นปัญหาที่ป้องกันไม่ให้เทคนิคดังกล่าวได้รับการยอมรับในวงกว้างมากขึ้น
เป็นกรณีคลาสสิกของคุณเมื่อใช้เครื่องมือเป็นสิ่งหนึ่ง แต่การสร้างมันอยู่ในระดับที่แตกต่างกันโดยสิ้นเชิง
เพื่อขยายมุมมองของฉันสักหน่อยก็ไม่ได้เป็น s มากที่มี DSL เป็นสิ่งเดียวกับการเขียนโปรแกรมความรู้ แต่ที่พวกเขาทำในการเขียนโปรแกรมความรู้อื่น ๆ อีกมากมายที่เป็นไปได้ โดยเฉพาะอย่างยิ่งเมื่อพวกเขาจะมี DSL ภาษาธรรมชาติ
ในเวอร์ชั่น 1.8 ของ groovy ความสามารถในการใช้ภาษาธรรมชาติของ DSL ได้รับการปรับปรุงอย่างมากด้วยการเพิ่มสายการบังคับบัญชาที่มีประสิทธิภาพมากขึ้น
ตัวอย่างเช่นบรรทัดของรหัสต่อไปนี้เป็นการเขียนโปรแกรมไม่ใช่เพียงการใช้ประโยคหลอก
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
หมายเหตุ: ตัวอย่างโค้ดมาจากบล็อกของ Guillaume Laforge
แนวคิดหลักที่อยู่เบื้องหลังการเขียนโปรแกรมความรู้คือภาษาธรรมชาติสามารถเข้าใจได้ง่ายขึ้นสำหรับมนุษย์และนั่นคือสิ่งที่สำคัญ ความสามารถในการใช้ภาษา DSL ของภาษาธรรมชาติของ Groovy นั้นเป็นความจริงที่ใกล้กว่ามากในความคิดของฉัน โดยเฉพาะอย่างยิ่งเมื่อใช้ DSL เหล่านั้นเพื่อสร้างกฎเกณฑ์ทางธุรกิจสำหรับแอปพลิเคชัน
ความสามารถในการ "เข้ารหัส" ส่วนประกอบที่สำคัญของระบบที่ใช้ภาษาธรรมชาติเป็นสาระสำคัญของการเขียนโปรแกรมเชิงความรู้ การใช้ภาษาธรรมชาติแบบกระจายพร้อมโค้ดจำนวนหนึ่งเป็นรูปแบบของการเขียนโปรแกรมเชิงวิชาการ ในขณะที่มีประโยชน์ฉันเชื่อว่า DSL ภาษาธรรมชาติที่ช่วยให้คุณใช้ภาษาธรรมชาติได้เนื่องจากโค้ดนั้นก้าวไปข้างหน้าอย่างมาก
การขยายความสามารถในการเขียนโปรแกรมโดยทั่วไปเป็นขั้นตอนต่อไปในกระบวนการ แต่ในระดับใหญ่แล้วเครื่องมือในการทำเช่นนั้นมีอยู่แล้ว ใช่ยังไม่มี DSL "ทั่วไป" แต่สำหรับโดเมนขนาดเล็กความสามารถนั้นอยู่ที่นั่น
สำหรับตัวอย่างเพิ่มเติมของการดำเนินการนี้ (ในลำดับที่ไม่เจาะจง):