Python y Ruby generalmente se consideran primos cercanos (aunque con un bagaje histórico bastante diferente) con expresividad y poder similares. Pero algunos han argumentado que el inmenso éxito del framework Rails realmente tiene mucho que ver con el lenguaje en el que está construido: Ruby mismo. Entonces, ¿por qué Ruby sería más adecuado para un marco de este tipo que Python?
python
ruby-on-rails
ruby
web-frameworks
Victor Yan
fuente
fuente
Respuestas:
Probablemente hay dos diferencias principales:
Ruby tiene cierres elegantes y anónimos.
Rails los usa con buenos resultados. He aquí un ejemplo:
Los cierres / lambdas anónimos facilitan la emulación de nuevas funciones de lenguaje que tomarían bloques. En Python, existen cierres, pero deben tener un nombre para poder usarse. Entonces, en lugar de poder usar cierres para emular nuevas funciones de lenguaje, se ve obligado a ser explícito sobre el hecho de que está utilizando un cierre.
Ruby tiene una metaprogramación más limpia y fácil de usar.
Esto se usa mucho en Rails, principalmente por lo fácil que es de usar. Para ser específico, en Ruby, puede ejecutar código arbitrario en el contexto de la clase. Los siguientes fragmentos son equivalentes:
En ambos casos, puede hacer:
que imprimirá "HOLA". los
class_eval
método también toma un String, por lo que es posible crear métodos sobre la marcha, a medida que se crea una clase, que tienen una semántica diferente según los parámetros que se pasan.De hecho, es posible hacer este tipo de metaprogramación en Python (y también en otros lenguajes), pero Ruby tiene una ventaja porque la metaprogramación no es un estilo especial de programación. Se deriva del hecho de que en Ruby todo es un objeto y todas las líneas de código se ejecutan directamente. Como resultado, los
Class
es en sí mismos son objetos, los cuerpos de clase tienen unself
apuntador a la clase y puede llamar a métodos en la clase mientras crea uno.Esto es en gran medida responsable del grado de declaratividad posible en Rails y de la facilidad con la que podemos implementar nuevas características declarativas que parecen palabras clave o nuevas características de lenguaje de bloques.
fuente
Aquellos que han argumentado que
están (en mi opinión) equivocados. Ese éxito probablemente se deba más a un marketing inteligente y sostenido que a cualquier destreza técnica. Podría decirse que Django hace un mejor trabajo en muchas áreas (por ejemplo, el administrador de kick-ass incorporado) sin la necesidad de ninguna característica de Ruby. No estoy despreciando a Ruby en absoluto, ¡solo estoy defendiendo a Python!
fuente
La comunidad de Python cree que hacer las cosas de la manera más simple y directa posible es la forma más alta de elegancia. La comunidad de ruby cree que hacer las cosas de manera inteligente que permitan un código genial es la forma más alta de elegancia.
Rails se trata de que si sigues ciertas convenciones, te suceden mágicamente muchas otras cosas. Eso encaja muy bien con la forma rubí de ver el mundo, pero en realidad no sigue la forma de Python.
fuente
¿Es este debate un nuevo debate "vim versus emacs"?
Soy un programador de Python / Django y hasta ahora nunca he encontrado un problema en ese lenguaje / marco que me lleve a cambiar a Ruby / Rails.
Puedo imaginar que sería lo mismo si tuviera experiencia con Ruby / Rails.
Ambos tienen una filosofía similar y hacen el trabajo de una manera rápida y elegante. La mejor opción es lo que ya sabes.
fuente
Personalmente, encuentro que ruby es superior a python en muchos aspectos que comprenden lo que yo llamaría 'expresividad consistente'. Por ejemplo, en ruby, join es un método en el objeto de matriz que genera una cadena, por lo que obtienes algo como esto:
En python, join es un método en el objeto de cadena pero que arroja un error si le pasa algo que no sea una cadena como elemento para unir, por lo que la misma construcción es algo como:
Hay muchas de estas pequeñas diferencias que se acumulan con el tiempo.
Además, no puedo pensar en una mejor manera de introducir errores lógicos invisibles que hacer que los espacios en blanco sean significativos.
fuente
La verdadera respuesta es ninguna Python ni Ruby son mejores o peores candidatos para un marco web. Si desea objetividad, debe escribir algún código en ambos y ver cuál se ajusta mejor a sus preferencias personales, incluida la comunidad.
La mayoría de las personas que defienden uno u otro nunca han utilizado el otro idioma en serio o están "votando" por sus preferencias personales.
Supongo que la mayoría de la gente decide con quién entran en contacto primero porque les enseña algo nuevo (MVC, pruebas, generadores, etc.) o hace algo mejor (complementos, plantillas, etc.). Solía desarrollar con PHP y entré en contacto con RubyOnRails. Si hubiera sabido acerca de MVC antes de encontrar Rails, lo más probable es que nunca hubiera dejado atrás PHP. Pero una vez que comencé a usar Ruby, disfruté de la sintaxis, características, etc.
Si hubiera encontrado Python y uno de sus frameworks MVC primero, ¡probablemente estaría alabando ese lenguaje!
fuente
Python tiene una gran cantidad de marcos similares a Rails. Hay tantos que dice una broma que durante la charla típica en PyCon al menos un framework web verá la luz.
El argumento de que la metaprogramación de Rubys lo haría más adecuado es IMO incorrecto. No necesita metaprogramación para marcos como este.
Así que creo que podemos concluir que Ruby no es mejor (y probablemente ni peor) que Python a este respecto.
fuente
Porque Rails está desarrollado para aprovechar el conjunto de características de Rubys.
Una pregunta igualmente sin sentido sería "¿Por qué Python es más adecuado para Django que Ruby?".
fuente
Supongo que no deberíamos discutir las características del lenguaje per se, sino más bien los acentos que las comunidades respectivas hacen en las características del lenguaje. Por ejemplo, en Python, reabrir una clase es perfectamente posible pero no es común; en Ruby, sin embargo, reabrir una clase es algo de la práctica diaria. esto permite una personalización rápida y sencilla del marco según los requisitos actuales y hace que Ruby sea más favorable para los marcos tipo Rails que cualquier otro lenguaje dinámico. De ahí mi respuesta: uso común de clases de reapertura.
fuente
Algunos han dicho que el tipo de metaprogramación requerido para hacer posible ActiveRecord (un componente clave de los rieles) es más fácil y más natural de hacer en ruby que en python; todavía no conozco Python;), por lo que no puedo confirmar personalmente esta declaración.
He usado rieles brevemente, y su uso de catchalls / interceptores y evaluación dinámica / inyección de código le permite operar a un nivel mucho más alto de abstracción que algunos de los otros marcos (antes de su tiempo). Tengo poca o ninguna experiencia con el marco de Python, pero he escuchado que es igualmente capaz, y que la comunidad de Python hace un gran trabajo apoyando y fomentando los esfuerzos de Python.
fuente
Creo que la sintaxis es más limpia y Ruby, al menos para mí, es mucho más "agradable", ¡tan subjetivo como es!
fuente
Dos respuestas:
a. Porque rails fue escrito para ruby.
si. Por la misma razón, C es más adecuado para Linux que Ruby.
fuente
Todo esto es TOTALMENTE "IMHO"
En Ruby hay UN marco de aplicación web, por lo que es el único marco que se anuncia para ese lenguaje.
Python ha tenido varios desde el inicio, solo por nombrar algunos: Zope, Twisted, Django, TurboGears (en sí mismo una mezcla de otros componentes del marco), Pylons (una especie de clon del marco Rails), y así sucesivamente. Ninguno de ellos es compatible con Python en toda la comunidad como "EL que se debe usar", por lo que toda la "corriente" se distribuye en varios proyectos.
Rails tiene el tamaño de la comunidad únicamente, o al menos en la gran mayoría, debido a Rails.
Tanto Python como Ruby son perfectamente capaces de hacer el trabajo como marco de aplicaciones web. Utilice el que le guste a USTED (y a su equipo de desarrollo potencial) y en el que pueda alinearse.
fuente