Pony: Actores, Objetos y Alto Rendimiento

De vez en cuando me gusta estudiar nuevos lenguajes de programación, ver para qué han sido desarrollados, las tareas que mejor pueden resolverse en esos lenguajes y comparar con otros que tengan una misión similar. En este caso he topado con Pony, un lenguaje basado en Modelo Actor, con Orientación a Objetos y Alto Rendimiento. ¿Qué es realmente el lenguaje Pony?

En esta entrevista hecha por InfoQ se detallan muchos aspectos sobre el lenguaje creado por Sylvan Clebsch. Las cosas que me gustaría reseñar son las que pueden leerse sobretodo de su tutorial donde dice las características de este lenguaje:

  • Es orientado a objetos porque tiene clases y objetos, pero no dispone de herencia (al menos hasta la fecha).
  • Cumple el modelo actor porque tiene actores (similar a Erlang o Akka).
  • Tiene prestaciones seguras. Suena algo raro pero se refiere principalmente a estas prestaciones en seguridad:
    • Tiene seguridad de tipos, probado matemáticamente y todo.
    • Tiene seguridad de uso de memoria, supongo que por el hecho de que no es posible modificar punteros y según dicen ni tan siquera existe null.
    • Tiene seguridad en excepciones, de hecho, es que no hay excepciones como tal. Se definen semánticas y todas son manejadas.
    • Está libre de condiciones de carrera. Pony no tiene bloqueos u operaciones atómicas. Al momento de compilar todo se comprueba.
    • También está libre de interbloqueos (deadlocks). Es fácil porque Pony no tiene bloqueos en absoluto.
  • Cabe destacar que es un lenguaje de tipado estático, por lo que el compilador ya conoce de antemano el tipo de dato que contendrá cada variable.

Estas características responden a la principal meta que se planteo su creador a la hora de realizar el lenguaje: get-stuff-done (tener las cosas hechas) y the right thing (la cosa correcta).

La filosofía de Pony sigue estos principios, por orden de importancia:

  • Exactitud, no tiene sentido intentar tener las cosas hechas si no puedes garantizar que el resultado sea exacto.
  • Rendimiento, lo más rápido que el programa pueda tener las cosas hechas es lo ideal. Aunque la exactitud o un correcto resultado prima sobre el rendimiento.
  • Simplicidad, puede ser sacrificada en pro del rendimiento.
  • Consistencia, puede ser sacrificada en pro de la simplicidad o del rendimiento. No permitir que la excesiva consistencia te tome en el camino de tener las cosas hechas.
  • Compleción, está bien cubrir tantas cosas como sea posible, pero la compleción puede ser sacrificada por cualquier otra cosa. Es mejor tener algunas cosas hechas ahora que esperar hasta que todo pueda estar hecho después.

Hay una lista mas larga de principios en el tutorial que incluye cosas como un tiempo razonable de compilación, gramática simple, sin código cargable (todo tiene que ser conocido por el compilador), sistema de construcción completo, etc.

El creador del lenguaje tuvo presente tras sus años trabajando como programador de videojuegos, sistemas embebidos, sistemas militares y sistemas financieros (entre otros), que necesitaba un lenguaje para ayudar al programador a realizar su tarea minimizando el número de fallos o errores detectables por un ordenador. El compilador de Pony es por tanto la herramienta principal y la encargada de comprobar todo el código.

No voy a adentrarme aún en el código de Pony, he estado revisando sus características y varios vídeos como este de una charla titulada My Little Pony. Seguiré analizando y viendo con más detalle todo en otro artículo.

¿Qué te ha parecido este nuevo lenguaje?