Moin!
Weißt Du denn, warum Facebook da seinen ganzen Code auf Hack umstellt?
Nein, und ich würde bestreiten wollen, dass die das großflächig "einfach so" tun. Wenn, dann im Rahmen einer Migrationsstrategie, die an gewissen Hotspots mittels Hack noch Performance rauskitzeln kann.
"Collections provide a clean, type-safe alternative to PHP arrays. We designed them specifically to work well with static typing and generics. The Collections API offers many classic higher-order functions such as map() and filter() to facilitate functional programming styles.
Eine der typischen Anwendungen für PHP-Arrays ist, mehr als ein Object desselben Typs zu enthalten. Es liegt auf der Hand, hier Typsicherheit zugunsten von Performance zu implementieren.
Lambda expressions give a concise syntax for creating closures. While PHP has closures, it requires the programmer to explicitly name the variables they need to use from enclosing scopes. With Hack's lambda expressions, we automatically infer these uses, saving you needless work. Lambda expressions make it more convenient to take full advantage of the Collections API."
Convenience.
Da werden ja die "Collections" als Erweitrung von Arrays hervorgehoben, um mit Funktionen wie map() und filter() funktionalen Programmierstil zu erleichtern. Das muss doch irgend eine größere Rolle dann intern bei denen spielen, oder?
Vermutlich gibts viel zu mappen und zu filtern bei Facebook.
Was so relevant an Closures in PHP ist, weiß ich auch immer noch nicht. Ich dachte immer, private Klassen-Variablen würden den selben Zweck erfüllen und dieses Variablen-Einschließen wäre insbesondere wichtig wenn Codes auf verschiedenen Quellen zusammengeführt werden, was ja bei Javascript regelmäßig der Fall ist, nicht aber bei PHP.
Closures erlauben Funktionsdefinitionen, die noch nicht ausgeführt werden, aber im Kontext der Definition ablaufen. Sowas kriegt man mit privaten Klassenvariablen nicht hin.
- Sven Rautenberg