[#8824] [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro)

ごとけんです

38 messages 2000/01/05
[#8839] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8842] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8843] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8844] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8846] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — matz@... (Yukihiro Matsumoto) 2000/01/06

まつもと ゆきひろです

[#8847] Re: [REQ] Integer#{hex,dec,oct,bin}, String#bin — gotoken@... (GOTO Kentaro) 2000/01/06

ごとけんです

[#8893] Re: [ruby-list:20142] Re: Range expansion? — Akinori MUSHA aka knu <knu@...>

 knuです。ruby-listから舞台を移しました。

13 messages 2000/01/09

[#8980] 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...>

近い将来の{Net,Free,Open}BSDにはKAME IPv6 stackが統合されています。

17 messages 2000/01/20
[#8981] Re: 1.4.3 patch for near-future *BSD IPv6 support — Jun-ichiro itojun Hagino <itojun@...> 2000/01/20

> それから、

[ruby-dev:8821] Re: BEGIN as stmt. ?

From: matz@... (Yukihiro Matsumoto)
Date: 2000-01-04 13:45:15 UTC
List: ruby-dev #8821
まつもと ゆきひろです

In message "[ruby-dev:8820] BEGIN as stmt. ?"
    on 00/01/04, EGUCHI Osamu <eguchi@shizuokanet.ne.jp> writes:

|まったく意味のないプログラムですが、
|
|  BEGIN {} while true
|
|を評価すると、、
|
|  % ruby -e 'BEGIN {} while true'
|  -e:1: [BUG] Segmentation fault
|  Abort (core dumped)
|
|となってしまいます。

こりはバグです。BEGINでなくても

  () while true

でも発生しますね。要するに修飾型whileのbody部のチェックを怠っ
ていたわけです。修正します。末尾にパッチを添付します。

|BEGIN (と END)については Ruby本でも、殆んど触れられていないのですが、
|ドキュメント http://www.ruby-lang.org/ja/man-1.4/syntax.html を読むと、
|
|  <code>BEGIN</code>ブロックは独立したローカル変数のスコープを
|  導入するため,ローカル変数を外部と共有する事はありません.情
|  報の伝達にはグローバル変数を使う必要があります.
|
|と言う段があります。
|
|なんとなく気持は判るのですが、BEGIN (と END)が独自のスコープを持たずに
|トップレベルで評価された方が、「なるべくグローバル変数は使いたくない」
|という気持を満足できると思うのですが、如何でしょうか?

ENDは独自のスコープを持ちません。BEGINだけです。なぜなら
BEGINはプログラム全体が実行される前に実行されるので、その時
点では(トップレベルスコープも含めて)他のスコープはまだ存在し
ませんが、ENDの場合には利用できる周囲にスコープが存在するか
らです。

BEGINが外側のスコープを利用するのだとすると、それはどのスコー
プであるべきなのでしょうか? いまだ存在しない周囲のスコープ
を利用すると言うのもつらい話ですし、どこにあってもトップレベ
ルスコープと言うのも(厳密な意味でのトップレベルスコープが存
在しないことを考えると)どこまで意味があるか疑問です。

厳密な意味でのトップレベルスコープが存在しないというのは、た
とえば、loadしたライブラリの評価時のスコープはトップレベルス
コープのコピーだということです。ライブラリ実行中に BEGIN が
評価されたら、そのスコープはどのスコープであるべき?

                                まつもと ゆきひろ /:|)

--- /tmp/parse.y	Tue Jan  4 22:42:55 2000
+++ parse.y	Tue Jan  4 22:27:41 2000
@@ -332,7 +332,12 @@
 			value_expr($3);
-			if (nd_type($1) == NODE_BEGIN) {
-			    $$ = NEW_WHILE(cond($3), $1->nd_body, 0);
+			if ($1) {
+			    if (nd_type($1) == NODE_BEGIN) {
+				$$ = NEW_WHILE(cond($3), $1->nd_body, 0);
+			    }
+			    else {
+				$$ = NEW_WHILE(cond($3), $1, 1);
+			    }
 			}
 			else {
-			    $$ = NEW_WHILE(cond($3), $1, 1);
+			    $$ = 0;
 			}
@@ -342,7 +347,12 @@
 			value_expr($3);
-			if (nd_type($1) == NODE_BEGIN) {
-			    $$ = NEW_UNTIL(cond($3), $1->nd_body, 0);
+			if ($1) {
+			    if (nd_type($1) == NODE_BEGIN) {
+				$$ = NEW_UNTIL(cond($3), $1->nd_body, 0);
+			    }
+			    else {
+				$$ = NEW_UNTIL(cond($3), $1, 1);
+			    }
 			}
 			else {
-			    $$ = NEW_UNTIL(cond($3), $1, 1);
+			    $$ = 0;
 			}


In This Thread