Yo tengo desde hace tiempo un dilema con dos lenguajes: Python y Eiffel. Son muy distintos, pero para mí ambos son candidatos a ser "el lenguaje ideal" (combinándolos con C para el bajo nivel). Pero los dos necesitan algo para ser perfectos, que el otro lo tiene.
Sobre Python no diré mucho, porque es bastante conocido. De Eiffel diré que tiene tres o cuatro ocurrencias que a mi me parecen verdaderas genialidades, y que echo de menos todos y cada uno de los días que me paso programando en cualquier otro lenguaje. Yo he programado todo tipo de cosas, desde scripts hasta aplicaciones gigantes con 20 programadores. Y estas cualidades se notan más cuanto más grande es el programa, aunque creo que también se pueden aplicar a los más pequeños.
1) Sobre todo, elDiseño por Contrato integrado en el lenguaje. En otros lenguajes también se puede hacer, pero siempre cuesta bastante más, y no hay una manera normalizada de hacerlo. Aun así, yo me he acostumbrado a programar siempre usándolo. Casi nunca hago pruebas unitarias, y sin embargo, creo que mis programas son más sólidos y funcionan mucho más pronto que si lo hiciera de otra manera.
2) Encapsulación de los atributos. Cualquier programador de OO sabe que no se debe hacer un atributo público para que cualquiera pueda escribir cualquier cosa sobre él. La solución típica C++ es hacer todos los atributos privados, y escribir funciones get y set. ¡Feo, engorroso e ineficiente! Lamentablemente, todos los lenguajes famosos tienden a copiar este error (por ejemplo, Java y Python). En Python aún peor, hay que declarar el get, el set y luego una property.
En Eiffel, directamente está prohibida, por definición de lenguaje, la sintaxis objeto.atributo = valor. Sólo se pueden cambiar los atributos desde dentro de la clase. Así ya no hay peligro en declarar atributos públicos, y se puede usar público o privado para su sentido real, que es saber si un atributo debe ser conocido por los usuarios de la clase o no. Y si se quiere que otros puedan modificarlo, se escribe la función set, la cual puede tener precondiciones que validen el dato a modificar. También es eficiente, porque el compilador convierte en inline automáticamente todas las funciones pequeñas, sin tenerselo que decir explícitamente como en C++.
3) Código autodocumentado. Esto también se puede hacer más o menos en otros lenguajes, pero no como en Eiffel. Este lenguaje está diseñado para que se puedan tener varias vistas del código: una completa; otra ocultando la implementación y mostrando sólo las declaraciones; otra ocultando todos los atributos y métodos privados. Así tienes sin salir del editor, lo que en otros lenguajes se suele hacer con herramientas separadas (javadoc, doxygen o cocoon, pydoc). También se puede emular con el "folding" de algunos editores, pero no es lo mismo. Por ejemplo, no se puede hacer "fold" de los métodos privados y dejar los públicos. En Python, si haces fold desaparecen los comentarios. Y el fallo del punto 2 hace que si oculto la parte privada, me desaparecen todos los atributos y los métodos get/set se mezclan con los métodos normales, lo cual me impide tener una vista clara del "Tipo Abstracto de Datos" que implementa la clase.
Para mí, Eiffel, como lenguaje, es casi perfecto. Sin embargo, tiene un único fallo gravísimo que lo invalida: su autor ha pasado completamente de la comunidad. Al contrario que Guido Van Rossum, Meyer tiene mentalidad "Microsoft", tipo "yo me lo guiso todo". Pero no tiene tanto poder como M$, y no ha sabido estar a la altura, ni tampoco ha conseguido la colaboración de los demás. Por eso, las herramientas, librerías, manuales, soporte, y todas las cosas que rodean a un lenguaje y lo vuelven realmente útil, no son tan buenas como deberían.
Ahora lo está intentando "arreglar" aliándose con Micro$oft para crear un Eiffel# integrado en .Net, pretendiendo así arrimarse a las herramientas mucho más potentes de esta plataforma, pero sin perder la mentalidad cerrada.
No sé cómo acabará la cosa, pero yo al final me quedo con Python. Precisamente, gracias a la comunidad abierta, me he dado cuenta de que no soy el único fan de Eiffel que está interesado en Python. De hecho, hay gente que está introduciendo las cualidades que comento aquí, y otras, en este lenguaje. Si se consigue hacerlo bien (hay una serie muy interesante de propuestas para Python 3.0), sin perder lo bueno del Python actual, cada vez le faltará menos para ser el lenguaje perfecto... ¿será posible?
Coincido contigo; en la epoca en la que estamos, me parece obsoleto que alguien venga vendiendo un lenguje cerrado, con herramientas escasas y de pago.
Y este señor debe de dar gracias a SmallEiffiel. Sin este compilador libre, su lenguaje seria totalmente irrelevante en la práctica.
-- Tu eggues muy malo, tu siemfprre negatiffo, nunca positiffo
Elogio y refutación de Eiffel
(Puntos:1)Sobre Python no diré mucho, porque es bastante conocido. De Eiffel diré que tiene tres o cuatro ocurrencias que a mi me parecen verdaderas genialidades, y que echo de menos todos y cada uno de los días que me paso programando en cualquier otro lenguaje. Yo he programado todo tipo de cosas, desde scripts hasta aplicaciones gigantes con 20 programadores. Y estas cualidades se notan más cuanto más grande es el programa, aunque creo que también se pueden aplicar a los más pequeños.
1) Sobre todo, elDiseño por Contrato integrado en el lenguaje. En otros lenguajes también se puede hacer, pero siempre cuesta bastante más, y no hay una manera normalizada de hacerlo. Aun así, yo me he acostumbrado a programar siempre usándolo. Casi nunca hago pruebas unitarias, y sin embargo, creo que mis programas son más sólidos y funcionan mucho más pronto que si lo hiciera de otra manera.
2) Encapsulación de los atributos. Cualquier programador de OO sabe que no se debe hacer un atributo público para que cualquiera pueda escribir cualquier cosa sobre él. La solución típica C++ es hacer todos los atributos privados, y escribir funciones get y set. ¡Feo, engorroso e ineficiente! Lamentablemente, todos los lenguajes famosos tienden a copiar este error (por ejemplo, Java y Python). En Python aún peor, hay que declarar el get, el set y luego una property.
En Eiffel, directamente está prohibida, por definición de lenguaje, la sintaxis objeto.atributo = valor. Sólo se pueden cambiar los atributos desde dentro de la clase. Así ya no hay peligro en declarar atributos públicos, y se puede usar público o privado para su sentido real, que es saber si un atributo debe ser conocido por los usuarios de la clase o no. Y si se quiere que otros puedan modificarlo, se escribe la función set, la cual puede tener precondiciones que validen el dato a modificar. También es eficiente, porque el compilador convierte en inline automáticamente todas las funciones pequeñas, sin tenerselo que decir explícitamente como en C++.
3) Código autodocumentado. Esto también se puede hacer más o menos en otros lenguajes, pero no como en Eiffel. Este lenguaje está diseñado para que se puedan tener varias vistas del código: una completa; otra ocultando la implementación y mostrando sólo las declaraciones; otra ocultando todos los atributos y métodos privados. Así tienes sin salir del editor, lo que en otros lenguajes se suele hacer con herramientas separadas (javadoc, doxygen o cocoon, pydoc). También se puede emular con el "folding" de algunos editores, pero no es lo mismo. Por ejemplo, no se puede hacer "fold" de los métodos privados y dejar los públicos. En Python, si haces fold desaparecen los comentarios. Y el fallo del punto 2 hace que si oculto la parte privada, me desaparecen todos los atributos y los métodos get/set se mezclan con los métodos normales, lo cual me impide tener una vista clara del "Tipo Abstracto de Datos" que implementa la clase.
Para mí, Eiffel, como lenguaje, es casi perfecto. Sin embargo, tiene un único fallo gravísimo que lo invalida: su autor ha pasado completamente de la comunidad. Al contrario que Guido Van Rossum, Meyer tiene mentalidad "Microsoft", tipo "yo me lo guiso todo". Pero no tiene tanto poder como M$, y no ha sabido estar a la altura, ni tampoco ha conseguido la colaboración de los demás. Por eso, las herramientas, librerías, manuales, soporte, y todas las cosas que rodean a un lenguaje y lo vuelven realmente útil, no son tan buenas como deberían.
Ahora lo está intentando "arreglar" aliándose con Micro$oft para crear un Eiffel# integrado en .Net, pretendiendo así arrimarse a las herramientas mucho más potentes de esta plataforma, pero sin perder la mentalidad cerrada.
No sé cómo acabará la cosa, pero yo al final me quedo con Python. Precisamente, gracias a la comunidad abierta, me he dado cuenta de que no soy el único fan de Eiffel que está interesado en Python. De hecho, hay gente que está introduciendo las cualidades que comento aquí, y otras, en este lenguaje. Si se consigue hacerlo bien (hay una serie muy interesante de propuestas para Python 3.0), sin perder lo bueno del Python actual, cada vez le faltará menos para ser el lenguaje perfecto... ¿será posible?
Re:Elogio y refutación de Eiffel
(Puntos:2)( http://barrapunto.com/ )
Y este señor debe de dar gracias a SmallEiffiel. Sin este compilador libre, su lenguaje seria totalmente irrelevante en la práctica.
Tu eggues muy malo, tu siemfprre negatiffo, nunca positiffo