Hack — язык программирования для HipHop Virtual Machine (HHVM), созданный Meta (ранее Facebook) как диалект PHP . Реализация языка — бесплатное программное обеспечение с открытым исходным кодом , лицензированное по лицензии MIT . [2] [3] [4]
Hack позволяет использовать как динамическую, так и статическую типизацию . Этот тип систем типов называется постепенной типизацией и реализован также в других языках программирования, таких как ActionScript . [5] Система типов Hack позволяет указывать типы для аргументов функций , возвращаемых значений функций и свойств классов ; однако типы локальных переменных всегда выводятся и не могут быть указаны. [3] [6]
Hack был представлен 20 марта 2014 года. [7] До анонса нового языка Facebook уже внедрил код и протестировал его на большей части своего веб-сайта.
Hack разработан для бесшовного взаимодействия с PHP, который является широко используемым языком сценариев с открытым исходным кодом , который ориентирован на веб-разработку и может быть встроен в HTML . Большинство допустимых скриптов PHP также допустимы в Hack; однако многие менее часто используемые функции PHP и языковые конструкции не поддерживаются в Hack. [8]
Hack расширяет подсказки типов, доступные в PHP 5, посредством введения статической типизации, добавляя новые подсказки типов (например, для скалярных типов, таких как целое число или строка), а также расширяя использование подсказок типов (например, для свойств класса или возвращаемых значений функций). Однако типы локальных переменных не могут быть указаны. [6] Поскольку Hack использует постепенную систему типизации, в режиме по умолчанию аннотации типов не являются обязательными даже в тех местах, где они не могут быть выведены; система типов будет считать, что автор прав, и допустит код. [9] Однако доступен «строгий» режим, который требует таких аннотаций и, таким образом, обеспечивает полностью надежный код. [10]
Базовая структура файла скрипта Hack похожа на скрипт PHP с несколькими изменениями. Файл Hack не включает <?php
открывающий тег разметки и запрещает использование деклараций верхнего уровня. [11] Код должен быть помещен в функцию точки входа. Они автоматически выполняются, если находятся в файле верхнего уровня, но не если файл включен через include
, require
, или автозагрузчик. Как и другие функции в Hack, имена функций должны быть уникальными в пределах проекта, т. е. проекты с несколькими точками входа не могут быть вызваны одновременно main
:
<< __EntryPoint >> function main () : void { echo 'Привет, мир!' ; }
Приведенный выше скрипт, аналогичный PHP, будет выполнен, и в браузер будет отправлен следующий вывод:
Привет, мир!
В отличие от PHP, код Hack и HTML не смешивается; необходимо использовать либо XHP , либо другой шаблонизатор . [8]
Как и PHP 7, Hack позволяет указывать типы для аргументов функций и возвращаемых значений функций. Таким образом, функции в Hack аннотируются типами, как показано ниже:
// Хак-функции аннотируются типами. function negate ( bool $x ) : bool { return ! $x ; }