Opa es un lenguaje de programación de código abierto para desarrollar aplicaciones web escalables .
Se puede utilizar tanto para scripts del lado del cliente como del lado del servidor , donde los programas completos se escriben en Opa y posteriormente se compilan en Node.js en el servidor y JavaScript en el cliente , y el compilador automatiza toda la comunicación entre los dos. [3] [4] Opa implementa tipado estático fuerte , que puede ser útil para proteger contra problemas de seguridad como inyecciones SQL y ataques de scripts entre sitios . [5]
El lenguaje se presentó oficialmente por primera vez en la conferencia OWASP en 2010, [6] y el código fuente se publicó en GitHub [7] en junio de 2011, bajo una licencia pública general GNU Affero . Más tarde, la licencia cambió a la licencia MIT para la parte del framework (biblioteca) y AGPL para el compilador, de modo que las aplicaciones escritas en Opa se pueden publicar bajo cualquier licencia, propietaria o de código abierto.
Opa consta de un servidor web , una base de datos y un motor de ejecución distribuida. [8] El código escrito en Opa se compila a JavaScript usando Node.js en el lado del servidor y a JavaScript usando jQuery para compatibilidad entre navegadores en el lado del cliente . [9] La ventaja de este enfoque en comparación con ciertas plataformas de aplicaciones de Internet enriquecidas (RIA) es que los usuarios no necesitan instalar un complemento en su navegador. [10] Opa comparte motivaciones con los frameworks web , pero adopta un enfoque diferente. [11] Sus diseñadores afirman que esto ayuda a Opa a evitar muchos problemas de seguridad, como inyecciones SQL o ataques de secuencias de comandos entre sitios (XSS). [12]
El lenguaje principal es funcional y tiene un sistema de tipos estáticos con inferencia de tipos . Opa también proporciona sesiones que encapsulan un estado imperativo y se comunican mediante el paso de mensajes , similar a los procesos de Erlang . Opa proporciona muchas estructuras o funciones que son comunes en el desarrollo web, como objetos de primera clase , por ejemplo HTML [13] y analizadores , basados en gramáticas de expresión de análisis . [14] Debido a esta adhesión entre el lenguaje y los conceptos relacionados con la web, Opa no está destinado a aplicaciones no web (por ejemplo, aplicaciones de escritorio ). [15]
La versión 0.9.0 de febrero de 2012 introdujo la tecnología de mapeo de bases de datos para la base de datos no relacional y orientada a documentos MongoDB , similar al mapeo relacional de objetos . [16] [17] [18] La versión 1.1.0 de febrero de 2013 también agregó soporte para PostgreSQL , allanando el camino para el soporte de varias bases de datos SQL .
El programa tradicional Hola mundo , que produce un servidor web que sirve una página estática con "¡Hola, web!" como contenido, se puede escribir en Opa como: [19]
Servidor . inicio ( Servidor . http , { título : "Hola" , página : función() { <h1>¡Hola, web!</h1> } } )
Se puede compilar en un archivo JS ejecutable independiente con:
$ opa hola_web.opa
Al ejecutar el archivo JS ejecutable resultante se inicia la aplicación web:
$ ./hola_web.js