Как такие инструменты, как Hiphop для PHP, справляются с гетерогенными массивами?


Я думаю, что хип-хоп для PHP - интересный инструмент. Он по сути преобразует PHP-код в код на C++. Перекрестная компиляция таким образом кажется отличной идеей, но я должен задаться вопросом, как они преодолевают фундаментальные различия между двумя системами типов? Одним из конкретных примеров моего общего вопроса являются гетерогенные структуры данных. Статически типизированные языки, как правило, не позволяют помещать произвольные типы в массив или другой контейнер, потому что они должны быть в состоянии определить типы на другом конце провода. Если у меня есть такой PHP-массив:

$mixedBag = array("cat", 42, 8.5, false);

Как это может быть представлено в коде C++? Одним из вариантов было бы использовать указатели на пустоту (или улучшенную версию, boost::any), но затем вам нужно выполнить приведение, когда вы извлекаете материал из массива... и я совсем не уверен, что средство вывода типов всегда может выяснить, что нужно привести на другом конце. Лучшим вариантом, возможно, было бы что-то более похожее на объединение (или повышение::вариант), но тогда вам нужно перечислить все возможные типы во время компиляции... возможно, это возможно, но, безусловно, беспорядочно, поскольку массивы могут содержать произвольно сложные объекты.

Кто-нибудь знает, как хип-хоп и подобные инструменты, которые переходят от дисциплины динамического набора текста к статической дисциплине, решают проблемы такого рода?

Author: Derek Thurn, 2010-12-25

1 answers

У них есть универсальный тип переменной, который может содержать любое значение PHP, и такой код, вероятно, будет использовать эти типы при компиляции из PHP. Это означает, что часть преимуществ, связанных с представлением значений PHP в виде типов C++, будет потеряна, но идея в том, что код, подобный тому, который вы показали, встречается редко.

PHP не имеет слишком большого количества типов, поэтому не проблема иметь структуру, которая объединяет их все - это то, что делает реальный движок PHP, Zend Engine.

 4
Author: StasM, 2010-12-25 08:26:28