iterableスルー日記
= Jython-usersを見ていると、Pythonはexecとevalを区別しているので Jakarta BSF - Bean Scripting Framework の挙動と異なるじゃないか、というツッコミがあった。 これって実は根が深いのじゃないだろうか。 異なる言語へのインターフェイスが共通化できるのか、という問題だよね。 BSFがどうなっているか知らないけど、仮に変数に値をセットするsetメソッドがあるとする。 それって代入の存在しない言語を対応させるときにはどうするのだろう? というような問題。 今回の問題も含めて、間にラッパを挟むことで対処は可能だろうとは思うけど、 それが対象言語の魅力を損ねる可能性だってあるわけだ。 難しいよね。
今回の問題はPythonが他の多くの言語と違って文と式を区別するという点に原因がある。 これには少なくとも「if文の条件式に間違えて代入文を入れてしまうミスが起こりえない」 というメリットがあるけど、逆に多くの言語のIO周りで使われる 「代入文をwhileの条件式部分に入れる」というイディオムは使えなくなる。 個人的にはこの区別はなくてもよかったのではないかと思うし、 こうやって他の言語と衝突したりすると「全部式だった方がよかったのかもな」 とも思う。でも今更変更するのは無理だろう。
あー。Jython2.1でタプルやリストが__iter__を持っていないのにiterableなのは __iter__がジェネレータを返すことでfor文を使ったイテレーションをフックできるようになったのが CPython2.2以降だからのはずだ。 と英語で書くのが面倒だからって日本語でこんな所に書いてもなぁ…。
思い直して返事を書こうとしたらGMailがハングアップした。 よしスルーすることにしよう(笑)
FirefoxってJavaScriptの処理がハングアップしたときには強制中断するか聞くようになったんだねぇ