第1回RHG読書会を開催しました

4月 8th, 2009 admin

RHG(Ruby Hacking Guide)と聞くと、どうしても「銀河ヒッチハイク・ガイド」を思い出してしまう私ですが、5日(日)にCSNagoyaとしてRHG読書会を開催しました。

Rubyのソースコードを読むという、CSNagoyaなのにカジュアルでもなんでもない内容ということもあって、また参加者1人の自習時代に戻る覚悟もしていましたが結局10人以上が集まる会になりました。

個人的な目標

僕は大きなコードを読んだことがないというのと、Rubyが好きなのだけど、いまいちRuby会議などで堂々とできない自分にサヨナラするのが目的なので
・ソースコードの読み方の作法とコツを習得
・Rubyistを名乗る
というのを目標にして参加しました。

まとめ

・Rubyのオブジェクトは構造体で、扱うときはVALUE型(unsigned long)のポインタ経由で扱う(unsigned longをポインタにキャストする)
・すべてのオブジェクトがstruct RBasic型のメンバbasicをもっていて、こいつが自分の構造体の型や各種フラグ、そしてクラスオブジェクトが格納されている
・VALUEがvoid*でないのは、小さな整数、シンボル、true、false、nil、QundefのときはVALUEに直接値を入れるため
・上記のような値と、オブジェクトのポインタとの値が重複しないように、整数は奇数の値、オブジェクトは4の倍数、シンボルは奇数ではなく4の倍数でもない数字にする、などという工夫がされている
・インスタンス変数を始めからもっているオブジェクトとそうでないのがある。これはメモリの無駄を省くため(RStringにインスタンス変数をセットして検証してみたい)
・struct RArrayはリストでは無い、以前にRubyでリストを自前で実装したら、Array.pushとかより高速に動作するようになって驚いたけど、そういうことらしい。

感想

C言語で書かれたオープンソースのコードを読むのは恥ずかしながら初めてだったので、まずソース(最初はruby.h)を開いただけでわくわくしました。難しいかと思われた内容も、本の解説がとても丁寧なおかげで今のところなんとかついていけているかなという感じです。
そして、いままでRailsでなんとなく使っていたシンボルの意味がよくわかったり、以前作ったリストが高速だった意味などが、それこそソースレベルで理解できてすごく気持ちがよかったです。

Rubyの歴史というのは10年程度で、それが長いのか短いのかわかりませんが、それでも10年以上もMatzを始めとする日本のスーパーハカーの人達が磨きに磨いたコードを読むというのは意外にもエキサイティングであり、贅沢なことなんだということを体感できました。こんなものが簡単に入手できてしまうオープンソースの文化に感謝をしつつ、次回の以降の勉強会にも取り組んでいきたいと思います。

RHG(Rubyソースコード)読書会、パタヘネ読書会開催のお知らせ

4月 1st, 2009 admin

CSNagoyaという勉強会の4月からの予定についていろいろ固まりましたので案内させて頂きます。

概要

4月からのCSNagoyaは3つの勉強会を開催する予定です。

・RHG読書会(RHGを参考にRuby1.9のソースコードを読む会)
・パタヘネ読書会(コンピュータの構成と設計を読む会)
・SCIP読書会(計算機プログラムの構造と解釈という本を読む会・現在すでに開催中)

以下、それぞれについて詳しく解説します。

RHG読書会

Rubyソースコード完全解説
Ruby、アルゴリズム、Haskell、コンパイラと学んできたCSNagoyaのソフトウェアライン。2009年はRubyのソースコードを読みます。
勉強のベースとなるのはRubyソースコード完全解説という本。この本を参考にさせていただきながらRuby1.9を読んでいきます。東京では「RHGの逆襲」という会が開催されており、今回はまさにこの企画を参考にさせて頂いているものの、あちらの反則ともいえる豪華メンバーとは比較になるはずもなく、いろいろな格差に落ち込みながらも、とにかくなんとか開催する予定です。

Rubyの基本的なところからはじめるのでRuby自体に詳しい必要はないとおもいます、読んでいくコードはC言語になるので多少のC言語の知識は必要になると思います。僕自身はRubyは入門書を読み終えて普通のスクリプトなら書ける程度、C言語については学生のときに少し書いた程度です。

この勉強会がおわったあとには

・C言語に詳しくなっている
ruby-devで言っていることがなんとなくわかる

パタヘネ読書会

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
パタヘネ本と呼ばれる本書を読み、コンピューターのハードウェアやアセンブリ言語について学びます。多くの大学の教科書にも採用され、「コンピュータの名著○冊」みたいな本には必ずと言っていいほど選ばれるほど有名な本です。

SICP読書会

計算機プログラムの構造と解釈
この本を読みながら、練習問題を解いていく会。すでに8回ぐらい開催しており数学が苦手な僕には苦痛な問題もありますが、そういう問題は飛ばしても大丈夫(多分)、あと日本語訳がどうのとか言われますがそれもたいした問題ではないことが最近わかってきました。
この本はプログラミングということに関して僕に毎回新鮮な驚きを与えてくれるすばらしい本です。もしあなたがプログラミングが好きなら、プログラミングをもっと楽しくしてくれる最高の(少し厳しい)先生になってくれるはずです。

