On 19 April 2016 at 23:47, Zeev Suraski <z...@zend.com> wrote: > I fail to see how adding C++ templates to PHP takes it to the next level > in anything but the complexity scale. Not having them is not preventing > anybody from doing anything today. Sure, a bunch of frameworks would adopt > them once they become available - but it will not enable them to do things > that are radically different from what they're doing today. >
And the fact that you fail to see it is why you don't see any advantages, but that's because you are likely unfamiliar with most recent tooling around static introspection. Any reflector-based system, such as a serializer, an ORM or just a dependency injection or configuration loader would be able to do operations in a much more precise and less complex way. In Doctrine ORM, having a way to know that a field or parameter is a `string | null` or a `int | float` may be the difference between knowing what kind of column definition is needed for a field at DB level, without even need for defining manual mappings. Having a configuration system that expects to call setters with specific parameter types can allow the configuration system to validate the given data upfront, providing meaningful exceptions to the user, without having to write an entire separate config specification. Having a serializer that expects certain types of data allows rejecting any kind of value that is possibly insecure, and would cause a RCE vulnerability by unserializing a value into something with a malicious `__wakeup` in it. Etc etc. In general, improving the type system provides a much more interesting and practical playground for any kind of tool that would rely on static introspection: IDEs, reflectors, code generators, code inliners, documentation generators. The runtime part of this is just a tiny fraction of what is interesting about improving the type system at all. Hope that gives some useful context, in order to see where this would actually be useful. Cheers, Marco Pivetta http://twitter.com/Ocramius http://ocramius.github.com/