我认为 HipHop for PHP 是一个有趣的工具。它本质上将 PHP 代码转换为 C++ 代码。以这种方式交叉编译似乎是个好主意,但我想知道,它们如何克服两种类型系统之间的根本差异?我的一般问题的一个具体例子是异构数据结构。静态类型语言不倾向于让您将任意类型放入数组或其他容器中,因为它们需要能够找出另一端的类型。如果我有一个这样的 PHP 数组:
$mixedBag = array("cat", 42, 8.5, false);
这如何在 C++ 代码中表示?一种选择是使用 void 指针(或高级版本 boost::any),但是当你从数组中取回东西时你需要强制转换......而且我根本不相信类型推断器总能弄清楚在另一端投什么。一个更好的选择可能更像是一个联合(或 boost::variant),但是您需要在编译时枚举所有可能的类型......也许可能,但肯定是混乱的,因为数组可以包含任意复杂的实体。
有谁知道从动态打字学科到静态学科的 HipHop 和类似工具如何处理这些类型的问题?