Почему Ruby больше подходит для Rails, чем Python?

Python и Ruby обычно считаются близкими родственниками (хотя и с совершенно иным историческим багажом) с такой же выразительностью и мощью. Но некоторые утверждают, что огромный успех Rails-структуры действительно имеет большое значение для языка, на котором он построен: Ruby. Итак, почему Ruby более подходит для такой структуры, чем Python?

Ответ 1

Есть, вероятно, два основных отличия:

Ruby имеет элегантные анонимные закрытия.

Rails использует их для хорошего эффекта. Вот пример:

class WeblogController < ActionController::Base
  def index
    @posts = Post.find :all
    respond_to do |format|
      format.html
      format.xml { render :xml => @posts.to_xml }
      format.rss { render :action => "feed.rxml" }
    end
  end
end

Анонимные закрытия /lambdas упрощают эмулировать новые языковые функции, которые будут использовать блоки. В Python существуют замыкания, но они должны быть названы для использования. Поэтому вместо того, чтобы использовать блокировки для эмуляции новых языковых функций, вы вынуждены явно указывать на то, что используете закрытие.

Ruby имеет более чистый, простой в использовании метапрограммирование.

Это широко используется в Rails, в первую очередь из-за того, насколько легко его использовать. Чтобы быть конкретным, в Ruby вы можете выполнить произвольный код в контексте класса. Следующие фрагменты эквивалентны:

class Foo
  def self.make_hello_method
    class_eval do
      def hello
        puts "HELLO"
      end
    end
  end
end

class Bar < Foo # snippet 1
  make_hello_method
end

class Bar < Foo; end # snippet 2
Bar.make_hello_method

В обоих случаях вы можете:

Bar.new.hello  

который будет печатать "HELLO". Метод class_eval также принимает строку, поэтому можно создавать методы "на лету" по мере создания класса, которые имеют разную семантику на основе передаваемых параметров.

Фактически, возможно, это метапрограммирование в Python (и на других языках), но Ruby имеет ногу, потому что метапрограммирование не является особым стилем программирования. Он вытекает из того факта, что в Ruby все является объектом, и все строки кода выполняются напрямую. В результате Class es сами являются объектами, тела классов имеют self, указывающие на класс, и вы можете вызывать методы в классе по мере его создания.

Это в значительной степени отвечает за степень декларативности, возможной в Rails, и легкость, с помощью которой мы можем внедрять новые декларативные функции, которые выглядят как ключевые слова или новые функции языка блока.

Ответ 2

Те, кто утверждал, что

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

(IMO) ошибочно. Этот успех, вероятно, должен быть скорее умным и устойчивым маркетингом, чем любым техническим мастерством. Django, возможно, лучше работает во многих областях (например, встроенный администратор kick-ass) без необходимости каких-либо функций Ruby. Я вообще не расхожусь с Ruby, просто встаю на Python!

Ответ 3

Сообщество python считает, что делать вещи наиболее простым и прямым способом - это высшая форма элегантности. Сообщество рубинов считает, что делать вещи умными способами, которые обеспечивают классный код, является высшей формой элегантности.

Rails - это все, если вы следуете определенным соглашениям, для вас волшебным образом загружаются другие вещи. Это действительно хорошо сочетается с рубиновым способом взглянуть на мир, но на самом деле не соответствует методу python.

Ответ 4

Является ли эта дискуссия новой дискуссией "vim versus emacs"?

Я программист Python/Django, и до сих пор я никогда не обнаружил проблемы в этом языке/фреймворке, что привело бы меня к переключению на Ruby/Rails.

Я могу представить, что это было бы так же, если бы я был опытным с Ruby/Rails.

Оба имеют схожую философию и делают эту работу быстрым и элегантным способом. Лучший выбор - это то, что вы уже знаете.

Ответ 5

Лично я считаю, что Ruby превосходит python во многих отношениях, которые составляют то, что я бы назвал "последовательной выразительностью". Например, в ruby, join - это метод объекта массива, который выводит строку, поэтому вы получаете что-то вроде этого:

numlist = [1,2,3,4]
#=> [1, 2, 3, 4]
numlist.join(',')
#=> "1,2,3,4"

В python объединение - это метод для строкового объекта, но который выдает ошибку, если вы передаете ему что-то другое, кроме строки, как предмет для присоединения, поэтому одна и та же конструкция выглядит примерно так:

