«前の日記(2008年02月04日) 最新 次の日記(2008年02月06日)» 編集

Matzにっき

<< 2008/02/ 1 1. [言語] 「ハッカーと画家」の著者が新しいLisp系言語「Arc」を公開 | エンタープライズ | マイコミジャーナル
2. 「セキュリティ、なめんなよ!」 なめねこも一緒に情報セキュリティ強化宣言 | ネット | マイコミジャーナル
3. 「サイオステクノロジーはグルージェントの未来技術に期待し子会社化」:ITpro
2 1. [Ruby] Nimble Method: Garbage Collection is Why Ruby on Rails is Slow: Patches to Improve Performance 5x; Memory Profiling
2. [言語] LuaJIT roadmap 2008
3. [Ruby] What will Matz do?
4. [Ruby] EURUKO 2008 − European Ruby Conference, Prague, March 29th − 30th
3 1. [教会] 末娘の成長
2. [教会] ゴードン・B・ヒンクレー葬儀および埋葬
4 1. [言語] 初心者向けの言語
2. ソフトウェア開発における初心者
3. Linux 2.6.24 on Thinkpad X61
5 1. [Ruby] Copy-on-write friendly patch for Ruby 1.9
2. セキュリティキャンプ・キャラバン with プログラミング -鳥取-
3. [言語] 最もタメになる「初心者用言語」まとめ - UK is not Britonish - ハチロク世代
4. [Ruby] Ruby.NET is dead | Zen and the Art of Ruby Programming
5. 立ち位置と情熱とバランス感覚:ITpro
6 1. 思わずうっかりついポロリ!これがエンジニアの失言だ/Tech総研
2. [Ruby] Ruby Waves: Home
3. [言語] Static Languages: Rationalizations and Myths :: Steve Vinoski’s Blog
4. バランスボール
7 1. microBlog >> Bounties for bug fixers: a bug-tracker plugin
2. Years of irrelevance - (37signals)
8 1. 米子工業高校 情報電子実習
2. たこ焼きパーティ
3. [言語] Garbage-first garbage collection
4. [OSS] Bigtableオープンソース実装2題
9 1. [原稿] Beautiful Code + 日経Linux
2. [言語] use Perl | Perl is now Y2038 safe
3. [言語] CPython用拡張モジュールをIronPythonから呼び出す (1) 「CPython Extensions for IronPython」とは? | マイコミジャーナル
4. [言語] プログラミング言語の進化を追え: 第1回 サルでも分かるプログラミング言語の新潮流(前篇)
10 1. [教会] 福千年
11 1. Life is beautiful: 原点に戻って徹底的に納得するまで理解する
2. スケート
3. SEDA - Architecture for Highly-Concurrent Server Applications
12 1. 取材
2. [Ruby] nishimotzの日記 - Rubyのチカラ
13 1. デブサミ2008 1日め (ディープな1日)
14 1. デブサミ2日目
2. [言語] PythonをDISる。
3. Pre New Generation Chronicle:上野康平−−3次元空間を統べる若き天才プログラマー - ITmedia エンタープライズ
4. New Generation Chronicle:べにぢょ−−ギークプロトコルの解読を試みるサイバーヤンキー - ITmedia エンタープライズ
15 1. 米澤先生講義
2. 京都 - jkondoの日記
3. [OSS] 「島根県CMS」のオープンソースとしての公開について
16 1. [言語] io - Objective-C Syntax
2. [言語] InfoQ: John McCarthy on Elephant 2000, Lisp, Ruby and the Computer Industry
17 1. 風邪引き
18 1. 渡米
2. Matzに聞いてみた:効率の良い開発についてどうお考えでしょう? - builder by ZDNet Japan
3. レノボX300 封筒に入る超薄型ThinkPad - Engadget 日本語版
4. Hilton San Francisco
19 1. Sun Microsystems
2. [言語] A small example of the hidden dangers of dynamically typed programming languages.
3. [言語] Curlは関数型?というか、カオス - noblog
4. Time to rewrite DBMS, says Ingres founder | Reg Developer
5. [Ruby] almost effortless >> El Dorado
20 1. Google TechTalk
2. B・ゲイツ氏、マイクロソフトとスタンフォード大学の結びつきを強調:ニュース - CNET Japan
3. 月蝕
4. [言語] greenlet Lightweight in-process concurrent programming
21 1. オレゴンOTBC
2. オレゴンディナー
22 1. 帰還
2. しまねOSS協議会などに「地域づくり総務大臣表彰」:ITpro
3. Matz×Dan×Daiji「エンジニア進化論」|「てくらぼ」オープニングイベント スペシャル対談開催|パソナテック(PASONA TECH)
4. 【インタビュー】Love Code, Love CodeGear! - 22年目の親愛なるコードオタクDavid I参上 Love Code, Love CodeGear! | マイコミジャーナル
23 1. 帰還(2)
24 1. 帰還(3)
2. [Ruby] Happy Birthday Ruby
25 1. 帰還(4)
2. 誕生日
3. [Ruby] programming: Google TechTalk: Matz on Ruby 1.9
4. [Ruby] Virtuous Code > Monkeypatching is Destroying Ruby
26 1. [Ruby] KIISセミナー
2. 国内ベンチャーの海外進出ってどうなの?:CNET Japan オンラインパネルディスカッション - CNET Japan
3. [OSS] アドビ、SQLite Consortiumに参加で開発を支援:ニュース - CNET Japan
27 1. 楽天ミーティング
2. 楽天、電子マネーサービス「楽天キャッシュ」を開始
28 1. [Ruby] MacRuby - ruby - Trac
2. [Ruby] Ruby, a message to you >> Boy, what ISN'T destroying Ruby these days?
29 1. [Ruby] 1.9.0-1 リリース準備
2. [Ruby] Webエンジニア武勇伝 第18弾 笹田耕一氏 | 株式会社ウェブキャリア
>>

