Почему Ruby on Rails называется языком, специфичным для домена?

Недавно, когда я попытался объяснить, почему Ruby on Rails является предметно-ориентированным языком (DSL) для стажера в моей организации, я не смог сформулировать свои аргументы в пользу того, что хотел бы. Возможно, я недостаточно хорошо понимаю пространство, чтобы учить нюансам. Переадресация его на статью Мартина Фаулера или в Google, оценивающую один InfoQ или другой материал, также не сильно помогла.

Могут ли некоторые объяснить, почему Rails - это DSL с примером/параллельной ситуацией, которая не является чем-то вроде вуду для того, кто довольно плохо знаком с миром кода? Понимание идеологии может также помочь в разработке тонкостей экосистемы рельсов?

Ответ 1

Технически, ruby ​​не является DSL, он просто поддается написанию внутренних DSL очень чисто. Эта ссылка на wiki-страницу Мартина Фаулера должна помочь прояснить ситуацию.

Rails был описан как DSL, хотя я думаю об этом более точно как основа, которая очень хорошо использует несколько DSL.

Изменить: вступление к публичной версии книги DSL от Martin Fowler имеет мотивирующий пример, хотя он все еще нацелен на программистов немного больше.

Изменить еще раз: пример "voodoo" может быть полезен, если указать, что ruby ​​позволяет выглядеть как код ruby ​​

port 2001

respond :resource=>"/hello" do  |request, response|
  response.body = "<message>hello</message>"
end

который чище, чем вызов методов напрямую. Реализация DSL может потребовать "voodoo" как код (гораздо сложнее создать DSL, чем использовать его), и в целом кто-то относительно новый для кодирования должен сначала беспокоиться о том, что делает DSL, а не о том, как это реализовано.

Что делает рубин хорошим во внутренних DSL, включает (1) использование блоков (любой язык с чистыми закрытиями имеет это преимущество), (2) класс метода, который не требует скобок, и (3) способность изменять классы на летать (что и делает validates). Вероятно, больше я не думал.

Ответ 2

Ruby - это язык, который вы можете использовать для создания DSL. Ruby on Rails можно рассматривать как DSL (Domain Specific Language) для создания веб-приложений.

Ответ 3

Ruby, конечно же, не DSL. Это язык общего назначения, который является противоположностью DSL. Это, однако, язык, который очень подходит в качестве хоста для DSL внутреннего стиля. То есть; Вы можете использовать Ruby для создания DSL с помощью.

Ответ 4

Я задавал себе тот же вопрос, когда работал с тестом Capybara "DSL". На мой взгляд, при упоминании Ruby-фреймворков, таких как Rails, как DSL, этот термин просто ошибочен. Итак, ответ на ваш вопрос будет следующим: он называется DSL из-за жаргонизатора Ruby.

Чтобы быть справедливым, следуя предложению Мартина Фаулера (см. Здесь), мы могли бы назвать эти структуры внутренними DLS (подмножество языка общего назначения для конкретной цели). Но я не думаю, что существует концептуальная разница между понятием структуры.

Вид уникальной синтаксической гибкости Ruby просто делает фреймворки, написанные в определенном стиле, похожими на совершенно новый язык (хотя и очень простой). Лично я не назвал бы что-либо специфичным для предметной области языком, который не имеет уникального синтаксиса или является лишь подмножеством языка общего назначения (вы можете увидеть некоторую поддержку этого в этом ответе на SO).

Ответ 5

Я не совсем понимаю вопрос. Ruby не является доменным языком, это язык общего назначения. Не имеет смысла называть это DSL, потому что это не одно. Поэтому вся суть вопроса не имеет смысла.