Tôi đã xem BASIC và Apache Camel DSL ở Scala và chúng thật tuyệt vời. Có thêm ví dụ về các DSL như vậy không?DSL thú vị, được triển khai trong Scala?
Trả lời
Bạn có một nguồn tốt trong MEAP (Early Access) cuốn sách
DSL in action từ Debasish Ghosh (blog: "Ruminations of a programmer)
khuôn khổ kiểm tra như scalatest là những ví dụ điển hình của DSL:
test("pop is invoked on an empty stack") {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
emptyStack should be ('empty)
}
Có rất nhiều khung công tác dựa trên DSL khác ngoài đó:
specs: "Hành vi-Driven-Thiết kế khuôn khổ"
Squeryl: "Một Scala ORM và DSL để nói chuyện với cơ sở dữ liệu với tính cách rườm rà tối thiểu và loại an toàn tối đa"
def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] = from(artists, songs)((a,s) => where(a.id === s.artistId) groupBy(a.id) compute(count) )
lift-json cung cấp DSL để tạo JSON. Ví dụ như DSL sau:
("person" ->
("name" -> "Joe") ~
("age" -> 35) ~
("spouse" ->
("person" ->
("name" -> "Marilyn") ~
("age" -> 33)
)
)
)
tạo ra JSON sau:
{
"person": {
"name": "Joe",
"age": 35,
"spouse": {
"person": {
"name": "Marilyn",
"age": 33
}
}
}
}
Hai ví dụ tốt là được xây dựng trong DSL cho Parser combinators và diễn viên. Có một trình bao bọc SQL được gọi là DBC (chưa sẵn sàng), tại đây bạn có thể thấy nó trông như thế nào: http://scala.sygneca.com/libs/dbc
Giấy ScalaQL (PDF) mô tả việc thực hiện một DSL thú vị cho các truy vấn cơ sở dữ liệu tích hợp ngôn ngữ.
XML in Scala là một ví dụ khác.
ScalaModules là DSL để làm việc với OSGi.
Một số khác có sẵn với Apache Camel nền tảng để tích hợp doanh nghiệp.
Scala-Query và Squeryl cũng cung cấp DSL để truy vấn cơ sở dữ liệu trong số những thứ khác.
ScalaTest cũng là một ví dụ tuyệt vời về những gì có thể.
- 1. Triển khai ExpandoObject trong Scala
- 2. Triển khai MapReduce ở Scala
- 3. thú vị OutOfMemoryException với StringBuilder
- 4. hành vi Thú vị trong "noexec ON"
- 5. Ngoại lệ Lucene.net thú vị
- 6. Thú vị thử nghiệm của Javascript RegExp
- 7. Có bất kỳ ngày/giờ DSL utils trong Scala?
- 8. Bài kiểm tra SQL thú vị
- 9. Phỏng vấn "Hello World" thú vị
- 10. Triển khai vị trí địa lý HTML5
- 11. Cách đối sánh mẫu trong Scala được triển khai ở cấp độ bytecode như thế nào?
- 12. Tìm một khung hình thú vị trong video
- 13. Triển khai Grails - Cách nhanh nhất để được triển khai?
- 14. Triển khai và lưu trữ scala trên đám mây?
- 15. Một chi tiết thú vị về tên biến
- 16. Cách siêu được triển khai trong Java?
- 17. Cách setTimeout được triển khai trong node.js
- 18. Có bất kỳ DSL Scala nào cho GUI không?
- 19. Triển khai Giao diện Java với kiểu thô từ Scala
- 20. Mục tiêu C: ARC với IV được khai báo trong tệp triển khai
- 21. Cách BigDecimal được triển khai?
- 22. XPath 2.0: Mở triển khai
- 23. Cú pháp PHP thú vị: một 'ngụ ý nếu'?
- 24. Triển khaiKhông triển khai tệp
- 25. vấn đề nội dung ẩn safari di động thú vị
- 26. Làm cách nào để triển khai biến áp đơn lẻ `List` trong Scala?
- 27. Hướng dẫn viết DSL trong Ruby
- 28. Các nhà điều hành Java vấn đề thú vị
- 29. Dự án thú vị nhất xung quanh python là gì?
- 30. Triển khai BFS trong Java
Cuốn sách thực sự hay của Foursquare. Cũng bao gồm các ngôn ngữ khác để bạn có thể so sánh cách cảm nhận DSL bằng các ngôn ngữ khác nhau. –
Sách tuyệt vời. Ông Ghosh bao gồm Scala đặc biệt tốt (đó là phần tôi đọc). Ngoài ra, bạn có thể muốn đọc bài viết giáo dục, viết tốt của ông Spiewak về các trình kết hợp Parser (quan trọng đối với các DSL Scala bên ngoài) - www.codecommit.com/blog/scala/the-magic-behind-parser-combinators –