2008年02月05日 [長年日記]

_ [Ruby] Copy-on-write friendly patch for Ruby 1.9

Hongli LaiによるMaking Ruby’s garbage collector copy-on-write friendly, part 7にあったパッチをベースにtrunkを変更してみた。

技術的解説

で、このパッチがなにをやっているか、という話。

Rubyが使っているGCは古典的なマーク・アンド・スイープGCで、 基本的アイディアは 「ルート」から再帰的に参照可能なオブジェクトに「生きている」マークを付け、 最終的にマークのついていないオブジェクトは「死んでいる」と見なして回収する、 というものだ。

この「生きているマーク」を付けるという作業がcopy-on-writeと相性が悪い。

最近のほとんどの(全部の?)OSはプロセスのコピー(要するにfork)を 行った場合、仮想記憶上ではメモリ空間をコピーしない。 同じ内容なんだからコピーするのは無駄でしかない。 とはいえ、プロセスの実行に従って、メモリは書き換えられるから 書き換えをOSが検出して書き換えが起きる直前にオンデマンドでそのページをコピーする ことでコピーを最小限にしようという発想だ。

それはいいのだが、これとRubyのGCが組み合わさると せっかくページ共有してコピーを抑制しようとしたのに、 「マークを付ける」ことによってすべてのオブジェクトが書き換わってしまう。 GCが発生した瞬間に結局Rubyのオブジェクトを含む全ページがコピーされてしまう。

そこで、このcopy-on-write friendly patchだ。

マーク・アンド・スイープGCにはオブジェクトごとの「生きているマーク」は必須だが、 そのマーク(フラグ)は必ずしもオブジェクトそのものに埋めこむ必要はない。 「生きているフラグ」を別の領域(ビットマップテーブル)で持ち、 マークによってオブジェクトを書き換えないというのが このcopy-on-write friendly patchの原理だ。 GCによるオブジェクト単位での更新がないので、 forkしても本当に書き換えられなかったページはコピーされないまま共有される。

で、結果は

とりあえず動いているみたい。

「20%性能向上*1」とうたっていたのだが、 手元ではそんなに性能が変化するプログラムはなかった。むしろほんのちょっと遅くなる感じ。 ま、forkとか使ってないから当然といえば当然だろう。 キャッシュがとか思ったけど、考えてみればキャッシュは読み込みに効くので、 書き込みの局所化を発生させる今回のパッチは関係なさそう。

誰かforkとGCの組み合わせが原因で遅くなっていることが観測できるベンチマークとかもってないだろうか。 Ruby単体で動き、Railsとかとの組み合わせでない方がありがたい。

自分で試してみたい人はcow-friendly-gc.diffを どうぞ。

パッチを当てるためには

patch -p1 -lU < cow-friendly-gc.diff

とすると良いだろう。

*1  よく見たらpart6のパッチと比較して、だった

_ セキュリティキャンプ・キャラバン with プログラミング -鳥取-

宣伝。

2月23日(土)に鳥取県鳥取市の鳥取環境大学で、 「セキュリティキャンプ・キャラバン with プログラミング -鳥取-」が 開催される。

