PHP7.4の新仕様 FFI,Foreign Function Interface について。Python的な…。
PHP7の時点で既にバイトコードになっていてPHP8からJITによるネイティブ化だったような。
PHP5.xから7.0で劇的に速くなった記憶があり、速度を追求するような機運があるのは確か。
投票システムの不備で”賛成24、反対15,過半数越えだから採択”みたいになり、
その後過半数から2/3に更新された、という経緯から、望まれない仕様なのは確かそう。
WordPressが速くなるのは嬉しいけども不毛すぎ..。
脱PHPが必要。
FFI is one of the features that made Python and LuaJIT very useful for fast prototyping. It allows calling C functions and using C data types from pure scripting language and therefore develop “system code” more productively. For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php / create FFI object, loading libc and exporting function printf() $ffi = FFI::cdef( "int printf(const char *format, ...);", // this is regular C declaration "libc.so.6"); // call C printf() $ffi->printf("Hello %s!\n", "world"); // create gettimeofday() binding $ffi = FFI::cdef(" typedef unsigned int time_t; typedef unsigned int suseconds_t; struct timeval { time_t tv_sec; suseconds_t tv_usec; }; struct timezone { int tz_minuteswest; int tz_dsttime; }; int gettimeofday(struct timeval *tv, struct timezone *tz); ", "libc.so.6"); // create C data structures $tv = $ffi->new("struct timeval"); $tz = $ffi->new("struct timezone"); // calls C gettimeofday() var_dump($ffi->gettimeofday(FFI::addr($tv), FFI::addr($tz))); // access field of C data structure var_dump($tv->tv_sec); // print the whole C data structure var_dump($tz); |