jueves, mayo 29, 2008

Batalla de los Ewoks?

En un url muy muy lejano...

Pues el último escrito de Steve Yegge generó todo tipo de reacciones:

Return of Statically Typed Languages
Guide You the Force Should
Revenge of the Statically Typed Languages
A New Hope - Polyglotism

Y me imagino que en este momento deberán haber otros cientos de entradas similares. Dentro de "la saga", la opinión con la que mejor me llevo es con la de "Ola Bini"

I guess that's the message of this post. Compare languages, understand your most important tools. Have several different tools for different tasks, and understand the failings of your current tools.


Lo cual va muy de la mano con otro comentario de Ted Neward:

Erik Meijer coined this idea first, and I like it a lot: Why can't we operate on a basic principle of "static when we can (or should), dynamic otherwise"?


Un algunos de ejemplos que se me ocurren podrían ser estos:

Uno de los fuertes por ejemplo dentro de los lenguajes dinámicos ha sido procesamiento de texto. Si uno se remonta a la historia puede uno darse cuenta que Lisp, Perl, Python han sido muy fuertes en este campo. Quien necesita tipos para hacer búsquedas y reemplazos en texto?

De la misma forma puede uno llegar a dominios de Problemas donde un lenguaje estaticamente Tipado sea mejor. Si necesito armar un árbol sintáctico y necesito hacer verificaciones... es bueno hacerlas en runtime? no es acaso mejor que el sistema de tipos me ayude con eso? Es por eso que a la hora de hacer compiladores mucha gente opta por Sistemas fuertemente tipados como Haskell y derivados de ML. Las propiedades de verificación de este tipo de lenguajes supera en forma enorme la de los lenguajes dinámicos(1).

Si quiero estar haciendo modificaciones de código en caliente para que me voy a complicar con tipos? Invito a cualquier persona a intentar simular comportamientos dinámicos como agregar-modificar métodos en runtime usando las capacidades de "Reflexion" de Java o C#. Y luego intente hacer lo mismo en Ruby. Estoy seguro que la elección del sistema de tipos de Erlang tiene mucho que ver con este punto.(2)

Consejo:
Sea crítico con este tipo de Flame-Wars. Muchas veces todos comparten cierta razón en lo que dicen. Y al final siempre se aprende. (Parecen inaportantes los Ewoks y al final...)

(1) Las posibilidades de los ML y Haskell para verificación no solo tienen causas en el sistema de tipos fuertemente tipados. El hecho de poseer transparencia referencial por ejemplo ayuda

(2) "Reemplazo de código en caliente" debe leerse a la ligera! El caso de capacidades dinámicas (como cambiar métodos) Es muy diferente lo que hace Erlang. Pero la idea es hacer referencia a ese tipo de comportamientos.

No hay comentarios.: