現代のプログラミング言語Haxeは一部のサークルでよく知られていますが、これを読んでいる多くの人はそれを聞いたことがありません。ただし、そのニッチなステータスにだまされてはいけません。 2005年に最初に登場して以来、忠実な(かなり静かな)フォローによって戦いのテストが行われてきました。それは、ビジネス、ゲーム、さらには学術的な文脈での開発のための機能の実用的で成熟した組み合わせを誇っています。
Disney、Hasbro、BBCはHaxeを使用しています 、では、なぜもっと多くの開発者がそれを聞いていないのですか?おそらく、その汎用性は、Haxeプログラミング言語用の単一の「キラーアプリ」がないことを意味します。
あるいは、最も初期のキラーアプリの1つである、瀕死のFlashプラットフォームからの移行パスが、いくつかの点で少しニッチであるためかもしれません。由緒あるカジュアルゲーム市場は、アドビの不確実性の陰で過去数年間スクランブルをかけてきました。そして今や、Flashベースのものがすべて明らかになりました。 2020年までに正式に移動する必要があります 。
ビジネスソフトウェアエンジニアと Web開発者 実際、多くのゲーム開発者も「Flash」を聞いてすぐに気を失うかもしれません。したがって、HaxeFoundationはFlashDevelopIDEを採用し、HaxeIDEとしてブランド名を変更しました。 HaxeDevelop 。
しかし、特にそれが非常に関連性が高い場合は、関連付けを振り払うのは難しい場合があります。たとえば、ソーシャルゲームに 7500万人のユーザー 、Flashから140万行のコードを最近2年間移行したことで、UnityとHTML5よりもHaxeを選びました。 (詳細については、 ケーススタディ 。)
ゲーム以外のソフトウェアの開発者にアピールしながら、HaxeFoundationがこのようなユースケースを強調できるようにするのは難しいかもしれません。しかし、それで少しの探索を思いとどまらせないでください。
Debianプロジェクト Haxeについて説明します 「ユニバーサルプログラミング言語」として。それにはいくつかの側面があります。
一般に、 Haxe言語は(良い)コードを再利用することを意味します 。つまり、多くのプラットフォームでHaxeコードを再利用でき、既存のHaxeおよび非Haxeコードと統合できます。 良い 、Haxe言語は、型安全性など、多くの実証済みのパラダイムを利用できるようにします。
汎用性のテーマに沿って続けると、これはユースケースのいくつかの主要なカテゴリに変換されます。もちろん、フラッシュの移行は別として。
クロスプラットフォームのアプリやゲームをゼロから開発する。 Haxeは、デスクトップ、モバイル、およびWebプラットフォームをすべて単一言語のソースベースからターゲットにできます。クロスプラットフォームプログラミング言語は新しいものではなく、クロスプラットフォーム向けの特別なソリューションがあります デスクトップ そして モバイルアプリ とゲーム。しかし、Haxeは、複数のプラットフォームだけでなく、複数のパラダイムをターゲットにできるという意味で、もう少し特別なことをします。 HTML5とネイティブバイナリ。
「それらすべてを支配する」1つの言語。 Tolkienの参照を許してください。ただし、Node.jsがWebサイトのフロントエンドとバックエンドで同じ言語を使用する時代を歓迎したように、クライアントサーバーアーキテクチャに似たものを持つプロジェクトは、両方の半分にHaxeを使用できます。
たとえば、Webアプリ FontStruct フロントエンドのHTML5キャンバスへの描画とバックエンドのJava2D経由の両方にHaxeを使用します。 (ただし、前述のように、このアプローチはオプションです。Haxeは、既存の非Haxeコードでもうまく機能します。 それはあなたを縛らないように設計されています 。)アプリ、ゲーム、ビジネス、さらにはレンダリングロジックをすべてのコンテキスト、プラットフォーム、出力言語で一貫性を保つことは、この方法ではるかに簡単です。
s corp vs ccorp税の例
JavaScriptから型安全性への脱出。 待ってください、これがTypeScriptの目的ではありませんか?はい、制限されたままにしたい場合 JavaScript 出力。対照的に、Haxe言語は、Java、C ++、C#、Python、Luaにトランスパイルすることもできます。 とりわけ 。
一方、Haxeプログラミング言語はJavaScriptから学ぶのに十分簡単です。その構文は、たとえばRebolのような大きなパラダイムシフトを意味するものではありませんが、そのようなシフトの利点はあります。 Haxeコア開発者のDr.Andy Li TypeScriptとHaxeのより詳細な比較を書いた どちらの言語も進化を続けていますが、それは今日でも当てはまります。
コンパイラの非常に高速なワークフロー。 これは最近追加された部分です(以前はNekoがオプションでしたが):HashLinkはクロスプラットフォームの仮想マシン(VM)であり、コンパイルが非常に高速であると同時に、実行時に十分なパフォーマンスを発揮するというバランスを取っているようです。 3Dゲームのように。しかし、ウェブ側でも、 Haxeは、コンパイル時と実行時の両方でTypeScriptよりも優れたパフォーマンスを発揮します 。
エキサイティングなフロンティア。 Haxe自体はオープンソースであり、活発なコミュニティがあり、常に新しい言語機能が追加されています。独自の最高のサブシークレットは、コンパイル時のマクロシステムである可能性があります。 多くの興味深いユースケース 、心ゆくまでメタプログラミングできます。 (以下にいくつかの例を示します。)
事業を始めることによって富を創造しようとするプロセス
初心者、ゲーム開発者はもちろん、Madden NFL Mobile、Evoland II、Double Kick Heroes…これらと他の何百もの公開されたゲームは、Haxeを使用して開発されました。しかし、Haxeはゲーム領域の外でも波を立てています:
ゲームとHaxeに関して言えば、オープンソースフレームワークとライブラリの点で広く広い世界です。独立したインディーチームから国際的なクライアントとの成功したスタジオまで、Haxeユーザーは至る所でコードを共有しています:
確かに、ゲーム開発シーンは、Haxe言語エコシステムのより目に見える部分です。 (おそらくこれは、Ludum Dareのようなゲームジャムの性質のおかげですか?)しかし、ビジネス側、さらには企業側も透けて見えています。例えば:
これらは、Haxe言語のユーザーがこれまでに取ったいくつかの方向性のハイライトにすぎません。 Haxe.orgは 人気順にソートされたライブラリの完全なリスト タグで閲覧することもできます。ただし、HaxeFoundation自体が維持しているいくつかのプロジェクトを強調することも価値があります。
それはすべて素晴らしいように聞こえますが、システムで開発環境を稼働させるのはどのようなものですか?
Win、Mac、Linuxのいずれの場合でも、最初のステップは Haxeをダウンロード 。そこでのインストーラーは、いくつかの異なるものを提供します。
haxe
ターミナルまたはコマンドプロンプトから。haxelib
を介して新しいパッケージをインストールできますコマンド。 (注:チェックする価値もあります lix Haxelibが提供するよりも高度なパッケージ管理のために、特に専門的なコンテキストでHaxeを使用することを検討している場合。)(とはいえ、セットアップする方法は複数あります。たとえば、すでにnpm
をインストールしている場合、OpenFLのインストール手順にはYeomanコマンドを介してHaxeをインストールするオプションがあります。HomebrewとChocolateyも同様のパスを提供します。 )
とにかく、Haxeを入手したら、コマンドラインから単独で使用できますが、開発者はIDEの使用を選択することがよくあります。 FlashDevelop / HaxeDevelopは、引き続き主にWindowsでのみサポートされます。他のほとんどのオプションはクロスプラットフォーム(Win / Mac / Linux)です。
このクイックスタートガイドでは、VSCodeを使用します。取得するのが最も簡単かもしれません Haxeエクステンションパック Ctrl + Pとext install haxe-extension-pack
を使用しますが、ミニマリストの場合はext install vshaxe
を使用することをお勧めします。基本的なHaxeプラグイン自体については、パックの他の部分を選択してください。
Haxe言語は多くのターゲットにトランスパイルできるため、ビルドファイルを使用すると、各ターゲットに対してこれがどのように行われるかを管理しやすくなります。ただし、開始するには、.hx
を含む単一のHaxeクラスファイルだけが必要です。拡張。
挿入するコードについては、配列内包表記の例を見てみましょう。 try.haxe.org そしてそれを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] } }
これで、Test.hx
の場所から、Haxeを解釈モードで実行できます。つまり、トランスパイルをまったく行わずに、これら2つの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]
素晴らしい、それは動作します!
あなたのウェブページ上のJavaScriptを介してこれを世界と共有したいとします。これはHaxeに組み込まれており、次のように簡単です。
$ haxe -main Test -js haxe-test.js
Node.jsがインストールされている場合は、次のようにコマンドラインからの出力を確認できます。
各ユニットは、のフォーマットを作成します
$ 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 ]
それ以外の場合、haxe-test.js
のコード準備が整いました。ウェブページに含める場合は、読み込み時にウェブブラウザの開発者コンソールに出力が表示されます。
開発中のデスクトップ用のネイティブバイナリも必要だとします。これを行うには、C ++ターゲットにトランスパイルするので、C ++を使用して(インストールされていると仮定して).cpp
をコンパイルできます。ネイティブバイナリに出力します。そのためには、hxcpp
が必要なので、インストールする必要があります。
$ haxelib install hxcpp
その後、次のコマンドを使用して、トランスパイルとコンパイルの両方を同時に実行できます。
$ haxe -main Test -cpp bin
これで、バイナリを実行する準備が整いました。
$ 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]
(Windowsでは、これは代わりにbinTest.exe
になります。)
示唆に富む拡張にもかかわらず、.hxml
.hxproj
とは異なり、ファイルはXMLではありません。 HaxeDevelopとFlashDevelopで使用されるファイルですが、この記事では取り上げません。これがbuild-all.hxml
です上記で行ったトランスパイルを実行するように見えます。
-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
プレフィックスの違いに注意してください:-main
、-js
、および-cpp
haxe
に渡す各パラメータは直接、--each
および--next
(2つのハイフン)はメタレベルであり、コンパイラーに他のパラメーターをどう処理するかを指示します。
haxe build-all.hxml
を実行するだけで、JavaScriptとネイティブターゲットの両方をヒットできるようになりました。
JavaScriptにトランスパイルし、すぐにNodeを使用して結果を実行したい場合は、haxe run-js.hxml
を実行できます。ここで、run-js.hxml
このように見えます:
-main Test -js haxe-test.js -cmd node haxe-test.js
同様に、ネイティブバイナリの「ビルドと実行」は次のようになります(Linuxでは、つまり、Windowsではバリエーションが必要になります)。
-main Test -cpp bin -cmd bin/Test
VSCodeはどうですか?その部分は単純です。インストールした拡張機能は、これらを自動的に取得します.hxml
ファイル。ドロップダウンに自動生成されたビルドタスク(tasks.json
なし)が表示され、使用するビルドファイルを選択できます。
注:お持ちの場合は注意してください 複数のVSCodeウィンドウが開きます ただし、この記事の執筆時点では、Ctrl + Bを使用したビルドで問題が発生する可能性があります。 (コマンドラインは引き続き使用できますが、問題ありません。)
上記の設定に従った場合、ダウンロードページにHaxeインストーラーの3.xブランチと4.xブランチの両方へのリンクが含まれていることに気付いたかもしれません。
Haxeコンパイラの最先端バージョン4には、多くの新機能が搭載されています。あるケースでは、これはそのマクロシステムの力の証でもあります。Haxeコンパイラは短いラムダ関数のサポートを欠いていたため、 slambdaライブラリはマクロを介してそれらのサポートを実装しました 。バージョン4の時点で、サポートはコンパイラーに組み込まれており、ライブラリーは非推奨になっています。
では、Haxe 4は他に何をもたらしているのでしょうか?
必ずしも多くの注目を集める人ではありません。代わりに、Haxe4には多くの小さな改善があります。結局のところ、Haxe自体 です かなり成熟したテクノロジーであり、おそらく同様のプロジェクトよりも小規模で焦点を絞ったチームによって開発されています。いずれか1つのプロジェクトを呼び出すのは少し難しいかもしれません。 同様 Haxeへ。
その最も興味深い機能の多くは、すでにしばらくの間存在しています。たとえば、HaxeはNekoまたはHashLinkを介して高速ワークフローを提供することを前述しました。ただし、2016年以降、コンパイルサーバーも搭載されています。つまり、非VMターゲットの場合、大規模なライブラリに依存するプロジェクトの再コンパイルは、メモリ内キャッシュによりはるかに高速になります。これは、HaxeIDEでコード補完に利用することもできます。
物理エンジンはどのように機能しますか
しかし、Haxe 4は、特に次のようになります。
あなたはいつでもすぐに飛び込むことができますが Haxeの標準API または 構文ドキュメント 、もう少しあります 初心者に優しいHaxe素材 利用可能 同じように 。
ビデオを重視する場合は、シアトルで開催されるHaxe US Summit 2018 ワークショップを開催しています 他の年のものと一緒に、より多くのインサイダーの見解を得るために。
しかし、より簡単に始めることができるのは、より具体的なチュートリアルである場合があります。のような HaxeFlixelでダンジョンクローラーゲームを構築する方法に関する最初から最後までのチュートリアル 。もあります HaxeFlixelチュートリアルのシリーズ 舞台裏で何が起こっているのかを詳しく説明しています。 3D側には、 Armoryの使用を開始するためのHaxeチュートリアル 。
または多分あなたはただ欲しい XMLの高速処理に関するHaxeチュートリアル —これは、現在数年前の多くのチュートリアルの1つですが、それでもかなり関連性があります。先に述べたように、フロンティアはたくさんありますが、Haxeでの開発の基本の多くはこの時点で安定しているため、チュートリアルがすぐに古くなるとは限りません。 (それらが行われる場合、それは通常、Haxeコア自体ではなく、特定のライブラリへの依存から生じます。)
ご覧のとおり、Haxe言語は、さまざまな方向に進むことができます。 Haxeの多様で魅力的な世界へのこの紹介を楽しんでいただけたと思います。また、Haxeのテクノロジーで最終的に何をするのかを聞くのを楽しみにしています。
関連: Haxeレビュー:Haxe4の機能と長所Haxeは実際にはTypeScriptよりも少し古く、その背後にある同じ企業の重みはありませんが、その言語とトランスパイラーはどちらもかなり成熟しています。
Haxeコンパイラは、JavaScript、Java、C ++、C#、PHP、Python、ActionScript 3、Flash、Luaに加えて、HashLinkおよびNeko仮想マシンをターゲットにできます。次に、Haxeの出力は、Windows、Linux、macOS、iOS、Android、PlayStation 4、PlayStation Vita、Nintendo Switch、XBoxOneで実行できます。
いいえ。Haxeの活気に満ちたgamedevエコシステムには、OpenFL、HaxeFlixel、Heaps、Kha、Flambe、Armory、Kha、awe6、NME、HaxePunkなどのフレームワークが含まれていますが、ビジネスアプリケーションやWebサイトの制作にも役立ちます。