いうディレクトリがある。ここを見ると、Cのファイルなどがある。この辺のコメントを読むとわかるが、これは実際にはMongrel)を少し改変したものである。それっぽいコードがある。:}さて、RubyでCを動かす際のルールはどこを見ればよいか。https://silverhammermba.github.io/emberb/extend/ビルド方法についてはスキップするとして、Initの章をみる。require時は上記のコードが呼ばれ、この中でexecuteメソッドが定義される。するということである。この関数を見に行けば良い。DATA_GETでhttp_parserのポインタを取得していて、http->dataに対してreq_hashを代入している。parser.cにある。gotoおよびラベルが存在し、到底読解不能なので、機械的に生成されたファイルだと予想できる。パーサなので、パーサジェネレータで文法ファイルから作ったのだと分かる。*5実際、parser.rlやparser_common.rlというそれらしいファイルがあるので、そこから作るのだろう。作り方は今はどうでも良い。対する操作を見つければ良い。Formであるとおおよそイメージできる。指定されていると予想できる。:とあり、アクションの中身が書いてある。よってファイナライズされているようである。@envに書き込まれている。以上のことをまとめると、ヘッダをパースしている時に、@envにキーを正規化して追加しているとわかる。なっているということである。hello'としてみる。探検は終わりそうもない。日帰り予定なので、この辺で帰ってくることにする。Rackで行われることの全体感が大体わかり、更にいくつかの副産物が得られた。ように、文字列引数からクラスを取得するデザインパターン高速に処理したい部分でCのプログラムに橋渡しするスタイル久しぶりにCを読むことで脳トレみなさんも良い探検を!*1:要するにlib以下をrequireで取れるようにするために書いている。これがないとうまくいかないのかと言うと、サーチパスの他の場所にrackがいれば、それを見ることが出来るので無くても立ち上がってしまうかもしれない。$LOAD_PATHで確認できる。$:'と書いて確認できる。-Ilib無しで、もし立ち上がってしまったのなら、cloneしたファイルを読んでいない。本当にそうだろうか、確認するにはどうする?*2:なのに何故あるのか。LambdaLobsterを調べてみよう。String>)という型のように読み取れる。いう形のテストケースがある。Procであってもrackのスタックに追加できるということを検証するためにLambdaLobsterが存在している。Procオブジェクトはcallで呼び出すことが出来る!*3:この文脈からおそらくミドルウェアとは、appを用いてappを構成するもの、つまり、Rack::ShowExceptionsやRack::Lintのことである。environmentオプションに応じて、ミドルウェアと呼ばれるものを繋げている。C]が見つかれば、A.new(B.new(C.new(app)))にしてくれる。すれば、Rack::ShowExceptionsやRack::Lintは自動的に入るようになっている。それを確認するには・・?*4:メソッドの意味を掴みたい時は、下から読むのがおすすめ。*5:パーサ(構文解析器)は普通、パーサジェネレータというものを使って文法ファイルから生成する。HTTPヘッダも、送られてきたものは文字列なので同じことを行うということだ。構文解析はコンパイラを作ったりしたことがあるなら必ず通る道なので、興味がある人は調べると良い。»Author大学院で数学とか型理論とか定理証明支援系をやっていました。11歳ごろにチャットサイトをクラッキングしてWebを独学で勉強したりしていました。読者になる@mizukami234をフォローこのブログについて引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。