Por favor avise sobre Ruby vs Python, para alguien a quien le guste LISP mucho

Soy un desarrollador de C ++, entrando lentamente en el desarrollo web. Me gusta mucho LISP pero no me gusta AllegroCL y los marcos web disponibles para LISP. Estoy buscando más libertad y capacidad para hacer hacks geniales en el nivel del idioma. No considero a las tabs como un crimen contra la naturaleza.

¿Cuál está más cerca de LISP: Python o Ruby?

Parece que no puedo elegir entre Python y Ruby: parecen muy similares, pero al parecer Ruby es más funcional y está más orientado a objetos, que son cosas buenas, mientras que Python se parece más a Perl: un lenguaje de script simple. ¿Tengo la impresión correcta?

PD: Esto puede parecer un cebo de fuego, pero no lo es en realidad, solo estoy tratando de no volverme loco con el TOC sobre el cambio de RoR a Python / Django y volver.

Yo iría con Ruby. Tiene todo tipo de metaprogtwigs y hacks de perforación de pato que lo hacen realmente fácil de extender. Las características como los bloques pueden no parecer mucho al principio, pero crean una syntax realmente limpia si se usan correctamente. Las clases abiertas pueden ser una depuración del infierno si las 2.days.from_now , pero si eres un progtwigdor responsable, puedes hacer cosas como 2.days.from_now (ejemplo de Rails) con mucha facilidad (Python puede hacer esto también, creo, pero con un poco más de dolor)

PD: Echa un vistazo a “Por qué Ruby es un LISP aceptable” .

Peter Norvig , un famoso y gran lisper , convertido a Python. Escribió el artículo Python para progtwigdores de Lisp , que podría encontrar interesante con su comparación detallada de características.

Python se parece a un pseudocódigo ejecutable. Es fácil de entender y, a menudo, usar tu intuición simplemente funcionará. Python te permite poner fácilmente tus ideas en el código.

Ahora, para el desarrollo web, Python puede parecer una opción más dispersa que Ruby, con la gran cantidad de estructuras web de Python disponibles. Aún así, en general, Python es un lenguaje muy bueno y útil para saber. Como los nichos de Ruby y Python se superponen, estoy de acuerdo con Kiv en que es, en parte, una cuestión de gusto personal, la que usted elija.

Devils Advocate: ¿A quién le importa?

Ambos son buenos sistemas y tienen un ecosistema de buenos marcos web y comunidades de desarrolladores activos. Supongo que está enmarcando su decisión basándose en los criterios incorrectos. La pregunta suena como si estuvieras preocupado por si enfrentarás problemas de implementación u otras dificultades al elegir uno sobre el otro. No lo hagas

Esto es similar a las decisiones de Java / .Net. Puede haber razones convincentes en una instancia específica, pero factores suaves como la familiaridad del arquitecto con la plataforma son un predictor mucho más fuerte del éxito del proyecto.

Admito que he usado Python mucho más que Ruby, pero no diría que tengo una gran preferencia entre los dos aparte de la familiaridad. He usado Python de vez en cuando desde 1998 y me gusta el Smalltalkish-ness de Ruby como lo hice con Smalltalk hace unos 15 años. Ambos hacen cosas similares de manera ligeramente diferente.

Me gustaría ciertas características de Ruby (o Smalltalk), pero Python no funciona de esa manera. En su lugar, tiene otras características y los idiomas del idioma son ligeramente diferentes de Ruby o Smalltalk. Varios de los otros carteles se han vinculado a artículos que comparan los dos.

Si te preocupas por Rails vs. Django, eso sugiere que estás buscando una plataforma para aplicaciones web. Ambos idiomas tienen un buen soporte de herramientas y una comunidad de desarrolladores activa. Django parece ser el ganador del cuerpo a cuerpo Python web y Rails parece estar en el proceso de “cruzar el abismo” y llevar a Ruby con él. Ambos son sistemas razonablemente maduros y se ha demostrado que funcionan bien para volúmenes de tráfico respetables.

ProTip: La presencia de guerras religiosas es un buen indicador de que ninguna de las partes tiene un argumento convincente.

Entonces, voy a interpretar al defensor del diablo y decir que preocuparse por la elección no tiene sentido. Los idiomas tienen ventajas y desventajas entre sí, pero nada que pueda considerarse convincente en el caso general. Preocuparse por los méritos detallados de una u otra plataforma es enmarcar la decisión erróneamente.

Elige uno y úsalo. Podrás construir sistemas efectivamente con cualquiera de los dos.

Hablando como un “Rubyist”, estoy de acuerdo con Kiv. Los dos idiomas otorgan una buena cantidad de margen de maniobra cuando se trata de paradigmas de progtwigción, pero también tienen ventajas / defectos. Creo que los compromisos que hagas en ambos sentidos tienen mucho que ver con tu propio estilo y gusto de progtwigción.

Personalmente, creo que Ruby puede leer más pseudocódigo que Python. Primero, Python tiene espacios en blanco activos, que aunque son elegantes a los ojos de muchos, no tienden a entrar en la ecuación cuando se escribe un pseudocódigo. Además, la syntax de Ruby es bastante flexible. Esa flexibilidad causa muchas peculiaridades que pueden confundir, pero también permite que el código sea bastante expresivo y bonito a la vista.

