Я думаю, что HipHop для PHP — интересный инструмент. По сути, он преобразует код PHP в код C++. Кросс-компиляция таким образом кажется отличной идеей, но я должен задаться вопросом, как они преодолевают фундаментальные различия между двумя системами типов? Одним из конкретных примеров моего общего вопроса являются гетерогенные структуры данных. Статически типизированные языки обычно не позволяют помещать произвольные типы в массив или другой контейнер, потому что они должны иметь возможность определять типы на другом конце. Если у меня есть такой массив PHP:
$mixedBag = array("cat", 42, 8.5, false);
Как это можно представить в коде C++? Одним из вариантов было бы использование указателей void (или улучшенная версия, boost::any), но тогда вам нужно выполнить приведение, когда вы берете что-то обратно из массива... и я совсем не уверен, что механизм вывода типа всегда можно понять, к чему лить на другом конце. Лучшим вариантом, возможно, было бы что-то более похожее на объединение (или boost::variant), но тогда вам нужно перечислить все возможные типы во время компиляции... возможно, но, конечно, беспорядочно, поскольку массивы могут содержать сколь угодно сложные сущности.
Кто-нибудь знает, как HipHop и подобные инструменты, которые переходят от дисциплины динамической типизации к дисциплине статической, справляются с такими проблемами?