¿Por qué Asana está desarrollando su propio lenguaje de programación (Lunascript)?

Actualización : durante los últimos meses, Asana ha pasado de escribir Lunascript para nuestro código de aplicación a Javascript. Las dos cosas principales que estaban frenando nuestro desarrollo:

  • demasiado trabajo de nivel de investigación restante para hacer que la salida del compilador sea más eficiente
  • falta de soporte de herramientas

No somos * una * empresa marco, por lo que no queríamos dedicar años a este trabajo a expensas de construir nuestro producto. Todavía estamos usando las primitivas de framework que desarrollamos para el lenguaje, lo que es más importante, sistemas para volver a calcular de manera reactiva nuestra interfaz de usuario y sincronizar los cambios con el servidor, ya no usamos la sintaxis (y el estilo funcional) ligeramente más agradables que proporcionaba Lunascript.

A largo plazo, podemos revivir el compilador Lunascript. Creemos que esto puede ser especialmente atractivo una vez que cambiemos de enfocar Asana como un producto único a Asana como plataforma. Pero para el futuro inmediato, estamos enfocados en lanzar nuestro primer producto a expensas de continuar trabajando en Lunascript propiamente dicho.

Quiero enfatizar que hemos dejado de usar Lunascript, pero la aplicación todavía está escrita completamente en el marco de Luna . Vea ¿Qué es el marco de tecnología Luna de Asana? ¿Qué incluye y sobre qué está construido? para más sobre qué es eso. La visión de Luna siempre giraba en torno a facilitar la escritura de aplicaciones web libres de errores, en tiempo real, receptivas, colaborativas e interactivas. La sintaxis de Lunascript siempre fue agradable, no una pieza central de la visión.

————

Por la misma razón por la que hemos progresado de ensamblado a C, Java a Python (o alguna progresión similar): los lenguajes de nivel superior abstraen mucha infraestructura y, al hacerlo, mejoran drásticamente la velocidad de desarrollo .

Si piensa en la historia de la web, hemos pasado de volcar esencialmente textos a páginas de inicio estáticas a páginas generadas dinámicamente a páginas con AJAX a páginas web de cometas completamente en tiempo real.

Lo que esto significa es que hay muchas capas de cosas sucediendo que simplemente no son compatibles a nivel de idioma, y ​​terminas con mucho del mismo código en todo el lugar. Por ejemplo, cada variable que necesita ser actualizada por Comet (digamos, el número en mi insignia de Inicio en Quora) debe estar envuelta por algún tipo de controlador Comet, así como algún sistema de despacho para actualizar todo en el DOM que toque esa variable . Lunascript resume eso y automáticamente mantiene la página completa sincronizada apropiadamente sin que usted, como el autor del código, tenga que pensar siquiera en el hecho de que hay alguna actualización en curso.

Al igual que tener que preocuparse por la administración de memoria (en C) o no tener soporte sintáctico para diccionarios (en Java) lo ralentiza, tener que preocuparse por la sincronización o no tener soporte sintáctico para literales XML lo ralentiza en los lenguajes de programación web actuales.

Escribir un nuevo idioma no es la única solución para esto, pero es la forma más limpia y elegante. Eso no quiere decir que sea lo mejor: hay compensaciones sustanciales para escribir un idioma. Lo más notable es que no se beneficia tanto del trabajo de otros programadores, y necesita dedicar mucho tiempo de desarrollo al lenguaje mismo.

La opinión de Asana es que el poder de la abstracción otorgada por Lunascript es tan grande que, eventualmente, habrá sido más rápido escribir Lunascript y luego escribir una aplicación web en la escala de Asana que escribir una aplicación web en la escala de Asana sin escribiendo Lunascript.

También vale la pena señalar que tener su propio idioma no es algo tan extremo de hacer. Considere, por ejemplo, Apple con Objective-C. Además, Facebook tiene cosas como FBML y FQL, y Salesforce tiene su propio lenguaje. Para admitir una plataforma, eventualmente necesitará su propio idioma de alguna forma, y ​​hay ventajas de tener consistencia en la forma en que se escribe un sitio web y en la forma en que los desarrolladores de la plataforma escriben aplicaciones.

Finalmente, no es que Asana use Lunascript exclusivamente. Hay otros idiomas (especialmente Javascript) que se usan mucho. De alguna manera, Lunascript es solo un lenguaje de plantillas de Javascript, y la creación de su propio lenguaje de plantillas es probablemente más común que no en las compañías web en estos días.

Es bastante común en el espacio empresarial inventar un lenguaje de programación para aumentar la eficiencia: todo forma parte de la construcción de una ventaja competitiva. SAP tiene AbAp, PeopleSoft tenía PeopleCode, etc.

Creo que esto se llama un lenguaje específico de dominio ( DSL ), y no es nada nuevo. En muchos casos, es mucho más eficiente desarrollar un lenguaje que entiendan los de la industria y que realice tareas específicas de dominio de manera conveniente.