Haxe: el gran secreto para el desarrollo multiplataforma

El lenguaje de programación moderno de Haxe es bien conocido en ciertos círculos, pero muchos de los que leen este material tal vez nunca hayan oído hablar de él. Pero no dejes que su estado de nicho te engañe. Desde que apareció por primera vez en 2005, sus seguidores leales, aunque bastante tranquilos, lo han experimentado en la batalla. Presenta una combinación pragmática y reflexiva de capacidades adecuadas para el desarrollo en negocios, juegos e incluso para fines académicos.

Disney, Hasbro y la BBC usan Haxe , entonces, ¿por qué la mayoría de los desarrolladores no han oído hablar de él? Quizás la versatilidad de Haxe significa que no se puede llamar una característica asesina única.

O tal vez la razón es que uno de los primeros usos de Haxe es usarlo como un medio para migrar desde la plataforma Flash que se está muriendo, que es un nicho bastante. En los últimos años, el mercado de juegos casuales ha estado en el limbo, pero ahora se sabe que para 2020 Flash dejará de ser oficialmente compatible con Adobe y todo el contenido Flash en la web quedará en el olvido.

Los ingenieros de software empresarial, los desarrolladores web y muchos desarrolladores de juegos, al escuchar la palabra "Flash" pueden perder inmediatamente interés en el tema. Esta actitud, por ejemplo, fue la razón de la aparición de HaxeDevelop : se ha eliminado un IDE para Haxe, que es esencialmente FlashDevelop , pero especializado para desarrollar para Haxe y de sus componentes de distribución para desarrollar para ActionScript.

Deshacerse de tales asociaciones que Haxe es el refugio de los antiguos desarrolladores de Flash sigue siendo bastante difícil, especialmente cuando ellas (tales asociaciones) siguen siendo relevantes. Por ejemplo, FlowPlay, cuyos juegos sociales tienen 75 millones de usuarios, eligió Haxe, no Unity o JavaScript puro, para traducir sus proyectos (con una base de código de 1.4 millones de líneas) de Flash a HTML5 (hay más información disponible al respecto en este material )

Quizás es por eso que es difícil señalar casos exitosos de uso de Haxe y, al mismo tiempo, interesar a los desarrolladores que no son de juegos. Pero sigamos investigando un poco.

Entonces, ¿qué tiene Haxe?


En general, usar el lenguaje Haxe significa que puede reutilizar el código (bueno) . Con esto quiero decir que el código Haxe se puede reutilizar en muchas plataformas, se puede integrar con el código Haxe existente y otros idiomas, y, bueno, el lenguaje Haxe proporciona muchos paradigmas probados, como la seguridad de tipos.

Continuando con el tema de la universalidad, enumeramos las principales categorías de escenarios de uso de Haxe (a excepción de la migración desde Flash, por supuesto).

Desarrollo de una aplicación o juego multiplataforma desde cero. Con el código Haxe, puede trabajar con plataformas de escritorio, móviles y web. No hay nada nuevo en los lenguajes de programación multiplataforma, y ​​además de Haxe, hay otras soluciones especiales para juegos y aplicaciones móviles y de escritorio multiplataforma. Pero Haxe a este respecto es diferente, ya que un código no solo funcionará en diferentes plataformas, sino en diferentes paradigmas, por ejemplo, en forma de una aplicación HTML5 y un archivo ejecutable nativo.

Un idioma "para gobernar todo". Pido disculpas por referirme a Tolkien, pero al igual que Node.js proclamó la era del uso del mismo idioma para el cliente y el servidor de los sitios web, Haxe se puede usar para ambos componentes de las aplicaciones cliente-servidor (mientras que el cliente y el servidor pueden ejecutarse en diferentes plataformas)

Por ejemplo, la aplicación web FontStruct usa Haxe para representar gráficos tanto en el lado del cliente (en el lienzo HTML5) como en el lado del servidor (usando Java2D). Pero, como ya se mencionó, no es necesario seguir este camino: Haxe no limita sus capacidades y le permite trabajar junto con el código existente escrito en cualquier otro idioma. Este enfoque simplifica enormemente el mantenimiento de la coherencia lógica e incluso la representación de gráficos en todos los contextos, plataformas e idiomas de destino.

