Haxe: el secreto mejor guardado del desarrollo multiplataforma

Publicado: 2022-03-11

El lenguaje de programación moderno Haxe es bien conocido en algunos círculos, sin embargo, muchos de los que lean esto nunca habrán oído hablar de él. Sin embargo, no dejes que su estado de nicho te engañe. Desde que apareció por primera vez en 2005, ha sido probado en batalla por sus seguidores leales, aunque bastante silenciosos. Cuenta con una combinación pragmática y madura de funciones para el desarrollo en contextos comerciales, de juegos e incluso académicos.

Disney, Hasbro y la BBC están usando Haxe, entonces, ¿por qué más desarrolladores no han oído hablar de él? Tal vez su versatilidad signifique que no hay una sola "aplicación asesina" para el lenguaje de programación Haxe.

O tal vez se deba a que una de sus primeras aplicaciones asesinas, una ruta de migración lejos de la moribunda plataforma Flash, es un poco nicho en algunos aspectos. El venerable mercado de los juegos casuales ha estado luchando en los últimos años bajo la sombra de la incertidumbre de Adobe, y ahora finalmente está claro que cualquier cosa basada en Flash tendrá que moverse oficialmente para 2020.

Los ingenieros de software empresarial y los desarrolladores web (de hecho, muchos desarrolladores de juegos también) pueden escuchar "Flash" y desconectarse de inmediato. Por lo tanto, la Fundación Haxe tomó FlashDevelop IDE y lo renombró más como Haxe IDE, HaxeDevelop.

Pero puede ser difícil deshacerse de una asociación, especialmente cuando sigue siendo bastante relevante. Por ejemplo, FlowPlay, cuyos juegos sociales tienen 75 millones de usuarios, eligió Haxe sobre Unity y HTML5 para su reciente transición de dos años de 1,4 millones de líneas de código fuera de Flash. (Más detalles están disponibles en el estudio de caso).

Tal vez sea difícil para la Fundación Haxe poder resaltar casos de uso como este, mientras sigue atrayendo a los desarrolladores de software que no es de juegos. Pero no dejes que eso te impida explorar un poco.

¿Cuál es el problema con Haxe?

El proyecto Debian describe a Haxe como un "lenguaje de programación universal". Hay varios aspectos en eso.

En general, el lenguaje Haxe significa reutilizar código (bueno) . Con eso quiero decir: puede reutilizar el código Haxe en muchas plataformas, puede integrarlo con el código Haxe y no Haxe existente, y para bien , el lenguaje Haxe pone a disposición muchos paradigmas probados y verdaderos, como la seguridad de tipo.

Continuando con el tema de la versatilidad, esto se traduce en varias categorías principales de casos de uso, aparte de la migración Flash, por supuesto.

Desarrollar una aplicación o un juego multiplataforma desde cero. Haxe puede apuntar a plataformas de escritorio, móviles y web, todo desde una base de origen de un solo idioma. Los lenguajes de programación multiplataforma no son nada nuevo, y existen soluciones especiales para juegos y aplicaciones móviles y de escritorio multiplataforma. Pero Haxe hace algo un poco más especial en el sentido de que puede apuntar no solo a múltiples plataformas, sino también a múltiples paradigmas, por ejemplo, HTML5 y binarios nativos.

Un idioma “para gobernarlos a todos”. Perdone la referencia a Tolkien, pero al igual que Node.js aclamó una era de uso del mismo lenguaje en la parte delantera y trasera de un sitio web, cualquier proyecto con algo parecido a una arquitectura cliente-servidor puede usar Haxe para ambas mitades.

Por ejemplo, la aplicación web FontStruct usa Haxe tanto para dibujar en un lienzo HTML5 en el front-end como a través de Java2D en el back-end. (Pero como se mencionó, este enfoque es opcional: Haxe también funciona bien con el código existente que no es de Haxe, porque está diseñado para no atarlo). y los idiomas de salida son mucho más fáciles de esta manera.

Huyendo de JavaScript para tipear la seguridad. Espera, ¿no es para esto para lo que sirve TypeScript? Sí, si desea permanecer limitado a la salida de JavaScript. El lenguaje Haxe, por el contrario, también puede transpilarse a Java, C++, C#, Python y Lua, entre otros.

