プログラミング言語 Haxe 4.0 のリリース

利用可能 ツールキットのリリース ハクス 4.0これには、強い型付けを備えた同じ名前のマルチパラダイム高級プログラミング言語、クロスコンパイラー、関数の標準ライブラリが含まれています。 このプロジェクトは、C++、HashLink/C、JavaScript、C#、Java、PHP、Python、Lua への変換に加え、JVM、HashLink/JIT、Flash、Neko バイトコードへのコンパイルをサポートしており、各ターゲット プラットフォームのネイティブ機能にアクセスできます。 コンパイラコード によって配布 GPLv2 ライセンスに基づいており、Haxe 用に開発された標準ライブラリと仮想マシン ネコ MITライセンスの下で。

言語は 表現重視 強力なタイピングを使用します。 オブジェクト指向、汎用および関数型プログラミングの概念がサポートされています。
Haxe 構文は ECMAScript に近く、 拡大する 静的型付け、オートタイプ推論、パターン マッチング、ジェネリックス、イテレータベースの for ループ、AST マクロ、GADT (一般化代数データ型)、抽象型、匿名構造、簡略化された配列定義、条件付きコンパイル式、フィールドへのメタデータの添付などの機能、クラスと式、文字列補間 ('My name is $name')、型パラメータ ("new Main‹String›('foo')")、および はるかに.

クラステスト{
静的関数 main() {
var 人 = [
「エリザベス」 => 「プログラミング」、
「ジョエル」→「デザイン」
];

for (people.keys() の名前) {
var job = 人[名前];
track('$name は $job を生業としています!');
}
}
}

メイン イノベーション バージョン4.0:

  • 「String->Int->Bool」の代わりに関数型「(name:String, age:Int)->Bool」または「(String, Int)->Bool」を指定するための新しい構文。
  • アロー関数の構文は、「function(a, b) return a + b」ではなく「(a, b) -> a + b」です。
  • Null 値の使用に関連する問題に対する保護 (実験的な機能、特定のフィールド、クラス、またはパッケージに対してオプションで有効になります)。
  • 「final」キーワードは、不変のクラス フィールドおよびローカル変数用です。 「final」は、継承によるオーバーライドを防ぐ関数や、継承できないクラス/インターフェイスの関数を定義するためにも使用できます。
  • サポート Neo を除くすべてのコンパイル ターゲットの基本型 "String" の Unicode 標準。
  • スクラッチから書き直された組み込みインタプリタは、現在は次の名前で呼ばれています。 評価。 新しいインタープリターのおかげで、スクリプトとマクロの実行が大幅に高速化されました。 対話型デバッグ モードがサポートされています。
  • コンパイル用の新しいターゲット システム (ターゲット) ハッシュリンク - Haxe 専用に設計された高性能ランタイムは、JIT または C のバイトコードへのコンパイルをサポートし、C との統合が容易で、低レベルの数値型とポインターにアクセスできます。
  • 新しい JVM ターゲット - Java でターゲットを設定するときに「-D jvm」フラグを追加することで、Java コードのコンパイル手順をスキップして、jvm バイトコードを生成できます。
  • 関数またはコンストラクターが宣言されていない場合でも、関数またはコンストラクターを呼び出す時点でインライン デプロイできる機能。
  • 含まれる可能性 静的拡張子 「@:using(path.ToExtension)」を使用して型 (「enum」など) を宣言する場合。
  • 抽象型は、「obj.foo = bar」式をリロードするための「@:op(ab)」演算子の「set」バージョンをサポートするようになりました。
  • 「for」ループ構文は、キーと値の反復「for (key => value in collection) {}」をサポートするようになりました。
  • 式での XML のようなマークアップの使用のサポート: 「var a = ‹hi/›;」。 現時点では、この機能はマクロでの解析にのみ利用可能であり、設計段階にあります。
  • 匿名構造型の「完全な」表記におけるオプションのフィールドの構文は次のとおりです。 }" (短い "{ ?f:Int }" の代替)。
  • 列挙値を関数の引数のデフォルト値「function foo‹T›(option:Option‹T› = None)」にできるようになりました。
  • 「enum abstract Name(BasicType) {}」構文では、「enum」の接頭辞「@:」が不要になりました。
  • 抽象列挙の自動番号付け:

    enum 抽象 Foo(Int) {
    変数A; // 0
    変数 B; // 1
    }
    enum abstract Bar(String) {
    変数A; //「あ」
    変数 B; // "B"
    }

  • 「extern」キーワードでは「@:」プレフィックスを使用する必要がなくなりました。
  • オプション「」を削除しました。実装する Dynamic」を使用して、文字列を介してクラスフィールドにアクセスします。 extern クラスまたは抽象型による実装を通じて使用できます。
  • 型交差の「A & B」構文を追加しました。これは現在、匿名構造体と型パラメーター制約にのみ適用されます。 古い制約構文は削除されました。
  • 空の「Map」インスタンスを作成するには、構文「var map:Map‹Int, String› = [];」を使用します。 配列に似ています。
  • データ構造「haxe.ds.ReadOnlyArray」を追加しました。
  • メタデータに名前空間を含めることができるようになりました (「@:prefix.name function() {…}」)。 定義も同様に「#if (some.flag ... #end」)。
  • で使用される IDE の新しいサービス プロトコル VSCode用プラグイン.
  • Web API の外部定義 (extern) を更新し、不足している定義を追加しました。

出所: オープンネット.ru

コメントを追加します