3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Operation { protected $routine; protected $promise; public function __construct(\Closure $routine, $promise) { $this->routine = $routine; $this->promise = $promise; } public function run() { $routine = $this->routine(); $routine($this->promise); } public function getPromise() { return $this->promise; } } class Promise { protected $successClosure; protected $failClosure; public function fulfill(...$args) { $closure = $this->successClosure; $closure(...$args); } public function reject(...$args) { $closure = $this->failClosure; $closure(...$args); } public function then(\Closure $success, \Closure $fail) { $this->successClosure = $success; $this->failClosure = $fail; } } class Queue { protected $queue = []; public function append(Operation $operation) { $this->queue[] = $operation; } public function getOperationGenerator() { foreach ($this->queue as $operation) { yield $operation; } } } class QueueHandler { protected $queues = []; public function addQueue(Queue $queue) { $this->queues[] = $queue; } protected function getOperationGenerator() { $queues = []; foreach ($this->queues as $queue) { $queues[] = $queue->getOperationGenerator(); } foreach ($this->queues as $queue) { yield $queue; } } protected function getRunGenerator() { $operation_generator = $this->getOperationGenerator(); foreach ($operation_generator as $operation) { yield $operation; } } public function run() { $generator = $this->getRunGenerator(); while (1) { foreach ($generator as $operation) { $operation->run(); } } } } $main_queue = new Queue; $secondary_queue = new Queue; function async(\Closure $routine, Queue $queue) : Promise { $promise = new Promise(); $operation = new Operation($operation, $promise); $queue[] = $operation; return $promise; } async(function(Promise $promise) { var_dump('Main Fired'); $promise->fulfill(); }, $main_queue)->then(function() { var_dump('Main fulfilled!'); }, function() { var_dump('Main rejected.'); }); async(function(Promise $promise) { var_dump('Secondary Fired'); $promise->fulfill(); }, $secondary_queue)->then(function() { var_dump('Secondary fulfilled!'); }, function() { var_dump('Main rejected.'); }); $queue_handler = new QueueHandler(); $queue_handler->addQueue($main_queue); $queue_handler->addQueue($secondary_queue); $queue->run();

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.40.0070.00718.97
8.3.30.0120.00318.83
8.3.20.0040.00420.31
8.3.10.0040.00421.72
8.3.00.0000.00720.16
8.2.170.0090.00622.96
8.2.160.0100.00322.09
8.2.150.0080.00024.18
8.2.140.0080.00024.66
8.2.130.0040.00426.16
8.2.120.0000.00817.50
8.2.110.0030.00720.89
8.2.100.0090.00317.91
8.2.90.0050.00319.17
8.2.80.0030.00617.97
8.2.70.0000.00917.63
8.2.60.0050.00317.80
8.2.50.0040.00418.10
8.2.40.0000.01019.46
8.2.30.0050.00222.52
8.2.20.0000.00817.80
8.2.10.0040.00418.19
8.2.00.0000.00918.17
8.1.270.0040.00423.96
8.1.260.0080.00026.35
8.1.250.0070.00028.09
8.1.240.0060.00322.62
8.1.230.0000.01217.77
8.1.220.0050.00317.91
8.1.210.0080.00018.77
8.1.200.0040.00417.50
8.1.190.0040.00417.47
8.1.180.0050.00418.10
8.1.170.0000.00818.71
8.1.160.0000.00822.09
8.1.150.0040.00418.88
8.1.140.0050.00317.50
8.1.130.0040.00417.65
8.1.120.0030.00417.52
8.1.110.0050.00317.57
8.1.100.0000.00717.54
8.1.90.0000.00717.55
8.1.80.0000.00817.49
8.1.70.0070.00017.43
8.1.60.0050.00317.60
8.1.50.0050.00317.57
8.1.40.0000.01017.42
8.1.30.0000.00917.67
8.1.20.0050.00217.73
8.1.10.0000.00817.54
8.1.00.0000.00817.46
8.0.300.0040.00418.77
8.0.290.0050.00216.88
8.0.280.0050.00318.39
8.0.270.0040.00416.80
8.0.260.0030.00317.16
8.0.250.0030.00516.96
8.0.240.0000.00817.09
8.0.230.0040.00417.02
8.0.220.0000.00816.96
8.0.210.0080.00016.96
8.0.200.0000.00717.10
8.0.190.0040.00417.09
8.0.180.0060.00517.05
8.0.170.0030.00617.04
8.0.160.0050.00316.94
8.0.150.0000.00816.95
8.0.140.0040.00417.07
8.0.130.0000.00613.39
8.0.120.0030.00517.00
8.0.110.0000.00716.98
8.0.100.0080.00017.07
8.0.90.0050.00316.98
8.0.80.0140.00617.02
8.0.70.0070.00016.88
8.0.60.0070.00016.96
8.0.50.0040.00417.08
8.0.30.0120.00717.30
8.0.20.0100.01017.40
8.0.10.0040.00417.17
8.0.00.0070.01216.95
7.4.330.0050.00015.15
7.4.320.0070.00016.66
7.4.300.0040.00416.56
7.4.290.0040.00416.68
7.4.280.0080.00016.61
7.4.270.0030.00416.50
7.4.260.0040.00416.55
7.4.250.0000.00816.44
7.4.240.0030.00416.55
7.4.230.0030.00316.76
7.4.220.0090.00916.65
7.4.210.0130.00316.70
7.4.200.0080.00016.43
7.4.160.0080.00816.72
7.4.150.0120.00617.40
7.4.140.0120.00517.86
7.4.130.0060.01216.55
7.4.120.0080.01016.53
7.4.110.0070.01116.65
7.4.100.0090.00916.59
7.4.90.0090.00916.64
7.4.80.0120.00619.39
7.4.70.0080.01116.83
7.4.60.0090.00916.65
7.4.50.0030.00316.38
7.4.40.0090.00816.54
7.4.30.0100.00716.45
7.4.00.0060.00315.20
7.3.330.0030.00313.40
7.3.320.0030.00313.19
7.3.310.0030.00616.50
7.3.300.0040.00416.41
7.3.290.0100.00516.40
7.3.280.0100.00916.35
7.3.270.0060.01217.40
7.3.260.0000.01716.61
7.3.250.0110.00716.52
7.3.240.0100.01316.38
7.3.230.0070.01716.43
7.3.210.0120.00616.45
7.3.200.0140.00416.68
7.3.190.0000.01616.41
7.3.180.0040.01216.36
7.3.170.0100.00716.46
7.3.160.0130.01016.66
7.2.330.0100.01016.40
7.2.320.0100.00716.70
7.2.310.0130.00816.67
7.2.300.0080.00816.71
7.2.290.0030.01516.54
7.2.60.0270.00416.73
7.2.00.0060.00619.06
7.1.200.0040.00415.32
7.1.100.0030.00918.23
7.1.70.0000.00717.08
7.1.60.0150.01119.11
7.1.50.0070.01816.84
7.1.00.0030.07722.36
7.0.200.0050.00316.85
7.0.60.0070.08019.96
7.0.50.0030.04317.82
7.0.40.0070.08320.25
7.0.30.0230.08020.11
7.0.20.0230.05320.09
7.0.10.0070.04720.06
7.0.00.0100.08020.19
5.6.280.0000.05021.13
5.6.210.0030.05020.78
5.6.200.0070.06318.24
5.6.190.0070.09320.61
5.6.180.0270.08020.61
5.6.170.0300.06020.54
5.6.160.0070.08320.50
5.6.150.0070.03718.14
5.6.140.0130.07318.21
5.6.130.0070.06318.18
5.6.120.0130.07720.91
5.6.110.0000.04321.14
5.6.100.0000.04321.07
5.6.90.0100.06320.96
5.6.80.0100.05020.57
5.5.350.0000.06020.34
5.5.340.0130.07017.93
5.5.330.0070.05720.57
5.5.320.3300.04020.32
5.5.310.0300.07320.35
5.5.300.0070.07018.02
5.5.290.0030.05317.94
5.5.280.0070.08320.88
5.5.270.0070.04720.87
5.5.260.0000.07720.66
5.5.250.0070.03720.60
5.5.240.0170.03020.28
5.4.450.0300.05719.39
5.4.440.0270.07319.63
5.4.430.0330.05019.58
5.4.420.0300.05319.57
5.4.410.0230.05319.25
5.4.400.0300.04718.86
5.4.390.0170.06319.01
5.4.380.0270.05318.84
5.4.370.0200.06319.07
5.4.360.0230.05019.23
5.4.350.0170.05319.06
5.4.340.0200.05718.86
5.4.320.0270.05019.06
5.4.310.0270.05318.94
5.4.300.0130.06019.30
5.4.290.0330.04319.21
5.4.280.0300.05019.15
5.4.270.0270.05018.86
5.4.260.0300.04719.26
5.4.250.0130.06019.09
5.4.240.0370.06019.09
5.4.230.0300.06019.05
5.4.220.0370.04319.10
5.4.210.0200.05718.93
5.4.200.0300.04319.05
5.4.190.0270.04718.79
5.4.180.0200.05319.25
5.4.170.0400.04019.22
5.4.160.0270.05019.07
5.4.150.0200.05319.20
5.4.140.0270.06016.41
5.4.130.0230.05316.60
5.4.120.0230.04716.52
5.4.110.0230.04716.62
5.4.100.0100.05716.63
5.4.90.0270.06016.63
5.4.80.0400.06016.60
5.4.70.0200.05316.41
5.4.60.0070.05016.53
5.4.50.0000.05716.34
5.4.40.0200.05716.35
5.4.30.0300.06716.42
5.4.20.0230.04716.32

preferences:
55.26 ms | 400 KiB | 5 Q