タグ

ブックマーク / www.todesking.com (4)

  • Rubyで高速にパターンマッチするgemを作った - TODESKING

    Ripperの出力とかParseletの解析結果などを扱うのに、ArrayやHashでパターンマッチして中身を取り出す処理を多用する必要があったのでパターンマッチライブラリを作りました。 GitHub: todesking/patm 同様のライブラリとしてはpattern-matchがあります。 機能面ではpattern-matchのほうが豊富ですが、PATMは高速なのが売りです(DSLによるメソッド定義を使用した場合、ネイティブRubyコードにコンパイルされるため50倍くらい速い。case式内で使用した場合でも7倍程度)。ベンチマークについてはこの記事の下のほう参照。 主な機能 DSLによるメソッド定義 extend Patm::DSL することで define_matcherを使ったメソッド定義が可能です。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

  • Rubyのローカル変数をシンタクスハイライトするVimプラグインを書いた - TODESKING

    Rubyはローカル変数への参照と無引数のメソッド呼び出しを同じ記法で書けるので、コードを読むときに混乱したりtypoでNoMethodErrorを出してがっかりすることが多々あります。 幸いなことにこれらは静的に解析することができるので、ローカル変数への参照を色付けするVimプラグインを書いた。 Github/ruby_hl_lvar.vim すごく便利な気がする!!!!!!! Rubyインタフェース(>=1.9)が有効になったVimが必要なのでご注意ください。MacVim 7.4 KaoriYa 20140107で動作確認しました。 しくみ Ruby1.9以降に標準添付されているripperというライブラリで、Rubyの構文解析をしてローカル変数への参照を取り出しています。 require 'ripper' Ripper.sexp(<<EOS) a = 10 b = 20 c = a +

    Rubyのローカル変数をシンタクスハイライトするVimプラグインを書いた - TODESKING
    tanakaBox
    tanakaBox 2014/05/04
    面白い。
  • jsscheme test

    Tiny Scheme implementation with javascript description 言語開発合宿で作成した、Scheme(的なもの)のjavascript実装です。 継続と末尾再帰最適化まで実装しました。継続のほうは当に仕様を満足しているかどうか不安ですが。 マクロは、ありません 詳しい説明はblogのほうに。 features parse SExpr variable reference create/call closure tail-call optimization continuation quote ('expr) , dotted pair( (x . y) ) , comment( ;; ) etc is not supported. console hold log Examples basic operations 1 (define x 1

    tanakaBox
    tanakaBox 2010/01/06
    JSでScheme。末尾再帰の最適化と継続付。あとで読むべ。
  • 図形言語(Picture Language) on browser

    図形言語 On Browser SICP 2.2.4の図形言語(picture language)をブラウザ上に実装したものです。 Opera 9.27,Firefox 2.0.0.14にてテストしました。残念ながらIEでは動きません。 Firefoxの場合ロード中に固まりますが、仕様です。Scheme処理系の速度はそう速くないため、高速なマシンが必要かもしれません。 Examples ; だいたいSICPのサンプルに準じてるはずです ; 基要素 (draw wave) (draw triangle) ; 変形 (draw (flip-vert triangle)) (draw (flip-horiz wave)) ; 合成 (draw (beside wave triangle)) (draw (below wave triangle)) ; 繰り返し (draw (corner-sp

    tanakaBox
    tanakaBox 2010/01/04
    便利な時代になったなぁ。
  • 1