«前の日(03-08) 最新 次の日(03-10)» 追記

Matzにっき


2004年03月09日

_ [Ruby]breakとreturnのバグ

先日も悩んでいたバグだが、予想以上に厄介だ。

問題点は、breakとreturnで飛び先が違うので(breakはブロック付きメソッドの継続、returnはブロックを囲むメソッドの継続)、有効範囲も違うのだが、 今までは(1.8では)returnの有効範囲しかチェックしていなかったので、 まれにbreakで正しくないところにジャンプする可能性があることだ。

で、考え出すといろいろなところが絡み合って面倒なことになる。 こちらを直すと別のところが動かなくなったり。 しょうがないので、デバッガで追いかけ、 動作を理解し、紙の上にメモを書きながら、Rubyのあるべき挙動を洗い出す。

で、洗い出した挙動からテストケースを作り、失敗するケースを またデバッガで追いかけ、コードを直して試してみる。 試した結果から「あるべき挙動」の間違いが見つかったりもする。

ああ、面倒な。

こういう時、無闇に複雑なRubyの実装を恨んだりする。 自分で書いたものだけど。優秀なプログラマならこんなに試行錯誤しなくても、 ばしっと解法を見つけたりするのだろうなあ。

しかし、一方で「言語のあるべき姿」を考えるのは、 私にとって最高の楽しみであったりする。 そっちばっかりやって実装に手を抜いているから、 今のRubyがある(良い意味でも悪い意味でも)と言えよう。

バグの完全退治にはもうちょっとかかりそう。

_ [言語]AIR

「スクリプト言語AIR」だそうだ。

スクリプト言語AIRは、新しく簡潔で自然なスクリプト言語です。

ここで「自然」という意味は、日本語や英語といった人間の話す自然言語に似 た構文をもつことを意味するものではありません。

日頃からコンピュータのプログラミングやシステム管理等を行っている人々

− 特にUNIXやC言語に日頃から親しんでいる人々 −

に違和感を感じさせないと言う意味の自然です。

と紹介されている。特徴は

AIRのソフトウェアとしての特徴を幾つか上げてみますと、

  • オープンソースであること。(GPL)
  • スクリプト言語であること。
  • 開発者が日本人であること。

等があげられます。

一方で、スクリプト言語としての特徴は、

  • 構文がシンプルで直観的なスクリプト言語であること。
  • 各種UNIXツールやC言語の考え方を、そのまま素直に発展させていること。
  • 実行速度が速いこと。

等があげられます。

だそうだ。ここのところ毎日のようにリリースされている。

言語仕様を見てみると、パターンマッチなしのAWKみたい。 あまり冒険はしていないように思える。 それが良いのか悪いのかは分からないけれども。 言語の良さは「生き残ることができるか」で決まる部分が多いので、 長い目で見守っていきたい。


2005年03月09日

_ [言語] Eleven続き

昨日、「ElevenのアイディアをRubyのライブラリとして実装する人はいないだろうか」などと書いたら、 moriqさんがRailsで実装してくださった。

こんな感じ。

require 'eleven'

class FooController < ApplicationController
  include Eleven
  statesafe :first, :last

  display {
    print "Please enter your name."
    edit "First name: ", @first
    edit "Last name: ", @last
  }

  display {
    print "Thank you, ", @first, " ", @last, "."
  }
end

第一歩としては上出来ではないだろうか。

_ [Ruby] Meetup Group Meeting レポート

昨日プレッシャーをかけておいたので、 Meetup Groupミーティングのレポートのようなもの が、かずひこくんのところにアップされた。注目。

_ [Ruby] Ruby 2.0 ブロックローカル変数

昨日のミーティングで話そうと思ってて、 あまり盛り上がらなかったので触れなかった話題。

Rubyのブロックスコープをなんとかしたいとずっと考えてきた。 で、今までにもいろいろなアイディアを練ってきたのだが、なかなか決められなかった。 最近になってやっと「これなら」というものが出来上がったように思う。

仕様は以下の通り。

  • ブロックパラメータはローカル変数のみ
  • ブロックパラメータのスコープはブロックローカル
  • ブロックパラメータ名が外側のローカル変数と重複したらエラー(前田くんの勝ち)※
  • ブロックパラメータの後ろに「; 変数」という形でそのブロック内でだけ有効な変数名を指定できる※
  • これらの変数も重複はエラーになる
  • ブロック内で初出の変数のスコープはブロックローカル(今まで通り)※
  • メソッド内で使われたスコープが終わってしまった変数への参照は警告になる※

今まで「2.0ではこうする」と宣言してきたものとは違うが(特に※の部分)、 互換性はより高いし、使い勝手も悪くなってないと思う。 特に「ブロック内初出のローカル変数のスコープ」については、 メソッドスコープにすることを強く反対していた dblack はよろこぶことだろう。

さて、これにより

3.times {|i; a|
  a = 5
  p [i, a]
}

のような文が許されることになる。本当は

3.times {|i; a=5|
  p [i, a]
}

のように初期化もいっしょにしたいが、「|」が式の中に登場することのある演算子なので、

  • あきらめる
  • 初期化にはprimary(リテラルとか変数とか括弧でくくった式とか)しか許さない

のいずれかになりそうだ。

3.times {|i; a=2+3|
  p [i, a]
}

がエラーになるのを受け入れられるかどうか、だな。


2006年03月09日

_ 帰国

帰国、羽田、出雲、帰宅、疲労、体調不良、寝る。

_ 映画

機内で見た映画

  • レジェンド・オブ・ゾロ
  • コープス・ブライド

2007年03月09日

_ まだ体調不良

まだしゃんとしない。今日も休み。来週のスライドの準備をしないといけないんだけどなあ。

_ 全自動・手ブレ&ピンボケ修正アルゴリズム群[テピンオート(TepinAuto)]の概略/イノベーション/NCS技報/日本コンピューター・システム株式会社(NCS)

「街の発明家」によくありそうな文体。

なんだか肝心のところが「企業秘密」になってるんだけど、 これ特許が成立してるんじゃなかったっけ。

とすると、クレームをちゃんと読むと企業秘密ではなくなってしまうような。


2008年03月09日

_ [教会] 新見二日目

今度は家族と新見へ。 かかった時間は同じくらいでも、 慣れるとそんなに遠く感じなくなるから人間の主観はいいかげんなものだ。

家族(+親族)で食事。 大会ではコーラスに参加。 ほとんど練習に参加できなかったのに厚顔なものだ。 実際、一箇所間違えちゃった。

父親が長年果たしてきた責任に別の人が任命される。 息子はショックを受けていた。

が、後で電話したら、公式に責任を果たすことはなくなるけど 解任ってのはないので、 親族は例外ってことだった。息子大喜び。


«前の日(03-08) 最新 次の日(03-10)» 追記