Гибридный PHP/Hacklang: используйте проверку типов на обычном PHP с комментируемыми аннотациями типов
В настоящее время я не могу собрать hhvm из-за отсутствия доступа к 64-битной виртуальной машине, поэтому я не смог использовать имеющуюся у них проверку типов. Их документация, кажется, не описывает работу проверки типов (hh_server и hh_client?) В каких-либо деталях.
Что меня интересует, для всех, кто его использовал, так это возможность проверки типа в этой ситуации:
Допустим, кто-то не может преобразовать свою кодовую базу PHP в Hack, поэтому вместо этого он пишет свой PHP с комментариями в виде аннотаций типа hacklang, а во время сборки использует инструмент для вырезания комментариев, создания hh-файла, запуска проверки типов. и сообщать об ошибках.
Например, оригинальный PHP:
<?php
function lar(/* int */ $x)/* : int */
{
return $x;
}
Сделайте копию вышеупомянутого, удалите комментарии, измените? Php на? Hh:
<?hh
function lar(int $x): int
{
return $x;
}
Запустите его через проверку типов и посмотрите, нет ли ошибок.
Таким образом, вы получите доступ к законной проверке типов с обычным PHP без необходимости запускать его на HHVM. Работает ли проверка типов в соответствии с этой настройкой?
2 ответа
Я инженер в Facebook, который работает на Hack. Вы определенно могли бы сделать это, и я бы не сказал, что это плохо, но вы упустили бы кучу замечательных функций. Проверка типов Hack может быть запущена во время сборки (hh_server --check /path/to/www
), но лучший способ запустить проверку типов - это как демон. Поскольку демон постепенно проверяет ваш код в фоновом режиме, он может очень быстро сообщать об ошибках при запросе. Это позволяет получить обратную связь во время написания кода, а не после того, как вы закончили. Этот быстрый цикл обратной связи действительно помогает ускорить разработку.
Некоторые другие вещи, которые вы бы упустили:
- Многие языковые функции, такие как Коллекции, лямбда-выражения, принудительное применение аннотаций типов и конечные запятые ( личный фаворит Paul Tarjan)
- Огромное повышение производительности HHVM.
Так что, если вы абсолютно не можете использовать HHVM, тогда стоит подумать об этом, но если вы можете, я настоятельно рекомендую HHVM, чтобы воспользоваться всеми преимуществами Hack.
Это именно то, что мы сделали в нашем отделе разработки.
Мы создали скрипт для преобразования кода между hacklang и php, так как мы хотели иметь возможность выполнять проверку типов без преобразования наших производственных серверов в hhvm (мы планируем это сделать)
Вы можете найти скрипт на моей странице GitHub
https://gist.github.com/Chipcius/d3dd4052b07a152870bd
Вы можете конвертировать ваши файлы, передав каталог и флаг, чтобы определить уровень конверсии (decl, частичный, строгий)
После конвертации вы можете запустить hh_client так же, как вы программировали хакланг
Когда вы захотите вернуться назад, вы можете запустить тот же скрипт в своем коде с флагом php, и он закомментирует аннотации, которые нужно комментировать.
пример рабочего процесса
php hacklang-php-juggler.php <myDir> hack
hh_client
php hacklang-php-juggler.php <myDir> php