詳しくは一回目の案内を見てください。

参加方法など

スケジュールなどはCSNagoyaホームページで案内しています。参加は随時受け付けていますのでMLでどんどん参加表明をしてください。では!

2009年のCSNagoyaの予告

3月 19th, 2009 admin

CSNagoya(カジュアルスタディ名古屋)という名古屋でやっているコンピュータ関連の勉強会の案内です。

テーマ

Ruby1.9のソースコード読書会(ソフトウェア部門)

4月5日スタート。「Rubyソースコード完全解説」という本を参考文献にして、Ruby1.9のソースコードをざっくり読みます。

パタヘネ読書会(ハードウェア部門)

4月12日にスタート。コンピュータの構成と設計―ハードウエアとソフトウエアのインタフェース〈上〉という本を読みます。

スケジュール

第1,3日曜日・・・ソフトウェア
第2,4日曜日・・・ハードウェア

4月5日 Ruby
4月12日 パタヘネ
4月19日 Ruby
4月26日 GW休暇
5月3日 GW休暇
5月10日 パタヘネ
5月17日 Ruby
5月24日 パタヘネ
5月31日 休み

参加方法

メーリングリストで後日募集を行います。

参加資格

興味のある人はどなたでも!

やったーコンパイラできてきたよ!

3月 17th, 2009 admin

CSNagoyaでやっていた「コンパイラを作ろう」で作っているRuby製のPrimitive言語コンパイラがついにHello World!のマクロアセンブラを吐き出しました。
僕にとってはBASICで初めて書いたHello World以来、ひさびさの感動のHello Worldでした。

CODE:
  1. ; ml out.asm /c /coff
  2. ; link /Subsytem:console out.obj kernel32.lib iolib.lib
  3. .586
  4. .model flat,stdcall
  5. INCLUDE iolib.inc
  6.  
  7. .data
  8. Letter dd 0
  9.  
  10.  
  11. .code
  12. _start:
  13. mov Letter, 'H'
  14. invoke OutputLetter, Letter
  15. mov Letter, 'e'
  16. invoke OutputLetter, Letter
  17. mov Letter, 'l'
  18. invoke OutputLetter, Letter
  19. mov Letter, 'l'
  20. invoke OutputLetter, Letter
  21. mov Letter, 'o'
  22. invoke OutputLetter, Letter
  23. mov Letter, ' '
  24. invoke OutputLetter, Letter
  25. mov Letter, 'W'
  26. invoke OutputLetter, Letter
  27. mov Letter, 'o'
  28. invoke OutputLetter, Letter
  29. mov Letter, 'r'
  30. invoke OutputLetter, Letter
  31. mov Letter, 'l'
  32. invoke OutputLetter, Letter
  33. mov Letter, 'd'
  34. invoke OutputLetter, Letter
  35. mov Letter, '!'
  36. invoke OutputLetter, Letter
  37. invoke PauseProgram
  38. invoke ExitProcess,0
  39. end _start
  40. END

第10回コンパイラを作ろうに行ってきた。

1月 19th, 2009 admin

毎度おなじみCSnagoyaのコンパイラを作ろうに参加してきました。
年末年始をはさんだので一ヶ月ぶりに会う人も多いため楽しみにして行ってみたら、開始予定時間から30分間誰もこなかったので危うくストレスで舌を噛み切りそうになりました。30分を過ぎるとパタパタと人が集まりだし、総勢6名が集合。いつも休まない人達が何人か休んだために、普段とはちょっと違う雰囲気、違う会話がとても新鮮でした。

今何をやっているのか

1ヶ月も休んでいたのですっかり忘れていました。コンパイラを構成する要素を大きく3つに
・スキャナ
・パーサ
・コードジェネレータ
として分けるなら、いまはスキャナとパーサが終わり、最後のコードジェネレータの部分をやっています。
あと1回か2回あれば終わりそうな感じなので、そうすれば遂にPrimitive言語という言語からマクロアセンブラを吐き出すコンパイラのできあがりです

まとめと今後について

コンパイラを作ろうシリーズもそろそろ終わりそうな感じです。
そろそろ春からのテーマを考えなくてはいけません。
例えば
Google Android完全解説 (アスキームック)
アンドロイド(開発者用の実機を見せてもらったら、とてもうらやましくなった)や

ゲームプログラマになる前に覚えておきたい技術
で学ぶゲーム開発の基礎だとか

集合知プログラミング
のデータマイニング的なこととかも面白そうだなーとか思いながらも、ちょっとCSNagoyaとは違うかなと思ったりして、CSNagoya「らしさ」でいうなら

30日でできる! OS自作入門
は避けて通れないんですが、気持ち的にしんどいので、今のところの本命は

Googleを支える技術 ‾巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)
これ。Y口さんが提案くれたBigtableの実装ってのが面白そうだなーと思っています。Bigtable云々のまえに僕の場合は普通のリレーショナルデータベースも実装したことがないので、まずは普通のデータベースの実装からですが...