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