hnwの日記

PHP

拡張モジュール作者だけが知っているPHPのconfigureオプション

PHP

このエントリは闇PHP Advent Calendar 2015の1日目です。ここでの「闇PHP」はPHPのC言語レイヤの話題という意味で使っています。 そもそも、このAdvent Calendarは第六回闇PHP勉強会を開催する直前の変なテンションで作られたものです。25枠全部が埋まるとは…

php-buildが便利だという話を補足します

PHP

php-buildについて、先日のPHP BLT #1で下記のようなLTをしました(発表時のものに追記してあります)。 とはいえプレゼンだけでは伝わらない内容もあったと思うので、補足する内容を書きます。 独自のdefinitionファイルをどう作るか php-buildでは独自のde…

第六回闇PHP勉強会の発表資料まとめ

PHP

昨日11/22(日)に第六回闇PHP勉強会が開催されました。PHPの勉強会なのにPHPのコードが全部で10行も登場しないという毎度おなじみの展開でしたが、たくさんの方にご参加頂きました。本当にありがとうございました。 では、発表を順に紹介します。 @hnw 「OPca…

11/22に第六回闇PHP勉強会を開催します&発表者募集中です

PHP

先日、闇PHP勉強会を立ち上げたanatooさんから勉強会の幹事を引き継ぎました!僕自身が非常に楽しみにしていた勉強会だったので気軽に幹事を引き受けたものの、勉強会をメインで仕切るのは初めてなのでドタバタしているところです。そんなこんなで、まずは11…

MacOSX上のPHP 7.0.0RC5+OPcacheでエラーが出る件の対策

PHP

MacOSX環境でPHP 7.0.0RC5をビルドしてphpコマンドを動かしたところ、下記のようなエラーが出ました。 dyld: lazy symbol binding failed: Symbol not found: _accel_move_code_to_huge_pages Referenced from: /Users/hnw/.phpenv/versions/7.0.0RC5/lib/ph…

第94回PHP勉強会で拡張モジュールのPHP7対応について発表しました

PHP

10月1日に開催された第94回PHP勉強会で発表してきました。以下が発表資料です。 内容としては、PHP拡張モジュールのPHP7対応を独自調査してみたよ、というものです。「Extensions Catalog」と重複する部分もあるのですが、対応済みのはずがPHP7の最新RCだと…

Language Update PHP編(LL Ring Recursive補足)

PHP

昨日9/5にLL Ring Recursiveの「Language Update」で登壇(リングイン)してきました。毎回他の言語の近況が聞けるので観客として楽しみなコンテンツという印象ですが、いざ自分が発表者側に立つと大したことが言えなかった気がして一人反省会中です。 とい…

Developers Summit 2015 KANSAIでもPHP7について発表してきました

PHP

9/4に神戸で開催されたDevelopers Summit 2015 KANSAIにて登壇いたしました。発表資料は以下になります。 PHPカンファレンス関西2015でも近い内容でお話ししたのですが、そのときは性能改善まわりの情報を十分に伝えられなかった、という反省がありました。…

PHPカンファレンス関西2015でPHP7について発表してきました

PHP

去る5/30にPHPカンファレンス関西2015で基調講演をさせていただきました。今回は長い枠だったのもあって資料準備にかなりの時間をかけました。その甲斐あってか、好評だったようで何よりです。発表資料は以下になります。 質疑応答やその他の反応について補…

PHP7で変わること

PHP

次の土曜日5/30のPHPカンファレンス関西2015で基調講演(10:30-11:15)をさせて頂くことになりました。タイトルは「PHP7で変わること——言語仕様とエンジンの改善ポイント」です。チケットは既に売り切れているそうですが、参加者の方は早起きして来て頂ける…

PHPで巨大な整数をカンマ区切りするのにnumber_format関数は使えない

PHP

PHPには、数値を3桁区切りで表示するための組み込み関数としてnumber_format()が用意されています。 number_format — 数字を千位毎にグループ化してフォーマットする string number_format ( float $number [, int $decimals = 0 ] ) http://php.net/manual/…

PHPのJSONライセンス問題が一応決着

PHP

2012年頃に、PHPのJSONエクステンションのソースコード中に次のようなライセンス文言が含まれていると話題になりました。 The Software shall be used for Good, not Evil. これはJSONライセンスと呼ばれるライセンスの一文です。「このソフトウェアを良いこ…

PHP 5.4.0から無限大==無限大になってた

PHP

本日はエイプリルフールなので、嘘でも本当でも誰も困らないネタを紹介します。 内容としてはタイトルの通りで、浮動小数点数の無限大とマイナス無限大に関する==の挙動がPHP 5.3.xまでとPHP 5.4.0以降で変わっていたという話題です。 $ php-5.3.29 -r '$x=I…

Javaで書かれたPHP処理系のJPHPが高速だった

PHP

JPHPというJavaで書かれたPHP処理系があります。これは2013年10月にはじまった新しいプロジェクトで、大半をメイン開発者一人で開発しているようですが、既に一定以上の完成度です。また、内部的にはPHPファイルを解釈して直接Javaバイトコードにコンパイル…

PHPのJava実装であるQuercusをCLIで動かしてみた

PHP

今日は有名PHP実装の一つであるQuercusを紹介します。これはJavaサーブレットコンテナResinを開発しているCaucho社が開発しているもので、当然のことながらJava環境で動作します。既存のPHPコードを動かすのにJava環境のノウハウや資産が生かせれば良いとこ…

MacOSX上で.NET環境向けPHPコンパイラPhalangerを動かしてみた

