Репозитории Ruby DSL (Domain Specific Language), примеры
Я ищу отличные примеры Ruby DSL (Domain Specific Languages). Какие репозитории, проекты, которые вы знаете, стоит прочитать? Почему это (или: они) отличные примеры?
Мне особенно интересны более сложные примеры, которые хорошо продуманны и разработаны.
Ответы
Ответ 1
Rake and Rack - неплохие примеры DSL. Если вам нужны еще несколько примеров, проверьте их:
- Sinatra - очень популярный DSL для создания веб-приложений, и он открывает исходный код на GitHub.
- Twibot - это новый DSL, вдохновленный Sinatra, который позволяет создавать ботов Twitter, которые автоматически отвечают на сообщения и ответы.
Если вы хотите начать свой собственный, вот отличный учебник под названием Построение DSL в Ruby.
Ответ 2
В области Behavior-Driven Development вы можете проверить:
- Cucumber - Опишите BDD, используя сценарии
- RSpec - Замените тестовый код указанием поведения.
Хотя я должен признать, что код RSpec оставляет меня иногда царапать мою голову, потому что я все еще очень начинающий.
Ответ 3
Другим примером, конечно, является Rake, система сборки Ruby. Что делает DSL "хорошим" на мой взгляд:
- Обозначение соответствует значению, т.е. если вы читаете предложение (утверждение) в DSL, у вас есть четкое, однозначное представление о том, что он делает.
- Домен, т.е. DSL не решает каждую проблему во Вселенной, а фокусируется на одном небольшом домене (таком как создание программного обеспечения, запрос данных или создание пользовательских интерфейсов).
- Высокий уровень абстракции. DSL использует концепции высокого уровня, которые может использовать программист, и переводит их на более низкую реализацию (внутренне). В случае с Rake основной концепцией, на которой основан язык, являются задачи и зависимости между ними.
Ответ 4
Вы проверили Docile gem, это может быть самый простой и самый чистый способ удовлетворить ваши потребности?
Ответ 5
Некоторые хорошие рубиновые DSL, о которых я могу думать, - это
hpricot
а также
sinatra
Ответ 6
Активная запись Ruby on Rails - это DSL!
http://apidock.com/rails/ActiveRecord/Base
Также этот эпизод школьной школы может быть интересным, поскольку он ведет к созданию DSL (где я узнал, что Active Record является DSL)
http://www.codeschool.com/courses/ruby-bits-part-2
Вышеупомянутый курс также говорит о внешних и внутренних DSL. Cucumber является примером внешнего DSL, где вам нужно собрать парсер и компилятор и т.д. Active Record - это пример внутренней DSL, которая работает внутри какого-либо существующего кода.