Cheerp: de C++ a JavaScript

Seguro que muchos habéis oído hablar de Emscripten y asm.js, herramientas cuyo objetivo es compilar código escrito en C++ y generar código JavaScript. Hoy voy a hablaros de una solución que aún está siendo optimizada pero que es muy prometedora: Cheerp.


¿Qué es Cheerp?


Cheerp es una solución desarrollada por Leaning Tech Ltd para compilar código escrito en C++ al lenguaje JavaScript. Los que hayais tocado este campo conocereis Emscripten y asm.js, dos herramientas con el mismo propósito. Entonces ¿qué hace a Cheerp diferente?

A grandes rasgos Emscripten es un compilador que permite traducir el bytecode generado por LLVM (al compilar nuestro código en C++) a JavaScript. Por su parte, asm.js es una especie de máquina virtual desarrollada por Mozilla que trata de incrementar la eficiencia a la hora de ejecutar código JavaScript compilado desde C++ para aprovechar las ventajas del mismo.

Éste método ha demostrado tener una gran eficiencia y un buen comportamiento en general, pero para que esto se dé, ha de utilizarse asm.js como máquina virtual. Esto limita el alcance de su uso ya que sólo Firefox integra esta funcionalidad de manera predeterminada.

Cheerp proporciona una solución que resuelve este problema: el código que genera puede ser ejecutado en cualquier intérprete JavaScript sin necesidad de asm.js.

Eficiencia


Emscripten maneja el código C++ emulando un espacio de direcciones completo direccionable a nivel de Byte. Esta solución tiene un buen comportamiento, pero si lo analizamos, JavaScript no utiliza un modelo de direccionamiento basado en Bytes sino en un modelo basado en objetos. En dicho modelo toda la memoria está contenida en un objeto, y si lo pensamos bien, C++ no es muy diferente.

Cheerp es capaz de mapear códio orientado a objetos escrito en C++ en objetos JavaScript nativos. Las últimas revisiones de los motores JavaScript desvelan que el acceso a objetos es más rápido que el acceso a arrays o matrices. Cheerp se aprovecha de esta ventaja, además de utilizar más trucos, para conseguir una gran eficiencia.

El inconveniente es que para conseguir toda la eficiencia Cheerp necesita que modifiquemos algunas características del C++ base, como la conversión de tipos inseguros o el uso de punteros dentro de estructuras. A cambio nos proporciona una experiencia desfragmentada en programación web al asegurarnos que nuestro código generado es ejecutable en el motor JavaScript de cualquier equipo. Además los últimos Benchmark muestran que el rendimiento de Cheerp es mayor que el de Emscripten bajo asm.js.

Conclusiones


Con Cheerp se abre la posibilidad de una infinidad de desarrollos para sistemas web: podremos portar gran cantidad de software escrito en C++ consiguiendo un rendimiento cercano al nativo.

El hecho de hacer el sistema autosuficiente hace que cualquier programa generado sea portable sin necesidad alguna más allá de un navegador que soporte JavaScript.

Actualmente Cheerp se encuentra en fases muy maduras de desarrollo por lo que el proyecto promete. ¿Qué opinas?¿Se te ocurre alguna utilidad?
COMPARTE ESTA NOTICIA

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP