Haxe: O Grande Segredo do Desenvolvimento Entre Plataformas

A moderna linguagem de programação Haxe é bem conhecida em certos círculos, mas muitos dos que estão lendo este material podem nunca ter ouvido falar dele. Mas não deixe seu status de nicho enganar você. Desde que ele apareceu pela primeira vez em 2005, seus seguidores leais, embora bastante calmos, o experimentaram em batalha. Ele apresenta uma combinação pragmática e ponderada de recursos adequados para desenvolvimento em negócios, jogos e até mesmo para fins acadêmicos.

Disney, Hasbro e BBC usam Haxe , então por que a maioria dos desenvolvedores não ouviu falar disso? Talvez a versatilidade do Haxe signifique que ele não pode ser chamado de um único recurso matador.

Ou talvez o motivo seja que um dos primeiros usos do Haxe é usá-lo como um meio de migrar da plataforma Flash em extinção, o que é um nicho bastante interessante. Nos últimos anos, o mercado de jogos casuais esteve no limbo, mas agora se tornou conhecido que em 2020 o Flash deixará de ser oficialmente suportado pela Adobe e todo o conteúdo em Flash na Web ficará esquecido.

Engenheiros de software comercial, desenvolvedores da web e muitos desenvolvedores de jogos, ao ouvir a palavra "Flash", podem perder imediatamente o interesse pelo assunto. Essa atitude, por exemplo, foi o motivo do surgimento do HaxeDevelop - um IDE para o Haxe, que é essencialmente o FlashDevelop , mas especializado no desenvolvimento para o Haxe e de seus componentes de distribuição para o ActionScript, foram removidos.

Livrar-se de tais associações que Haxe é o refúgio de ex-desenvolvedores de Flash ainda é bastante difícil, especialmente quando eles (tais associações) continuam relevantes. Por exemplo, o FlowPlay, cujos jogos sociais têm 75 milhões de usuários, escolheu Haxe, não Unity ou JavaScript puro, para traduzir seus projetos (com uma base de código de 1,4 milhões de linhas) do Flash para o HTML5 (mais informações sobre isso estão disponíveis neste material ).

Talvez seja por isso que é difícil destacar casos bem-sucedidos de uso do Haxe e interessar aos desenvolvedores que não são de jogos nesse caso. Mas ainda vamos fazer uma pequena pesquisa.

Então, o que há com Haxe?


Em geral, o uso da linguagem Haxe significa que você pode reutilizar o código (bom) . Com isso, quero dizer que o código Haxe pode ser reutilizado em muitas plataformas, pode ser integrado ao código Haxe existente e outras linguagens e, bem, a linguagem Haxe fornece muitos paradigmas comprovados, como segurança de tipo.

Continuando o tópico da universalidade, listamos as principais categorias de cenários de uso do Haxe (exceto a migração do Flash, é claro).

Desenvolvimento de um aplicativo ou jogo multiplataforma do zero. Usando o código Haxe, você pode trabalhar com plataformas desktop, móveis e web. Não há nada de novo nas linguagens de programação de plataforma cruzada e, além do Haxe, existem outras soluções especiais para aplicativos e jogos para desktop e móveis para várias plataformas. Mas a Haxe nesse aspecto é diferente, pois um código não funcionará apenas em plataformas diferentes, mas em paradigmas diferentes, por exemplo, na forma de um aplicativo HTML5 e de um arquivo executável nativo.

Um idioma "para governar tudo". Peço desculpas por me referir a Tolkien, mas, assim como o Node.js proclamou a era do uso da mesma linguagem para as partes de sites cliente e servidor, o Haxe pode ser usado para ambos os componentes de aplicativos cliente-servidor (enquanto o cliente e o servidor podem ser executados em plataformas diferentes).

Por exemplo, o aplicativo da Web FontStruct usa o Haxe para renderizar gráficos no lado do cliente (na tela HTML5) e no lado do servidor (usando Java2D). Mas, como já mencionado, não é necessário seguir esse caminho - o Haxe não restringe seus recursos e permite que você trabalhe em conjunto com o código existente escrito em qualquer outro idioma. Essa abordagem simplifica bastante a manutenção da consistência lógica e até a renderização de gráficos em todos os contextos, plataformas e idiomas de destino.