残念ながら私は参加できないが(ちょうど帰国の日だから)、 斎藤先生や、wakatonoさん、竹迫さんのような有名人も来るし、 時間の都合が付けられる人はぜひ参加すると良いだろう。

ってか、なんで私の都合の悪い日にするかな(苦笑)。

_ [言語] 最もタメになる「初心者用言語」まとめ - UK is not Britonish - ハチロク世代

私のエントリから派生していろんな人が自分の思うところの「初心者用言語」について 語っている。しめしめ。

あ、そうそう、そのエントリでひとつだけ訂正。

ここから「初心者向け言語が避けていること」言い替えれば「初心者が苦手なこと」が何であるかだいたいわかる。彼らは「抽象化」が苦手なのだ。

誰も突っ込まなかったのが不思議だけど、「初心者向け言語が避けていること」と 「初心者が苦手なこと」はぜんぜんイコールじゃない。 だから、正確には

  • 初心者向け言語のデザイナーは初心者は抽象化が苦手だと思っている
  • 初心者向け言語のデザイナーは初心者には抽象化は不要だと思っている
  • 初心者向け言語のデザイナーは抽象化が苦手

のどれかだ。結構重要な違いだよね。

さて、いろんな人が初心者向け言語について書いてくれた中にはやや自虐的なものも見られる。

初心者こそPHPを使うべき - 行き詰まった時の気分転換日記

他の言語なら、きっと物知り顔のベテランが出てきて、あれこれ言うんだろうと思う。PHPはそれがない。だってみんな初心者ですから。

初心者には、枯れて面白みもない言語より、PHPのような激しく変化している言語の方が楽しいと思う。

PHPはそれだけ勉強しないといけない言語、まさに初心者にはもってこい。

最もタフになれる「初心者用言語」は Squeak Smalltalk! - sumim’s smalltalking-tos

  • Smalltalk は文法が独自だから、一般的なC言語系文法の言語を学び直すのにまたひと苦労できるよ!
  • すべて Smalltalk で書かれているから、Smalltalk を学ばないと何も得られない理不尽さを体験できるよ!
  • 隠しごとがないから、仕様や処理系をめちゃくちゃにする他の言語では禁じられた遊びができるよ!
  • 絶えずいろいろ変わるから、Ruby のバージョン間非互換とかかわいいもんだと笑えるおおらかさを養えるよ!

なにもそこまでいじけなくても。PHPもSmalltalkも良い言語ですよ、きっと。

そういえば、どのような言語が初心者にもっとも良いかについて、 私の意見は述べてなかった。 私の意見は、以下の通り。

短い答え

言語は関係ない

長い答え

ひとことに初心者といっても玉石混淆なので、なんとも言えない。 学ぶ気のある人なら、PHPから入ってもCから入ってもLispから入っても 抽象化やらオブジェクト指向プログラミングを身につけるだろう。 今30代、40代くらいの技術者はほぼ全員BASICとかFORTRANとかCOBOLの ような抽象化機能に欠ける言語から入門してるけど、 だからといってほとんどが抽象化を身につけてないというわけじゃない。

しかし、抽象化機能が強力だったり、使わないとろくにプログラムが書けないような言語で 入門した場合、それを身につけそこなう確率が下がるというメリットがある。 一方、現実に抽象化機能を身につけそこなっている人が数多く観測される以上、 そのような言語での入門手段しかない場合、そのような人が プログラミングそのものからドロップアウトすることになる可能性が高い。

私はそれでもいい(質の悪いプログラムを量産されるよりはマシ)と 思ってるけど、世間的にそれで合意ができるとはちょっと思えないな。

でも、「関係ない」ってのは、ちょっと卑怯な答えだよね。

_ [Ruby] Ruby.NET is dead | Zen and the Art of Ruby Programming

先日、Microsoftで開催されたLang.NETの 結果を受けて、Ruby.NETの開発が中止されたとのこと。

今後、.NET上のRuby処理系はIronRubyに一本化される方向、らしい。

_ 立ち位置と情熱とバランス感覚:ITpro

道本さんによるITPro Expoのまとめ。

どうなんだろうね。私のプログラミング人生における目標はお金持ちになることではないので、 適当な役割分担は適切だと思うし、その立ち位置は関係者にはかなり理解してもらえていると思う。 でないと、路頭に迷うわけだし。


«前の日記(2008年02月04日) 最新 次の日記(2008年02月06日)» 編集