Facebook представил Hack, вариант языка PHP со статической типизацией

Facebook представил новый язык программирования Hack, основанный на синтаксисе языка PHP и предназначенный для выполнения с использованием виртуальной машины HHVM (HipHop Virtual Machine). Приложения на языке Hack могут бесшовно взаимодействовать и сочетаться с существующим кодом на языке PHP, так как окружение HHVM поддерживает выполнение и немодифицированных PHP-скриптов. Код Hack распространяется под свободной лицензией PHP. Реализация языка уже опробована в промышленной эксплуатации, в частности, Facebook уже перешёл на использование Hack и перевёл на данный язык практически весь код своих PHP-проектов.

Отличия Hack от PHP сводятся к поддержке статической типизации и ряда расширенных возможностей, заимствованных из других языков программирования. Например, в Hack поддерживаются такие возможности, как обобщения (generics по образу C# и Java), null-значения, коллекции (в дополнение к традиционным массивам, добавлены типы Vector, Map, Set, Pair), Lambda-выражения (аналог PHP closures без явного именования переменных), механизмы асинхронного программирования (категории функций async и await), составные shape-структуры, средства для переопределения имён типов (type aliasing). Указание типов осуществляется через систему аннотаций, например указывается «function increment(int $x): int {» вместо «function increment($x) {«.

Из возможностей PHP, поддержка которых прекращена в Hack, можно отметить операторы goto, break N, continue N, global, «if:…endif», AND, OR, XOR (нужно использовать «, |, ^»), ссылки («function foo($x)»), символ приглушения вывода «@», использование «if/then/else» без обрамления блока символами «{}», elseif (правильно «else if»), средства динамического вызова (eval, $$x и т.п.), переменные в переменных ($a = «hello»; $$a = «world»; echo «$a + $hello»), задание имени функции через переменную ($func = ‘myFunc’; $func(1,2);), объекты ArrayAccess. Отдельно можно подчеркнуть, что имена функций в Hack вызываются с учётом регистра символов, в то время как в PHP регистр не учитывался.

Hack реализован на уровне виртуальной машины HHVM, поддерживающей JIT-компиляцию. HHVP в полной мере поддерживает обычный PHP 5, но при выполнении программ на языке Hack обеспечивается существенно более высокая производительность, так как благодаря наличию информации о типах в процессе JIT-компиляции удаётся сгенерировать более оптимальный и компактный машинный год. Бесшовная поддержка PHP в HHVM существенно упрощает портирование на язык Hack — проект может переводиться на статические типы поэтапно, смешивая код и сочетая файлы «.php» и «.hh» (в коде может смешиваться статическая и динамическая типизация, например, для одной функции может быть явно определены типы, а для другой оставлено динамическое определение типов).

Кроме того, доступны инструменты для автоматической трансляции PHP-кода на язык Hack. Предоставляются средства мгновенной проверки типов через использование специального локального сервера (hh_server), отслеживающего изменения в файловой системе и сообщающего данные о возможных ошибках. Использование серверного процесса позволяет сократить время на периодическую верификацию кода, исключая необходимость ожидания завершения стадии анализа кода. Вместо этого код проверяется по мере изменения, а результат выводится почти мгновенно после запуска проверки (hh_client), не приостанавливая процесс разработки. Плагины для интеграции поддержки Hack, в том числе учитывающие наличие сервера верификации, подготовлены для Vim и Emacs.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.