Abandono do JavaScript em favor da segurança de tipo. Espere um minuto, já não é esse TypeScript? Sim, se você deseja limitar-se apenas à saída JavaScript. O Haxe, por sua vez, também pode ser compilado em código em Java, C ++, C #, Python, Lua e outras linguagens .

Ao mesmo tempo, a própria linguagem Haxe é simples de aprender para aqueles que já estão familiarizados com o básico do JavaScript; sua sintaxe não exige que o programador mude o paradigma do pensamento, como, por exemplo, no caso do Rebol. Andy Lee (um dos principais desenvolvedores do Haxe) escreveu uma comparação detalhada do TypeScript e Haxe , que permanece relevante hoje, embora ambas as línguas continuem seu desenvolvimento.

Processo de compilação e teste bastante rápido. Recentemente adicionada ao ecossistema Haxe, a máquina virtual de plataforma cruzada (VM) do HashLink permite que você encontre um equilíbrio entre o tempo de compilação (compilar no HashLink é muito mais rápido do que compilar no C ++) e a velocidade de execução de código suficiente para áreas como a criação de jogos 3D (anteriormente para esses fins) use a máquina virtual Neko, que, no entanto, é significativamente inferior ao HashLink em velocidade). Mas mesmo na área de desenvolvimento web, o Haxe pode superar o TypeScript na velocidade de compilação e na velocidade de execução do código gerado .

Fronteira emocionante. O código fonte do Haxe é aberto, novas construções de linguagem são constantemente adicionadas a ele e possui uma comunidade ativa. E seu maior segredo é um sistema de macros executadas em tempo de compilação e permitindo a metaprogramação da maneira que a alma deseja (darei alguns exemplos de bibliotecas usando macros abaixo).

Quem está usando o Haxe?


É claro, os desenvolvedores de jogos: Madden NFL Mobile , Evoland II , Double Kick Heroes ... esses e centenas de outros jogos foram desenvolvidos usando o Haxe. Mas o Haxe também é usado fora do mundo dos jogos:

  • Em 2014, o uso do Haxe permitiu ao TiVo melhorar o desempenho do decodificador TiVo Premiere em mais de 30% .
  • A Massive Interactive, cujos clientes são DAZN e Telecine, usam com sucesso a Haxe para desenvolver software para sistemas de Smart TV. Com base em sua experiência com grandes projetos da web, Philip Elsass (arquiteto de interface do usuário interativo massivo), em um de seus relatórios, observou que o Haxe geralmente é mais fácil de usar que o TypeScript e também se traduz em JavaScript mais rapidamente por uma ordem de magnitude.
  • A Synolia usa o Haxe para sua ferramenta online Heidi , usada pelas principais marcas francesas Carrefour e La Fnac, além da Nickelodeon. O kit de ferramentas Haxe permitiu à Synolia migrar do Flash para o HTML5 e também forneceu novas oportunidades de negócios para os negócios móveis. A escolha da Haxe nos permitiu reutilizar o código comum nas várias camadas e serviços da Heidi.
  • Em 2017, a Docler Holding tornou-se um parceiro estratégico da Fundação Haxe .

O que é o ecossistema Haxe?


