Гибридный 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
Другие вопросы по тегам