Mientras tanto, el lenguaje de programación Haxe es bastante fácil de aprender a partir de JavaScript: su sintaxis no significa un gran cambio de paradigma como, por ejemplo, el de Rebol, a pesar de los beneficios de tal cambio. El desarrollador central de Haxe, el Dr. Andy Li, escribió una comparación más profunda entre TypeScript y Haxe que sigue siendo relevante hoy en día, aunque ambos lenguajes continúan evolucionando.

Flujo de trabajo bastante rápido para un compilador. Esta es una pieza agregada más recientemente (aunque Neko era una opción antes): HashLink es una máquina virtual multiplataforma (VM) que parece lograr un equilibrio entre ser extremadamente rápido de compilar y, al mismo tiempo, tener el rendimiento suficiente en tiempo de ejecución para las cosas. como juegos en 3D. Pero incluso en el lado web, Haxe puede superar a TypeScript tanto en tiempo de compilación como en tiempo de ejecución.

Una frontera apasionante. Haxe en sí es de código abierto y tiene una comunidad activa, con nuevas funciones de lenguaje que se agregan todo el tiempo. Su propio subsecreto mejor guardado podría ser su sistema de macros en tiempo de compilación, que en sí mismo tiene muchos casos de uso interesantes, lo que le permite metaprogramar al contenido de su corazón. (Menciono algunos ejemplos a continuación).

¿Quién más está usando Haxe?

Para empezar, desarrolladores de juegos, por supuesto: Madden NFL Mobile, Evoland II, Double Kick Heroes... estos y cientos de otros juegos publicados se desarrollaron con Haxe. Pero Haxe también está haciendo olas fuera de la esfera de los juegos:

  • En 2014, TiVo usó Haxe para aumentar el rendimiento de sus cajas TiVo Premiere en más de un 30 %.
  • Massive Interactive, cuyos clientes incluyen DAZN y Telecine para sistemas de "televisión inteligente" basados ​​en Haxe (ambos con grandes bases de usuarios) ha estado usando Haxe durante años. Su arquitecto de interfaz de usuario, Philippe Elsass, me señaló que, en su experiencia trabajando con grandes proyectos web, Haxe tiende a ser más simple de usar que TypeScript y aproximadamente un orden de magnitud más rápido de compilar.
  • Synolia utiliza el lenguaje Haxe para su herramienta de personalización en línea Heidi, que utilizan las principales marcas francesas Carrefour y La Fnac, y también Nickelodeon. Según Synolia, el conjunto de herramientas de Haxe les permitió administrar de manera eficiente la transición de Flash a HTML5, al mismo tiempo que pudieron aprovechar nuevas oportunidades de desarrollo comercial en la esfera móvil. Al ser Heidi una aplicación SaaS, el conjunto de herramientas de Haxe les permitió compartir un código fuente común entre las diferentes capas y servicios de la aplicación.
  • La empresa multinacional Docler Holding se convirtió en socio estratégico de la Fundación Haxe en 2017.

¿Cómo es el ecosistema de Haxe?

Cuando se trata de juegos y Haxe, es un mundo muy, muy amplio en términos de marcos y bibliotecas de código abierto. Desde equipos independientes independientes hasta estudios exitosos con clientes internacionales, los usuarios de Haxe comparten código por todas partes:

  • Flambe es utilizado por marcas como Disney, Coca-Cola y Toyota para desarrollar juegos HTML5.
  • Heaps es el marco de juego de alto rendimiento detrás del reciente éxito de estrategia 3D Northgard.
  • Impulsando millones de juegos móviles, la biblioteca de desarrollo rápido awe6 es quizás una joya escondida dentro de una joya escondida.
  • Kha, que puede apuntar a XBox One, Nintendo Switch y PlayStation 4 además de computadoras de escritorio y dispositivos móviles, tiene más de 20 motores de juegos integrados. Esto incluye Armory, que tiene una integración completa con Blender y recientemente se convirtió en código abierto.
  • Originalmente modelado a partir de la antigua biblioteca Flixel para Flash, HaxeFlixel es la opción popular detrás de juegos como el éxito durmiente Defender's Quest .
  • Gamua's Starling, el marco utilizado para el puerto de Facebook de Angry Birds hace unos años, ahora tiene un puerto Haxe de código abierto.
  • OpenFL, basado en la API Flash, pronto también será una forma de apuntar a múltiples consolas, a saber, PlayStation 4, PlayStation Vita, XBox One y Nintendo Switch, sin tarifas de licencia adicionales. HaxeFlixel y Starling están construidos sobre OpenFL, pero algunos juegos se desarrollan directamente en OpenFL, como el galardonado Papers, Please .
  • El Native Media Engine, NME, del que se bifurcó OpenFL hace muchos años, todavía está lanzando versiones principales también.
  • Tal vez viste cuando HaxePunk (descendiente de FlashPunk) apareció en el blog Release Radar de GitHub.
  • El Nape Physics Engine altamente optimizado es ideal para cualquier motor de juego 2D o simulador que necesite una física más sofisticada.

