Tôi muốn biết các chiến lược tốt để triển khai ngôn ngữ dành riêng cho miền phải chạy dưới ít nhất 2 ngôn ngữ (Java, C#) và có thể nhiều hơn (Python và có thể là Javascript).viết một ngôn ngữ cụ thể cho miền di động
Một số nền. Chúng tôi đã phát triển và triển khai một ngôn ngữ dành riêng cho miền hiện được viết bằng C#. Nó được triển khai mặc dù một loạt các lời gọi phương thức mà các đối số của nó là các ngôn ngữ chung (chuỗi, gấp đôi, vv), Bộ sưu tập (IEnumerable, HashSet, ...) hoặc các đối tượng trong một thư viện miền cụ thể (CMLMolecule, Point3, RealSquareMatrix). Thư viện được kiểm tra tốt và các đối tượng phải tuân thủ một lược đồ XML được triển khai ổn định để thay đổi sẽ được tiến hóa và được quản lý (ít nhất đó là hy vọng).
Chúng tôi hy vọng ngôn ngữ sẽ được sử dụng bởi một cộng đồng máy tính rộng và một phần, được sử dụng để hack các giải pháp của riêng họ mà không cần kiểm soát trung tâm. Lý tưởng nhất là DSL sẽ tạo ra một mức độ đóng gói và sản xuất các chức năng cần thiết mà họ cần. Các thư viện sẽ quản lý các thuật toán chi tiết có nhiều và đa dạng nhưng khá nổi tiếng. Có rất nhiều điểm chung với các yêu cầu của DSL trong Domain-specific languages vs. library of functions.
Tôi đánh giá cao ý tưởng về kiến trúc tốt nhất (rõ ràng khi được triển khai, chúng tôi không thể dễ dàng quay lại). Các lựa chọn bao gồm ít nhất:
- Tạo IDL (ví dụ: thông qua CORBA). W3C đã làm điều này cho DOM XML - tôi ghét nó - và có vẻ như quá mức cần thiết
- tạo thủ công các chữ ký tương tự cho mỗi nền tảng và nỗ lực tốt nhất để giữ chúng đồng bộ.
- Tạo ngôn ngữ có thể phân tích cú pháp (ví dụ: CSS).
- lập trình khai báo trong XML (c.f. XSLT). Đây là giải pháp ưa thích của tôi vì nó có thể được tìm kiếm, thao tác, v.v.
Hiệu suất không quan trọng. Rõ ràng mục đích là.
EDIT Đã có cuộc thảo luận về việc liệu các cuộc gọi ứng dụng có phải là một DSL hay không. Tôi đã phát hiện ra sự giới thiệu của Martin Fowler về DSL (http://martinfowler.com/dslwip/Intro.html), nơi ông lập luận rằng các cuộc gọi phương thức đơn giản (hoặc các cuộc gọi có chuỗi) có thể được gọi là DSL. Vì vậy, một loạt như:
point0 = line0.intersectWith(plane);
point1 = line1.intersectWith(plane);
midpoint = point0.midpoint(point1);
có thể được coi là một DSL
Một lớn tiêu cực đến bất kỳ ngôn ngữ thể hiện trong XML. Bạn sẽ có ý định một nhà phát triển làm việc trực tiếp với XML hoặc đó sẽ là định dạng lưu trữ/thời gian chạy? Người phát minh ra ANT nói XML là lựa chọn sai và anh ta sẽ chọn khác nếu anh ta có thể thay đổi mọi thứ. – SteveD
@stevendick. Cảm ơn, tôi nghe những gì bạn nói. Cá nhân tôi là một người nghiện XML nhưng tôi cố gắng giữ một tâm trí cởi mở. –
Hãy xem những gì tác giả gốc của ANT phải nói: http://web.archive.org/web/20040602210721/x180.net/Articles/Java/AntAndXML.html Đừng mù quáng theo XML- Mô hình Golden Hammer. Nếu bạn định tạo một DSL đọc và được viết bởi những người thực tế, hãy xem xét sử dụng một trong nhiều công cụ lexer/parser tốt đẹp thay vì XML. Có rất nhiều công cụ tốt đẹp những ngày này (như ANTLR) mà thực hiện điều này thực tế. Viết lexers/parsers không phải là đau đớn bây giờ như nó đã từng là khi lex/yacc là nhà nước-of-the-nghệ thuật. –