Abandono de JavaScript a favor de la seguridad de tipo. Espera un minuto, ¿no es ese TypeScript ya? Sí, si desea limitarse solo a la salida de JavaScript. Haxe, a su vez, también se puede compilar en código en Java, C ++, C #, Python, Lua y otros lenguajes .

Al mismo tiempo, el lenguaje Haxe en sí mismo es lo suficientemente simple como para aprender para aquellos que ya están familiarizados con los conceptos básicos de JavaScript; su sintaxis no requiere que el programador cambie el paradigma de pensamiento, como, por ejemplo, en el caso de Rebol. Andy Lee (uno de los principales desarrolladores de Haxe) escribió una comparación detallada de TypeScript y Haxe , que sigue siendo relevante hoy en día, aunque ambos lenguajes continúan su desarrollo.

Proceso de compilación y prueba bastante rápido. Recientemente agregado al ecosistema Haxe, la máquina virtual multiplataforma (VM) HashLink le permite lograr un equilibrio entre el tiempo de compilación (compilar en HashLink es mucho más rápido que compilar en C ++) y la velocidad de ejecución del código suficiente para áreas como la creación de juegos en 3D (anteriormente para estos fines podría use la máquina virtual Neko, que, sin embargo, es significativamente inferior a HashLink en velocidad). Pero incluso en el área de desarrollo web, Haxe puede superar a TypeScript tanto en velocidad de compilación como en velocidad de ejecución del código generado .

Emocionante frontera. El código fuente de Haxe está abierto, constantemente se le agregan nuevas construcciones de lenguaje y tiene una comunidad activa. Y su mayor secreto es un sistema de macros ejecutado en tiempo de compilación y que permite la metaprogramación de la manera que el alma quiere (daré algunos ejemplos de bibliotecas que usan macros a continuación).

¿Quién está usando Haxe?


Por supuesto, los desarrolladores de juegos: Madden NFL Mobile , Evoland II , Double Kick Heroes ... estos y cientos de otros juegos fueron desarrollados usando Haxe. Pero Haxe también se usa fuera del ámbito de los juegos:

  • En 2014, el uso de Haxe permitió a TiVo mejorar el rendimiento del decodificador TiVo Premiere en más del 30% .
  • Massive Interactive, cuyos clientes son DAZN y Telecine, utiliza con éxito Haxe para desarrollar software para sistemas de Smart TV. Basado en su experiencia con grandes proyectos web, Philip Elsass (Arquitecto de IU masivo interactivo), en uno de sus informes, señaló que Haxe es generalmente más fácil de usar que TypeScript y también se traduce a JavaScript más rápido en un orden de magnitud.
  • Synolia utiliza Haxe para su herramienta en línea Heidi , que es utilizada por las principales marcas francesas Carrefour y La Fnac, así como por Nickelodeon. El kit de herramientas Haxe permitió a Synolia migrar de Flash a HTML5, y también proporcionó nuevas oportunidades de negocio para el negocio móvil. Elegir Haxe nos permitió reutilizar el código común en las diversas capas y servicios de Heidi.
  • En 2017, Docler Holding se convirtió en socio estratégico de la Fundación Haxe .

¿Qué es el ecosistema Haxe?


