rubyに関するtaniminaのブックマーク (6)

  • Rubyで作る奇妙なプログラミング言語 ~ヘンな言語のつくりかた~

    関連サイト書の関連ページが用意されています。 Rubyで作る奇妙なプログラミング言語 ~ヘンな言語のつくりかた~ | マイナビブックス※受注生産にて紙版も販売しています。 内容紹介あなたは「+-><.,[]」の8つの記号しかないプログラミング言語や、空白だけで構成されるプログラミング言語があるのをご存じだろうか。書では、そんな奇妙な言語(Esoteric Language)を題材にプログラミング言語の作り方を解説する。 プログラミング言語の未知の世界に触れてみたいあなたに。また、Rubyプログラムを書く際の慣習やテクニックについても触れられているため、Ruby学習者の「2冊目の」にも。 【注意】書は2008年12月に刊行された『Rubyで作る奇妙なプログラミング言語』を元にした復刻版です。基的に書籍中の情報は、原著発行時のものですので、ご注意ください。 書誌情報 著者: 原 悠

    Rubyで作る奇妙なプログラミング言語 ~ヘンな言語のつくりかた~
    tanimina
    tanimina 2014/01/15
    自作言語処理系のテストはどう書くかも説明してほしかった、というのが紙書籍版を読んだときの感想
  • ファーストクラスオブジェクトとしてのメソッド - 世界線航跡蔵

    Rubyと高階関数 : 関数そのものがファーストクラスではない やー、Rubyのメソッドはファーストクラスですよ。返り値にできて、変数に格納して演算できて、引数にできるという意味では。 確かに、RubyPythonJavaScriptやSchemeに比べると高階関数を陽に使うプログラミング *1 は不格好になる。Pythonなら簡単なのに、 bound_function = obj.hoge bound_function(arg1, arg2, arg3) Rubyは余計なメソッド呼び出しがくっついて不格好だ。 method = obj.method(:hoge) method.call(arg1, arg2, arg3) 私もこの点が気にくわなくてまつもとさんに「メソッドがファーストクラスだったらいいのに」と言ったことがある。でも、まつもとさんの考えではすでにファーストクラスというこ

    ファーストクラスオブジェクトとしてのメソッド - 世界線航跡蔵
  • Ruby の例外クラスは分類が粗すぎる or 細かすぎる - まめめも

    と思いません? def foo(x) end foo(1, 2) #=> wrong number of arguments (2 for 1) (ArgumentError) 1.step(10, 0) { } #=> step can't be 0 (ArgumentError) a = []; a << a a.flatten #=> tried to flatten recursive array (ArgumentError) 確かにどれも Argument に関する Error ではあるんだけど *1 、全部同じ例外クラスというのは粗すぎですよね。メッセージ読めば意味はわかるからデバッグには困りませんが、ArgumentError の中の特定の例外だけ拾いたいときに困ります。 具体的には、テストです *2 。例えば foo(1, 2) で wrong number of arg

    Ruby の例外クラスは分類が粗すぎる or 細かすぎる - まめめも
  • yarv-dev:268

    tanimina
    tanimina 2010/02/20
    rubyの多値についてのスレッドの始まり
  • WEBrickを使うためのメモ - 再帰の反復blog

    WEBrickは、HTTPサーバを簡単に作ることができるライブラリらしい。 しかし「じゃあ簡単に作ってみよう」と思ってRubyのマニュアルのWEBrickの部分を見ても、まったく要領を得ないので、使うためのメモを書いておく。 HTTPServer 簡単なHTTPサーバ サーバがおこなう仕事を設定する (+ FileHandlerの使用例) マウントで仕事を分ける (+ CGIHandlerの使用例) テスト用Webサーバとして使う 自前のサーブレット(ハンドラー)を定義する GenericServer HTTPProxyServer HTTPServer まず標準リファンレンスは次 Rubyリファレンスマニュアル library webrick/httpserver 簡単なHTTPサーバ とりあえずぜんぜん役に立たないHTTPサーバを作ってみる。 HTTPサーバの仕事は、クライアントからの

    WEBrickを使うためのメモ - 再帰の反復blog
  • 2008-04-17

    callcc と shift/reset についてわかるとこだけ書いてみます。 継続 callcc という操作は、現在から実行終了まで、継続をまるごと取り出します。例題。 p [1] + callcc {|k| [2] + k.call([3]) } #=> [1, 3] callcc では callcc がリターンしてから実行終了するまでの継続 k が取り出せます。k.call([3]) で継続が呼ばれると、いきなり「callcc が [3] を返した瞬間」に実行が飛びます。つまりこんな感じ。 p [1] + [3] あとは自明ですね。"[2] +" のあたりは無視されます。 部分継続 shift という操作は、現在から reset まで、継続の一部だけを取り出します。この継続の一部を部分継続といいます。例題。 p [1] + reset { [2] + shift {|k| [3] +

    2008-04-17
  • 1