90 votes

Pourquoi le Ruby est mieux adapté pour les Rails que Python ?

Python et Ruby sont généralement réputées proches cousins (bien qu’avec tout autre bagage historique) avec la puissance et l’expressivité similaire. Mais certains ont avancé que l’immense succès du framework Rails a vraiment beaucoup de choses à faire avec la langue, il est construit sur : Ruby lui-même. Alors pourquoi Ruby serait plus approprié pour un tel cadre que Python ?

170voto

Yehuda Katz Points 18277

Il y a probablement deux différences majeures:

Ruby est élégant, anonyme fermetures.

Rails les utilise à bon escient. Voici un exemple:

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

Anonyme fermetures/lambdas rendre plus facile à émuler les nouvelles fonctionnalités de langage qui permettrait de prendre des blocs. En Python, les fermetures existent, mais ils doivent être nommé afin de pouvoir être utilisé. Ainsi, au lieu d'être en mesure d'utiliser les fermetures à émuler les nouvelles fonctionnalités de langage, vous êtes obligé d'être explicite sur le fait que vous êtes à l'aide d'une fermeture.

Ruby est plus propre, plus facile à utiliser la métaprogrammation.

Ceci est largement utilisé dans les Rails, principalement en raison de combien il est facile à utiliser. Pour être plus précis, en Ruby, vous pouvez exécuter du code arbitraire dans le contexte de la classe. Les extraits suivants sont équivalents:

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

Dans les deux cas, vous pourrez alors faire:

Bar.new.hello  

qui affiche "BONJOUR". L' class_eval méthode prend également une Chaîne de caractères, il est donc possible de créer des méthodes à la volée, comme une classe est créée, qui ont différentes sémantique basé sur les paramètres qui sont passés dans l'.

Il est, en effet, possible de faire ce genre de métaprogrammation en Python (et autres langues), mais Ruby a une jambe parce que la métaprogrammation n'est pas un style de programmation. Il découle du fait qu'en Ruby, tout est un objet et toutes les lignes de code sont directement exécuté. En conséquence, Classes sont eux-mêmes des objets, de la classe des organismes ont un self de pointage à la Classe, et vous pouvez appeler les méthodes de la classe que vous en créez un.

C'est dans une large mesure responsable pour le degré de declarativeness possible dans les Rails, et la facilité avec laquelle nous sommes en mesure de mettre en œuvre de nouvelles déclarative des caractéristiques qui ressemblent à des mots clés ou des nouveau bloc fonctionnalités de langage.

58voto

Vinay Sajip Points 41286

Ceux qui ont fait valoir que

l'immense succès de la les Rails cadre a vraiment beaucoup à faire avec la langue, il est construit sur

sont (OMI) erreur. Ce succès doit probablement plus intelligent et durable de marketing que de toutes les prouesses techniques. Django sans doute fait un meilleur travail dans de nombreux domaines (par exemple, le haut-kick-ass admin), sans la nécessité pour toutes les caractéristiques de Ruby. Je ne suis pas dissing Rubis à tous, juste debout pour Python!

54voto

Matt Briggs Points 20291

La communauté python est d’avis que le fait de faire les choses le plus simple et tout droit vers l’avant possible est la plus haute forme d’élégance. La communauté ruby croit faire les choses de façon intelligente permettant de code cool est la plus haute forme d’élégance.

Rails est tout au sujet, si vous suivez certaines conventions, les charges d’autres choses arriver comme par magie pour vous. Qui jives vraiment bien avec le rubis moyen de regarder le monde, mais ne suit pas vraiment la façon python.

26voto

luc Points 13564

Est ce débat un nouveau débat « vim ou emacs » ?

Je suis un programmeur Python/Django et jusqu'à présent je n’ai jamais trouvé un problème dans cet langue ou un cadre qui m’amènerait à passer à Ruby/Rails.

Je peux imaginer qu’il serait le même si j’étais expérimenté avec Ruby/Rails.

Les deux ont la même philosophie et font le travail d’une manière rapide et élégante. Le meilleur choix, c’est ce que vous savez déjà.

25voto

fields Points 708

Personnellement, je trouve ruby supérieure à python dans de nombreuses façons qui forment ce que j'appellerais "dans le respect de l'expressivité'. Par exemple, en ruby, rejoindre est une méthode de l'objet de tableau qui affiche une chaîne, de sorte que vous obtenez quelque chose comme ceci:

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

En python, la jointure est une méthode sur l'objet de type string, mais qui renvoie une erreur si vous passer autre chose qu'une chaîne comme la chose à rejoindre, de sorte que la même construction est quelque chose comme:

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

Il y a beaucoup de ces petits types de différences qui s'ajoutent au fil du temps.

Aussi, je ne peux pas penser à une meilleure façon d'introduire l'invisible erreurs de logique que d'en faire des espaces importants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X