rfc:remove_zend_api
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:remove_zend_api [2009/03/28 12:43] – remove first-published-at pbiggar | rfc:remove_zend_api [2009/04/05 19:33] – linkify pbiggar | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
* Version: 1.0 | * Version: 1.0 | ||
* Date: 2009-03-27 | * Date: 2009-03-27 | ||
* Author: Paul Biggar < | * Author: Paul Biggar < | ||
- | * Status: | + | * Status: |
+ | ===== Introduction ===== | ||
- | A better way to provide | + | This RFC provides |
- | ===== Introduction ===== | + | See also php_native_interface. |
- | ** Naturally, this seems insane. Please bear with me. ** | ||
- | ===== What' | + | ===== Why remove |
=== Zend API === | === Zend API === | ||
Line 19: | Line 19: | ||
The Zend API is a large set of functions, macros and data-structures which are used to interact with the Zend Engine. It serves 3 major purposes, roughly in order of importance: | The Zend API is a large set of functions, macros and data-structures which are used to interact with the Zend Engine. It serves 3 major purposes, roughly in order of importance: | ||
- | * Used to write PHP's standard libraries, 3rd party extensions, and much of PECL | + | * Used to write PHP's standard libraries, 3rd party extensions, and much of PECL. |
- | * Allows hot (performance-sensitive) code to be rewritten in C for speed | + | * Allows wrapping of C/C++ libraries in order to allow the to be accessed from user-code. |
+ | | ||
* Used to embed PHP into within C/C++ applications using the embed SAPI | * Used to embed PHP into within C/C++ applications using the embed SAPI | ||
=== Problems === | === Problems === | ||
- | The main problem with it is that it constrains the implementation of the Zend Engine. By requiring backwards compatability with the Zend Engine, we are ensuring that the ZendEngine | + | The main problem with it is that it constrains the implementation of the Zend Engine. The Zend API creates a tight coupling between the Zend Engine and its clients, restricting greatly our ability to change |
- | The Zend API also makes it difficult to write PHP extensions. Although most of the API is not terribly difficult to work with, concepts like copy-on-write, | + | The Zend API also makes it difficult to write PHP extensions. Although most of the API is not terribly difficult to work with, concepts like copy-on-write, |
- | A number of other PHP implementations exist, such as IBM's Project Zero, Phalanger, Roadsend, Quercus and phc. Many of these projects find it very difficult to re-use PHP's standard libraries. | + | A number of other PHP implementations exist, such as IBM's Project Zero, Phalanger, Roadsend, Quercus and phc. Many of these projects find it very difficult to re-use PHP's standard libraries. |
- | ===== What' | + | * Quercus and Roadsend have reimplemented popular extensions. This means that probably 90% of extensions are unavailable. It also means that future and private extensions cannot be available. |
+ | * Phalanger and Project Zero attempt to re-use | ||
+ | * phc is designed around reusing the Zend API for compatibility with the PHP. This constrains many of the optimizations phc would wish to perform. | ||
+ | A proposed replacement for the Zend API is described in php_native_interace. However, to actually solve this issue, a decision must be made to not only use the PHP Native Interface to provide an interface between extensions and implementations, | ||
- | ===== Project Plan ===== | ||
+ | ===== Project Plan ===== | ||
- | ==== Links ==== | + | This is a simple design. In reality, it would need to be prototyped to determine whether this makes sense for every use case, and that there would be little sacrificed to make it work. The work on it should probably progress in roughly the following order: |
+ | * Follow the Project Plan in [[php_native_interface]] | ||
+ | * Convert all PHP extensions | ||
- | ===== Changelog ===== | + | Naturally, before the last step it will be necessary to get consensus from other internals developers that this is a good idea. |
rfc/remove_zend_api.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1