Хочу всё знать. Язык Hack

Замена PHP от Facebook.
14 августа 2017326451Илья Бубнов2924012

По мере увеличения аудитории социальной сети Facebook и её сервисов, компания стала остро нуждаться в более производительном языке, чем PHP. Существующие заменители не давали выигрыша, поэтому разработчики компании приняли решение сесть за разработку нового диалекта. Итогом трудов стал Hack, увидевший свет в 2014 году.

Краткая справка

Язык Hack написан на OCaml и работает на виртуальной машине HHVM (HipHop Virtual Machine), «по совпадению» тоже разработанной Facebook. С её помощью он транслируется напрямую в машинный код, в то время как PHP сначала в байткод. Исключение одной операции существенно сказывается на производительности, что являлось одной из главных причин создания.

Второй причиной является безопасность. Когда над кодом работают одновременно десятки, сотни и даже тысячи разработчиков, использовать язык с динамической типизацией не лучшее решение — вы рискуете пропустить и «наслоить» ошибки. Поэтому в Hack предусмотрены и динамическая типизация, и статическая. Реализуется это при помощи специального контроллера типов typechecker, причём таким образом, что в одном файле кода могут быть оба варианта. Так что у вас всегда есть выбор между удобством, производительностью и безопасностью.

Hack переваривает код, написанный на PHP. Это естественный шаг, если представить, какое количество исходников пришлось бы переписывать без наследования. Единственное исключение — функции, не способные работать со статической типизацией (переменные переменных, динамические свойства и т. д.). Удобство можно оценить на примере самого Facebook — работы по внедрению нового языка заняли всего год.

Вдобавок ко всему, Hack имеет открытый исходный код. Обязательно зайдите на Github и посмотрите на сегодняшнего героя.

Синтаксис

Синтаксис Hack претерпел лишь косметические доработки по сравнению с PHP. Поэтому перейти на новый язык смогут даже новички. Код для создания первого файла на Hack:

<?hh

namespace Hack\UserDocumentation\Quickstart\Examples\First;

class Box<T> {
 public function __construct(private T $elem) {
 }

 public function get(): T {
   return $this->elem;
 }
}

function get_int(): int {
 return 42;
}

function use_box(): void {
 $box = new Box(get_int());
 $i = $box->get();
 var_dump($i);
}

use_box();

Как видите, ничего принципиально нового и необычного здесь не используется. Но есть одно важное замечание: в то время, как код на PHP смешивается с HTML, Hack любит одиночество.

Обучение

Если перед вами стоит задача увеличения производительности и безопасности, или вы просто заинтересовались языком Hack, рекомендуем обратиться к следующим ресурсам:

http://hacklang.org — как всегда, начать погружение стоит с посещения официального сайта. Здесь вы найдете необходимые для обучения публикации, упражнения, исходники и ещё много интересного.

Hack and HHVM — книга от признанного издательства O’Reilly, охватывающая все темы от работы с типами до коллекций, асинхронного программирования и отладки.

Вот в общем то и всё. Несмотря на величину имени Facebook и несомненные преимущества Hack, отдельных книг или сайтов по языку практически нет.

Перспективы

Свидетельствует ли малое количество ресурсов о низкой популярности языка? Если полагаться на рейтинг TIOBE — нет. Даже если брать за диапазон наблюдения последний год - Hack увеличил свои показатели минимум в 2,5 раза, и на сегодня это 43 по популярности язык.

PHP-разработчики, если судить по форумам, относительно Hack тоже проявляют единодушие. Они считают, что постепенная типизация решает множество проблем, но не является необходимостью. То есть рядовой разработчик не видит смысла отказываться от PHP до тех пор, пока создаваемые ограничения не критичны для пользователей.

Таким образом, востребованность Hack будет расти с течением времени. Этому способствуют и привычный синтаксис, и открытость кода. При этом он вряд ли заменит или сместит с ведущих позиций PHP. Просто потому, что для большинства профильных разработчиков «легче» — синоним «лучше».