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