Finalmente, realmente diría que Ruby se siente más pervertida para mí. Eso es en parte porque me siento mucho más cómodo con él, así que puedo eliminar los scripts con bastante rapidez. Sin embargo, mucha de la syntax de Ruby fue tomada de Perl, y no he visto mucho el código Python que se siente similar (aunque, una vez más, tengo poca experiencia con Python).

Dependiendo del enfoque de la progtwigción web que desee adoptar, creo que los tipos de marcos web disponibles en cada lenguaje podrían ser también un factor en la decisión. Yo diría que prueba ambos. Puedes obtener un conocimiento práctico de cada uno de ellos en una tarde, y mientras no escribas Ruby o Python, puedes establecer una idea de cada uno y decidir cuál te gusta más.

Actualización: creo que tu pregunta debería ser en realidad dos discusiones separadas: una con Ruby y otra con Python. Las comparaciones son menos importantes porque comienza a debatir los méritos de las diferencias, a diferencia de qué idioma funcionará mejor para usted. Si tiene preguntas sobre Ruby, estaré más que feliz de responder lo mejor que pueda.

Tanto Ruby como Python están bastante alejados de las tradiciones Lisp de datos inmutables, progtwigs como datos y macros. Pero Ruby es casi un clon de Smalltalk (y espero que crezca más como Smalltalk, ya que Perlish cruft está en desuso), y Smalltalk, como Lisp, es un lenguaje que lleva una idea a los extremos. Basándome en su deseo de hacer hacks geniales en el nivel del idioma, me gustaría ir con Ruby, ya que hereda gran parte de la mentalidad de metaprogtwigción de Smalltalk, y esa mentalidad está conectada a la tradición Lisp.

Alex Martelli da un buen análisis del tema . Ahora está un poco anticuado, pero estoy de acuerdo con su esencia básica: Python y Ruby son dos formas diferentes de implementar lo mismo . Claro que hay algunas cosas que puedes hacer en Ruby que no puedes hacer en Python. Y seguro que la syntax de Python es (posiblemente) mejor que la de Ruby. Pero cuando se trata de eso, no hay muchas razones objetivas y científicas para preferir una sobre la otra.

Una cosa común que oirán es esto: la plataforma es más importante que el lenguaje y Python tiene una plataforma mejor que Ruby (este argumento funciona en ambos sentidos, así que no me voten, todos ustedes rubyistas). Y hay algo de verdad en ello. Desafortunadamente, no es muy relevante. Si no le gusta la plataforma para cualquiera de los idiomas, existen implementaciones tanto en Java como en .Net, por lo que puede usarlas si tiene inquietudes acerca de la plataforma.

También recomiendo el artículo de Peter Norvig que namin publicó. Si desea ver la progtwigción funcional en Python, consulte el módulo functools en la biblioteca estándar.

También hay mucho espacio para piratear en Python; Las variables privadas son por convención y no se aplican, por lo que puede hurgar en el estado interno de los objetos si lo desea. Normalmente esto no es necesario, sin embargo.

Tanto Ruby como Python están muy orientados a objetos y admiten progtwigción funcional; Yo no diría que ninguno de los dos es claramente superior para tu proyecto; Es en parte una cuestión de gusto personal.

Soy un pitonista; sin embargo, en función de sus requisitos, especialmente los “trucos geniales en el nivel del idioma”, le sugiero que trabaje en Ruby. Ruby es más flexible en el modo Perl y puedes hacer muchos hacks; Python está orientado hacia la legibilidad , lo cual es algo muy bueno, y en general los hacks de idiomas están un poco mal vistos. Los tipos básicos de Ruby se pueden modificar de una manera pirateada que normalmente permiten los lenguajes prototipo, mientras que los tipos básicos de Python son más adecuados para la subclasificación.

Por cierto, agregaría una corrección menor: tanto Ruby como Python son muy, muy orientados a objetos, y ninguno de ellos está destinado a ser usado para scripts rápidos y sucios a la manera de Perl. Entre los dos, Ruby es sintácticamente más similar a Perl que a Python.

Si necesita soporte de Unicode, recuerde verificar qué tan bien es el soporte. AFAIK, el soporte de Python para Unicode es mejor que el de Ruby, especialmente desde Python 3.0. Por otro lado, a Python 3 aún le faltan algunos paquetes populares y bibliotecas de terceros, por lo que podría jugar en contra.

Soy un rubista que eligió el lenguaje en base a criterios muy similares. Python es un buen lenguaje y también me gusta trabajar con él, pero creo que Ruby es un poco más Lispy en el grado de libertad que le da al progtwigdor. Python parece imponer sus opiniones un poco más (lo que puede ser algo bueno, pero no está de acuerdo con nuestros criterios aquí).

Python ciertamente no es más Perlish: Ruby es esencialmente un mashup de Smalltalk / Perl (algunas de sus características menos utilizadas se extraen directamente de Perl), mientras que Python solo está relacionado de forma distante con cualquiera de ellas.

elija el más popular para su dominio para que su trabajo obtenga la mayor visibilidad. algunos podrían decir Ruby / Rails para web, python para todo lo demás. Escoger un idioma solo porque no es apropiado para un profesional.

Si te gusta lisp, creo que serás mejor como ruby ​​pero c ++ me recuerda más a python. He publicado una pequeña publicación sobre este tema: http://hartator.wordpress.com/2011/06/12/ruby-vs-python-2011/