¿Por qué se escribió Rails en Ruby? [cerrado]

9

Sé PHP y Ruby.

Usando un clon de PHP Rails (no fuera de elección), llamado Symfony, (que aparentemente es el mejor marco de trabajo de PHP), noto que es un clon de Rails. Creo que Symfony es estúpido y eso (SensioLabs es un negocio inteligente) porque Rails ya existe.

Además de los proyectos de código abierto que ganan dinero, no entiendo por qué la gente está haciendo clones de Rails en PHP, cuando Rails ya existe. ¿Por qué no usar Rails? Seguramente DHH codificó Rails con Ruby por una razón.

Usando Symfony, noto que algo no se siente bien, pero no sé qué es. Aprendí Rails a través de un libro electrónico basura de Sitepoint y lo olvidé, así que ahora lo estoy aprendiendo a través del libro electrónico PragProg y me encanta ese libro electrónico. No conozco completamente Rails, pero entiendo cómo funciona (gracias a Symfony). Me encantaría terminar de leer todo el libro electrónico para poder crear aplicaciones de 2 Rails. Recuerdo que Rails era más divertido que Symfony usando el libro electrónico de Sitepoint que no pude terminar, y que no tenía nada que ver con la bonita sintaxis de Ruby.

  1. ¿Por qué Rails está codificado en Ruby?
  2. ¿Qué tienen los clones de PHP Rails que no se sienten bien?
  3. ¿Qué está haciendo Rails, que los clones de Rails no están haciendo?
desbest
fuente
44
Ruby es la salsa secreta de Rails.
Quirón el
44
Meh, no puedo ver algo llamado Ruby on Railsimplementado en PHP.
alternativa
2
Si la memoria funciona, escuché un podcast una vez donde DHH describió que escogió a Ruby. Creo que fue este episodio de This Developer's Life.
Adam Lear
2
@ Chris G - Me parece increíblemente difícil de creer. El abismo entre los lenguajes subyacentes es enorme: Ruby es un lenguaje de programación inteligente e integralmente pensado, PHP es un truco acumulado en otros hacks con un montón de características de Ruby pirateadas al final del juego. PHP es fácil de alojar y funciona mejor, pero si esas hubieran sido las prioridades de DHH, probablemente no habría elegido a Ruby cuando lo hizo. PHP nunca fue realmente diseñado para ser un lenguaje de programación y las personas que se preocupan por la teoría del lenguaje / CS tienden a no interesarse en ello como resultado.
glenatron
2
@Glenatron Nada de eso impide que cualquier usuario inteligente de PHP escriba aplicaciones web hermosas, expresivas y modernas que utilicen funciones clave de "Rails" como ORM. ¡La idea de que los cierres se agregaron recientemente a PHP no impedirá que nadie los use!
Chris G.

Respuestas:

26

1.) ¿Por qué Rails está codificado en Ruby?

Rails se extrajo originalmente del trabajo de DHH en Basecamp, que se escribió en Ruby. Con el tiempo, los desarrolladores principales de Rails continuaron extrayendo y desarrollando más funciones en Rails, y eventualmente se convirtió en un marco completo.

Dado que Ruby creció en poder y expresividad a lo largo de los años, continuó siendo una buena opción para el marco, por lo que también continuó siendo el lenguaje en el que está escrito. (Además, "C # on Rails" o "Java on Rails" no No tengo esa bonita aliteración.)

2.) ¿Qué tienen los clones PHP Rails que no se sienten bien?

Esto realmente no se puede responder objetivamente, pero probablemente se deba al n. ° 1. El comportamiento y los aspectos internos de Rails aprovechan muchas características que existen en Ruby y serían difíciles de replicar precisamente en otros lugares. Por ejemplo, PHP no tiene metaclases, de las cuales Rails depende en gran medida.

Además de los proyectos de código abierto que ganan dinero, no entiendo por qué la gente está haciendo clones de Rails en PHP, cuando Rails ya existe. ¿Por qué no usar Rails? Seguramente DHH codificó Rails con Ruby por una razón.

Porque no todos tienen el tiempo, el presupuesto o la inclinación para aprender un nuevo idioma solo para poder aprender un nuevo marco.

A modo de analogía, si resultó que Brainfuck tenía un marco web muy popular, ¿eso significa que debería abandonar a sus clientes que no han escrito sus aplicaciones en Brainfuck? Esa no es forma de administrar un negocio.

Sé PHP y Ruby.

Afirmaciones como "Sé tanto PHP como Ruby" sugieren que es posible que aún no aprecies completamente la profundidad, la riqueza y las idiosincrasias de ambos.

John Feminella
fuente
(Reproducido de stackoverflow.com/questions/6972992/… para la posteridad.)
John Feminella
Creo que se intentó un intento inicial en Basecamp en PHP y no funcionó a satisfacción de DHH. Por lo tanto, Rails fue codificado en Ruby.
Bryan M.
3
+1: hay un momento para aprender un nuevo idioma: un proyecto inmediato de importancia no es uno de los.
JeffO
PHP no tiene metaclases fuera de la caja, estás en lo correcto. Sin embargo, desde PHP 5.3 es posible implementar la funcionalidad de metaclase.
Chris G.
6

1. ¿Por qué Rails está codificado en Ruby?

