2011-01-24 25 views
8

Chúng tôi có một yêu cầu để tạo ra chiều dài cố định phức tạp và các chuỗi có độ dài thay đổi. Những chuỗi này có thể đại diện cho một hồ sơ khách hàng, một đơn đặt hàng vv. Ngôn ngữ lập trình dựa trên JVM nào mà các bạn đề xuất?Ngôn ngữ nào (chạy trên JVM) phù hợp nhất để tạo DSL?

Ý tưởng dành cho người dùng cuối để tạo chuỗi bằng DSL này. Vì vậy, tôi đang tìm kiếm xác thực, hoàn thành mã, v.v.

+0

Nhanh như thế nào? Bạn cần bao lâu để làm nó? – EnabrenTane

+0

@EnabrenTane - Nó không cần phải siêu nhanh –

+0

những gì về rất nhanh? sẽ rất nhanh? hoặc chỉ siêu nhanh? j/k: p – hhafez

Trả lời

5

Với Xtext (http://www.eclipse.org/Xtext/) bạn sẽ nhận được một trình chỉnh sửa đẹp miễn phí khi chỉ định DSL của mình.

+0

Chúng tôi cung cấp nhiều mô hình cho các mô hình meta và tạo mã của chúng tôi. Từ những gì tôi đã trải qua, các biên tập viên rất yếu. Họ chưa sẵn sàng cho các ứng dụng phải đối mặt với khách hàng. –

+1

@Pangea: có thể vì oAW là hai năm không còn được duy trì nữa. Xtext là một viết lại, nó đạt đến 1,0 trong lần phát hành Eclipse cuối cùng (Galileo). Công cụ này hoàn toàn phù hợp cho trường hợp sử dụng - công cụ này cung cấp tính hợp lệ và tự động hoàn thành, phác thảo, siêu liên kết, sửa nhanh, tô sáng và hơn thế nữa. Hầu hết những điều này sẽ không bao giờ có thể làm như một DSL nội bộ sử dụng bất kỳ ngôn ngữ nào được đề xuất. –

+0

@Gabriel thx cho bản cập nhật này. Tôi sẽ xem xét điều này ngay bây giờ. Đánh giá cao nếu bạn có thể chỉ cho tôi các bài báo và ví dụ về các DSL được tạo bằng cách sử dụng Xtext mới. –

-2

Âm thanh như một vấn đề đối với động cơ tạo khuôn mẫu Apache Velocity. Nó là một thư viện Java với cú pháp templating hoặc DSL nếu bạn muốn.

+2

Tôi cần một DSL. Công cụ tô màu không phải là một lựa chọn. Ý tưởng là để người dùng tạo các chuỗi bằng cách sử dụng DSL này. Tôi đã nhìn vào Velocity, StringTemplate, vv –

+0

Vì vậy, con số nào là một DSL? Velocity có một ngôn ngữ, đặc biệt tốt cho việc tạo ra nội dung văn bản. Nó là một ngôn ngữ cụ thể tên miền. Nếu bạn có những yêu cầu cụ thể không được đáp ứng bởi một công cụ tạo khuôn mẫu và ngôn ngữ của họ, bạn có thể muốn mô tả rõ hơn những yêu cầu đó là gì. –

2

Tôi muốn giới thiệu Groovy cho điều đó.

7

Use a Lisp chạy trên JVM. Một số lựa chọn bạn có:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo (Không chạy trên JVM nhưng có khả năng tương tác Java tốt).

a good free book giải thích làm thế nào để sử dụng Lisp để thiết kế phần mềm từ dưới lên, tức là làm thế nào để phát triển Lisp sang một ngôn ngữ đó là lý tưởng để giải quyết vấn đề trong tầm tay.

Ngôn ngữ trong họ Forth cũng rất tuyệt vời để xác định DSL. Có một vài chạy trên JVM:

  1. Niue
  2. Misty Beach Forth
+0

Đây là danh sách các DSL được tạo bằng Clojure: http://stackoverflow.com/a/3968289/410652 –

4

Scala tất cả các cách! Scala đặc biệt thích hợp cho DSL nội bộ (xin tham khảo this).

6

Có hai loại DSL; bên ngoài và được nhúng.

DSL bên ngoài hoàn toàn tách biệt với ngôn ngữ máy chủ của bạn, tức là bạn viết nó ra ngoài ngôn ngữ nhưng thường được sử dụng để tạo mã bằng ngôn ngữ máy chủ. Đối với phương pháp này, XText với XPand có lẽ là công cụ tốt nhất như một tệp ngữ pháp đơn giản tạo ra một trình soạn thảo dựa trên Eclipse hoàn chỉnh cho DSL mới và bạn có thể sử dụng các mẫu mã trong XPand để tạo ra mã Java thực tế. XTend và XPand được viết bằng Java nhưng điều này là ngẫu nhiên vì chúng có thể được viết trong bất cứ điều gì miễn là bạn kết thúc với mã Java ở cuối của quá trình.Nhược điểm với phương pháp này, là đối với bất kỳ vấn đề phức tạp nào phức tạp thì ngôn ngữ sẽ trở nên khá phức tạp và rất nhiều công việc sẽ được yêu cầu trong ngữ pháp và thậm chí nhiều hơn trong các mẫu tạo mã. Bạn không thể sử dụng bất kỳ tính năng ngôn ngữ máy chủ nào như đánh giá biểu thức để tất cả điều này cần xây dựng lại trong DSL của bạn nếu bạn cần. XText sẽ sớm bao gồm XBase là một phần ngôn ngữ sẽ bao gồm các biểu thức để giúp đỡ ở đây. Cách tiếp cận khác là một DSL nhúng nơi các tính năng miền cấp cao được thể hiện bằng ngôn ngữ máy chủ hoặc với các cấu trúc bậc cao (như HOF và monads) thường được tìm thấy trong các ngôn ngữ chức năng hoặc thông qua các cơ sở lập trình meta như macro (vd Lisp). Java không có trong số này như vậy là một lựa chọn xấu cho công việc DSL (hoặc hầu hết các hình thức lập trình trừu tượng khác). Spring Roo cung cấp một cơ sở kiểu lập trình meta cho java bằng cách sử dụng thế hệ để có thể là một tùy chọn. Nếu không, Scala có lẽ là ngôn ngữ Java giống Java nhất, phổ biến và có các tiện ích mà bạn cần.

DSL nhúng thường dễ dàng hơn nhiều so với DSL bên ngoài vì bạn có hỗ trợ đầy đủ ngôn ngữ máy chủ nên khuyến nghị của tôi là thử Scala.

+0

cảm ơn những ưu và khuyết điểm chi tiết, không chỉ nói * làm điều đó bằng ngôn ngữ jvm yêu dấu của tôi * –

Các vấn đề liên quan