ワナビーエンジニアのブログ

なんでもいいから文化的な生活を送りたい

Ruby

Rubyのconfigure.in読んでみる(2)

前回に続いてconfigure.inを見ていきます。 ①初期処理部分 AC_INIT() { AC_CONFIG_AUX_DIR(tool) AC_PREREQ(2.67) AC_DEFUN([RUBY_PREREQ_AC], [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), [-1], AC_MSG_ERROR([Autoconf version ]$1[…

Rubyのconfigure.in読んでみる(1)

以前はRubyのメソッド呼び出しについて調べましたが、 ふとRubyのビルドの仕組みが気になったので追っていきたいと思います。 Rubyのビルド Ruby(MRI)のビルドには以下のコマンドを実行しています。 % autoconf #=> configure.inを元にconfigureを作成する %…

Rubyのメソッド呼び出しの流れ(4)

前回の続き。今回はまず構造体の構成を確認していきます。 &me->def->body.cfuncのあたりです。 meというのはrb_callable_method_entry_t型ですが、このmeは見覚えがあって、send関数で使用しているrb_call_cache構造体のメンバとなっています。 240struct r…

Rubyのメソッド呼び出しの流れ(3)

前回からの続き。 rubyのメソッドのタイプをみていきます。 method.hのrb_method_type_tです。 100typedef enum { 101 VM_METHOD_TYPE_ISEQ, // ユーザー定義は基本これ 102 VM_METHOD_TYPE_CFUNC, // 組み込みメソッドはこれ 103 VM_METHOD_TYPE_ATTRSET, 1…

Rubyのメソッド呼び出しの流れ(2)

前回からの続き、rb_call_cache構造体を見ていきます。 コードの後に説明書くと分かりにくかったので、行ごとにある程度コメントを書いてみます。 rb_call_cacheはvm_core.hにあります。 237struct rb_call_cache; 238typedef VALUE (*vm_call_handler)(stru…

Rubyのメソッド呼び出しの流れ(1)

Rubyの#13053を読んでみる(1)から見ていった中で、 rubyでArray#select!を書いた後に、どうのようにrb_ary_select_bangが呼ばれているのか気になったので見ていきます。 (現在 svnのrevisionは57251) 以下、RubyのしくみとYarvManiacsを参考に、内容を咀嚼し…

Rubyの#13053を読んでみる(3)

前々回、 前回でlen[0]、len[1]が明らかになったので、select_bang_ensureをみていきます。 修正前コード static VALUE select_bang_ensure(VALUE a) { volatile struct select_bang_arg *arg = (void *)a; VALUE ary = arg->ary; long len = RARRAY_LEN(ary…

Rubyの#13053を読んでみる(2)

前回に続いてrb_ary_select_bang()を読んでいきます。 忘れた方も多いと思いますがArray#select!のことです。 rb_ary_select_bang()を読む static VALUE rb_ary_select_bang(VALUE ary) { struct select_bang_arg args; RETURN_SIZED_ENUMERATOR(ary, 0, 0, …

Rubyの#13053を読んでみる(1)

前回のあと、しばらくしてsvn updateし直してからmakeしてみたところ無事rubyのビルドが成功しました。やはり単に最新のrubyを使うだけでいろんなバグが踏めそうです。(普通にrubyを使うにはそれが目的でないとは無いと思いますが) Issue読んでみる さて、…

rubyに貢献してみる(ことを目指す)

タイトルの通りワナビー脱却を宣言してみます。 rubyの実装になんとなく興味があるのでrubyに貢献することを目指します。 ウデマエ githubの使い方がなんとなく分かって、ruby-buildのコメントをちょっといじれたレベル。 github.com でもこれで貢献というの…

rubyではreturn書かないと思いますが

前回アンケートに参加していただいた方ありがとうございます。 私の不徳の為すところでで母数はなんともですが、47%の人がvoid関数の最後にreturnを書き、残り53%の人が書かないということがわかりました。 まじかよ まさかのほぼ同数。 ぶっちぎりでreturn…

RubyKaigi 2016(3日目)

3日目 最終日です。 ポケGoしながら行ったけど特になんもでなかったな京都・・ 今更貼りますがscheduleから発表資料みれます。 rubykaigi.org Ruby Committers vs the World / commiters vs the Worldとは銘打っておりますが、回線の都合で会場のみ。 京都国…

RubyKaigi 2016(2日目)

2日目 9/9は救急の日 Fearlessly Refactoring Legacy Code / @searls refactoringするためにsutureというgemを作った話。 gem install sutureでinstallできる。 GitHub - testdouble/suture: A Ruby gem that helps you refactor your legacy code なんだか…

RubyKaigi 2016(1日目)

RubyKaigi 2016に行ってきました。初rubykaigi。今新幹線の中で本post書いてます。 rubyistというにはおこがましい私が、rubyistist根性で見に行ってきた。そんなreportになります。 kaigiってついてるしどんな雰囲気か想像できませんでしたが、学会のような…

win8にnokogiri

握手会のアレで最近nokogiriが話題ですね。さてHTMLをスクレイピングしたくて Windows8にgemのnokogiriをインストールしようとして苦戦しました。 #Win7ならすんなり入るのに・・・ 公式NokogiriのInstallationをみると、 Luckily for you, building on Wind…

rubyでtwitterAPIを使わずにエゴサーチする

こにちは。 Ruby継続しております。題名の通りRubyでエゴサーチするわけなのですが、 トークンとかめんどくせえな、と思いまして HTMLをGetしてオレオレパースするというコードを書きました。Ruby1.9.2です。 searchWordに探したい文言を入れ実行すると最近…

twitterにRubyでHello World! Windowsで!(3/3)

こにちは。 さて最後、③hello_world.rbを書く です。 gemでtwitterをinstallします。いやーRubyは大変楽チンですね。 gem install twitterちなみに現在のバージョンは5.8.0です。んで下記を参考にhello_world.rbを書きます。 File: README — Documentation f…

twitterにRubyでHello World! Windowsで!(2/3)

こにちは。 さてStep2は、②twitterのAPI key取得とアプリ認証 です。*1 Twitter Developers 上記リンクから、twitterIDでSign inして[Create New App]します。 下記が参考になります。 メモ:twitterのbotを作るために必要なAPI key・token取得法 | Pocketst…

twitterにRubyでHello World! Windowsで!(1/3)

自分用のメモも兼ねているので、ところどころ詳細になってたりアバウトだったりします。ご容赦を。 題名の通りtwitterにRubyでHello World!しました。 このための作業としては3つのStep。 ①WindowsにRubyの環境構築 ②twitterのAPI key取得とアプリ認証 ③hell…

Rubyを触ってみている。

絶賛11連休中のわたしです。こんにちは! テンションも高いので長文駄文書きます。 でも、休みも残すところ3~4日になってしまい哀しいです。 これまでは帰省中で生産的なことはほぼ何もせず、グータラしてしまい後悔。。 ただ、 GW入りかけぐらいにRuby…