Hubo una vez la decisión de programarlo en rubí. Esta decisión de diseño dura hasta hoy.

2. ¿Qué tienen los clones PHP Rails que no se sienten bien?

Es un sentimiento que tienes, difícil de decir en un bocado como este. Es posible que desee preguntarle a una persona que sea más íntima con usted y que sepa más sobre sus sentimientos o incluso los comparta.

3. ¿Qué está haciendo Rails, que los clones de Rails no están haciendo?

Un clon exacto de Rails hace, por definición, todo lo que hace Rails. Entonces, esto probablemente dependerá de cómo se hizo exactamente un clon. Las diferentes partes resultarán en un comportamiento diferente. Por ejemplo, para una traducción a otro idioma, es posible que el otro idioma no tenga características de lenguaje que Rails on Ruby esté utilizando, lo que probablemente dará como resultado diferencias en el diseño y luego en el comportamiento.

hakre
fuente
6

¿Por qué Rails está codificado en Ruby?

Ruby permite mucho una meta-programación, y su sintaxis permisiva le permite crear APIs agradables que no se parecen en nada a las llamadas a métodos.

Por ejemplo, ActiveRecord, el mapeador relacional de objetos de Rail, hace bien ambas cosas. Primero, utiliza la capacidad de metaprogramación de Ruby para crear métodos sobre la marcha correspondientes a los nombres de campo en la base de datos.

En segundo lugar, ActiveRecord le permite declarar asociaciones a objetos: un Personpoder has_many :books. Ese has_many parece una declaración, pero en realidad es una llamada al método. (Ruby lee esto como has_many(:books).

Ruby también tiene el objetivo de facilitar la vida del programador experimentado.

Ruby facilita estas cosas, por lo que la gente las hace. Otros idiomas los hacen más difíciles, o cosas mágicas como esta no son explícitamente parte de la cultura. Django, el mega marco de Python, tiene mucha menos magia mágica porque no es tan fácil en Python, y Python como un lenguaje se inclina hacia "explícito es mejor que implícito". (No sé mucho sobre la cultura PHP o los marcos web de ese lado).

Creo que estas son algunas de las razones por las que DHH se enamoró de Ruby, y él usa estas características del lenguaje con poder en Rails.

RyanWilcox
fuente
Está muy bien usar la consola para hacer algunos andamios en Rails, pero estas características existen en Symfony. ¿Puede señalarme dónde puedo encontrar evidencia de cómo el lenguaje de Ruby atiende a la metaprogramación? ¿No deberían ser suficientes las clases?
Desbest
1
Los programadores pragmáticos tienen un libro: Metaprogramming in Ruby, que, además de ser una introducción a Metaprogramming in Ruby, también pasa unas 50 páginas hablando de metaprogramming en Rails. No creo que simplemente las clases sean suficientes: por ejemplo, a veces la metaprogramación ocurre a través de la cadena de métodos ("cuando llamas a esta función, en cambio llama a mi versión de la función, que puede o no llamar al original"). Este es un patrón de metaprogramación en Ruby (que Rails limpia y hace más fácil de usar)
RyanWilcox
Tendré que leer eso una vez que domine Rails. Todo suena confuso.
Desbest
Solo me gustaría mencionar que PHP también tiene soluciones ORM. No es algo exclusivo de Ruby.
Chris G.
1
Hay una implementación PHP de ActiveRecord llamada phpActiveRecord. Utiliza todas estas cosas. Sin embargo, cuando DHH construyó Rails, PHP estaba muy lejos de poder hacer eso.
Jamon Holmgren
2

¿Por qué no usar rieles?

Ofreceré alguna perspectiva como usuario de ambos. Tengo un programa de hobby en Ruby / Rails y uso PHP exclusivamente en el trabajo. (Nota: no descarto Ruby / Rails como un ambiente de aficionado, así es como elijo usarlo).

Muchas personas tratan a Ruby / Rails como el santo grial del desarrollo de sitios web debido a la popularidad del carro y porque es 'diferente'. En muchos sentidos, ciertamente es suficiente, pero no lo suficiente, para descartar PHP como algo antiguo.

Symfony no se siente como Rails porque PHP carece del azúcar sintáctico que proporciona rails. PHP está mejorando en este sentido y la adición de cierres de 5.3 ha marcado la diferencia en cuántos de nosotros escribimos código.

No me malinterpreten, amo a Ruby y amo a Rails. Pero cuando no desea lidiar con el alojamiento de sitios web complejos o costosos o preocuparse por el rendimiento o ser 'innovador', PHP sigue siendo extremadamente relevante hoy y sus marcos también son muy buenos.

  • Redbean ofrece una gran funcionalidad ORM con PHP. Doctrine, Idiorm / Paris y Propel también.
  • Symfony2 y CakePHP ofrecen un marco de desarrollo web hinchado similar en espíritu a Rails.
  • CodeIgniter ofrece una solución de marco completo sin la hinchazón.
  • Slim ofrece un marco sinatra.

Creo que su insinuación de que los clones de PHP rails no 'se sienten bien' es errónea, porque no son clones y no serán lo mismo que Rails. Aprenda a disfrutar de la simplicidad y familiaridad de una solución PHP.

Chris G.
fuente