以前のHaxeレビュー 最後に、次のHaxe 4を見ていきました。Haxe4の公式リリース(およびその後まもなく、2つのバグパッチリリース(バージョン4.0.1と4.0.2))で、新しいHaxeレビューの時間です。この急成長しているプログラミング言語への最新の追加は何ですか? Haxeプログラミング言語コミュニティはどこに向かっていますか? Haxeゲームエンジンは今でも主力ですか?
前回のメジャーリリースから3年以上の開発により、Haxeプログラミング言語のバージョン4は、マクロパフォーマンス、開発者エクスペリエンス、および構文を改善します。その拡張機能のうち3つはまだ実験的なものと見なされていますが、強調する価値があります。新しいJVMバイトコードターゲット、インラインマークアップのサポート、およびnullの安全性チェックです。
Haxe 4の新しいJVMバイトコードターゲットは、主要なコンパイル手順を省くことにより、Haxeを介したJava開発をかなり効率的にします。Java独自のコンパイラ(javac
)にHaxeのトランスパイラーのJavaソースコード出力をコンパイルさせる2番目の手順はありません。
Haxe 4でコンパイルするこの方法は、Java開発者キット(JDK)への依存を完全に取り除き、将来実装されるインタラクティブなデバッグへの扉を開きます。
hxjava
の主流バージョンがHaxe4互換になるまで、基本的なセットアップでは、HaxeとHaxelibをインストールしてから、haxelib install hxjava 4.0.0-alpha
を実行します。これで、開発フローは簡単になります。
# transpile directly to JVM bytecode with Haxe (-D jvm would also work): haxe --main HelloWorld --java jar_output --define jvm # run JVM bytecode with Java: java -jar jar_output/HelloWorld.jar
直接JVMコンパイルがHaxe4でまだ実験的なステータスを持っていることを考えると、いくつかの注意点があります。
それでも、Javaベースのテクノロジーを活用する人にとっては正しい方向への注目すべき一歩です。
JSX、誰か? Haxe 4はインラインマークアップを有効にし、開発者がたとえばHTMLをHaxeソースコード内に直接記述できるようにします。
var dom = jsx( This is a paragraph.
);
jsx()
以降これは静的マクロ関数である可能性があります。これにより、プロジェクトは、マークアップが開発者が実装しようとしているXML風の仕様に準拠しているかどうかをコンパイル時にチェックできます。 XMLサポート自体がHaxeAPIに組み込まれているため、チェックではXml.parse()
を活用できますが、 基本的な「XMLっぽい」解析可能性のために、それさえ必要ではありません :
static macro function jsx(expr) { return switch expr.expr { case EMeta({name: ':markup'}, {expr: EConst(CString(s))}): macro $v{'XML MARKUP: ' + s}; case _: throw new haxe.macro.Expr.Error('not an xml literal', expr.pos); } }
この機能の目的は、Haxeをゲーム開発バブルから追い出すのを助けることです(確かにそこでも使用されていますが)。コンパイラレベルで実装されるのは十分に一般的であるため、上記のマクロでHaxe APIは必要ありませんが、特定のDSLをチェックすることは、コンパイラチームとコミュニティにとって次の質問です。 見つけ出す 。
1965年にnull参照が発明されて以来、nullの安全性の問題は、Haxeプログラミング言語のようなnull許容型環境の開発者の悩みの種でした。 AleksandrKuzmenkoの見積もり GitHubは、1,000万を超えるnullポインター参照エラーの修正をコミットしています。
Haxe 4には、コンパイル時のnull安全マクロが組み込まれています。これは@:nullSafety
を含めることで有効にできます。指定された定義の直前の行。入ってくる@:nullSafety(Loose)
(デフォルト)および@:nullSafety(Strict)
モードであり、必要に応じて@:nullSafety(Off)
で無効にできます。 Strict
モードは、nullの安全性が無効になっているコンテキストであっても、nullを割り当てる可能性のあるフィールドミューテーションの関数呼び出しを調べます。
レスポンシブデザインのためのメディアクエリ
Ruby開発者は、便利な安全なナビゲーション演算子(Rubyでは?.
)がレーダーに乗っているかどうか疑問に思うかもしれません。まだですが、Haxeのプログラミングの多くの側面と同様に、 そのためのマクロ (代わりに!.
を使用することに注意してください。)
Haxeプログラミング言語とHaxeIDEサポートへのDX関連の追加により、Haxe 4のエクスペリエンスは、さまざまな面で他のプログラミング言語と少なくとも同じレベルになります。ある意味で、Haxeはすべての人にとってすべてのものになることを目指していますが、コンパイラチームは、他の言語の最も便利な機能と規則を統合するために思慮深いアプローチを取っています。
その結果、Haxeプログラミング言語と標準APIは、安定性、感性、まとまりを損なうことなく進化します。このHaxeレビューのすべてが誇大広告に値するように見えるわけではありません。まさにそれがポイントです。DXは改善されており、これは単に派手な「機能」を追いかけることに賛成です。 当時の 。」
ただし、バランスを取る必要があります。Haxeの変更は、他の言語が従うパターンを認識して行われ、Haxe 4は、より人気のある言語からの新規参入者にアピールするように努めています。
その点で、Haxeは関数タイプを表す2つの主要な方法をサポートするようになりました。古い構文は、「自動カリー化と部分適用がサポートされていることを示唆していますが、サポートされていません」と述べています。 元の機能の提案 :
Int -> String -> Void
新しい構文では、名前付き引数が許可され、DXが改善されます。
(id:Int, name:String) -> Void
ただし、DXは別として、関数タイプにHaxe 4の新しい構文を使用することは、古い、劣った構文が将来のメジャーバージョンで削除される可能性があるため、習得するのに適した習慣です。
画期的なことではないかもしれませんが、Haxe 4の構文の改善は、特定の開発バックグラウンド(ES6など)を持つ既存のHaxe開発者と、Haxeに初めて参加する可能性のある開発者の両方にとって歓迎すべきニュースです。
矢印関数(「ショートラムダ」)構文がサポートされるようになりました。これは、Haxeの場合、多かれ少なかれfunction
と入力するためのショートカットにすぎません。およびreturn
。キー値とインデックス値の反復構文(それぞれマップと配列用)もサポートされるようになりました。静的拡張を使用する型宣言では、1つだけ使用できますusing
対応する静的拡張メソッドが使用されるすべての場所でそれらを必要とするのではなく、グローバルにステートメント。
列挙型と列挙型の要約には他にもいくつかの改善点があります。そのうちの1つは、後者がマクロの範囲から直接コンパイラーのサポートに移行したことです。同様に移動された他の機能には、最終クラス、最終インターフェイス、および 外部フィールド 。
マクロに依存する一部の機能は、マクロに依存したままでしたが、それでも改善されました。 演算子のオーバーロードがレベルアップされ、フィールドセッターが含まれるようになりました 、およびメタデータ 名前空間を作成できるようになりました .
で@:prefix.subprefix.name
のような区切り文字。
上記の変更を呼び出す シンタックスシュガー 確かに過度に単純化されていますが、読者はからリンクされている元の提案を掘り下げることを歓迎します Haxe4のリリースノート 詳細が必要な場合。
インタラクティブなデバッグは コンパイルされたさまざまなターゲットに対してHaxeですでに可能 、新しいeval
targetは、解釈されたコードのインタラクティブなデバッグを可能にします。簡単な例として、Haxeの「Hello、World」チュートリアルのプロジェクトディレクトリを取得し、whatever-you-want.hxml
というファイルを追加できます。このように見える:
--main HelloWorld --interp
…そして、VSCodeIDEでインタラクティブなデバッグを簡単に行うことができます。
この機能を使用すると、java
のような特定のターゲット用に実際にコンパイルしている場合でも、同じ方法でマクロコードをインタラクティブにデバッグできます。 (--interp
を使用するのではなく)。 HaxeとVSCode自体以外の唯一のインストール要件は HaxeVSCode拡張 。
IDEと言えば、Haxe 4は新しいIDEサービスプロトコルを導入します。これは、最新のVSCodeHaxe拡張機能であるvshaxeですでに活用されています。これにより、パフォーマンスが大幅に向上するだけでなく、vshaxeは次のような非常に便利なDXの改善を提供できます。
これらの価値を確認するのははるかに簡単です 関連するvshaxe変更ログからの優れたビジュアルデモ 。 vshaxe
VSCodeを使用するのはHaxeIDEだけではありません。HaxeDevelopとKodeStudioはHaxe固有であり、IntelliJ IDEA、Sublime Text、AtomなどのHaxe IDEプラグインがありますが、それはパックよりも進んでいるようです。 Haxe 4の新しいIDEサービスプロトコルを利用し、続いて IntelliJ-Haxe 。
実際のUnicode文字列リテラルを使用したい開発者は、Haxe 4でサポートされていますが、 いくつかのニュアンス 知っておくべき。
標準のHaxeAPIに読み取り専用配列が追加されました。これらは、たとえばhaxe.ds.ReadOnlyArray
などのタイプの変数を宣言するのと同じくらい簡単に使用できます。その後、値を設定、プッシュ、またはポップしようとすると、さまざまなコンパイラエラーが発生します。 final
を追加しますキーワードを宣言に追加し、配列自体を再割り当てすることも許可されません。
呼び出しサイトのインライン化は、開発者が関数をインライン化する場所をきめ細かく制御できる新しいHaxe言語機能であり、全体的なサイズとパフォーマンスのトレードオフが負けの決定になる可能性がある頻繁に呼び出される関数を最適化するときに役立ちます。
これらは、すでに優れたHaxeプログラミング言語に追加する価値があります。 Haxe 4がリリースされた今、Haxeコミュニティ構築の開発者は何ですか?
Haxeのユーザーベースは、歴史的にゲームプログラマーによって支配されてきました。しかし、 たくさんの例 フロントエンドとバックエンドの両方の開発のために、ビジネススタック、モバイルアプリ、Webなどの他のセグメントでHaxeが大規模に使用されています。
そのために、Haxe 4は再生成されたHTML外部を提供します。つまり、Haxeのjs.html
標準APIは、MDNが定義するように、より幅広いWeb APIで最新の状態になり、バグを修正し、不足しているAPIを追加しています。 (たとえば、Haxe4には現在 プッシュAPI 。)
Juraj Kirchheimの講演では、 Haxeでより良いWebを織り上げる 、彼は、HaxeベースのWebソリューションが、企業環境で桁違いに効率的でありながら、より堅牢である例を指摘しています。
彼はまた、Railsのアーキテクチャーアプローチ(フォルダー階層の観点から)にも反対していますが、Railsの完全なWebフレームワークを好む開発者はそれでも可能です。 1つ見つける 。また、開発者が完全なWebプロジェクトのソースを確認することも有益な場合があります。その場合は、 Giffonの公開リポジトリ 、Haxe 4をサポートするクラウドギフトプラットフォーム。同様に、JavaScript分割のようなWeb中心のオープンソースHaxeライブラリ Haxeモジュラー 、ジェネリック thx.core そして その姉妹図書館 、および由緒あるHaxeWebツールキット ティンカーベル すべてがすでにHaxe4をサポートしています。クロスプラットフォームのUIソリューションもサポートしています。 HaxeUI 、Webコンテキストをサポートしますが、ビジネスおよびデスクトップアプリの開発を含むはるかに広い範囲を対象としています。特に、新しいHaxe言語のリリースに至るまで、着実に成熟し続けています。
Web、ゲーム、エンタープライズ…プラットフォームやアプリのフレーバーに関係なく、開発チームは、たとえ1つのチームであっても、最終的には依存関係の管理に取り組む必要があります。このため、Haxe開発者がレビューするのに役立つリソースは、AdamBreeceの講演のスライドです。 他の人とうまくスケーリングする 。
ゲーム開発のための単一の「最良の」言語さえ存在しますか?これは主観的な質問であり、白熱した議論を見つけるのは簡単です。コミュニティの規模だけで予想されるよりも大きいHaxeのゲーム開発分野での成功は、確かに偶然ではありません。ジョーウィリアムソンは、これがなぜあるのかについていくつかの洞察を提供します 2019年にLudumDare45ゲームジャムに勝つことについてのインタビュー 、そしてこれはHaxe4でも続くと思われます。
Haxeの元の作成者であるNicolasCannasseは、すでにShiroGamesの制作でHaxe4を使用しています。 ノースガード 。 Motion Twinは、Haxe4を生産に使用しています。 死んだ細胞 。どちらのゲームもSteamで何万もの肯定的なレビューがあり、PC(Win、Mac、Linux)とコンソールの両方で利用できます。どちらのゲームも開発チームが小さく、ユーザーベースが数百万であることを考えると、本当に手ごわい結果です。 Dead CellsにはiOSバージョンもあり、Androidバージョンもレーダーに搭載されています。
ライブラリに関しては、いくつかの主要なHaxeゲームエンジンがHaxe4の変更に確実に対応しています。 Haxe4互換エンジンには次のものが含まれます Kha (そしてその上に構築された多くのエンジンの一部-例えば、 アーマリー )、 HaxeFlixel とその主な依存関係 OpenFL 、 NME 、および ヒープ —当然のことながら、NorthgardとDeadCellsが使用しているのはそれだからです。 HaxePunk Haxe4の互換性にも取り組んでいます。ある場合には、図書館、うなじ、 分岐した Haxe4で動作します。
一部の開発者は、すでに存在する多くのエンジンの1つを使用する代わりに、独自のエンジンを作成することもあります。たとえば、Kirill Poletaevは、詳細を説明します どうやって そして なぜ 彼は独自の3DHaxeゲームエンジンを作成しました。上記のエンジンは社内にあるため、Haxe4にまだ移行していないプロジェクトの一例であることは理にかなっています。
と Haxe このように幅広いユーティリティを備えているため、最も重要なHaxe 4の機能は開発者によって異なるため、このHaxeレビューは決して網羅的なものではありません。 Haxe 4の変更点のいくつかは、上記にありません。
hx3compat
ライブラリから引き続き利用可能)とターゲット(PHP5以降)の削除 AS3 )-lib
-.hxml
ファイルを使用するには、-L
または--library
に変更する必要があります)。final
現在はキーワードになっています(したがって、変数名として使用することはできません)、operator
およびoverload
新しく予約されたキーワードでもあります。いくつかの重大な変更もありましたが、それらは非常に少ないため、アクティブに保守されているライブラリの多くは、Haxe 4の互換性を明示的に発表することすらしていません。一般に、Haxe3からの移行はかなり簡単であると言われています。結局のところ、Haxeの目標の1つは、多数のターゲットプラットフォームのサポートを調整している最中の安定性であり、Haxe4はここで失望しません。
新規ユーザーはどうですか?最終的に、Haxeがゲームに最適なコーディング言語であるかどうか、HaxeエコシステムがWeb開発用の最も堅牢なライブラリを提供するかどうか、またはHaxe固有のツールが特定のワークフローに最も賢明なDXを提供するかどうかを判断するのは読者次第です。少なくとも、Haxeは多くの分野で実行可能な競争相手であり続けており、ほぼすべての開発者に秘密の利点を提供しています。
さらに読む:Haxeを初めて使用する開発者は、次のようなかなり新しいHaxeチュートリアルに興味があるかもしれません。 ジョン・ガブリエレ 、およびのリリースノート Haxe 4.1.0 そして Haxe 4.1.1 。
React NativeやXamarinのようないくつかのクロスプラットフォームフレームワークがありますが、Haxeを使用して、フレームワークの有無にかかわらず、単一のコードベースから複数のプラットフォーム用のアプリケーションを開発できます。特にReactNativeではHaxeexternを利用できます。つまり、Haxeを使用して開発することができます。
Javaはクロスプラットフォームのコンテキストで議論される最初の言語であることがよくありますが、Haxeにはさらに幅広いターゲットのセットがあります。Javaだけでなく、C#、C ++、JavaScript、PHPなどにもトランスパイルできます。 Haxeは使いやすさを磨きながら非常に多くのターゲットを維持することができたので、ここでは間違いなく競争相手です。
ゲーム開発は非常に広範囲にわたるため、ゲームに最適なプログラミング言語はプログラマーとプロジェクトの両方に依存します。 Haxeの場合は、独自に洗練された言語を提供すると同時に、単一のコードベースからWin / Mac / Linux、iOS / Android、HTML5、およびコンソールシステムをターゲットにすることができます。
ゲーム開発エンジンは、一般的な(または完全な)ゲームエンジン機能を提供するソフトウェアライブラリです。ゲームエンジンは、ゲーム体験を提供するためにアセットやユーザープラグインなどを処理するために必要なコアコードで構成されています。ゲーム開発エンジンには、独自のIDEやその他の特定のツールが含まれている場合があります。