PHP

(1/7 追記)ベンチマークテスト結果が不正確だったので、再測定して書き直しました。以前の記事よりもPHPの結果が良くなっています。 あけましておめでとうございます。このたび、gihyo.jpの新春特別企画として記事「PHP処理系の未来」を寄稿いたしました。…

PHPを高速化するRecki-CTとは一体何なのか

PHP

@ircmaxellさん作の「Recki-CT」を試してみたので紹介します。作者によるブログ記事「ircmaxell's blog: Introducing Recki-CT」によれば処理によってはHHVMやHippy VMより速いらしいのですが、この記事だけでは詳細がよくわからずモヤモヤしていました。今…

PHPのlibjitバインディングであるJIT-Fuを試してみた

PHP

@krakjoeさんが作っているPHPエクステンションのJIT-Fuを試してみました。これはGNUのJITコンパイラライブラリlibjitをPHPから使うためのものです。 インストール READMEの「Installation Instructions」に書いてある通りにlibjitとJIT-Fuをインストールしま…

第85回PHP勉強会でPHP7について発表してきました

PHP

12月24日に開催された第85回PHP勉強会で発表してきました。以下が発表資料です。 プレゼンの内容としては以前の記事「PHP7はなぜ速いのか(zval編)」の補足説明と、zend_stringとHashTableの改善について紹介するようなものでした。 僕自身まだ理解不足のと…

PHPPHPがド変態であることに今さら気づいた

PHP

Anthony Ferraraさん(@ircmaxell)が2012年12月に公開したPHPで記述されたPHP実装「PHPPHP」について、今さらですが調べてみました。 @ircmaxellさんはPHPの内部構造についての解説サイト「PHP Internals Book」の筆者の一人であり、PHP 5.5で導入された新…

整数型のコピーオンライトは本当に遅いのか実験してみた

PHP

前回記事「PHP7はなぜ速いのか(zval編)」ではPHP7から内部的なデータ構造が大きく変わるという話題に触れました。具体的には、PHP5では全ての型の変数についてコピーオンライト方式を採用していたこと、この方式はデータサイズが大きいときに有効であるこ…

PHP7はなぜ速いのか(zval編)

PHP

この記事はPHP Advent Calendar 2014の7日目です。 僕は先日のPHPカンファレンス2014でPHP7に関するLTをしました(参照:「PHPNGの動向」)。ただ、時間が限られていたこともあり、あまり踏み込んだ内容には触れませんでした。 本稿ではLTの内容から深掘りし…

PHP 5.5.0でイースターエッグが廃止されていた

PHP

PHPユーザーの皆様に悲しい(?)お知らせです。PHPのオシャレ機能として有名なイースターエッグがPHP 5.5.0で廃止されていました。 そもそもPHPのイースターエッグって何よ?という方のために説明しておくと、PHP 5.4までは任意のPHPページのURL末尾に特定の文…

HHVM 3.3.1とPHP 5.6.2の==の違いを調べてみた

PHP

(11/15 16:15追記)本稿で指摘している違いの1件目についてバグレポを書いたところ、すぐ直すよーとのことでした。(11/18 17:30追記)上記修正がmasterブランチに取り込まれていることを確認しました。 PHPのJITコンパイラ実装であるHHVMが最近話題ですね…

APCuは速いけど初期設定がイマイチだというお話

PHP

ISUCON本戦で惨敗してきた皆さんこんにちは。昨日のやけ酒は最高でしたね!今日はISUCON予選のときに気づいたAPCuのイマイチな点を紹介します。 APCuというのはPHP extensionで実装されているKVS(Key Value Store)で、localhost内でのデータキャッシュに利…

PHP7で導入予定の新しいメモリマネージャをPHP5.6にバックポートした

PHP

現在、PHPの開発ブランチでは次期バージョンであるPHP7.0の開発が進められています。この新バージョンでは内部のリファクタリングと性能改善に重点が置かれるとみられており、言語仕様の観点ではメジャーバージョンアップの割に変化の小さいバージョンになり…

PHPカンファレンス2014でPHPNGのLT発表をしてきました

PHP

(12/4 追記)「さらに深掘りしたい方のために」の内容が嘘だったので書き直しました。immutableがどうこうと書いていたのですが、完全に勘違いしていました。 10月11日に開催されたPHPカンファレンス2014でLT発表してきました。以下が発表資料です。 5分で…

PHPでAPC/APCuのCAS機能を使うときの注意点

PHP

PHPのAPC/APCuエクステンションをKVSとして使うときの話題です。 APC/APCuにはCAS(楽観ロックに基づくアトミックな値の書き換え)の関数として次の3つが用意されています。 apc_cas ― 古い値を新しい値に更新する apc_inc ― 保存した数値を増やす apc_dec ―…

PHPでHTTPの並行ダウンロードを実現する(Guzzle編)

PHP

PHPで最近注目のHTTPクライアントライブラリにGuzzleがあります。日本での知名度はまだまだという印象ですが、かなり高機能かつ真面目にメンテナンスされている印象で、今後のデファクトスタンダードになりうるライブラリと言えるでしょう。 本稿ではこのGuz…

PHP 5.4.4から==の挙動が一段と難しくなりました

PHP

PHPの==は両辺を適当に型キャストしてから比較するような演算子です。この型キャストの規則は難解すぎる上にドキュメントも不十分なため、PHPプログラマでも完璧に理解している人はほとんど居ないくらいの印象です。バグの原因になりかねないため、なるべく=…