タグ

ブックマーク / blog.r-sky.jp (11)

  • よみがえるQIQ | チラシのうら

    別エントリで実装等について書く前に、これまでの経緯のまとめ。 以前のエントリ で↓のように書いていたのだが、 Scalaライクなミックスイン はエイプリルフールネタです。申し訳ない。 気で取り組みたいですが、なかなか難しいですね。 求む、フルタイムでやらせてくれるお大尽。 プログラミングをしない人にPHPを少しわかりやすくする関数 “not” #phpadvent2012 に触発されて よーし、おじさんnot演算子をZend Engineに追加しちゃうぞー / “プログラミングをしない人にPHPを少しわかりやすくする関数 “not” #phpadvent2012 - 頭ん中” htn.to/HaqbQq 12月 14, 2012と言ってしまい、その流れでphp-srcをforkしてnot演算子を実装したり、until文/unless文を実装したりしているうちに気分がノってきて、Synfo

    よみがえるQIQ | チラシのうら
    koyhoge
    koyhoge 2012/12/21
    動的にミックスインできちゃう。これメインに入らないかなー。
  • PHPエクステンションのリポジトリ始めました - 讃容日記

    長らく放置しておりましたブログとPHP拡張のメンテをぼちぼち再開します。 で、復活第一弾のエントリはPiece Network 3のテーマとして、PHP 5.3のサポートとGitHub/PEARチャンネルの公開をしましたので、そのご報告をば。 現時点ではよく使われているっぽいMeCabエクステンションと Tokyo Cabinetエクステンションを公開しています。他のものも需要がありそうなものから順次追加していきます。 PHP 5.3対応 PHP 5.3から ZEND_BEGIN_ARG_INFO_EX() マクロにstatic修飾子が含まれるようになったため、static ZEND_BEGIN_ARG_INFO_EX(...) としていた箇所が軒並みエラーになっていたので、これを修正しました。 また、php_set_error_handling(), php_std_error_hand

    PHPエクステンションのリポジトリ始めました - 讃容日記
  • QIQの設計と実装 - 讃容日記

    QIQエクステンションがやっていることについて。 PHPというかZend Engineでは、コンパイラとエクゼキュータが関数ポインタになっており、それぞれファイルの内容から実行コードを生成するzend_comiple_file、文字列から実行コードを生成するzend_compile_string、実行コードに対応するハンドラを呼び出すzend_executeが定義されています。また、それらのデフォルト実装としてcompile_file()、compile_string()、execute()があります。 言語としては良いか悪いかは別にして、堅くも柔らかくもない独自のポジションにあるPHPですが、コアのZend Engineはコンパイラやエグゼキュータが差し換えられたり、実行時のフックが追加できたりと、実は拡張性に富んでいるのです。でもマルチスレッドと演算子オーバーローディングだけは勘弁な!

    QIQの設計と実装 - 讃容日記
  • 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にこれまでにない自由さと変態度をもたらします。 RSKit クラスや関数を扱うユーティリティ。 API static public bool RSKit::mixin(string $target_class, string $source_class, ...) $target_classに$source_classのインターフェイス、クラス定数、プロパティ、メソッドをMix-inする。 $target_c

    RSKit 0.2.0: RSKit, Scope, Klosure - 讃容日記
    koyhoge
    koyhoge 2008/01/30
    これは変態だw(褒め言葉)。
  • 続・Zend Engineハック - 讃容日記

    無名関数がかなり使いやすくなりました。高階関数のような記述もできます。 たとえば、これの結果は <?php function($func){ $func('Hello, Anonymous World!'); }(function(){ return function($str){ echo $str, PHP_EOL; }; }()); こうなります。 Hello, Anonymous World!激しく使えるので、英語の壁を乗り越えてphp.internalsに投げたくなってきました。 すべての変更点は以下の通りです。 同じ無名関数を返すステートメントを複数回実行できない問題を修正。 無名関数の生成はコンパイル時の1回だけなのでループ中に書いてもcreate_functionのようにメモリを浪費しない。 無名関数を直接コールできるように改良。 JavaScriptの無名関数のように使え

    続・Zend Engineハック - 讃容日記
    koyhoge
    koyhoge 2008/01/30
  • ムラムラして作った。反省はしていない - 讃容日記

    我が家から直線距離にして約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, sh

    ムラムラして作った。反省はしていない - 讃容日記
  • Zend Engineをハックしてみた - 讃容日記

    勢いに任せてVM・構文解析器・コア関数をハックして以下の機能を実装してみました。 無名関数リテラル (PHPの仕様上、実際は自動で名前が割り振られ、リクエスト終了まで関数は生き続ける) 角括弧による配列リテラル Callable Object php-5.2.5-rsky-071126.patch 最初のリリース。(PHP 5.2.5用パッチ) php-5.2.5-rsky-071126-2.patch 角括弧の連想配列リテラルでは => でなくコロンを使うように変更。 php-5.2.5-rsky-071127.patch 無名関数内で無名関数を定義できなかったのを修正。 php-5.2.5-rsky-071127-2.patch メモリリークを修正。 php-5.2.5-rsky-071127-3.patch ReflectionFunction::exportで落ちるのを修正。 Ze

    Zend Engineをハックしてみた - 讃容日記
    koyhoge
    koyhoge 2007/11/27
    すげえ
  • php_tokyocabinet-0.1.0 - 讃容日記

    php_tokyocabinet-0.1.0.tgz Tokyo CabinetPHPバインディングを作ってみました。 インストールは phpize; configure --enable-tokyocabinet; make; sudo make install と、いつもの手順ですが、configure内でpkg-configを使います。Tokyo Cabinetはバージョン1.0.2以降が必要です。 Mac OS XではTokyo Cabinet, pkg-configともにMacPortsでインストールできます。(databases/tokyocabinet, devel/pkgconfig) API解説 ハッシュデータベースを操作するTCHDBクラス、B+木データベースを操作するTCBDBクラス、B+木データベースの各レコードを順番に参照するためのTCBDBCURクラスがありま

    php_tokyocabinet-0.1.0 - 讃容日記
  • エクステンションでforeachを簡単に書くには - 讃容日記

    PHPCon2007でも少し話したことですが、PHPエクステンションを書くとき、PHPのforeachに相当することをしようと思うとちょっと面倒です。 そこで、IoのLIST_FOREACH/PHASH_FOREACHを真似してforeachを簡単に書けるマクロを作ってみました。 aにハッシュテーブルのポインタ、kにキー(zval *)が代入される変数名、vに値(zval *)が代入される変数名、codeに処理内容を記述します。 #define HASH_FOREACH(a, k, v, code) \ { \ zval **_entry = NULL; \ \ zend_hash_internal_pointer_reset(a); \ \ while (zend_hash_get_current_data(a, (void **)&_entry) == SUCCESS) { \ cha

    エクステンションでforeachを簡単に書くには - 讃容日記
  • 秋のPECLまつり - 讃容日記

    php_qr-0.3.1.tgz php_yaml-0.1.1.tgz php_senna-0.1.0.tgz -> php_senna-0.1.1.tgz (SenRecordsのイテレータとしてのふるまいを修正) php_unichar-0.1.0.tgz php_dcomplex-0.1.0.tgz -> php_dcomplex-0.1.1.tgz (テストケースを追加、他少々) php_opendogs-0.6.0.tgz php_continuation-0.1.0.tgz php_session_hash-0.1.0.tgz 久々にSennaバインディングをアップデートsf.jpで公開されているバージョンではなく、Subversionの開発版が必要です。開発版の取得に関してはSennaのダウンロードのページを見てください。 開発版で実装されている新しいAPI、ql API

    秋のPECLまつり - 讃容日記
  • GDで作成した画像をBMP形式で出力する - 讃容日記

    php_gdextra-0.1.0.tgz GDエクステンションと連携して使う、画像処理のための新作エクステンションです。 表題の機能のほか、ImageMagickを使って読み込んだ画像をGDの画像リソースに変換して返す機能もあります。 PHP5なら素直にimagickエクステンションを使った方が対応フォーマットも機能も多くて良いのですが、既存のコードをなるべく変更することなく多くの画像形式を読み込みたい、またはBMPで出力したい、といったときに有用だと思います。 読み込みにはImageMagickライブラリを、BMPの書き出しには自前のコードを使っています。 インストールはいつもの手順で。--with-wand-configでImageMagickのインストールディレクトリかWand-configのフルパスを指定します。 tar xfz php_gdextra-0.1.0.tgz cd

    GDで作成した画像をBMP形式で出力する - 讃容日記
  • 1