先日も悩んでいたバグだが、予想以上に厄介だ。
問題点は、breakとreturnで飛び先が違うので(breakはブロック付きメソッドの継続、returnはブロックを囲むメソッドの継続)、有効範囲も違うのだが、 今までは(1.8では)returnの有効範囲しかチェックしていなかったので、 まれにbreakで正しくないところにジャンプする可能性があることだ。
で、考え出すといろいろなところが絡み合って面倒なことになる。 こちらを直すと別のところが動かなくなったり。 しょうがないので、デバッガで追いかけ、 動作を理解し、紙の上にメモを書きながら、Rubyのあるべき挙動を洗い出す。
で、洗い出した挙動からテストケースを作り、失敗するケースを またデバッガで追いかけ、コードを直して試してみる。 試した結果から「あるべき挙動」の間違いが見つかったりもする。
ああ、面倒な。
こういう時、無闇に複雑なRubyの実装を恨んだりする。 自分で書いたものだけど。優秀なプログラマならこんなに試行錯誤しなくても、 ばしっと解法を見つけたりするのだろうなあ。
しかし、一方で「言語のあるべき姿」を考えるのは、 私にとって最高の楽しみであったりする。 そっちばっかりやって実装に手を抜いているから、 今のRubyがある(良い意味でも悪い意味でも)と言えよう。
バグの完全退治にはもうちょっとかかりそう。
「スクリプト言語AIR」だそうだ。
スクリプト言語AIRは、新しく簡潔で自然なスクリプト言語です。
ここで「自然」という意味は、日本語や英語といった人間の話す自然言語に似 た構文をもつことを意味するものではありません。
日頃からコンピュータのプログラミングやシステム管理等を行っている人々
− 特にUNIXやC言語に日頃から親しんでいる人々 −
に違和感を感じさせないと言う意味の自然です。
と紹介されている。特徴は
AIRのソフトウェアとしての特徴を幾つか上げてみますと、
- オープンソースであること。(GPL)
- スクリプト言語であること。
- 開発者が日本人であること。
等があげられます。
一方で、スクリプト言語としての特徴は、
- 構文がシンプルで直観的なスクリプト言語であること。
- 各種UNIXツールやC言語の考え方を、そのまま素直に発展させていること。
- 実行速度が速いこと。
等があげられます。
だそうだ。ここのところ毎日のようにリリースされている。
言語仕様を見てみると、パターンマッチなしのAWKみたい。 あまり冒険はしていないように思える。 それが良いのか悪いのかは分からないけれども。 言語の良さは「生き残ることができるか」で決まる部分が多いので、 長い目で見守っていきたい。
昨日、「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
第一歩としては上出来ではないだろうか。
昨日プレッシャーをかけておいたので、 Meetup Groupミーティングのレポートのようなもの が、かずひこくんのところにアップされた。注目。
昨日のミーティングで話そうと思ってて、 あまり盛り上がらなかったので触れなかった話題。
Rubyのブロックスコープをなんとかしたいとずっと考えてきた。 で、今までにもいろいろなアイディアを練ってきたのだが、なかなか決められなかった。 最近になってやっと「これなら」というものが出来上がったように思う。
仕様は以下の通り。
今まで「2.0ではこうする」と宣言してきたものとは違うが(特に※の部分)、 互換性はより高いし、使い勝手も悪くなってないと思う。 特に「ブロック内初出のローカル変数のスコープ」については、 メソッドスコープにすることを強く反対していた dblack はよろこぶことだろう。
さて、これにより
3.times {|i; a| a = 5 p [i, a] }
のような文が許されることになる。本当は
3.times {|i; a=5| p [i, a] }
のように初期化もいっしょにしたいが、「|」が式の中に登場することのある演算子なので、
のいずれかになりそうだ。
3.times {|i; a=2+3| p [i, a] }
がエラーになるのを受け入れられるかどうか、だな。
まだしゃんとしない。今日も休み。来週のスライドの準備をしないといけないんだけどなあ。
「街の発明家」によくありそうな文体。
なんだか肝心のところが「企業秘密」になってるんだけど、 これ特許が成立してるんじゃなかったっけ。
とすると、クレームをちゃんと読むと企業秘密ではなくなってしまうような。
今度は家族と新見へ。 かかった時間は同じくらいでも、 慣れるとそんなに遠く感じなくなるから人間の主観はいいかげんなものだ。
家族(+親族)で食事。 大会ではコーラスに参加。 ほとんど練習に参加できなかったのに厚顔なものだ。 実際、一箇所間違えちゃった。
父親が長年果たしてきた責任に別の人が任命される。 息子はショックを受けていた。
が、後で電話したら、公式に責任を果たすことはなくなるけど 解任ってのはないので、 親族は例外ってことだった。息子大喜び。