Article View: fj.lang.ruby
Article #31ruby vs python?? ^^;;; (Re: send POST request with telnet)
From: Yukihiro Matsumoto
Date: Mon, 02 Mar 1998 00:00
Date: Mon, 02 Mar 1998 00:00
129 lines
7064 bytes
7064 bytes
まつもと ゆきひろです
suzuki@otsl.co.jp (SUZUKI Hisao) writes:
|鈴木です。
|もしもイテレータとメソッドを定義の段階から陽に区別していれば,
|コード自体がよりよくプログラマの意図を反映し,読む人にとって
|も理解しやすいものになったはずです。
|
|# イテレータ・ブロックをあらわす疑似変数を疑似仮引数として
|# メソッド定義の仮引数並びの次にでも明記するようにし,yield
|# もその疑似仮引数の関数呼出しとして表現すれば,より直感的
|# だったはずです。(そもそも yield という名前は,先行する諸
|# 言語で使われていた意味からのいらぬ誤解を招くので,かなり
|# 適切さに欠けるのではと思います)。
そのご意見はもっともです.rubyの現在の仕様は歴史的経緯を引き
ずっています.最初からそういう風に思い付いてれば良かったんで
すけどねー.^^;;;
もし,今からまったく別の言語を設計するなら,鈴木さんの提案の
ようなものにした方がずっと望ましいと思います.今でも十分便利
ですけど.
|ところで,ruby でいう「イテレータ」,もとのアイディアは ETH
|Oberon-2 の
|
|H. M"ossenb"ock: Treating Statement Sequence as Block Objects,
|ACM SIGPLAN Notices, vol.27, no.8 (August 1992), pp.83-86.
|
|かとも察しますが,いかがでしょうか? >まつもとさん
|それとも独立して考案されたのでしょうか。
イテレータのアイディアの源はCLUです.私はCLUを使ったことない
のですが,久野さんの雑誌の記事から触発されてます.おそらくは
CLUの方がOberon-2よりはるかに古いと思うんですけど.
|# ruby で述語は ?,書換えメソッドは ! という規約があるなら,
|# equal? は eq? としたほうが良かったかもしれませんね (一部
|# にのみ意味明瞭 :-)
全ての述語には ? がついているはずですが,破壊的なメソッド全
てに ! がついている訳ではないんで.単なるschemeの真似っ子で
す.志低いですね.^^;;;
|たとえば ruby が and や if の条件での正規表現リテラルを
|
| $_ =~ リテラル
|
|と見なすのは,特定の用途 (awk や Perl と同様の用途) には便利
|でしょう。しかし,ruby では,FALSE と nil 以外は真と見なすと
|いうルールがあるのですから,この場合,恒真でないのは一貫性の
|破綻ともいえます。これは汎用言語としては失点です。
この機能を失点と見なす人がいるのは承知しています.もっとも私
自身は条件式にリテラルを用いると言う特異な状態が特異な挙動に
対応しているのは決して地雷にならないと認識しています.
|また一方,もしこのようなものを認めないで,ただリテラルだけ設
|けることにした場合,今度は Python で陽に
|
| pat = re.compile("a(?:b|(c|e){1,2}?|d)+?(.)")
|
|などと正規表現オブジェクトを作るのに比べ,どれだけありがたみ
|があるのか疑問かもしれません (いや,あるいは =~ がキィとなる
|ので問題はないのかもしれませんが ?_?)。
本質的には同じです.もっとも言語設計においてノーテーションは
意味的に同じであってもユーザにとってドラスティックな違いをも
たらすというのも事実ですが.
|ここで一貫性の欠如についてもう少し言えば,そういったものが
|(awk のようにこじんまりとしているのではない) 大規模な言語の
|あちこちにあるとしたら,それは使う人にとって地雷原を歩くよう
|なものです。うっかり道を外れたらどんな目にあうか分かったもの
|ではないとしたら,以前通って安全だと分かっている道だけを歩く
|のがベストです。実際,かつて Perl4 を使っていた時分,いつま
|でたっても本当に分かったような気になれない錯綜した仕様を前に
|してすっかり精神の自由を失ってしまったものでした…。
ええと,これはperlがそういう言語であると言う意味ですね.^^;;;
それは否定しません.
それと文脈からrubyがそういう言語であるように思ってらっしゃる
ようにも読めるのですが,それが事実であるためには「あちこちに
あるとしたら」が,事実であることを示す必要があると思います.
私にとってはそれは事実でないように思えますが(主観です).
|以下の点はどうでしょうか?
|
|(1) Python を python -i ファイル名 のように起動すると,
| ファイルをスクリプトとして実行後,対話処理に入ります。
| これはスクリプトを途中まで書いて,残りはその場その場の入力で
| 試行錯誤するのに重宝します。
| こういったことはできるのでしょうか?
| (スクリプト・ファイルを実行できるだけでは不十分です。
| まっさらな環境からの試行が1ステップで手軽にできることが
| 重要です)
|
|(2) Python の dir() 呼出しは,現在定義されている変数等の一覧を
| 返します。dir(引数) 呼出しは,その引数 (モジュールなど) の中
| で定義されている変数等の一覧を返します。
| 関数名を忘れたときなど,マニュアルをひくまでもなく,この一覧
| を見て確認すれば済むことがしばしばあります。
| こういったことはできるのでしょうか?
|
|(3) Python のモジュールやクラス,メソッド等,とりわけ,最近追加
| されてなじみのない (マニュアルを読みたくなるような) ものは,
| __doc__ 属性による説明文書が用意されています。
| これらは,マニュアルをひくまでもなく print 引数.__doc__ と
| することで,その場ですぐ説明を読むことができます (英語ですが)。
| こういった便宜はあるのでしょうか?
(1) 「rbc.rb -r ファイル名」と起動すると同じことが出来ます.
また対話レベルでloadやrequireなどのメソッドで読み込ん
で来ることも出来ます.
(2) object.methodsでそのオブジェクトの受け付けるメソッド名
の一覧が得られます.その他クラスで定義されているメソッ
ドの一覧,変数名の一覧などを取り出すメソッドも用意して
います.
(3) これはできません.そういうのは言語に組み込むものではな
いと思ったからです.特にインタプリタが大きくなるのを嫌
いました.
まつもと ゆきひろ /:|)
Technical Details
Message-ID:
<lvn2f9snj7.fsf_-_@picachu.netlab.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<864t1qerg8.fsf@soleil.localnet.or.jp> <7szpjgjw41.fsf@sdd.tokyo-sc.toshiba.co.jp> <86sop8fall.fsf@soleil.localnet.or.jp> <SUZUKI.98Feb26123600@oz.otsl.oki.co.jp> <86u39mptwb.fsf@soleil.localnet.or.jp> <SUZUKI.98Mar2082701@oz.otsl.oki.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 13488f,68272ddf24459300 X-Google-Attributes: gid13488f,public X-Google-Thread: 1043e7,198039866f07294d X-Google-Attributes: gid1043e7,public From: Yukihiro Matsumoto <matz@netlab.co.jp> Subject: ruby vs python?? ^^;;; (Re: send POST request with telnet) Date: 1998/03/02 Message-ID: <lvn2f9snj7.fsf_-_@picachu.netlab.co.jp> X-Deja-AN: 329911255 References: <864t1qerg8.fsf@soleil.localnet.or.jp> <7szpjgjw41.fsf@sdd.tokyo-sc.toshiba.co.jp> <86sop8fall.fsf@soleil.localnet.or.jp> <SUZUKI.98Feb26123600@oz.otsl.oki.co.jp> <86u39mptwb.fsf@soleil.localnet.or.jp> <SUZUKI.98Mar2082701@oz.otsl.oki.co.jp> Content-Type: text/plain; charset=ISO-2022-JP X-Complaints-To: usenet@riccia.linux.or.jp X-Trace: riccia.linux.or.jp 888814304 5597 (None) 202.218.249.224 Organization: Network Applied Communication Laboratory, Japan Mime-Version: 1.0 (generated by tm-edit 7.106) Newsgroups: fj.lang.ruby,fj.lang.perl