qiq: immo quo

PHPの壁に当たったとき

  • 素直にそこは代わりのものを使うのがよく訓練されたぺちぱー
  • よーしおじさんextension書いちゃうぞーとなるのがぺくらー
  • 本体へのパッチを書くのが僕
  • パッチがスルーされて切ないのも僕
  • ならば既成事実を作ってやろうとコンパイラを差し換えるzend extensionを作る決意をしたのも以下略


zend extension版はこんな感じになる予定です。

  • zend_complile.c, zend_langage_parser.c, zend_language_scanner.c をベースに独自のコンパイラを作る。
  • 関数ポインタzend_compile_fileとzend_compile_stringを差し換える。
  • do_bind_functionの絡みで、zend_opcode_handlersのZEND_DECLARE_FUNCTION_SPEC_HANDLERに相当する部分を独自のハンドラに置き換える。

グローバル変数の関数ポインタを置き換えるだけだし、ソースコードの99%以上はオリジナルと同じなので、zend extensionでなく普通のextensionでも構わないかもしれません。ということは、実行時に動的にコンパイラを切り替えることも可能な気がしてきました。


ところで、RSKitの次のバージョンでは関数を複製し、スタティック変数の値をアクティブなスコープから取り込むencloseメソッドを実装します。これを無名関数と組み合わせると、疑似的にクロージャが実現できます。

<?php
function f($a, $b)
{
    return RSKit::enclose(function($c){
        static $a, $b;
        $d = $a + $c;
        $e = $b - $c;
        return $d * $d + $e * $e;
    });
}

$f = f(1, 2);
$g = f(3, 4);

var_dump($f(1), $g(1));
var_dump($f(2), $g(2));

結果:

int(5)
int(25)
int(4)
int(29)

ZendEngineでクロージャをサポートしようとすると、コンパイラだけでなく実行エンジンにもかなり手を入れねばならず、仕様も実装もgdgdになりかねないので、拡張モジュールで疑似的なものを実現した方が無難と考えています。

寂寥感

エルゴソフト
egwordegbridge
パッケージソフト事業終了のお知らせ

http://www.ergo.co.jp/news/withdrawal.html

まだインターネット接続がダイヤルアップだったころ、ネットゴーランドのアンケートはがきを送ったらプレゼントに当選してEGWORD PUREをもらって以来、8年間ずっとEGWORD PURE、EGWORDEGBRIDGEを使い続けてきただけに、とても寂しいものがあります。
この発表も予想外でしたが、なにより予想外だったのは自分のヘコみ具合。まださようならは言えないし、ありがとうございましたというのもしっくりこない。どうしたものか。

RSKit 0.2.0: RSKit, Scope, Klosure

php_rskit-0.2.0.tgz
RSkit::mixin()で任意の数のクラスを一度にMix-inできるようにしたり、ScopeクラスにcallメソッドとcallWithArgumentsメソッドを追加したほか、実験的な抽象クラス“Klosure”を追加しました。
また、Scopeクラスでinclude_pathが指定できないバグを修正しました。
runkitと併用すればPHPにこれまでにない自由さと変態度をもたらします。

続きを読む

ムラムラして作った。反省はしていない

我が家から直線距離にして約500km離れたサイボウズ・ラボでPHP拡張勉強会が行われている最中、Twitterとかid:shimookaさんの実況中継とか尾藤さんのUstream(主に音声)だけでは飽き足らず、自分も書いた。
PHPの配列操作関数は破壊的なものばかりなので、非破壊的な関数群を実装。やってることはcall_user_function_ex()でarray_shift()やらsort()やらshuffle()を呼んでるだけ。


実装した関数: array_poped, array_pushed, array_shifted, array_unshifted, sorted, ksorted, asorted, rsorted, krsorted, arsorted, usorted, uksorted, uasorted, natsorted, natcasesorted, shuffled


ダウンロード:

Final App Added to MacHeist Bundle

MacHeistに14番目のアプリケーションが追加されました。
VectorDesignerPixelmatorPhotoshopオルタナティブなら、こちらはIllustratorオルタナティブですね。Canvasがバージョン11からWindows専用になってしまった今、これは貴重。
僕はちょうど、どのアプリも持っていなかったので、Pixelmatorがロック解除される前に(解除を見越して)買ったのですが、これはすごい品揃え。1passwordはさっそく活躍してくれているし、Snapz Pro Xもスクリーンキャストに使えるし、その他も良さげ。
VectorDesignerのロックが解除されると嬉しいし、紹介ボーナスのLaunchBarも欲しいなあ、ってことで、https://www.macheist.com/buy/invite/96044 ←このリンクから買ってもらえると助かります。

TextMateネタでLT希望

1月31日木曜日、大阪の心斎橋でPHPの勉強会をやってみたいと思います。id:ku-sukeが中心となり参加者と発表者を募集しています。初回なのでPHP初級者や他の言語を普段利用してるプログラマの方、 デザイナの方を主な対象に考えています。

2008-01-20

Event Entry::PHP勉強会 at 大阪
イベント内容
大阪の心斎橋でPHPの勉強会をやってみたいと思います。
id:ku-sukeが中心となり参加者と発表者を募集しています。
初回なのでPHP初級者や他の言語を普段利用してるプログラマの方、
デザイナの方を主な対象に考えています。

PHP勉強会 at 大阪 - events.php.gr.jp

ということなので、まだ枠が空いていましたら、LTで参加したいと思います。
場所が場所だけに、ひとつMacネタで「TextMatePHPプログラミング (仮)」を発表したいなと。
ちなみにまだTextMateを使い始めたばかりなのでディープな使いこなしは紹介できません。><