Por supuesto, la escena del desarrollo de juegos es una parte más visible del ecosistema del lenguaje Haxe. (¿Quizás esto se deba a la naturaleza de los atascos de juegos como Ludum Dare?) Pero los aspectos comerciales e incluso empresariales también se están mostrando. Por ejemplo:

  • El marco de aplicación modular hexMachina admite el uso de lenguaje específico de dominio (DSL) y la arquitectura de controlador de vista de modelo (MVC), entre muchas otras características.
  • El motor de diseño de interfaz de usuario HaxeUI está evolucionando activamente y tiene soporte corporativo. Productos como 3DVista y Kaizen for Pharma han incluido aplicaciones de producción.
  • No es el único, pero la biblioteca thx.core y sus parientes proporcionan extensiones de propósito general para Haxe, al igual que Lodash lo hace para JavaScript.
  • Hablando de JavaScript, los proyectos de Haxe que se dirigen a él pueden beneficiarse al aprovechar Haxe Modular, que ayudó tanto a Telecine como a FlowPlay a escalar sus enormes proyectos mientras los mantenía cargando rápidamente en el lado del cliente.
  • El ecosistema de Haxe también continúa evolucionando para interactuar con las tecnologías actuales; por ejemplo, ahora hay una biblioteca GraphQL.
  • Por último, el ejemplar Tinkerbell aprovecha el sistema de macros de Haxe para todo tipo de tareas útiles. Tiene marcos para enrutamiento web, pruebas unitarias e incrustación de SQL, así como bibliotecas para todo, desde plantillas y análisis de selector CSS hasta async/await y manejo de estado reactivo de curva de aprendizaje inferior.

Estos son solo aspectos destacados de algunas de las direcciones que los usuarios del lenguaje Haxe han tomado hasta ahora. Haxe.org mantiene una lista completa de bibliotecas ordenadas por popularidad que también puede buscar por etiqueta. Pero también vale la pena destacar un par de proyectos que la propia Fundación Haxe mantiene:

  • Para el ángulo de DevOps, está el repositorio oficial de Haxe Docker.
  • En cuanto a la estabilidad, incluso con una actualización de versión importante, Haxe 4 tendrá alguna ayuda de compatibilidad para aquellos con proyectos que dependen de Haxe 3.

Todo eso suena bien, pero ¿cómo es tener un entorno de desarrollo funcionando en su sistema?

Inicio rápido de Haxe

Ya sea para Win, Mac o Linux, el primer paso es descargar Haxe. El instalador proporcionará algunas cosas diferentes:

  1. El propio compilador Haxe , que debería permitirle ejecutar haxe desde su terminal o símbolo del sistema.
  2. La biblioteca estándar de Haxe , que permite conceptos básicos de bajo nivel, pero también algunos soportes generales de alto nivel. Por ejemplo, aquí se facilita el procesamiento de XML, ZIP y MySQL.
  3. El administrador de paquetes Haxelib , que le permite instalar nuevos paquetes a través del comando haxelib . (Nota: también vale la pena consultar lix para una administración de paquetes más avanzada que la que ofrece Haxelib, especialmente si está considerando usar Haxe en un contexto profesional).
  4. Neko , un objetivo de máquina virtual que permite una recompilación y depuración rápidas y eficientes.

(Dicho esto, hay más de una forma de configurarlo. Si ya tiene npm instalado, por ejemplo, las instrucciones de instalación de OpenFL tienen la opción de instalar Haxe a través de los comandos de Yeoman. Homebrew y Chocolatey también brindan rutas similares).

