Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do tools like Hiphop for PHP deal with heterogenous arrays?

I think HipHop for PHP is an interesting tool. It essentially converts PHP code into C++ code. Cross compiling in this manner seems like a great idea, but I have to wonder, how do they overcome the fundamental differences between the two type systems? One specific example of my general question is heterogeneous data structures. Statically typed languages don't tend to let you put arbitrary types into an array or other container because they need to be able to figure out the types on the other end. If I have a PHP array like this:

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

How can this be represented in C++ code? One option would be to use void pointers (or the superior version, boost::any), but then you need to cast when you take stuff back out of the array... and I'm not at all convinced that the type inferencer can always figure out what to cast to at the other end. A better option, perhaps, would be something more like a union (or boost::variant), but then you need to enumerate all possible types at compile time... maybe possible, but certainly messy since arrays can contain arbitrarily complex entities.

Does anyone know how HipHop and similar tools which go from a dynamic typing discipline to a static discipline handle these types of problems?

like image 349
Derek Thurn Avatar asked Oct 13 '22 19:10

Derek Thurn


1 Answers

They have generic variable type, that can contain any PHP value and such code would probably use these types when compiled from PHP. That means part of advantage that comes from representing PHP values as C++ types will be lost, but the idea is that code like you showed there is rare.

PHP doesn't have too many types, so it's not a problem having a structure that unites them all - that's what the actual engine behind PHP, Zend Engine, does.

like image 82
StasM Avatar answered Oct 25 '22 00:10

StasM