ホーム
おまかせ表示
ログイン
設定
MonoBookについて
免責事項
MonoBook
検索
「
Hack (プログラミング言語)
」を編集中
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''Hack'''(読み:はっく)とは、[[PHP]]から派生した[[プログラミング言語]]である。 == 概要 == Hackは[[Facebook]]が2014年に発表した[[PHP]]を[[魔改造]]した[[プログラミング言語]]である<ref>https://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/</ref>。PHP自体を魔改造により独自拡張したものなので長い歳月をかけてアホみたいに増えまくった[[PHP]]の関数群もそのまま使える。 Hackは[[JavaVM]]の[[パクリ]]のような[[HHVM]]([[ヒップホップ仮想マシン]])という[[仮想マシン]]の上で動作する。ヒップホップ仮想マシン自体は古くから有名であり、もともとは[[PHP]]を[[中間コード]]にして多段階で[[最適化]]する手法を実現したかったようだ。ただ、これだけ聞くと[[Phalanger]]の[[車輪の再発明]]のように思えるが真相は不明である。 HHVM実行環境の[[ソースコード]]は[[PHPライセンス]]および[[Zendライセンス]]の下で公開されている。 <ref>https://github.com/facebook/hhvm</ref> == PHPとの違い == ===開始タグ=== PHPの開始タグといえば「<?php」だが、Hackの開始タグは「<?hh」である。 === 型アノテーション=== Hackを大雑把に言えば[[PHP]]を[[静的型付け]]にした[[プログラミング言語]]である。 たとえば[[関数]]を[[宣言]]する際などには[[引数]]や[[戻り値]]に[[型]]を明示する。 また、[[型推論]]も行われるので従来の[[PHP]]のような書き方も部分的に許される。 その書式は[[JavaScript]]に型の概念を入れた[[ActionScript3]]と非常によく似ている。 <source lang="php"> <?hh class MyClass { const int MyConst = 0; private string $x = ''; // 引数$xはint // 戻り値もint public function increment(int $x): int { // $yは型推論 $y = $x + 1; return $y; } } </source> ===ジェネリクス=== [[C Sharp|C#]]のような[[ジェネリクス]]が使える。 <source lang="php"> <?hh class Box<T> { protected T $data; public function __construct(T $data) { $this->data = $data; } public function getData(): T { return $this->data; } } </source> === null許容型 === [[C Sharp|C#]]のような[[null許容型]]が使える。 ただし反抗期なのか「?」の位置が異なり、たとえば[[C Sharp|C#]]では末尾(int?)なのが、Hackでは先頭(?int)となっている。 <source lang="php"> <?hh ?int nullableInt = null; ?bool nullableBool = null; </source> ===コレクション=== [[PHP]]で扱える[[コレクション]]と言えばArray型で表される[[リスト]]のみであったが、Hackでは以下のコレクションが組込型として搭載されている。 *[[Vector]] - 並び順付きのリスト *[[Map]] - 並び順付きのディクショナリ *[[Set]] - ユニークなリスト *[[Pair]] - 2つの関連するオブジェクトを格納する ===ラムダ式=== [[C Sharp|C#]]のような[[ラムダ式]]が使える。 <source lang="php"> function foo(): (function(string): string) { $x = 'bar'; return $y ==> $x . $y; } function test(): void { $fn = foo(); // barbazが表示される echo $fn('baz'); } </source> ===newtype=== Hackには[[C++]]の[[typedef]]のようなものが搭載されている。 <source lang="php"> newtype RoofRaised = float; </source> 「[[Bjarne Stroustrup インタビュー]]」の一説で、「RoofRaised って何だと思って、長い時間をかけてヘッダーファイルを調べてみたら、ただの double だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべてのクラスで暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う? 」などと馬鹿にされたアレである。 一方、Hackのnewtypeは若干良くなっており、既存の型に制約を与えるための物として機能する。 <source lang="php"> <?hh // email型を宣言 newtype email = string; // 引数mailに渡す値は、email型に明示的にキャストしていないとエラーになる。 function setName(email $mail) : void { } </source> ===浮動小数点型はfloatに統一=== [[PHP]]では[[浮動小数点型]]を巡るfloat派とdouble派の抗争が頻発していたが、Hackでは「float」に統一された。float派の[[大勝利]]である。 <source lang="php"> float $win = 1.0; double $lose = 0.0; //エラーになるよ </source> === 感想 === ざっくり見た感じ[[Phalanger]]に近い。 ==インストール== Hackは[[HHVM]]([[ヒップホップ仮想マシン]])の[[ソースコード]]の中に埋蔵されている。最新のHHVMの[[ソースコード]]を[[ダウンロード]]してきて[[ビルド]]すれば実行環境は整う。 ==関連項目== *[[PHP]] *[[Facebook]] *[[Hack]] - 曖昧 *[[HUCK]] - 名古屋大学のアドベンチャーサークル「Huckleberry Finn(ハックルベリーフィン)」の略称。かつて鳥取砂丘に描かれて話題になった。 ==外部リンク== *[http://hacklang.org/ Hack] ==参考文献== {{reflist}} [[category: プログラミング言語]] [[category: PHP]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
このページで使用されているテンプレート:
テンプレート:Reflist
(
編集
)