De todos modos, una vez que tenga Haxe, puede usarlo solo desde la línea de comandos, pero los desarrolladores a menudo optan por usar un IDE. FlashDevelop/HaxeDevelop todavía se admite principalmente en Windows únicamente. La mayoría de las demás opciones son multiplataforma (Win/Mac/Linux):

  • El complemento Haxe de VSCode está bien soportado.
  • IntelliJ IDEA también tiene un complemento Haxe.
  • El framework de juegos Kha tiene su propio IDE llamado Kode Studio (Win/Mac/Linux).
  • Sublime Text y Atom tienen complementos de Haxe, al igual que muchos otros editores, algunos de los cuales son específicos de la plataforma.

A los efectos de esta guía de inicio rápido, usaremos VSCode. Puede ser más simple obtener el Haxe Extension Pack a través de Ctrl+P y ext install haxe-extension-pack , pero si es un minimalista, es posible que desee ext install vshaxe para el complemento básico de Haxe, y elija el que sea. otras partes del paquete que pueda desear.

Creación de un proyecto Haxe

Dado que el lenguaje Haxe puede transponerse a muchos objetivos, administrar cómo se hace esto para cada uno se hace más fácil usando un archivo de compilación. Sin embargo, para comenzar, todo lo que necesitamos es un solo archivo de clase Haxe con una extensión .hx .

