(Translated by https://www.hiragana.jp/)
Haxe - Wikipedia

Haxe(ヘックス、発音はつおん記号きごうは /heks/[3][4])はオープンソース高級こうきゅうプログラミング言語げんご、もしくはそのコンパイラである。

Haxe
Haxe
Haxeのロゴ
パラダイム マルチパラダイム
登場とうじょう時期じき 2005
開発かいはつしゃ Haxe Foundation, Nicolas Cannasse
最新さいしんリリース 4.3.6/ 2024ねん8がつ7にち (47にちまえ) (2024-08-07)[1]
評価ひょうかばんリリース haxe 2024-08-14 development / 2024ねん8がつ14にち (40にちまえ) (2024-08-14)[2]
型付かたつ 静的せいてき型付かたつ
影響えいきょうけた言語げんご ActionScript, OCaml
プラットフォーム クロスプラットフォーム
ライセンス

コンパイラ:GPL v2以降いこう

標準ひょうじゅんライブラリ:MIT
ウェブサイト haxe.org
テンプレートを表示ひょうじ

言語げんごとしてのHaxeは静的せいてき型付かたつオブジェクト指向しこう言語げんごであり、構文こうぶんActionScript 3および標準ひょうじゅん中止ちゅうしされたECMAScript 4ている。Adobe FlashJava仮想かそうマシンおよび独自どくじのNekoやHashLinkで実行じっこう可能かのうバイトコードコンパイルされるほか、JavaScript、ActionScript 3、C++、Cppia、C#JavaPHP 7Python 3Luaへのソースコード変換へんかん可能かのうであるため、おもマルチプラットフォーム開発かいはつ目的もくてきとして使用しようされる。また、FlashからHTML5への移行いこうにもてきする。

2012ねん4がつ表記ひょうきがhaXeからHaxeに変更へんこうされた[5]

対応たいおうプラットフォーム

編集へんしゅう

Haxeのコンパイラは、AVMやJava VM、そして独自どくじ仮想かそうマシンであるNekoおよびHashLinkのバイトコードや、JavaScript、ActionScript 3、C++、Cppia、C#、Java、PHP、Python 3、Luaのソースコードを生成せいせいする。複数ふくすうプラットフォームに「コンパイルする」この戦略せんりゃくは、"Write once, run anywhere" の思想しそうもとづいている。これにより、プログラマ目的もくてきのために最良さいりょうのプラットフォームを選択せんたくできる。

Haxeでは、これらプラットフォームは「ターゲット」とばれる。

haXe Betaより対応たいおう(2006ねん2がつ)[6]。バイトコードへコンパイルされる。おも想定そうていプラットフォームは、Adobe Flash、Adobe AIR

2007ねん3がつ、AVM2へ対応たいおうした[6]

haXe Betaより対応たいおう(2006ねん2がつ)[6]。バイトコードへコンパイルされる。

1.0より対応たいおう(2006ねん5がつ)[6]単一たんいつのソースファイルを出力しゅつりょくする。おも想定そうていプラットフォームは、ブラウザNode.jsElectron

DynamicがたによってJavaScriptのライブラリをそのまま利用りようできるほか、著名ちょめいなライブラリであれば、Haxelibに公開こうかいされている(あるいは自分じぶん定義ていぎした)externライブラリを使用しようすることで、かた安全あんぜんせいたもったまま利用りようすることができる[7]

Haxe 4.0現在げんざいECMAScript 5準拠じゅんきょしたコードへコンパイルされる[8]くわえて、4.0以降いこうではECMA Script 6から追加ついかされたクラス定義ていぎ対応たいおうした[9]

1.xより対応たいおう(2007ねん3がつ)[6]複数ふくすうのソースファイルを出力しゅつりょくする。おも想定そうていプラットフォームは、Adobe FlashやAdobe AIR。

2.0.0より対応たいおう(2008ねん7がつ)[10]複数ふくすうのソースファイルを出力しゅつりょくする。

Haxe 3まではPHP 5.1.0に準拠じゅんきょしたコードへコンパイルされていたが、Haxe 4以降いこうではPHP 7.0.0へ変更へんこうされた[11]

2.4.0より対応たいおう(2009ねん7がつ)[12]複数ふくすうのソースファイルを出力しゅつりょくする。おも想定そうていプラットフォームは、WindowsやmacOS、Linux、iOSAndroidTizenBlackBerry

C++ターゲットを利用りようするには、Haxelibに公開こうかいされているhxcppライブラリのインストールが必要ひつようとなる[13]。また、独自どくじガベージコレクション機能きのう実装じっそうしている。

2.10.0より対応たいおう(2012ねん4がつ)[14]複数ふくすうのソースファイルを出力しゅつりょくする。おも想定そうていプラットフォームは、.NET FrameworkMonoASP.NETUnity

Haxelibに公開こうかいされているhxcsライブラリによって、.NET Framework 2.0および4.0の標準ひょうじゅんライブラリを利用りようできるようになる[15]。.NET Frameworkのパスを指定していすれば、任意にんいのバージョンを利用りようすることも可能かのう

2.10.0より対応たいおう(2012ねん4がつ)[14]複数ふくすうのソースファイルを出力しゅつりょくする。

Haxelibに公開こうかいされているhxjavaライブラリによって、Java 8の標準ひょうじゅんライブラリを利用りようできるようになる[16][17]

3.2.0-rc.2より対応たいおう(2015ねん5がつ)[18]単一たんいつのソースファイルを出力しゅつりょくする。

3.2.0-rc.2より対応たいおう(2015ねん5がつ)[18]単一たんいつのスクリプトファイルを出力しゅつりょくする。

Cppiaは、外部がいぶのコンパイラを必要ひつようとしない、Haxeじょう完結かんけつするC++のスクリプト実行じっこう機能きのう提供ていきょうする[19]。Haxelibで公開こうかいされているhxcppライブラリを必要ひつようとする。

3.3.0-rc.1より対応たいおう[20]単一たんいつのソースファイルを出力しゅつりょくする。

3.3.0-rc.1より対応たいおう[21]。バイトコードへコンパイルされる。おも想定そうていプラットフォームは、WindowsやmacOS、Linux、iOS、Android、Nintendo SwitchPlayStation 4

4.0.0-rc.3より対応たいおう[22]。バイトコードへコンパイルされる。

静的せいてき型付かたつきのオブジェクト指向しこう言語げんごである。HaxeはActionScriptから派生はせいした言語げんごであるため、基本きほん構文こうぶんはActionScript3と共通きょうつうする部分ぶぶんおおい。

ActionScript3と共通きょうつうする機能きのう

編集へんしゅう

HaxeはActionScript3がつような以下いか機能きのうつ。

これらの機能きのうは、クラスのようにActionScript3とよく構文こうぶん提供ていきょうされるものもあるが、プロパティのようにActionScript3とはことなる文法ぶんぽう提供ていきょうされるものもある。

ActionScript3との相違そういてん
編集へんしゅう

構文こうぶんていてもこまかい挙動きょどうがActionScript3とことなるものもおおい。以下いかにそのようなHaxeの挙動きょどうをいくつかげる。

  • ifぶん、switchぶん、ブロックがしきであり、かえす。
  • ローカル変数へんすう関数かんすうスコープことなる。
  • privateのアクセス修飾しゅうしょく意味合いみあいが、ActionScript3のprotectedに相当そうとうする。
  • 演算えんざん優先ゆうせん順位じゅんいことなる。
    • % が * と / より優先ゆうせんたかい。
    • |、&、^の優先ゆうせんおなじ。
    • |、&、^が、==、!=より優先ゆうせんたかい。

また、ActionScript3にはあるがHaxeには存在そんざいしない機能きのうもある。以下いかにそのれいげる。

  • for(初期しょきしき; 継続けいぞく条件じょうけんしき; さい初期しょきしき){} のC言語げんご形式けいしきのforぶん

独自どくじ機能きのう

編集へんしゅう

その以下いかのような独自どくじ機能きのう[23]

かたシステム

編集へんしゅう

Haxeではこまかいかた宣言せんげん可能かのうである。

function func1(threeDimensionalArray:Array<Array<Array<Int>>>, string:String, bool:Bool) { ... }

// オプションのInt整数せいすうわたし、Intをかえ
function func2(?i:Int):Int {
    return 0;
}

// 引数ひきすうのない関数かんすうをパラメータとしてわた
function func3(f:Void -> Void) {
    f();
}

// IntをわたしIntをかえ関数かんすうをパラメータとしてわた
function func4(f:Int -> Int) {
    var result = f(1);
}

// 任意にんいがたり、任意にんいがたかえ
function func5(d:Dynamic):Dynamic {
    return d;
}

Haxeは静的せいてき型付かたつ言語げんごであるが、Dynamicがたやuntypedをもちいることで部分ぶぶんてきかたチェックを無効むこうできる。ぎゃくにexternクラスによるかた定義ていぎおこなうことで、動的どうてきがたのターゲットのライブラリたいしてかたチェックを有効ゆうこうにして連携れんけいできる。

列挙れっきょがた

編集へんしゅう

列挙れっきょがた (enum) はHaxeの重要じゅうよう特徴とくちょうである。

Haxeの列挙れっきょがたおおくの言語げんごのようにたん列挙れっきょして識別子しきべつしをつけるものよりも抽象ちゅうしょうてきで、列挙れっきょ(Haxeではenumコンストラクタとぶ)ごとにことなるパラメータつことが可能かのうである。このような列挙れっきょがたMLHaskellのような言語げんご代数だいすうてきデータがた相当そうとうする[24]

これにより、自身じしんをパラメータにもって再帰さいき構造こうぞうをつくったり、構造こうぞうつくったりできる。

以下いかれいのようにインスタンスして使つかう。

enum Color {
    red;
    green;
    blue;
    rgb: (r:Int, g:Int, b:Int);
}
 
class Colors {
    static function toInt(c:Color):Int {
        return switch (c) {
            case red: 0xFF0000;
            case green: 0x00FF00;
            case blue: 0x0000FF;
            case rgb(r, g, b): (r << 16) | (g << 8) | b;
        }
    }
    static function validCalls() {
         var redint = toInt(Color.red);
         var rgbint = toInt(Color.rgb(100,100,100));            
    }
}

標準ひょうじゅんライブラリ

編集へんしゅう

Haxeの標準ひょうじゅんライブラリはすべてのターゲットで動作どうさするもの、すべてではいが複数ふくすうのターゲットで動作どうさするもの、個別こべつのターゲットのみで動作どうさするものがある。以下いかにそれぞれのれいをあげる。

このように機能きのうそれぞれにわせた抽象ちゅうしょうおこなわれているため、複数ふくすうのターゲットで動作どうさするようなかたと、個別こべつのターゲットに依存いぞんしてそのターゲットの利点りてんかすようなかた両方りょうほうができる。

個別こべつのターゲットのに依存いぞんする場合ばあいれいとして、JavaScript出力しゅつりょくにおけるHTML5 Canvasの使用しようれいしめす。

import js.Browser;
import js.html.CanvasElement;
 
class Main 
{
    static public function main()
    {
        var canvas:CanvasElement = cast Browser.document.getElementById("canvas");
        var ctx = canvas.getContext2d();
		
        ctx.fillStyle = "#F00";
        ctx.fillRect(50, 50, 100, 100);
    }
}

サードパーティーのライブラリ

編集へんしゅう

HaxeではFlashターゲットの場合ばあいはFlashのAPIをそのまま使用しようできるが、のターゲットについてもFlashに類似るいじしたオープンソースのAPI (OpenFL) が開発かいはつされている。

クロスプラットフォームのライブラリであるOpenFLをもちいて画像がぞう表示ひょうじするプログラムをしめす。どういちコードがFlash、HTML5、Windows/Mac/Linux/iOS/Androidネイティブで実行じっこう可能かのうである。描画びょうがには、FlashではDisplayObject、HTML5ではWebGLまたはCanvas、ネイティブ環境かんきょうではOpenGL使用しようされる。

import flash.display.Bitmap;
import flash.display.Sprite;
import flash.Lib;
 
class Main extends Sprite 
{
    public function new() 
    {
        super();
 
        var image = new Bitmap(openfl.Assets.getBitmapData("img/sample.png"));
        addChild(image);
    }
 
    static public function main() 
    {
        Lib.current.addChild(new Main());
    }
}

実装じっそう

編集へんしゅう

HaxeのコンパイラはOCaml実装じっそうされている。Haxeの利用りようしゃにはOCamlの知識ちしき必要ひつようない。

Haxeのコンパイラは複数ふくすうのプラットフォームへのコンパイルのほか以下いかのような機能きのうつ。

ターゲット共通きょうつう

編集へんしゅう

かくターゲット個別こべつ

編集へんしゅう
  • SWC、SWFのライブラリの利用りよう(Flash)
    • 静的せいてきリンク・動的どうてきリンク
    • SWC、SWFのライブラリからのexternの生成せいせい
    • SWCファイルの生成せいせい
  • ソースマップの生成せいせい(JavaScript)
  • jarライブラリの利用りよう(Java)
  • dllライブラリの利用りよう(C#)

統合とうごう開発かいはつ環境かんきょう

編集へんしゅう

Haxeでのプログラミングには各種かくしゅ統合とうごう開発かいはつ環境かんきょう (IDE) およびエディタ利用りようできる。Haxeのコンパイラには、IDEにたいしてコンパイル・補完ほかん機能きのう提供ていきょうするサーバ機能きのうそなわっている。

Haxeでかれたソフトウェア

編集へんしゅう

Flashコミュニティを出自しゅつじとする言語げんごのため、ゲームの用例ようれいおおい(言語げんごじょうはそれに限定げんていされない)。以下いか代表だいひょうてきなものをげる。

  • Evoland - Haxe創始そうししゃ(Nicolas Cannasse)ほかによるインディーRPG
  • Papers, Please - 架空かくう共産きょうさんこく入国にゅうこく審査しんさかん疑似ぎじ体験たいけんするゲーム。OpenFLを使用しようMetacriticのメタスコア85を獲得かくとくGDC 2014のIndependent Games Festivalにおいて最優秀さいゆうしゅうしょう受賞じゅしょう
  • OpenFL - Showcase - OpenFLを使用しようしたゲームのショーケース
  • Stencyl - 2Dゲームエディタ。OpenFLを使用しよう
  • TiVo - Android、iOS、デジタルビデオレコーダのアプリケーションに使用しようしている。[25]

開発かいはつ当初とうしょから現在げんざいまで、Nicolas Cannasseがプロジェクトのリーダーをつとめる。ActionScriptの代替だいたいコンパイラとして開発かいはつされたため、Flashターゲットの用途ようとおおかったものの、現在げんざいはプラットフォーム中立ちゅうりつ言語げんご環境かんきょうとなることを目指めざしている[26]

  • 2005ねん 10がつ フランスのブラウザゲーム開発かいはつ会社かいしゃMotion Twin英語えいごばん独自どくじActionScriptコンパイラMTASCの後継こうけいプロジェクトとしてHaxeが誕生たんじょう当初とうしょつづりはhaXe)
  • 2006ねん 5がつ Haxe 1.0がリリース、JavaScriptターゲットに対応たいおう
  • 2008ねん 7がつ Haxe 2.0がリリース、Franco PonticelliによりPHPターゲットが追加ついか
  • 2009ねん 7がつ Haxe 2.04がリリース、Hugh SandersonによりC++ターゲットが追加ついか
  • 2011ねん
    • JavaScriptターゲットのメンテナとして参加さんかしたBruno Garciaにより、2.08と2.09のリリースにおいてJavaScriptターゲットの最適さいてきおこなわれた
    • Simon Krajewskiがチームに参加さんか
    • Cauê WaneckによりJavaおよびC#ターゲットが追加ついか
  • 2012ねん
    • 4がつ パリ開催かいさいのWorld Wide Haxeカンファレンスにおいて、表記ひょうきをHaxeに変更へんこうすること、つぎのメジャーバージョンとなるHaxe 3にけて破壊はかいてき変更へんこうおこなうことがアナウンスされる
    • Nicolas CannasseがMotion Twinより独立どくりつ、インディーゲーム開発かいはつ会社かいしゃShiro Games英語えいごばんおよびHaxe Foundation設立せつりつ
  • 2013ねん 5がつ Haxe 3.0がリリース

言語げんごめい由来ゆらい

編集へんしゅう

Haxeの名前なまえは、みじかくシンプルで使つかわれていないこと、またあたらしい技術ぎじゅつ成功せいこうみちびくために必要ひつような X をなかっていること(has a X inside)[27]から命名めいめいされた。

当初とうしょつづりはhaXeであったが、2012ねん4がつのWorld Wide Haxeカンファレンスにおいて、表記ひょうき固有名詞こゆうめいしとして馴染なじみやすいHaxeに変更へんこうすることがアナウンスされた[5]

よく比較ひかくされる言語げんご

編集へんしゅう

HaxeはJavaScript生成せいせい言語げんご(いわゆる「altJS」)のひとつとしてしばしば言及げんきゅうされる。比較ひかく対象たいしょうとなるおも言語げんごとして、以下いかげられる。

HashLinkは、Nekoの後継こうけいとされるあたらしい仮想かそうマシンで、2016ねん10がつ20日はつか開催かいさいされた"London Haxe Meetup 20th October 2016"にて発表はっぴょうされた[28]x86およx86-64のWindows、macOS、Linuxじょう動作どうさする。DirectXSDLOpenALをベースとしたマルチメディア機能きのうのほか、zlibなどの著名ちょめいなライブラリを内包ないほうする。またWindows限定げんていではあるが、一部いちぶのネイティブGUIコンポーネントも利用りようできる。なお、Neko VMとはことなり静的せいてき型付かたつである。実行じっこうにはHashLinkバイトコードファイル(拡張子かくちょうし.hl)をもちいる。

HashLinkの動作どうさ形態けいたいとして、HL/JIT方式ほうしきHL/C方式ほうしきの2種類しゅるいがある。HL/JIT方式ほうしきでは、実行じっこうコンパイラとおして仮想かそうマシンじょう動作どうささせるため、コンパイル速度そくど高速こうそくでデバッグにいている。一方いっぽう、HL/C方式ほうしきでは仮想かそうマシンは使用しようされず、わりにC言語げんごソースコードを出力しゅつりょくする。出力しゅつりょくされたCソースコードは、任意にんいのCコンパイラでビルドでき、よりたかいパフォーマンスと移植いしょくせい期待きたいできる[29]たとえば、iOSやAndroidなどのモバイルOS、PlayStation 4Nintendo Switchなどの家庭かていようゲームといった、デスクトップ環境かんきょう限定げんていされない様々さまざまなプラットフォームへの移植いしょく比較的ひかくてき容易よういとなる。実例じつれいとして、このHashLinkとゲームエンジンであるHeaps開発かいはつされているMotion TwinしゃDead Cells[30][31]、PlayStation 4、Nintendo Switch、Xbox Oneけに移植いしょくされている。

参照さんしょう

編集へんしゅう
  1. ^ Haxe 4.3.6”. 2024ねん8がつ20日はつか閲覧えつらん
  2. ^ Haxe git builds”. 2024ねん8がつ20日はつか閲覧えつらん
  3. ^ Haxeの発音はつおんについて言語げんご開発かいはつしゃによる回答かいとう
  4. ^ 公式こうしきメーリングリストにおけるHaxeのかたについての会話かいわ
  5. ^ a b haXe is now Haxe
  6. ^ a b c d e History”. 2019ねん11月3にち閲覧えつらん
  7. ^ Using external JavaScript libraries”. 2019ねん11月3にち閲覧えつらん
  8. ^ JavaScript”. 2019ねん11月3にち閲覧えつらん
  9. ^ JavaScript”. 2019ねん11月3にち閲覧えつらん
  10. ^ Haxe 2.0.0”. 2019ねん11月3にち閲覧えつらん
  11. ^ Getting started with Haxe/PHP”. 2019ねん11月3にち閲覧えつらん
  12. ^ Haxe 2.4.0”. 2019ねん11月3にち閲覧えつらん
  13. ^ Getting started with Haxe/C++”. 2019ねん11月3にち閲覧えつらん
  14. ^ a b Haxe 2.10.0”. 2019ねん11月3にち閲覧えつらん
  15. ^ .NET version and external libraries”. 2019ねん11月3にち閲覧えつらん
  16. ^ Getting started with Haxe/Java”. 2019ねん11月3にち閲覧えつらん
  17. ^ Replace hxjava-std with Java 8.”. 2019ねん11月3にち閲覧えつらん
  18. ^ a b Haxe 3.2.0-rc.2”. 2019ねん11月3にち閲覧えつらん
  19. ^ Getting started with Haxe/Cppia”. 2019ねん11月3にち閲覧えつらん
  20. ^ Haxe 3.3.0-rc.1”. 2019ねん11月3にち閲覧えつらん
  21. ^ Haxe 3.3.0-rc.1”. 2019ねん11月3にち閲覧えつらん
  22. ^ Haxe 4.0.0-rc.3”. 2019ねん11月3にち閲覧えつらん
  23. ^ Language Features - Haxe - The Cross-platform Toolkit
  24. ^ Enum Instance - Haxe - The Cross-platform Toolkit
  25. ^ WWX2015 Haxe in the Enterprise
  26. ^ Getting Rid of Flash ?
  27. ^ Haxeのネーミングについて言語げんご開発かいはつしゃのコメント
  28. ^ London Haxe Meetup 20th October 2016 - Part 2”. Haxe Foundation. 2019ねん3がつ15にち閲覧えつらん
  29. ^ About - Haxe Game Engine”. Heaps.io. 2019ねん3がつ15にち閲覧えつらん
  30. ^ Hello HashLink”. Heaps.io. 2019ねん3がつ15にち閲覧えつらん

外部がいぶリンク

編集へんしゅう