Quando se trata de jogos e Haxe, a escolha de bibliotecas e estruturas de código aberto é bastante ampla. Os usuários do Haxe, sejam equipes independentes independentes ou estúdios de sucesso com clientes internacionais, estão compartilhando ativamente seu código:

  • O Flambe foi usado para desenvolver jogos HTML5 por marcas como Disney, Coca-Cola e Toyota.
  • Heaps é uma estrutura de jogos 3D / 2D que sustenta jogos independentes bem-sucedidos como Northgard e Dead Cells .
  • A impressionante biblioteca de desenvolvimento rápido talvez seja a jóia escondida até para a comunidade Haxe.
  • Kha é uma estrutura multimídia ultra-portátil com a capacidade de criar projetos não apenas no SO e HTML5 para desktop e dispositivos móveis, mas também no XBox One, Nintendo Switch e Playstation 4. Mais de 20 mecanismos de jogos foram criados, o mais interessante deles é o Armory - 3D -motor com total integração com o Blender .
  • O HaxeFlixel , inspirado no antigo mecanismo Flash Flixel, é uma escolha popular para criar pequenos jogos, por exemplo, para o Defender's Quest .
  • Starling, originalmente uma estrutura do ActionScript usada para a porta Angry Birds do Facebook, agora também possui uma porta no Haxe .
  • O OpenFL , que implementa a API do Flash, também permite criar aplicativos para consoles (PlayStation 4, PlayStation Vita, XBox One e Nintendo Switch), sistemas operacionais para computadores e dispositivos móveis, HTML5. HaxeFlixel e Starling Port rodam em cima do OpenFL. Um exemplo de jogo desenvolvido diretamente no OpenFL é o premiado Papers, Please .
  • O Native Media Engine (NME), do qual o OpenFL se separou há vários anos, continua a ser suportado e as atualizações estão sendo lançadas para ele.
  • HaxePunk (descendente de outro mecanismo Flash - FlashPunk) - talvez você possa mencionar isso em um dos lançamentos do Radar de Lançamento do Github .
  • O Nape é um mecanismo 2D de física altamente otimizado, ótimo para jogos e simulações com física complexa.

Obviamente, criar jogos é a aplicação mais proeminente da Haxe. Mas o ecossistema Haxe também possui bibliotecas e ferramentas para criar aplicativos comerciais e corporativos, por exemplo:

  • O hexMachina é uma estrutura modular de desenvolvimento de aplicativos que suporta o uso da linguagem DSL (Domain-Specific Language) e da arquitetura Model-View-Controller (MVC), além de muitas outras funções. Criado e usado pela Docler Holding.
  • O HaxeUI é um mecanismo de marcação da interface do usuário, está desenvolvendo ativamente e possui suporte corporativo. Exemplos de seu uso são produtos como 3DVista e Kaizen for Pharma . O HaxeUI é interessante, pois consiste em um módulo do kernel e módulos separados que implementam a renderização da interface do usuário usando vários meios: componentes HTML, wxWidgets, Windows Forms, elementos nativos da interface do usuário Android, etc.
  • A família thx de bibliotecas fornece extensões universais de idioma para o Haxe; a biblioteca Lodash pode ser chamada de sua contrapartida no mundo JavaScript.
  • Por falar em JavaScript e em projetos Haxe compilados por JavaScript, deve-se mencionar a ferramenta Haxe Modular , que ajudou a Telecine e o FlowPlay a escalar seus enormes projetos e fornecer carregamento rápido do lado do cliente.
  • O ecossistema Haxe também visa promover sinergias com a tecnologia moderna. Como exemplo de movimento nessa direção, podemos chamar a biblioteca GraphQL .
  • Por fim, a coleção da biblioteca Tinkerbell , usando um sistema de macro, fornece ferramentas para todos os tipos de tarefas: estruturas para roteamento da Web, teste de unidade e incorporação de SQL, além de bibliotecas para quase tudo: do modelo CSS e análise ao processamento assíncrono / aguardado e reativo estados com uma curva de aprendizado mais suave.

Apenas os projetos mais interessantes criados pelos usuários do Haxe estão listados aqui. Uma lista completa de bibliotecas classificadas por popularidade (também existe a capacidade de classificar bibliotecas por tags) está disponível no site oficial. Mas também vale a pena mencionar alguns projetos que a própria Fundação Haxe apóia:

  • Para o DevOps, a imagem oficial do Haxe para o Docker pode parecer interessante.
  • A biblioteca h3compat fornece compatibilidade reversa parcial entre o Haxe 4 e o Haxe 3 e foi projetada para ajudar os usuários na atualização de projetos para trabalhar com a nova versão do idioma.

Tudo parece bom, mas o que é preciso para começar a desenvolver no Haxe?

Início rápido com Haxe


