Facebookが新言語「Hack」を発明した理由とは?(注:HackはPHPの派生言語です)
古いコードを何年もかけて置き換えるために、フェイスブックは新しい言語を作りました。この記事では、その裏話をお伝えします。
---スティーブン・メレンデス著
RubyのRailsやPythonのDjangoのような現在の****開発フレームワークを使うという選択肢は当時ありませんでした。10年後、PHPは、不便なライブラリ、一貫性のない命名規則、 組み込みで定義された関数、当該言語とは大きく異なる多言語プログラムにおける 混乱を招く構文やセマンティクス、セキュリティ問題に非常に影響を受けやすかった 設計原理、などで非難されています。
「すべてのPHPプログラマーは、毎日毎日、とらえどころのない、あるいはトリッキーなタスクに取り組んでいます。
しかし、PHPはFacebookを離れず、他の大企業やプロジェクトの何百万行ものコードがこの言語で書かれています。プログラマーは、PHPの迅速な開発とデプロイから恩恵を受け、悪い機能を取り除くために懸命に働いています。
PHPプログラマーの苦痛を和らげることは、言語と長年の開発を放棄することではありません。Facebookは、PHP由来の新しい言語であるHackを開発しました。関数型プログラミング言語や学術研究に由来する強化されたセキュリティ機能を備え、既存のコードと調和して動作します。
「PHPとシームレスに相互作用する非常に特殊な設計です」とVerlaguet氏。Hackプロジェクトの背後にある技術***は、正式な学術研究にプログラミング言語と業界経験をミックスしたものです。最近では、プロジェクトをオープンソース化し、4月9日に公開の「開発者デー」を予定しています。
「この目的は、コミュニティからのフィードバックにもっと耳を傾け、オープンソースコミュニティがFacebook以外の開発者にとってもHackをより良いものにすることです」とVerlaguet氏。
難解で難しいHaskellやML言語とコンセプトは似ていますが、それらよりもはるかにコマンドラインが少なく、主流のプログラミング言語に近いものです。
伝統的に、PHPは動的型付け言語です。つまり、数値であれ文字列であれ、あるいはその他の型であれ、コード中の基本的な必須変数の型は、プログラムが実際に実行されない限り正確ではありません。プログラマはこの柔軟性を享受していますが、エラーの可能性があります。 JavaやCのような静的に型付けされた言語ではありません。
Hackは中間的な方法を取ります。開発者が変数の使われ方のロジックに基づいて型を指定できるようにし、コードのロジックが衝突した場合はエラーを出します。このコンセプト自体は新しいものではありませんが、以前はコンパイル言語で使用されていました。
「解決策は、タイプチェック・デーモンの作成にあります。このバックグラウンド・プロセスは、開発者のコンピュータで実行されます。開発者がコンパイラを呼び出すのを待つ代わりに、型チェック・プロセスは、ソースコード・ファイルが変更されたときにコンパイラに通知するようオペレーティング・システムに要求します。これは、Dropboxが同期ファイルの更新が必要になったときにシグナルを受け取るのと似ています。
変更チェックを受ける効率的な方法は、コードが他の部分と整合していることが確認されるまで、型チェッカーを繰り返し実行することです。型チェッカーが十分に高速である限り、プログラマーは基本的に待つ必要はなく、Gitのバージョン管理システムで新しいブランチに切り替えるのと同じだとVerlaguet氏は言います。
Hackには、PHPの配列を補強するvectorやsetといった強化されたコレクション型や、関数型プログラミングに使用される匿名関数など、他にも多くの機能があります。この新しい言語によって、フェイスブックはすでに持っているPHPコードを段階的に強化することができ、PHPへの長期的な投資の価値を継続させることができるとエド・スミスは述べ、フェイスブックのHHVMランタイムエンジンはHackとPHPの両方で利用できるようになると付け加えました。
「Hackは、同じファイル上で同時にコードを動的に変換することを可能にします。
他の企業やエンジニアが流行のHackに転換するには時期尚早で、プロジェクトはオープンソースになったばかりだとVerlaguet氏。しかし、彼へのインタビュー記録を見る限り、プロジェクト全体は現在ポジティブなダイナミズムの中にあるようです。