En cuanto al código que le pondremos, tomemos el ejemplo de Array Comprehension de try.haxe.org y colóquelo en un archivo llamado Test.hx :

 class Test { static function main() { var a = [for (i in 0...10) i]; trace(a); // [0,1,2,3,4,5,6,7,8,9] var i = 0; var b = [while(i < 10) i++]; trace(b); // [0,1,2,3,4,5,6,7,8,9] } }

Ahora, desde la ubicación de Test.hx , puede ejecutar Haxe en modo de interpretación, es decir, sin transpilar en absoluto, para ver el resultado de esas dos llamadas trace() :

 $ haxe -main Test --interp Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

¡Genial, funciona!

Transpilar código Haxe a JavaScript

Suponga que desea compartir esto con el mundo a través de JavaScript en una página web suya. Eso está integrado en Haxe, y es tan fácil como:

 $ haxe -main Test -js haxe-test.js

Si tiene instalado Node.js, puede comprobar el resultado desde la línea de comandos de la siguiente manera:

 $ node my-cool-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

De lo contrario, el código en haxe-test.js está listo para funcionar; si tuviera que incluirlo en una página web, vería el resultado en la consola de desarrollador de su navegador web al cargarlo.

Transpilar y compilar a un binario nativo

Supongamos que también desea un binario nativo para el escritorio en el que está desarrollando. Para hacer esto, vamos a transpilar al destino de C++, por lo que podemos usar C++ (suponiendo que lo tenga instalado) para compilar la salida .cpp en un binario nativo. Para eso, necesitaremos hxcpp , por lo que necesitaremos instalarlo:

 $ haxelib install hxcpp

Después de eso, podemos hacer la transpilación y la compilación a la vez con este comando:

 $ haxe -main Test -cpp bin

Y entonces nuestro binario está listo para ejecutarse:

 $ bin/Test Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]

(En Windows, sería bin\Test.exe en su lugar).

Creación de un archivo de compilación Haxe (.hxml)

A pesar de la sugerente extensión, los archivos .hxml no son XML, a diferencia de los archivos .hxproj que usan HaxeDevelop y FlashDevelop, pero no los trataré en este artículo. Así es como se vería un build-all.hxml para lograr la transpilación que hicimos arriba:

 -main Test # tells Haxe our main class is Test (case-sensitive) --each # all of the above commands will be applied to each target -js haxe-test.js # our first transpilation target --next # no other options, time to move to the next target -cpp bin # our second transpilation (and compilation) target

Tenga en cuenta la diferencia en los prefijos: -main , -js y -cpp son cada uno de los parámetros que le pasaría a haxe directamente, mientras que --each y --next (dos guiones) están en un metanivel, diciéndole al compilador qué hacer con los demás parámetros.

Ahora puede alcanzar JavaScript y objetivos nativos simplemente ejecutando haxe build-all.hxml .

Si quisiera transpilar a JavaScript y luego ejecutar inmediatamente el resultado usando Node, podría ejecutar haxe run-js.hxml , donde run-js.hxml se ve así:

 -main Test -js haxe-test.js -cmd node haxe-test.js

De manera similar, una "compilación y ejecución" para el binario nativo se vería así (en Linux, es decir, se necesitaría una variación para Windows):

 -main Test -cpp bin -cmd bin/Test

¿Qué pasa con VSCode? Esa parte es simple: la extensión que instaló recogerá automáticamente estos archivos .hxml , lo que le brindará tareas de compilación generadas automáticamente (sin tasks.json ) en un menú desplegable, lo que le permitirá elegir qué archivo de compilación usar.

Nota: Sin embargo, tenga cuidado si tiene varias ventanas de VSCode abiertas; al momento de escribir esto, esto puede causar problemas con la compilación a través de Ctrl+B. (Aún puede usar la línea de comando, no hay problema).

haxe 4

Si siguió la configuración anterior, es posible que haya notado que la página de descarga incluía enlaces a las ramas 3.x y 4.x del instalador de Haxe.

La versión 4 de vanguardia del compilador Haxe trae consigo muchas características nuevas. En un caso, esto también es un testimonio del poder de su sistema de macros: el compilador Haxe solía carecer de soporte para funciones lambda cortas, por lo que la biblioteca slambda implementó soporte para ellas a través de macros. A partir de la versión 4, la compatibilidad está integrada en el compilador y la biblioteca está en desuso.

Entonces, ¿qué más trae Haxe 4 a la mesa?

No necesariamente demasiados captadores de atención. En cambio, Haxe 4 tiene muchas mejoras más pequeñas. Después de todo, Haxe en sí es una tecnología bastante madura, desarrollada por un equipo más pequeño y más enfocado, quizás, que proyectos similares, y tal vez sea un poco exagerado llamar a cualquier proyecto similar a Haxe.

Muchas de sus características más interesantes ya están presentes desde hace un tiempo. Por ejemplo, mencioné anteriormente que Haxe proporciona un flujo de trabajo rápido a través de Neko o HashLink. Pero desde 2016, también incluye un servidor de compilación. Esto significa que para los objetivos que no son VM, volver a compilar un proyecto que depende de una gran biblioteca será mucho más rápido debido al almacenamiento en caché en la memoria, que también pueden aprovechar los IDE de Haxe para completar el código.

Pero Haxe 4, en particular, verá:

  • La ejecución de macros es 4 veces más rápida.
  • La compatibilidad con PHP5 se está eliminando.
  • Se realizaron algunas actualizaciones sintácticas que los usuarios de TypeScript probablemente agradecerán, incluso si son ligeramente diferentes entre los dos idiomas. A saber, las funciones de flecha y la nueva sintaxis del tipo de función.

Tutoriales Haxe

Si bien siempre puede sumergirse directamente en la API estándar de Haxe o en la documentación de sintaxis, también hay algunos materiales de Haxe más amigables para principiantes disponibles.

Si prefiere orientarse con videos, el Haxe US Summit 2018 en Seattle tiene sus talleres junto con los de otros años, para obtener una visión más privilegiada.

Pero a veces, lo que puede ayudarlo a comenzar más fácilmente es un tutorial más específico. Como un tutorial de principio a fin sobre cómo construir un juego de rastreo de mazmorras en HaxeFlixel. También hay una serie de tutoriales de HaxeFlixel que explican más de lo que sucede detrás de escena a medida que avanzan. En el extremo 3D, hay un tutorial de Haxe sobre cómo comenzar con Armory.

O tal vez solo desee un tutorial de Haxe sobre el procesamiento rápido de XML; este es uno de los muchos tutoriales que ahora tienen algunos años, pero aún son bastante relevantes. Como mencioné anteriormente, si bien existen muchas fronteras, muchos de los conceptos básicos del desarrollo en Haxe son estables en este punto, por lo que los tutoriales no necesariamente se vuelven obsoletos muy rápidamente. (Donde lo hacen, generalmente es de una dependencia en una biblioteca específica, no en el núcleo de Haxe en sí).


Como puede ver, puede tomar el lenguaje Haxe, o puede llevarlo a usted, en muchas direcciones diferentes. Espero que hayas disfrutado de esta introducción al mundo diverso y fascinante de Haxe, ¡y espero escuchar lo que termines haciendo con la tecnología de Haxe!

Relacionado: Revisión de Haxe: características y fortalezas de Haxe 4