Почему динамические конструкции сложны для компиляторов php (HPHP)?

Я читал на http://blog.paulbiggar.com/archive/a-rant-about-php-compilers-in-general-and-hiphop-in-particular/ Paul Bigger, и он упоминает, что HPHP не полностью поддерживать динамические конструкции. Затем он заявляет: «Тем не менее, наивный подход состоит в том, чтобы просто вставить инструкцию switch и скомпилировать все, что имеет смысл». Он говорит, что вместо динамического включения вы можете использовать операторы switch для включения правильного файла? Если да, то почему это работает и почему это «проще» для компилятора для компиляции? Как всегда, thx для вашего времени!

из моего понимания, если у вас есть это

include "$foo.php"; 

компилятор не будет знать, что вы собираетесь включить. С другой стороны, с этим

  switch($foo) { case 'bar' : include "bar.php"; case 'quux' : include "quux.php"; } 

они могут просто скомпилировать «bar» и «quux» и завернуть их в оператор if, который проверяет $foo и выполняет все, что подходит.

Компилятор ожидает, что сможет идентифицировать все исходные и двоичные файлы, которые могут быть использованы скомпилированной программой.

 include($random_file); 

Если файл, названный в $ random_file, объявляет константы, классы, переменные, компилятор не будет знать, потому что значение $ random_file неизвестно во время компиляции. Ваш код, использующий эти константы, классы и переменные, терпит неудачу в трудных для отладки способах. Оператор switch объявит список возможных файлов, чтобы компилятор мог обнаружить любые соответствующие объявления.

Языки, предназначенные для компиляции, имеют динамические компоновщики и внешние функциональные интерфейсы, которые в совокупности предоставляют аналогичные функции для включения ($ random_file) без необходимости явного переключения.