Hoy en día, una página web es el resultado de varios componentes que interactúan entre sí, como hojas de estilo en cascada, código XML, consultas ad hoc a bases de datos y funciones JavaScript. En todos los sitios, salvo los más rudimentarios, llevar un seguimiento de cómo interactúan estos elementos, se referencian entre sí y se intercambian datos puede ser una tarea que consume mucho tiempo.
En un artículo que se presentará en el Simposio sobre Principios de los Lenguajes de Programación de la Association for Computing Machinery, Adam Chlipala, profesor Douglas Ross de Desarrollo Profesional de Tecnología de Software, describe un nuevo lenguaje de programación, llamado Ur/Web, que permite a los desarrolladores escribir aplicaciones web como programas autónomos. A continuación, el compilador del lenguaje —el programa que convierte instrucciones de alto nivel en código ejecutable por una máquina— genera automáticamente el código XML y las especificaciones de hojas de estilo correspondientes, e incorpora el código JavaScript y de bases de datos en los lugares adecuados.
Además de facilitar la escritura de aplicaciones web, Ur/Web también las hace más seguras. «Supongamos que quiere incluir un widget de calendario en su página web y va a utilizar una biblioteca que lo proporciona, y que en la misma página hay también un cuadro de publicidad basado en código proporcionado por la red publicitaria», dice Chlipala. «Lo que no quiere es que la red publicitaria pueda cambiar el funcionamiento del calendario ni que el autor del código del calendario pueda interferir en la difusión de los anuncios». Ur/Web prohíbe automáticamente ese tipo de acceso no autorizado entre los elementos de la página.
Tipado y alcance
La capacidad de Ur/Web para ofrecer protección de seguridad y coordinar distintas tecnologías web se deriva de dos propiedades que comparte con la mayoría de los lenguajes de programación completos, como C++ o Java. Una de ellas es que tiene «tipado fuerte». Esto significa que toda variable nueva que define un programador en Ur/Web queda restringida a un tipo de dato concreto. Del mismo modo, toda especificación de una función nueva debe incluir el tipo de datos sobre el que actúa y el tipo de datos que devuelve.
Al calcular el valor que debe devolver, la función quizá necesite crear variables nuevas. (Por ejemplo, una función que devolviera el promedio de valores de una base de datos primero tendría que calcular su suma). Sin embargo, el resto del programa no puede acceder a esas variables. Esta es la segunda propiedad, conocida como «alcance de las variables», porque limita el alcance —la amplitud de su accesibilidad— de las variables definidas dentro de las funciones.
«Puede que quiera escribir una biblioteca que tenga como estado privado interno la tabla de la base de datos donde se registran los nombres de usuario y las contraseñas», dice Chlipala. «No querrá que ninguna otra parte de su aplicación pueda simplemente leer y sobrescribir las contraseñas. La mayoría de los marcos de desarrollo web no admiten ese estilo. Dan por hecho que todas las partes del programa tienen acceso completo a la base de datos».
El tipado también contribuye a la seguridad. Muchos marcos de desarrollo web generan consultas a bases de datos de tal manera que alguien que aparentemente está iniciando sesión en un sitio web puede introducir código en el campo del nombre de usuario que, en realidad, sobrescribe datos de la base de datos. Con Ur/Web, los nombres de usuario constituirían su propio tipo de datos y se procesarían de una manera muy distinta a las consultas a bases de datos.
Cumplir las expectativas
El tipado también es lo que permite coordinar distintas tecnologías web. Supongamos que un fragmento de código JavaScript debe actuar sobre datos obtenidos de una base de datos y que el resultado debe mostrarse en una página web, en una ubicación determinada por cierto código XML. Si un programador de Ur/Web escribiera una consulta a la base de datos que extrajera datos de un tipo que el JavaScript no esperase, o si el JavaScript generara una salida de un tipo que la página XML no esperase, el compilador detectaría la discrepancia y señalaría que el código contiene un error.
A menudo, el código que no está tipado explícitamente sigue teniendo reglas implícitas de coherencia. Por ejemplo, si escribe una consulta en el lenguaje de bases de datos SQL para obtener el promedio de un conjunto de campos de texto, el servidor de la base de datos le indicará que no puede procesar la solicitud. Para que Ur/Web pudiera coordinar el flujo de datos entre tecnologías web, Chlipala tuvo que crear bibliotecas de nuevos tipos de datos para SQL, XML y las hojas de estilo en cascada (CSS) que incorporan estas reglas.
Aunque la versión actual del compilador de Ur/Web sí genera código XML, JavaScript y SQL, no produce hojas de estilo automáticamente. Sin embargo, dice Chlipala: «Una cosa que puede hacer el compilador es analizar todo el programa y decir: “Esta es una lista exhaustiva de todas las clases CSS que podrían aparecer, y esta es una descripción del contexto en el que podría utilizarse cada clase, lo que indica qué propiedades podría valer la pena establecer”. Así, por ejemplo, puede que una clase concreta nunca se utilice en una posición donde las propiedades de tabla tengan sentido, por lo que no hace falta molestarse en establecerlas».
Este artículo se publica en colaboración con MIT News. La publicación no implica que el Foro Económico Mundial respalde estas opiniones.
Para mantenerse al día con Forum:Agenda, suscríbase a nuestro boletín semanal.
Autor: Larry Hardesty es colaborador invitado de MIT News.
Imagen: Un hombre escribe en el teclado de una computadora en Varsovia, en esta imagen de archivo ilustrativa del 28 de febrero de 2013. Uno de los mayores ciberataques de la historia está ralentizando los servicios globales de internet después de que una organización que bloquea contenido «spam» se convirtiera en objetivo; algunos expertos afirman que la interrupción podría empeorar. Para acompañar INTERNET-ATTACK/ REUTERS/Kacper Pempel.

