Python и Ruby обычно считаются близкими родственниками (хотя и с совершенно другим историческим багажом) с аналогичной выразительностью и мощью. Но некоторые утверждают, что огромный успех фреймворка Rails действительно во многом связан с языком, на котором он построен: самим Ruby. Так почему же Ruby больше подходит для такого фреймворка, чем Python?
python
ruby-on-rails
ruby
web-frameworks
Виктор Ян
источник
источник
Ответы:
Вероятно, есть два основных отличия:
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
Анонимные замыкания / лямбда-выражения упрощают эмуляцию новых языковых функций, которые принимают блоки. В 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, и легкость, с которой мы можем реализовать новые декларативные функции, которые выглядят как ключевые слова или новые возможности блочного языка.
источник
Те, кто утверждал, что
ошибаются (ИМО). Этот успех, вероятно, в большей степени обязан умному и устойчивому маркетингу, чем техническому мастерству. Django, возможно, лучше справляется со многими задачами (например, с помощью встроенного админа) без необходимости использования каких-либо функций Ruby. Я ни в коем случае не осуждаю Ruby, просто защищаю Python!
источник
Сообщество питонов считает, что делать что-то наиболее простым и понятным способом - это высшая форма элегантности. Сообщество ruby считает, что умение делать вещи, позволяющие создавать крутой код, - это высшая форма элегантности.
Rails - это то, что если вы следуете определенным соглашениям, с вами волшебным образом происходит множество других вещей. Это очень хорошо сочетается с рубиновым взглядом на мир, но не совсем соответствует взгляду питона.
источник
Является ли эта дискуссия новой дискуссией "vim vs. emacs"?
Я программист на Python / Django и до сих пор не обнаружил в этом языке / фреймворке проблемы, которая заставила бы меня перейти на Ruby / Rails.
Могу представить, что было бы то же самое, если бы я имел опыт работы с Ruby / Rails.
Оба имеют схожую философию и выполняют работу быстро и элегантно. Лучший выбор - это то, что вы уже знаете.
источник
Лично я считаю, что Ruby превосходит python во многих отношениях, включая то, что я бы назвал «последовательной выразительностью». Например, в ruby join - это метод объекта массива, который выводит строку, поэтому вы получите что-то вроде этого:
numlist = [1,2,3,4] #=> [1, 2, 3, 4] numlist.join(',') #=> "1,2,3,4"
В python join - это метод для строкового объекта, но который вызывает ошибку, если вы передаете ему что-то другое, кроме строки, в качестве объекта для соединения, поэтому та же конструкция выглядит примерно так:
numlist = [1,2,3,4] numlist #=> [1, 2, 3, 4] ",".join([str(i) for i in numlist]) #=> '1,2,3,4'
Есть много таких небольших различий, которые со временем складываются.
Кроме того, я не могу придумать лучшего способа ввести невидимые логические ошибки, чем сделать пробелы значимыми.
источник
Настоящий ответ таков: ни Python, ни Ruby не являются лучшими / худшими кандидатами для веб-фреймворка. Если вам нужна объективность, вам нужно написать код для обоих и посмотреть, что лучше всего соответствует вашим личным предпочтениям, включая сообщество.
Большинство людей, отстаивающих тот или иной язык, либо никогда серьезно не использовали другой язык, либо «голосуют» за свои личные предпочтения.
Я предполагаю, что большинство людей выбирают, с чем они сталкиваются в первую очередь, потому что это учит их чему-то новому (MVC, тестирование, генераторы и т. Д.) Или делает что-то лучше (плагины, шаблоны и т. Д.). Раньше я работал с PHP и познакомился с RubyOnRails. Если бы я знал о MVC до того, как нашел Rails, я бы, скорее всего, никогда не оставил бы PHP. Но как только я начал использовать Ruby, мне понравился синтаксис, функции и т. Д.
Если бы я сначала нашел Python и одну из его сред MVC, я бы, скорее всего, хвалил бы этот язык!
источник
Python имеет целый ряд фреймворков, подобных Rails. Их так много, что шутят, что во время типичного выступления на PyCon хотя бы один веб-фреймворк увидит свет.
Аргумент, что метапрограммирование Rubys сделало бы его более подходящим, неверен ИМО. Для подобных фреймворков метапрограммирование не требуется.
Итак, я думаю, мы можем сделать вывод, что Ruby не лучше (и, вероятно, не хуже), чем Python в этом отношении.
источник
Потому что Rails разработан для использования набора функций Rubys.
Не менее бессмысленный вопрос: «Почему Python более подходит для Django, чем Ruby?».
источник
Я полагаю, нам следует обсуждать не языковые особенности как таковые, а скорее акценты, которые соответствующие сообщества делают на языковых функциях. Например, в Python повторное открытие класса вполне возможно, но редко; в Ruby, однако, повторное открытие класса является чем-то вроде повседневной практики. это позволяет быстро и просто настроить фреймворк в соответствии с текущими требованиями и делает Ruby более подходящим для Rails-подобных фреймворков, чем любой другой динамический язык. Отсюда мой ответ: обычное использование повторно открывающихся классов.
источник
Некоторые говорят, что тип метапрограммирования, необходимый для реализации ActiveRecord (ключевого компонента рельсов), проще и естественнее выполнять в ruby, чем в python - я еще не знаю python;), поэтому я не могу лично подтвердить это утверждение.
Я кратко использовал рельсы, и его использование улавливателей / перехватчиков и динамической оценки / внедрения кода позволяет вам работать на гораздо более высоком уровне абстракции, чем некоторые другие фреймворки (до своего времени). У меня мало или совсем нет опыта работы с фреймворком Python, но я слышал, что он одинаково эффективен, и что сообщество Python делает отличную работу, поддерживая и поощряя усилия Python.
источник
Я думаю, что синтаксис чище, а Ruby, по крайней мере, для меня, намного более «приятен» - как бы субъективно это ни было!
источник
Два ответа:
а. Потому что rails был написан для рубина.
б. По той же причине C больше подходит для Linux, чем Ruby
источник
Все это ПОЛНОСТЬЮ "ИМХО"
В Ruby есть ОДИН фреймворк для веб-приложений, так что это единственный фреймворк, рекламируемый для этого языка.
У Python с момента создания было несколько, это лишь некоторые из них: Zope, Twisted, Django, TurboGears (он сам представляет собой смесь других компонентов фреймворка), Pylons (своего рода клон фреймворка Rails) и так далее. Ни один из них не поддерживается сообществом Python как «тот, который нужно использовать», поэтому вся «земля» распространяется на несколько проектов.
Rails имеет размер сообщества исключительно, или, по крайней мере, в подавляющем большинстве, благодаря Rails.
И Python, и Ruby отлично подходят для работы в качестве фреймворка для веб-приложений. Используйте то, что нравится ВАМ (и вашей потенциальной команде разработчиков) и с которым можете согласиться.
источник