Zitat von jonofe
Beitrag anzeigen
gaert
Hallo zusammen,
ich möchte mich nun nach einiger Zeit mit einer kleinen Überraschung zurückmelden: bcgen

https://github.com/nanosonde/bcgen
bcgen ist kein direkter bcompiler Ersatz, sondern ein komplett neuer Bytecode-Generator.
Nachdem mein erster Versuch, bcompiler fit für PHP7 zu bekommen, nicht erfolgreich war in Bezug auf komplexe Skripte mit OOP usw., habe ich ein ganz neuen Ansatz gestartet. Zwischenzeitlich hatte ich auch Kontakt mit einem Autor des bcompiler. Er hatte leider kein Interesse mehr daran, irgendetwas bei bcompiler weiterzuentwickeln.
bcompiler selbst basierte ja auf dem alten APC (Advanced PHP Cache). Er hat mich bestärkt, es mit OPcache zu versuchen.
bcgen basiert auf dem aktuellen Source Code von OPcache (bcgen Code Stand heute ist PHP-7.2.6, im master-branch ist auch schon eine Version für die kommende PHP-7.3 Version, dort sind aber noch nicht alle Änderungen vom bcgen-7.2.6 enthalten. bcgen-7.2.6 ist derzeit meine Arbeitsversion.)
Es ist quasi eine Abwandlung von OPcache mit der Einstellung "file_cache_only".
Das Gute ist, dass OPcache von Zend selbst gepflegt wird. So muss man also nur OPcache im Auge behalten und schauen, ob sich etwas an der Serialisierung/Deserialisierung der PHP-internen Strukturen geändert hat oder nicht.
Ich habe alle Testcases von bcompiler übernommen und ein wenig angepasst, da die Fehlerausgabe bei PHP7 jetzt etwas anders aussieht.
Alle bcompiler Testcases laufen mit PASS durch.
Getestet habe ich bcgen bisher mit PHP-7.2.5 unter Debian Stretch amd64, Raspian Stretch armhf und einem Debian Stretch arm64 für den Raspberry Pi 3.
Vorkompilierte Skripte mit bcgen auf einem PC liefen auch auf dem ARM64 Debian des RPi3.
Man muss sich allerdings für eine Architektur entscheiden: 32-Bit oder 64-Bit.
Vorkompilierte Skripte laufen nicht auf beiden Architekturen gleichzeitig. Die Serialisierung/Deserialsierung der entsprechenden Datentypen ist da leider nicht so flexibel. Manche sind halt entweder 4 Bytes lang (32-Bit) oder aber eben 8 Bytes lang (64-Bit). Das wollte ich auch erstmal nicht umbauen, da der Code sich dann von der OPcache Vorlage entfernt.
Ein Skript, das bcompiler zum Vorkompilieren benutzt, muss ein wenig geändert werden.
Aus
PHP-Code:
$fh = fopen("example.phb", "w");
bcompiler_write_header($fh);
bcompiler_write_file($fh, "example.php");
bcompiler_write_footer($fh);
fclose($fh);
PHP-Code:
bcgen_write_file("example.php", "example.phb");
bcgen wird wie OPcache geladen über zend_extension=bcgen.so.
In der php.ini sollte dann noch mind. der Eintrag
HTML-Code:
[bcgen] bcgen.enable=1
Ich würde mich freuen, wenn gaert mir mal eine mit bcgen kompilierte Version von Edomi unter einem 64-Bit Linux zur Verfügung stellen könnte, damit ich weiter testen kann.
Jedenfalls gibt es jetzt den Grund "bcompiler' nicht mehr...

Kommentar