====== PHP RFC: Better type names for int64 RFC ====== * Version: 0.9 * Date: 2014-08-22 * Author: Nikita Popov * Status: Under Discussion ===== Introduction ===== The [[rfc:size_t_and_int64_next|int64 RFC]] introduced a number renames for common types, macros and zpp specifiers, which are both unnecessary and confusing. This RFC proposes to revert the bulk of these renames and use a naming scheme that is consistent with our original types and the terminology used by the C community at large. The most significant naming changes introduced by the int64 RFC are: * ''zend_int_t'' and ''zend_uint_t'' are the new 64bit-on-64bit-platforms types. * ''IS_LONG'' is changed to ''IS_INT'', ''Z_LVAL'' to ''Z_IVAL'', etc. * ''Z_STRLEN'' is changed to ''Z_STRSIZE'' * ''zend_parse_parameters'' uses ''i'' and ''I'' instead of ''l'' and ''L''. These changes are disapproved of for the following reasons: * These naming changes serve no purpose and will only create additional headaches when porting code to phpng or merging between branches. * There now exists a ''zend_int_t'' type (which is a 64bit-on-64bit type) and ''zend_int'' (which is a 32bit type). Apart from the ''_t'' suffix the name is the same, but the meaning is totally different. * PHP and the Zend Engine do not use ''_t'' suffixes for types. This introduces a new type naming convention that is not used anywhere else. (Probably this is done to avoid clashing with the previous point.) * Furthermore all types ending in ''_t'' are reserved by the POSIX standard. * Using the term ''int'' for an 64bit type goes against the normal expectations of a C programmer (ILP64 systems are rare). The meaning of the ''zend_int_t'' type is much closer to the ''long'' type. Instead the following alternative naming is proposed: * Retain ''zend_int'' and ''zend_uint'' as 32bit types (same as 64bit RFC) * Use ''zend_long'' and ''zend_ulong'' as the 64bit-on-64bit-platforms type. As such this type stays the same as previously, with the tweak that it will be 64bit on LLP64 platforms as well. * Revert all type/macro/zpp renames, like ''IS_INT'', ''Z_IVAL'', ''Z_STRSIZE'', ''i'', ''I'', etc. The original names will be used instead. ===== Patch ===== As this is just search&replace renaming a patch will be provided once we have reached a descision on naming.