The last couple of months have been all about solidifying the PeachPie platform, optimizing some of our peripheral architecture and ironing out some final bugs before we set our sights on the preview of 1.0.0.
What’s new in PeachPie 0.9.600
We’re trying not to implement any major new functionality at this point and we’re instead focusing on making the project as stable and user-friendly as possible for the preview of version 1.0.0. However, there are still plenty of new features and improvements in this release:
- Support for ASP.NET Core 3.0
- Reflection API improvements and polishes
- Updated PCRE compatibility and performance
- Huge optimization of our Travis CI pipeline
- Better debugging capabilities
- Updated VS Code extension
- More diagnostics
- Updated gd2 extension and exif reading (thanks JimBobSquarePants)
- Implementation of ftp and mysqli extensions
- Traits compilation fixes
- Various bug fixes and improvements to error messages and debug assertions
New diagnostics
- PHP0123 The variable $this used out of method; reporting warning whenever there is
$this
variable where it cannot be used. It is baffling how much of this issue is contained in legacy code. - PHP4077 Constant expression contains invalid operations; Parameter default value and property initializers cannot contain certain expressions (like local variables), which is now reported in compile time.
- PHP4076 Default value for parameter type mismatch; Type of parameter default value must match the parameter’s type annotation – the compiler analyzes the types if possible and reports that the code wouldn’t work in runtime.
PCRE
PHP compliant regular expressions are a big deal. They are used widely in frameworks and PHP websites. For example, a regular WordPress website like this one spends over 20% of the time matching some sort of regex.
The benchmark above shows that we improved the performance by about 31%; moreover, it is now 1% faster than .NET Core’s System.Text.RegularExpressions.RegEx, even after their latest huge improvements. A side note – we plan on comparing it to the native PCRE library in some other blog post.
What does this mean? Internally we use a lot less memory, and a website running on top of PeachPie can benefit from about a 6% performance improvement with the current release in comparison to the previous one.
Laravel progress
We’d really love for the core functionality of Laravel to be functional before we launch version 1.0.0, although it’s not necessarily a pre-requisite. Currently we’re down to under 600 errors from originally over 4000 in the Laravel Test Suite, so the progress is rapid and each fix usually removes up to 200 errors. We couldn’t do it without the contributions of Calvin Baart – track his progress here.
So far we have fixed tons of edge-cases with PHP’s specific parameter handling, reflection, and traits. All of this is specific to PHP and implementing it on top of .NET is amusing to say the least. Some fixed issues:
- JIT Compiler encountered an internal limitation
- ReflectionMethod::setAccessible
- ReflectionFunctionAbstract::getParameters returns incorrect values when implicit params is used by the compiler
- overriding with varargs and a different signature causes compiler to crash
WordPress performance and compilation
We’re well aware of the fact that WordPress is by far the most widely used application to play around with using PeachPie, due to its overwhelming popularity. Therefore, we are always working on stabilizing the WpDotNet build, optimizing its compilation and performance. With some of the latest parallelization work, we were able to speed up the compilation time to just under 15 seconds on our machine. You should be able to compile WordPress in under 20 seconds on most PCs. Give the WpDotNet SDK a try if you haven’t already:
>>> WpDotNet SDK <<<
Massive speed improvement of Travis CI build
Even though it’s not something our users will feel directly, this point will really enable us to crank out quicker updates. Thanks to some architectural changes (specifically compiling all our tests together as a single project rather than individually and separately), our Travis CI build time has decreased from over 45 minutes to roughly 7!

Always grab the latest build
Just in case you’re not aware, you are always able to fetch the latest build of PeachPie compiler on our AppVeyor feed, which is graciously provided to us by the .NET Foundation. Grab the most up-to-date version below:
>>> The latest AppVeyor build of PeachPie <<<
Add the following NuGet.Config
file to your project directory in order to consume the AppVeyor feed:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="peachpie-appveyor" value="https://ci.appveyor.com/nuget/peachpie" />
</packageSources>
</configuration>
Don’t waste time on the command line
We sincerely hope you’re not still using PeachPie on the command line. We’ve put a lot of effort into making sure the platform is as user-friendly as possible, and one of the ways we achieve this is through extensions to the most widely used IDEs.
>>> Download the VS Code extension <<<
Aside from simplifying the project setup significantly, the extension also gives you some extremely useful features, such as advanced PeachPie diagnostics, including handy tooltips on hover-over, obviously syntax error underlining and .NET-like debugging of PHP code.