Independentemente de você trabalhar no Windows, MacOS ou Linux, a primeira coisa a fazer é baixar o instalador do Haxe , que inclui:

  1. Compilador Haxe, que pode ser iniciado com o comando haxe no terminal ou na linha de comando.
  2. A Haxe Standard Library , que fornece funções de baixo nível e estruturas de dados de uso geral. Por exemplo, classes para processar arquivos XML e ZIP, acesso ao MySQL.
  3. Gerenciador de pacotes Haxelib que permite instalar novas bibliotecas (do repositório oficial e do Git ou Mercurial). Lançado pelo comando haxelib (você também pode estar interessado no lix , um gerenciador de pacotes mais avançado em comparação com o Haxelib).
  4. Neko é uma máquina virtual que pode ser útil em projetos de depuração, graças à compilação rápida.

Além disso, existem outras maneiras de instalar o Haxe no seu sistema, por exemplo, usando npm , Homebrew ou Chocolatey.

Após a instalação, o Haxe pode ser usado diretamente na linha de comando, mas é melhor, é claro, fazer isso usando o IDE. O FlashDevelop / HaxeDevelop ainda é suportado principalmente apenas no Windows. A maioria das outras opções disponíveis são multiplataforma (Win / Mac / Linux):

  • O plug-in Haxe para VSCode é suportado ativamente.
  • Há também um plug-in Haxe para o IntelliJ IDEA .
  • Kha (a estrutura mencionada anteriormente para criar jogos) possui seu próprio ambiente de desenvolvimento - Kode Studio (Win / Mac / Linux) Esse IDE é uma bifurcação do VSCode com recursos adicionais para projetos de depuração.
  • Para Sublime Text e Atom, assim como muitos outros editores , você também pode encontrar os plug-ins Haxe correspondentes, embora alguns funcionem apenas em determinadas plataformas.

Neste breve tutorial, usaremos o VSCode. A maneira mais fácil é instalar todo o pacote de plug-ins para suporte ao Haxe imediatamente com o comando ext install haxe-extension-pack no painel de acesso rápido VSCode (chamado por Ctrl+P ), mas se você é minimalista, pode se restringir ao plug-in mais básico - ext install vshaxe (outros componentes você sempre pode reinstalar mais tarde).

Criando um projeto Haxe


Gerenciar o processo de compilação do código Haxe para diferentes plataformas é mais fácil com a ajuda de um arquivo de sistema de compilação. No entanto, para iniciantes, precisaremos apenas de um arquivo com o código Haxe com a extensão .hx .

Quanto ao código, vamos pegar o exemplo "Generate Arrays" em try.haxe.org (uma caixa de proteção on-line onde você pode verificar rapidamente como um código específico funcionará) e salvá-lo em um arquivo chamado 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] } } 

Agora podemos executar o compilador Haxe no modo de interpretação (ou seja, sem gerar código para qualquer plataforma) e ver os resultados das chamadas para a função 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] 

Ótimo, funciona!

Transpilação Haxe em JavaScript


Suponha que você queira compartilhar o código discutido no exemplo com o mundo inteiro, gerar código JavaScript a partir dele e usar o código resultante em sua página da web. No Haxe, isso é feito com um comando:

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

Se você tiver o Node.js instalado, poderá verificar a operação do código JavaScript gerado na linha de comando:

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

Ou você pode conectar o my-test.js a uma página da Web e, ao fazer o download, veremos o mesmo resultado, mas já no console do desenvolvedor incorporado ao navegador.

Compilação e compilação em um arquivo executável


Suponha que você também precise de um executável binário para o sistema em que está executando. Para fazer isso, precisamos transpor o código Haxe em C ++ e compilar os arquivos .cpp resultantes em um arquivo executável (desde que você tenha o compilador instalado, no Windows é mais fácil instalar o Microsoft Visual Studio para isso). Para executar essas tarefas, precisamos da biblioteca hxcpp , que instalamos com o comando:

 $ haxelib install hxcpp 

Com esta biblioteca, o código é compilado e compilado com apenas um comando:

 $ haxe -main Test -cpp bin 

Após o qual nosso arquivo executável pode ser iniciado:

 $ 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] 

(no Windows, o comando a ser executado será bin\Test.exe ligeiramente diferente).

Criando um arquivo de compilação Haxe (.hxml)


Embora os arquivos de construção do projeto Haxe tenham a extensão .hxml , eles não são arquivos XML (ao contrário dos arquivos .hxproj usados ​​pelo HaxeDevelop e FlashDevelop, mas não falamos sobre eles). É assim que o arquivo build-all.hxml se parece para executar a transpilação:

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