Cuando se trata de juegos y Haxe, la elección de bibliotecas y marcos de código abierto es bastante amplia. Los usuarios de Haxe, ya sean equipos independientes independientes o estudios exitosos con clientes internacionales, comparten activamente su código:

  • Flambe ha sido utilizado para desarrollar juegos HTML5 por marcas como Disney, Coca-Cola y Toyota.
  • Heaps es un marco de juego en 3D / 2D que respalda juegos independientes exitosos como Northgard y Dead Cells .
  • La asombrosa biblioteca de desarrollo rápido es quizás la joya escondida incluso para la comunidad Haxe.
  • Kha es un marco multimedia ultraportátil con la capacidad de crear proyectos no solo en sistemas operativos de escritorio y móviles y HTML5, sino también en XBox One, Nintendo Switch y Playstation 4. Más de 20 motores de juegos se crearon sobre la base, el más interesante de los cuales es Armory - 3D -motor con plena integración con Blender .
  • HaxeFlixel , modelado a partir del antiguo motor Flash Flixel, es una opción popular para crear juegos pequeños, por ejemplo, para Defender's Quest .
  • Starling, originalmente un marco de ActionScript utilizado para el puerto de Angry Birds para Facebook, ahora también tiene un puerto en Haxe .
  • OpenFL , que implementa la API Flash, también le permite crear aplicaciones para consolas (PlayStation 4, PlayStation Vita, XBox One y Nintendo Switch), SO de escritorio y móviles, HTML5. HaxeFlixel y Starling Port corren sobre OpenFL. Un ejemplo de un juego desarrollado directamente en OpenFL es el galardonado Papers, Please .
  • El Native Media Engine (NME), del cual se separó OpenFL hace varios años, continúa siendo compatible y se están lanzando actualizaciones para él.
  • HaxePunk (descendiente de otro motor Flash - FlashPunk) - quizás puedas ver mención de él en uno de los lanzamientos de Github Release Radar .
  • Nape es un motor 2D de física altamente optimizado, ideal para juegos y simulaciones con física compleja.

Por supuesto, hacer juegos es la aplicación más destacada de Haxe. Pero el ecosistema Haxe también tiene bibliotecas y herramientas para crear aplicaciones empresariales y empresariales, por ejemplo:

  • hexMachina es un marco de creación de aplicaciones modular que admite el uso del lenguaje de dominio específico (DSL) y la arquitectura modelo-vista-controlador (MVC), así como muchas otras funciones. Creado y utilizado por Docler Holding.
  • HaxeUI es un motor de marcado UI, se está desarrollando activamente y tiene soporte corporativo. Ejemplos de su uso son productos como 3DVista y Kaizen for Pharma . HaxeUI es interesante porque consta de un módulo de kernel y módulos individuales que implementan la representación de la interfaz de usuario utilizando diversos medios: componentes HTML, wxWidgets, formularios Windows Forms, elementos nativos de la interfaz de usuario de Android, etc.
  • La familia de bibliotecas thx proporciona extensiones de lenguaje universales para Haxe; la biblioteca Lodash se puede llamar su contraparte del mundo JavaScript.
  • Hablando de JavaScript y proyectos Haxe compilados con JavaScript, debe mencionarse la herramienta Modular Haxe , que ayudó a Telecine y FlowPlay a escalar sus grandes proyectos y proporcionar una carga rápida del lado del cliente.
  • El ecosistema de Haxe también tiene como objetivo fomentar las sinergias con la tecnología moderna. Como ejemplo de movimiento en esta dirección, podemos llamar a la biblioteca GraphQL .
  • Finalmente, la colección de bibliotecas Tinkerbell que usa el sistema macro proporciona herramientas para todo tipo de tareas: marcos para enrutamiento web, pruebas unitarias e incrustación de SQL, así como bibliotecas para casi todo: desde plantillas CSS y análisis hasta procesamiento asíncrono / en espera y reactivo estados con una curva de aprendizaje más suave.

Aquí solo se enumeran los proyectos más interesantes creados por los usuarios de Haxe. Una lista completa de las bibliotecas ordenadas por popularidad (también existe la posibilidad de ordenar las bibliotecas por etiquetas) está disponible en el sitio web oficial. Pero también vale la pena mencionar un par de proyectos que la Fundación Haxe apoya:

  • Para DevOps, la imagen oficial de Haxe para Docker puede parecer interesante.
  • La biblioteca h3compat proporciona compatibilidad parcial hacia atrás entre Haxe 4 y Haxe 3 y está diseñada para ayudar a los usuarios a actualizar proyectos para que funcionen con la nueva versión del lenguaje.

Todo suena bien, pero ¿qué se necesita para comenzar a desarrollar en Haxe?

Inicio rápido con Haxe


Independientemente de si trabaja en Windows, MacOS o Linux, lo primero que debe hacer es descargar el instalador de Haxe , que incluye:

  1. Compilador Haxe, que puede iniciarse con el comando haxe desde el terminal o la línea de comandos.
  2. La biblioteca estándar de Haxe , que proporciona funciones de bajo nivel y estructuras de datos de uso general. Por ejemplo, clases para procesar archivos XML y ZIP, acceso a MySQL.
  3. Administrador de paquetes Haxelib que le permite instalar nuevas bibliotecas (tanto desde el repositorio oficial como desde Git o Mercurial). Lanzado por el comando haxelib (también puede estar interesado en lix , un administrador de paquetes más avanzado en comparación con Haxelib).
  4. Neko es una máquina virtual que puede ser útil en la depuración de proyectos gracias a una compilación rápida.