numlist = [1,2,3,4]
numlist
#=> [1, 2, 3, 4]
",".join([str(i) for i in numlist])
#=> '1,2,3,4'

Есть много этих небольших различий, которые складываются с течением времени.

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

Ответ 6

Реальный ответ: ни Python, ни Ruby не являются лучшими/худшими кандидатами для веб-фреймворка. Если вам нужна объективность, вам нужно написать код в обоих случаях и посмотреть, что лучше всего подходит вашим личным предпочтениям, включая сообщество.

Большинство людей, которые спорят о том или ином, либо никогда не использовали другой язык серьезно, либо "голосовали" за свои личные предпочтения.

Я бы предположил, что большинство людей соглашаются с тем, с кем когда-либо они вступают в контакт с первым, потому что он учит их чему-то новому (MVC, тестирование, генераторы и т.д.) или делает что-то лучше (плагины, шаблоны и т.д.). Я использовал для разработки с PHP и пришел в контакт с RubyOnRails. Если бы я знал о MVC, прежде чем найти Rails, я бы более чем вероятно не оставил PHP позади. Но как только я начал использовать Ruby, мне понравился синтаксис, функции и т.д.

Если бы я нашел Python и одну из его фреймворков MVC, я бы скорее всего восхвалял этот язык!

Ответ 7

Python имеет целый ряд Rails-подобных фреймворков. Есть так много шуток, что во время типичного разговора в PyCon по крайней мере один веб-фрейм будет видеть свет.

Аргумент, что метапрограммирование Rubys сделает его более подходящим, неверно. Вам не нужно метапрограммирование для таких фреймворков.

Итак, я думаю, мы можем заключить, что Ruby не лучше (и, вероятно, не хуже), чем Python в этом отношении.

Ответ 8

Поскольку Rails разработан, чтобы воспользоваться набором функций Rubys.

Аналогичным образом нечеткий вопрос: "Почему Python более подходит для Django, чем Ruby?".

Ответ 9

Я полагаю, что мы не должны обсуждать языковые функции как таковые, а скорее акценты, которые соответствующие сообщества делают на языковых особенностях. Например, в Python повторное открытие класса вполне возможно, но оно не является обычным явлением; в Ruby, однако, повторное открытие класса - это что-то вроде повседневной практики. это позволяет быстро и просто настроить инфраструктуру для текущего требования и делает Ruby более благоприятным для Rails-подобных фреймворков, чем любой другой динамический язык. Отсюда мой ответ: обычное использование классов повторного открытия.

Ответ 10

Некоторые сказали, что тип метапрограммирования, необходимый для того, чтобы сделать ActiveRecord (ключевой компонент рельсов) возможным, проще и естественнее делать в рубине, чем в python - пока я еще не знаю python;), поэтому я не могу лично подтвердить это утверждение.

Я кратко использовал рельсы, и его использование подложек/перехватчиков и динамическая оценка/ввод кода позволяет вам работать на гораздо более высоком уровне абстракции, чем некоторые другие структуры (до его времени). У меня мало опыта работы с инфраструктурой Python, но я слышал, что он одинаково способен, и что сообщество python отлично справляется с поддержкой и поддерживает питонические усилия.

Ответ 11

Я думаю, что синтаксис чище и Ruby, для меня, по крайней мере, намного более "приятный" - такой же субъективный, как это!

Ответ 12

Два ответа:

а. Потому что рельсы были написаны для рубина.

б. По той же причине C более подходит для Linux, чем Ruby

Ответ 13

Все это ПОЛНОСТЬЮ "ИМХО"

В Ruby есть ОДНА структура веб-приложений, поэтому это единственная среда, которая рекламируется для этого языка.

У Python было несколько с момента создания, просто для того, чтобы назвать несколько: Zope, Twisted, Django, TurboGears (это сама смесь других компонентов инфраструктуры), Pylons (вид-клон Rails-рамки) и т.д. Ни один из них не поддерживает python-community в целом как "The one to use", поэтому все "groundswell" распространяются на несколько проектов.

Rails имеет размер сообщества исключительно или, по крайней мере, в подавляющем большинстве, из-за Rails.

Оба Python и Ruby отлично подходят для работы в качестве платформы веб-приложений. Используйте тот, который ВЫ (и ваша потенциальная команда разработчиков), как и можете выровнять.