Существуют ли технические причины для Ruby DSL например, RSpec нельзя переписать на Python?

В следующем разделе приводится более подробная информация, но в основном кто-то заявил, что написанный на Ruby DSL RSpec не может быть переписан на Python. Это правда? Если да, то почему?

Я хочу лучше понять технические различия между Ruby и Python.

Обновление: почему я задаю этот вопрос?

В обсуждении Убегая от RSpec есть некоторые утверждения по этому поводу «невозможно» воссоздать RSpec в Python. Я попытался сделать вопрос немного шире, надеясь узнать больше о технических различиях между Ruby и Python. Оглядываясь назад, возможно, мне следовало сузить рамки вопроса, чтобы просто спросить, действительно ли невозможно воссоздать RSpec в Python, и если да, то почему.

Ниже приведены лишь несколько цитат из Убегая от обсуждения RSpec .

Первоначальный вопрос

Последние несколько недель я много думал о RSpec и о том, почему нет четкого, определенного ответа, когда кто-то спрашивает:

«Я ищу Python-эквивалент RSpec. Где я могу найти такой вещь? "

Вероятно, наиболее распространенный (и понятный) ответ заключается в том, что синтаксис Python не допустит такого, тогда как в Ruby это возможно.

Первый ответ на начальный вопрос

Не совсем синтаксис. Rspec monkey исправляет каждый объект внутри своего область, вставив методы "should" и "should_not". Ты можешь сделать что-то в python, но вы не можете использовать monkeypatch для встроенных типов.

Другой ответ

Как вы предполагаете, это невозможно. Mote и PySpec - просто причудливые способы Чтобы назвать ваши тесты: слабые реализации одного крошечного уголка RSpec. Mote использует ужасную магию settrace; PySpec добавляет кучу шум, не имеющий отношения к домену. Ни один из них даже не поддерживает произвольный контекст струны. RSpec более лаконичен, выразителен, устраняет шумы и - вполне разумная вещь для сборки в Ruby.

Последний пункт важен: RSpec возможен не только в Рубин; на самом деле это идиоматично.

21
задан Matthew Rankin 13 November 2013 в 18:25
поделиться