Además, hay otras formas de instalar Haxe en su sistema, por ejemplo, usando npm , Homebrew o Chocolatey.

Después de la instalación, Haxe se puede usar directamente desde la línea de comando, pero es mejor, por supuesto, hacerlo usando el IDE. FlashDevelop / HaxeDevelop todavía es principalmente compatible solo con Windows. La mayoría de las otras opciones disponibles son multiplataforma (Win / Mac / Linux):

  • El complemento Haxe para VSCode es compatible activamente.
  • También hay un complemento Haxe para IntelliJ IDEA .
  • Kha (el marco mencionado anteriormente para crear juegos) tiene su propio entorno de desarrollo: Kode Studio (Win / Mac / Linux). Este IDE es una bifurcación de VSCode con características adicionales para proyectos de depuración.
  • Para Sublime Text y Atom, así como para muchos otros editores , también puede encontrar los complementos Haxe correspondientes, aunque algunos de ellos solo funcionan en ciertas plataformas.

En este breve tutorial usaremos VSCode. La forma más fácil es instalar todo el paquete de complementos para el soporte de Haxe inmediatamente con el ext install haxe-extension-pack en el panel de acceso rápido VSCode (llamado por Ctrl+P ), pero si es minimalista, puede restringirse al complemento más básico: ext install vshaxe (otros componentes siempre puedes reinstalarlo más tarde).

Creando un Proyecto Haxe


Administrar el proceso de compilación de código Haxe para diferentes plataformas es más fácil con la ayuda de un archivo de sistema de compilación. Sin embargo, para empezar, solo necesitaremos un archivo con código Haxe con la extensión .hx .

En cuanto al código, tomemos el ejemplo "Generar matrices" de try.haxe.org (un espacio aislado en línea donde puede verificar rápidamente cómo funcionará un código en particular) y guárdelo 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 podemos ejecutar el compilador Haxe en modo de interpretación (es decir, sin generar código para ninguna plataforma) y ver los resultados de las llamadas a la función 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!

Transpilación de Haxe en JavaScript


Suponga que desea compartir el código discutido en el ejemplo con todo el mundo, generar código JavaScript a partir de él y usar el código resultante en su página web. En Haxe, esto se hace con un comando:

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

Si tiene instalado Node.js, puede verificar el funcionamiento del código JavaScript generado desde la línea de comandos:

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

O puede conectar el my-test.js terminado a una página web, y luego, cuando lo descargue, veremos el mismo resultado, pero ya en la consola del desarrollador integrada en el navegador.

Compilación y compilación en un archivo ejecutable


Supongamos que también necesita un ejecutable binario para el sistema en el que se está ejecutando. Para hacer esto, necesitamos transponer el código Haxe en C ++ y luego compilar los archivos .cpp resultantes en un archivo ejecutable (siempre que tenga el compilador instalado, en Windows es más fácil instalar Microsoft Visual Studio para esto). Para realizar estas tareas, necesitamos la biblioteca hxcpp , que instalamos con el comando:

 $ haxelib install hxcpp 

Con esta biblioteca, el código se compila y se compila con un solo comando:

 $ haxe -main Test -cpp bin 

Después de lo cual se puede iniciar nuestro archivo ejecutable:

 $ 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, el comando para ejecutar será un poco diferente bin\Test.exe ).

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


Aunque los archivos de compilación del proyecto Haxe tienen la extensión .hxml , no son archivos XML (a diferencia de los archivos .hxproj utilizados por HaxeDevelop y FlashDevelop, pero no hablaremos de ellos). Así es como se build-all.hxml archivo build-all.hxml para realizar la transpilación:

-main Test # Haxe, Test (, )
--each # , ,
-js haxe-test.js # JS
--next # ,
-cpp bin # , ( ) - C++

