sábado, marzo 29, 2008

En 100 años?

Hace poco leí un ensayo de Paul Graham llamado "The Hundred-Year Language" Me pareció muy interesante.

Una de las cosas que quisiera discutir es ésta:

I think that, like species, languages will form evolutionary trees, with dead-ends branching off all over. We can see this happening already. Cobol, for all its sometime popularity, does not seem to have any intellectual descendants. It is an evolutionary dead-end-- a Neanderthal language.

I predict a similar fate for Java. People sometimes send me mail saying, "How can you say that Java won't turn out to be a successful language? It's already a successful language." And I admit that it is, if you measure success by shelf space taken up by books on it (particularly individual books on it), or by the number of undergrads who believe they have to learn it to get a job. When I say Java won't turn out to be a successful language, I mean something more specific: that Java will turn out to be an evolutionary dead-end, like Cobol.


Porqué habría de ser Java un Dead-End Evolutivo? La respuesta es:

Java cambia muy lentamente!

No se trata de los problemas inherentes al boilerplate para pasar una función por parámetro. No se trata de que los namespaces sean incómodas carpetas ni tampoco que no haya inferencia de tipos.

Se trata de que estos problemas no se solucionan. Se toman años en aprobar una JSR, pero entonces?

Que pasará con Java en los próximos 100 años? Cuantos años nos aguardan, antes de que Java quede confinado a los cores de "las grandes compañías", que en algún momento pensaron que Cobol y RPG eran los mejores lenguajes?

Mas interesante aún! Cual será la sucesión de lenguajes de los próximos 100 años? Que nos espera después de Java?

Muchas preguntas, no?

Precisamente, otro artículo de Paul Graham (creo que es realmente una cita) da una buena herramienta de como pensar sobre la siguiente sucesión.

Empecemos a Especular!

Hay como dos lados, por uno creo que se dió un estilo de transición de la forma:

Arreglemos el "noun oriented thinking" del lenguaje de programación X

(Donde X es Java, C#)

Con C# ya medio se arreglo con la inclusión de lambdas (aunque con muchas limitantes) y en Java ahí está la propuesta. Los lenguajes que superen esta prueba tal vez continúen siendo ramas gruesas dentro de el árbol evolutivo.

Él otro lado tiene mucho que ver con los lenguajes dinámicos. Creo que el próximo lenguaje de entre toda esa familia (Groovy, Ruby) será uno que mejore el performance de estos. De hecho, los primeros esfuerzos se comienzan a observar con el montón de implementaciones para la CLR, DLR y la JVM.

Creo que la posibilidad de integración de DSL's jugará un papel importante. En el momento se que Ruby por ejemplo trata de acomodar su sintaxis para hacer mini-DSL's, muy al estilo de usar nombres de métodos dicientes y literales de la forma conveniente como en SmallTalk, pero le hacen falta capacidades reflexión sobre sus construcciones sintácticas. C# intenta hacer algo sobre esto, limitado a "expresion trees" sobre sus lambdas. F#, pese a estar lejos de ser un First Class Citizen en .Net tiene algunas posibilidades en este aspecto, pero hace falta una función Compile (como lo hay en los expresion Trees). No hablemos de Java, éste no posee nada de esto.

No se hasta donde nos pueda llevar la teoría de tipos, pero de algo estoy seguro. Creo que algunos lenguajes imperativos tendrán clases de tipos como Haskell y una buena inferencia que haga generalización automática. Construcciones para manejar paralelismo, etc...

Lo mas interesante de todo ésto es que todas estas ideas ya existen desde Lisp. Será que surge algo Realmente nuevo?

No hay comentarios.: