Facebook почти наверняка является крупнейшим сайтом, работающим на PHP, и теперь он представил свою собственную версию языка, и достаточно уместно, что он называется Hack.
Facebook активно использует PHP, и во многих отношениях компания является достаточно крупным пользователем, чтобы быть собакой, которая виляет хвостом PHP.
Проще говоря, Facebook нуждается в том, чтобы PHP был лучше, чем в настоящее время, чтобы помочь сделать сайт более эффективным и масштабируемым.
С этой целью Facebook выпускает внутренние инструменты в виде открытого исходного кода, который делает PHP лучше во многих отношениях. Первый и, возможно, самый известный-это HipHop или HPHPc компилятор PHP на C. Немного позже он перешел к виртуальной машине HipHop, или HHVM, и устарел HPHPc и связанный с ним проект. HHVM был быстрым JIT-компилятором как раз вовремя для PHP 5.4.
HHVM начинался как быстрая среда выполнения для обычного PHP, но он также позволил Facebook расширить язык. Теперь расширение зашло так далеко, что это новый язык, Hack, который работает на HHVM. Ключевой дополнительной особенностью языка является то, что он статически типизирован. В последнем PHP есть намеки на типы, но только для очень ограниченного диапазона типов.
Hack использовался в Facebook достаточно долго, чтобы вся кодовая база была перенесена на него, и теперь существует версия с открытым исходным кодом в комплекте с HHVM. Есть также некоторые инструменты, включенные для облегчения преобразования.
Hack строится на PHP, и большинство существующих программ PHP будут работать как программы для взлома, но есть некоторые функции и функции, которые были удалены. Чтобы преобразовать программу в более подходящую форму взлома, вам нужно добавить типизацию, но вы можете делать это постепенно, так как статический и динамически типизированный код могут быть смешаны вместе. Если вы укажете тип для параметра, скажем, то правило типа будет применено. Если вы не укажете тип, то он будет рассматриваться как стандартный динамический тип в обычном стиле PHP.
Небольшой пример взлома, и вы получите идею очень быстро:
альфа(); }
Обратите внимание, что открывающий тег