Presta atención a la diferencia en los prefijos: -js , -js y -cpp : cada uno de estos parámetros se pasa directamente a haxe, y --each y --each (con dos guiones) son parámetros de nivel meta, le dicen al compilador qué hacer con Otros parámetros.

Ahora, para construir el programa en JavaScript y en el archivo ejecutable, es suficiente simplemente ejecutar el haxe build-all.hxml .

Si desea traducir el código en JavaScript e inmediatamente ejecutar el resultado usando Node, puede ejecutar el haxe run-js.hxml , el contenido del archivo run-js.hxml se verá así:

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

Del mismo modo, el archivo "compilar y ejecutar" para el archivo ejecutable se verá así (para Windows, necesitará un pequeño cambio, que ya mencionamos):

 -main Test -cpp bin -cmd bin/Test 

¿Qué pasa con VSCode? Aquí todo es simple: la extensión que instalamos para VSCode recogerá automáticamente los archivos hxml y generará las tareas correspondientes para construir el proyecto (sin usar tasks.json ).

Haxe 4


En el proceso de configuración de Haxe, es posible que haya notado que la página de descarga tiene enlaces a las versiones 3.xy 4.x.

La última (cuarta) versión del compilador Haxe trae muchas características nuevas. Una de estas funciones es evidencia de las amplias posibilidades del sistema macro, lo que permite complementar el lenguaje con nuevos diseños: Haxe no tenía soporte para funciones lambda cortas antes, por lo que apareció la biblioteca slambda , que implementó su soporte utilizando el sistema macro. Comenzando con la cuarta versión, su soporte está integrado en el compilador, y la necesidad de usar esta biblioteca ha desaparecido.

¿Qué más hay de nuevo en Haxe 4?

De hecho, no hay tantos cambios importantes. En cambio, Haxe 4 trae muchas pequeñas mejoras. Después de todo, Haxe es una tecnología bastante madura desarrollada por un equipo pequeño y decidido, y encontrar un proyecto similar a Haxe es bastante difícil.

Muchas de las características más interesantes de Haxe no son nuevas. Por ejemplo, mencioné anteriormente que el uso de las máquinas virtuales Neko y HashLink permite un proceso de desarrollo rápido. Pero desde 2016, ha aparecido un servidor de compilación en el compilador, gracias al cual el proyecto se vuelve a compilar (no para máquinas virtuales) ahora mucho más rápido (se utiliza el almacenamiento en caché en RAM), además, el IDE puede utilizar el servidor de compilación para completar automáticamente el código (por ejemplo, el complemento funciona bajo VSCode).

Pero, en particular, los siguientes cambios aparecerán en Haxe 4:


Materiales de aprendizaje de Haxe


Además de la documentación sobre la API de la biblioteca estándar y la sintaxis del idioma en el sitio web de Haxe, los materiales están diseñados para principiantes , además, no puedo evitar mencionar el sitio dedicado al desarrollo en Haxe para la web .

Si prefiere aprender de los materiales de video, puede ver videos de Haxe Summit US 2018 en Seattle, así como grabaciones de otras conferencias.

Pero a veces una guía de un tema específico puede ser útil para usted. Por ejemplo, sobre la creación de un juego al estilo del rastreador de mazmorras en HaxeFlixel . HaxeFlixel también tiene una serie de materiales que explican los conceptos básicos del trabajo con el motor. Si está interesado en 3D, aquí puede ofrecer una guía sobre cómo comenzar con Armory .

O tal vez solo necesite una guía para el procesamiento rápido de XML : este es uno de esos artículos que ya tienen varios años, pero que siguen siendo relevantes. A pesar del hecho de que Haxe está en constante evolución, muchos de los aspectos básicos del desarrollo permanecen sin cambios, por lo que el material de capacitación antiguo no siempre significa que esté desactualizado (los materiales en bibliotecas específicas, en lugar del núcleo de Haxe, generalmente se vuelven obsoletos).

Como puede ver, Haxe se puede usar en diferentes áreas (y tal vez Haxe lo lleve a una nueva área). ¡Espero que hayas disfrutado de esta introducción al mundo de Haxe y espero escuchar cómo usas Haxe!

Source: https://habr.com/ru/post/437740/


All Articles