Re: PHP 2^3

From: Date: Sat, 15 Sep 2018 10:10:37 +0000
Subject: Re: PHP 2^3
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-103163@lists.php.net to get a copy of this message
On 25.06.2018 at 14:30, Zeev Suraski wrote: > As I mentioned a few days ago I intended to send it slightly later - but as Nikita brought up > the topic of PHP 8, this is probably as good a time as any to start the discussion. > > Please note: The goal of this email isn't to discuss in detail each and every topic > that's mentioned, but rather to establish whether we want to move to focus on PHP 8 as we go > beyond PHP 7.3, based on some of the research projects and PoCs we've been working on. > > There are several areas that I think we should invest in in the next major version: > > 1. JIT. As most of you probably know, we've invested heavily in re-doing JIT on top of > the PHP 7 infrastructure. There are good news and bad news. The good news is that - like the JIT > POC we did back in 2014 - the results for CPU intensive workloads are remarkable. The bad news is > that it doesn't significantly move the needle for typical Web workloads. > That said, unlike 2014 - where we had another avenue to go after, this time we believe that JIT > doesn't improve the performance of typical Web workloads simply because the bottleneck there is > no longer PHP code execution. > However, I still think we should still include JIT in the next major version of PHP for at > least 2 reasons: > - It will open the door for new types of workloads for PHP (non Web) > - It may open the door for new built-in functionality being written in PHP - for more secure > code (e.g. a PHP unserialize() implementation, instead of one in C) > In addition, it's always possible that we're missing something in our benchmarks and > that there are real world Web workloads that would actually benefit from the speedup. > One thing worth noting is that in all likelihood, we'd want to make OPcache (or at least > large parts of it) a part of the core engine (and no longer a separate extension) as a part of the > JIT effort. > - (bonus) Combined with other things we're experimenting with, the compound effect may > still result in better performance for Web apps. > To get a feel for the performance gains we're talking about here, I recorded a benchmark > comparing PHP 7.0 and the JIT PoC, available here: > https://www.youtube.com/watch?v=dWH65pmnsr > > 2. Better support long-running, async-based, microservices-focused execution model. It's > probably no secret that one of the key reasons Node is gaining popularity is because it can handle a > huge number of concurrent connections issuing relatively lightweight requests very efficiently - > which is a good match for modern microservices based architectures. There are already several > projects available for PHP that aim to provide similar functionality - most notably ReactPHP and > more recently Swoole. > The main thing that is missing is that most of PHP's IO doesn't support async > execution. What I think we should do is add as much support for async IO as possible across the > various extensions and streams - so that using something like Swoole would become practical for more > use cases. More specifically - the goal would be to provide extension authors with mechanisms that > they can use to make their extensions/functions optionally asynchronous, without having to tackle > the job entirely on their own. While we've done some research into this area, it requires a > lot more research - but I'm cautiously optimistic that it can be done. We would potentially > want to use libuv for this task, and potentially rewrite or otherwise refactor parts of the PHP > streams system. > > 3. Foreign Function Interface support. Essentially, make it very easy to connect PHP to native > code libraries written in C or C++ without having to write an extension. Now, I realize this may > not sound like much more than an extension - however, I think that if we look at the potential > impact and not just the complexity of implementation - this is actually quite strategic. This can > open the door for PHP to be used a lot more often in conjunction with 'bleeding edge' > technologies, such as AI and Machine Learning, and not just ones existing today - but kind of > 'future proof' it for whatever technologies emerge down the road. Dmitry brought that up > on the mailing list already, and he's made quite a bit of progress there. He actually spent > the last couple of weeks writing TensorFlow bindings for PHP, and wrote what's probably the > first Neural Network in PHP - recognizing handwritten digits with 98% precision > (https://github.com/dstogov/php-tensorflow/blob/master/test_nmist_01.php). I think that especially > combined with JIT - this can make PHP a real powerhouse for executing CPU intensive apps, while not > compromising on developer productivity. By the way, to make it go truly fast (especially in > conjunction with JIT), we'll likely want this to actually be merged into the core engine as > well, and not as a separate extension. > > 4. Preloading support. We've discussed this at a high level numerous times, but if we end > up introducing JIT into PHP 8 as I hope we will, preloading support can very nicely complement it. > It will effectively enable the development of PHP-based "extensions" - instead of just C > based (or FFI based) ones. With JIT, the penalty for writing logic in PHP would go down > dramatically - and it would obviously offer benefits as far as both simplicity and security are > concerned. In addition - preloading can actually speed things up very substantially for Web based > apps, as it may allow us to resolve certain dependencies at compile time (mainly inheritance) in > compile-time instead of runtime. > > Now, two things I should mention that this list is/isn't: > > > * It's incomplete - i.e., the fact a certain feature isn't on it does not > preclude its inclusion in PHP 8 > * It's not set in stone - we'll of course have to have RFCs for each of these > ideas, and we may also very well fail to implement some of them to satisfactory levels > > What this list is - a collection of directions around which we've performed varying > amounts of research (some of them quite a lot, like JIT), that I think is strong grounds for us to > start discussing a PHP 8 timeline, and making PHP 7.3 the last feature release in the PHP 7.x > family. If we had to come up with an educated guess as to when PHP 8 could be ready to be released > based on the abovementioned featureset, we're probably talking about 2-2.5yrs away (i.e. > mid/late 2020). We can also consider having a very slim PHP 7.4 release sometime in 2019 that > wouldn't add any functionality, but that would give us an opportunity to deprecate anything > that we missed in 7.3 that truly requires deprecation - while still allowing folks to prepare for > 8.0 ahead of time. > > My aim with this email is to both gauge the sentiment of shifting focus towards PHP 8 after the > 7.3 release, as well as directional feedback regarding the various bulletpoints. If there's > positive feedback, I think the next step may be to draft a 'PHP 8 as the next feature release > of PHP' RFC, with perhaps provisions for a deprecation-only 7.4, and then continue with each of > the above proposals (as well as any others) separately. We can also try to include a timeline in > it, but I think it has to have provisions to be delayed (to a certain limit) in case things take > longer to research/develop/stabilize. > > Thoughts? 7.3 is in RC stage, and we're already targeting 7.4 (the “Typed Properties 2.0”[1] and “Deprecations for PHP 7.4”[2] RFCs, for instance), so in my opinion, we should lay out the roadmap for PHP 8 as soon as possible. Otherwise we may have to postpone PHP 8 even further, and/or risk to create confusion. If desired I could aid in drafting a respective RFC. [1] <https://wiki.php.net/rfc/typed_properties_v2> [2] <https://wiki.php.net/rfc/deprecations_php_7_4> -- Christoph M. Becker

« previous php.internals (#103163) next »