Preste atenção à diferença nos prefixos: -main , -js e -js - cada um desses parâmetros é passado diretamente para o haxe e --each e --next (com dois hífens) são parâmetros de meta-nível, informam ao compilador o que fazer com outros parâmetros.

Agora, para criar o programa em JavaScript e no arquivo executável, basta executar o haxe build-all.hxml .

Se você quiser converter o código em JavaScript e executar imediatamente o resultado usando o Node, poderá executar o haxe run-js.hxml , o conteúdo do arquivo run-js.hxml terá a seguinte aparência:

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

Da mesma forma, o arquivo "build and run" para o arquivo executável terá a seguinte aparência (no Windows, você precisará de uma pequena alteração, que já mencionamos):

 -main Test -cpp bin -cmd bin/Test 

E o VSCode? Tudo é simples aqui: a extensão que instalamos para o VSCode selecionará automaticamente os arquivos hxml e gerará as tarefas correspondentes para a construção do projeto (sem usar o tasks.json ).

Haxe 4


No processo de configuração do Haxe, você deve ter notado que a página de download possui links para as versões 3.xe 4.x.

A última (quarta) versão do compilador Haxe traz muitos novos recursos. Uma dessas funções é evidência das amplas possibilidades do sistema macro, permitindo complementar a linguagem com novas construções: anteriormente, o Haxe não tinha suporte para funções lambda curtas, então apareceu a biblioteca slambda , que implementou seu suporte usando o sistema macro. Começando com a quarta versão, o suporte é incorporado ao compilador e a necessidade de usar essa biblioteca desapareceu.

O que mais há de novo no Haxe 4?

De fato, não há tantas mudanças importantes. Em vez disso, o Haxe 4 traz muitas pequenas melhorias. Afinal, o Haxe é uma tecnologia bastante madura, desenvolvida por uma equipe pequena e objetiva, e encontrar um projeto semelhante ao Haxe é bastante difícil.

Muitos dos recursos mais interessantes do Haxe não são novos. Por exemplo, mencionei anteriormente que o uso das máquinas virtuais Neko e HashLink permite um rápido processo de desenvolvimento. Mas desde 2016, um servidor de compilação apareceu no compilador, graças ao qual o projeto é recompilado (não para máquinas virtuais) agora muito mais rápido (o cache na RAM é usado), além disso, o servidor de compilação pode ser usado pelo IDE para concluir automaticamente o código (por exemplo, o plug-in funciona sob VSCode).

Mas, em particular, as seguintes alterações aparecerão no Haxe 4:


Materiais de aprendizagem Haxe


Além da documentação sobre a API da biblioteca padrão e a sintaxe do idioma no site da Haxe, também estão disponíveis materiais projetados para iniciantes . Além disso, não posso deixar de mencionar o site dedicado ao desenvolvimento do Haxe para a web .

Se você prefere aprender com materiais de vídeo, para as aparições em vídeo disponíveis do Haxe Summit US 2018, realizado em Seattle, além de gravações de outras conferências.

Às vezes, porém, um guia para um tópico específico pode ser útil para você. Por exemplo, sobre a criação de um jogo no estilo de rastreador de masmorras no HaxeFlixel . O HaxeFlixel também possui uma série de materiais que explicam os conceitos básicos de trabalho com o motor. Se você está interessado em 3D, aqui você pode oferecer um guia sobre como começar o Armory .

Ou talvez você só precise de um guia para o processamento rápido de XML - este é um daqueles artigos que já têm vários anos, mas ainda são relevantes. Apesar do Haxe estar em constante evolução, muitos dos princípios básicos do desenvolvimento permanecem inalterados, portanto, o material antigo de treinamento nem sempre significa que está desatualizado (os materiais em bibliotecas específicas, em vez do núcleo do Haxe, geralmente se tornam obsoletos).

Como você pode ver, o Haxe pode ser usado em diferentes áreas (e talvez o Haxe o leve a uma nova área). Espero que você tenha gostado desta introdução ao mundo Haxe e esteja ansioso para saber como você usa o Haxe!

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


All Articles