Opa: El lenguaje de la Nube

Tal y como reza su web The Cloud Language (el lenguaje de la nube), este lenguaje sale como una solución a la programación de sitios web cumpliendo con unas necesidades concretas. La empresa MLState ha puesto como su bandera a este lenguaje, sobre el que está orientando toda su actividad comercial.

Un vistazo al lenguaje

En su página web, nada más acceder, se ve un cuadro con un código de algo más de 20 líneas completamente funcional y que resulta en… ¡un chat! Aquí el código:

type message = { author : string ; text : string }
 
@publish room = Network.cloud("room") : Network.network(message)
 
user_update(x : message) =
  line = <div class="line">
            <div class="user">{x.author}:</>
            <div class="message">{x.text}</>
         </>
  do Dom.transform([#conversation +<- line ])
  Dom.scroll_to_bottom(#conversation)
 
broadcast(author) =
   do Network.broadcast({~author text=Dom.get_value(#entry)}, room)
   Dom.clear_value(#entry)
 
start() =
   author = Random.string(8)
   <div id=#header><div id=#logo></></>
   <div id=#conversation onready={_ -> Network.add_callback(user_update, room)}></>
   <div id=#footer>
      <input id=#entry onnewline={_ -> broadcast(author)} />
      <div class="button" onclick={_ -> broadcast(author)}>Post</>
   </>
 
server = Server.one_page_bundle("Chat", [@static_resource_directory("resources")],
       ["resources/css.css"], start)

La sintaxis del lenguaje recuerda bastante a JavaScript, con tintes de programación funcional al estilo Prolog. Esto mezclado a que la sintaxis de XML en que se basa HTML puede incrustarse en el propio código, como si de instrucciones propias del lenguaje se tratasen, haciendo que la salida en este formato sea más limpia que en otros lenguajes de etiquetas como JSP, ASP o PHP.

Sin saber nada del lenguaje, choca ver el ejemplo, donde se instancian algunos objetos de red (en el ejemplo del chat) y se agregan líneas con una sintaxis de operadores que no se ven generalmente en otros lenguajes (como +<-).

Se define un tipo de datos que se mantiene por sesión de navegador, y la información entre el navegador y el servidor se va intercambiando entre código JavaScript y AJAX. Así mismo, se hace una comunicación broadcast, esto quiere decir que se envía el mensaje que le llega al sistema a todos los que tengan una sesión abierta de la aplicación.

Este tipo de facilidad hace que realizar un chat en la web, como se muestra en el ejemplo, sea muy sencillo, así como realizar juegos en red, en internet, e incluso aplicaciones de gestión que requieran de notificación de cuando se toca la ficha de un cliente o similar.

Las potencias del lenguaje

En los últimos tiempos he ido viendo que se hace más patente la necesidad de los programadores en desarrollar aplicaciones en un modelo de concurrencia óptimo y fácil. En este sentido, lenguajes como Erlang, Scala, Clojure, Haskell, y ahora Opa, se han hecho un hueco y compiten en un sector en el que el desarrollo se complica con el resto de lenguajes, y estos lo resuelven de una forma cómoda y elegante.

Opa no es un lenguaje de propósito general, sino que está orientado 100% a la web. En este entorno se desenvuelve con soltura y se pueden desarrollar entornos complejos de una forma compacta, clara y concisa.

Lo que en otros lenguajes llega a ser un dolor de cabeza, como es la notificación de eventos, compartir memoria entre varios procesos y mantener el flujo entre muchas sesiones diferentes hacia solo una aplicación, Opa lo resuelve con sus elementos base.

Consiguiendo popularidad

En su página web, en estos días, anuncian el Opa Developer Challange 2011, el cual es un concurso (o desafío) para desarrollar una aplicación en Opa, consiguiendo a cambio, en caso de ser ganador, un premio según el puesto en que se quede (MacBook Air, iPad 2 o Nintendo DS).

Estos concursos son un foco importante para desarrolladores ya que hay dos cosas bastante atrayentes. La primera, el premio en caso de resultar ganador o de las tres primeras posiciones. La segunda… la palabra “challange” (desafío), lo cual resulta muy atrayente a ciertos programadores (hackers), que se interesan por los desafíos y las nuevas tecnologías.

En todo caso, esto será sin duda un empujón para el lenguaje, con lo que, entre las aplicaciones que ya hay desarrolladas y las que genere el concurso, se generará un buen abanico para dar más y mejor nombre a este lenguaje.

La parte mala…

Una de las partes que Opa hace más hincapié, es que no tiene errores de XSS ni inyección de SQL, es decir, es seguro. El problema, es que no tiene errores de XSS porque no permite reflection, algo que se hace bastante útil a veces, ni el uso de una base de datos SQL.

El tema de tener que emplear el sistema NoSQL de base de datos que integra el sistema Opa, hace que muchos desarrollos sean impracticables en este sistema, ya que dependen de una base de datos que se requiere sea en un SGBD de un tipo específico.

Esto se suma a que no tiene tampoco, al menos aún, soporte de SOAP o XML-RPC, por lo que tampoco podría acceder a un Web Service externo para poder tomar esos datos. No obstante, sí tiene soporte REST como servidor y como cliente, por lo que, desarrollando un sistema externo en otro lenguaje con acceso tipo REST a base de datos, podría hacerse un puente al sistema gestor de base de datos. Aunque, claro, es más trabajo y dependencia de un sistema que esté programado y desarrollado en otro lenguaje.

El hecho de que el lenguaje genere un binario ejecutable, da la seguridad de que no se puede modificar ni inyectar código, ya que no es scripting, pero eso le quita también la versatilidad de poder actualizar el código sin necesidad de parar el sistema. Además de que el hecho de que se distribuya un binario (en caso de Windows, un .EXE) lo hace sensible a ser atacado por virus.

Conclusiones

Es un lenguaje interesante, y una arquitectura igualmente curiosa. Para los que somos además administradores de sistemas, esto no es muy atractivo, ya que cierra un poco las puertas ciñendo el crecimiento a montar un solo elemento en los servidores, encapsulado y poco configurable. No obstante, en aras de la sencillez y puesto el foco en el objetivo a conseguir, resulta bastante óptimo y atractivo.

En mi opinión, cuando solucionen el hecho de poder conectarse, aunque sea de forma ActiveRecord, ORM o SQL a una base de datos relacional, sin perder la base en la que se forjó la idea y el sistema de Opa, el sistema comenzará a ser mucho más usado en muchos más ámbitos.