Недавно, когда я пытался объяснить, почему Ruby on Rails является проблемно-ориентированным языком (DSL) интерну в моей организации, я не смог ясно сформулировать свое обоснование к эффекту, я хотел бы. Возможно, я не понимаю пространство достаточно хорошо для обучения нюансов. При перенаправлении его Martin Fowler' статья или Google оценили один InfoQ, или другой материал не помог многому также.
Некоторые могут объяснить, почему направляющие являются DSL с примером / параллельная ситуация, которая не является материалом вуду для кого-то, кто довольно плохо знаком с миром кода? Понимание идеологии могло бы также помочь в разработке запутанности экосистемы направляющих?
Технически ruby не является DSL, он просто очень хорошо подходит для написания внутренних DSL. Эта ссылка на вики-страницу блога Мартина Фаулера должна помочь прояснить ситуацию.
Rails был описан как DSL, хотя я думаю о нем более точно как о структуре, которая очень хорошо использует несколько DSL.
Править: введение к общедоступной версии книги Мартина Фаулера о DSL содержит мотивирующий пример, хотя он по-прежнему ориентирован в большей степени на программистов.
Отредактируйте еще раз: пример "voodoo" может быть полезен, если вы укажете, что ruby позволяет коду Ruby выглядеть как
port 2001
respond :resource=>"/hello" do |request, response|
response.body = "<message>hello</message>"
end
, что чище, чем прямой вызов методов. Для реализации DSL может потребоваться код, подобный «вуду» (создать DSL намного сложнее, чем использовать его), и в целом кто-то, кто относительно плохо знаком с кодированием, должен сначала беспокоиться о том, что делает DSL, а не столько о том, как это реализовано.
Что делает Ruby хорошим внутренним DSL, так это (1) использование блоков (любой язык с чистым замыканием имеет это преимущество), (2) класс методов, не требующий скобок, и (3) возможность изменять классы в fly (это то, что проверяет
). Наверное, есть еще кое-что, о чем я не думал.
Ruby - это язык, который можно использовать для создания DSL. Ruby on Rails можно рассматривать как DSL (язык, специфичный для домена) для создания веб-приложений.
Ruby, конечно, не DSL. Это язык общего назначения, который является противоположностью DSL. Тем не менее, это язык, который очень подходит в качестве хоста для DSL внутреннего стиля. То есть; вы можете использовать Ruby для создания DSL.
Я не совсем понимаю вопрос. Ruby - это не язык, специфичный для предметной области, это язык общего назначения. Нет смысла называть это DSL, потому что это не так. Следовательно, сама предпосылка вопроса не имеет смысла.