Masataka Pocke Kuwabara
Masataka Pocke Kuwabara
Yielderのドキュメントを書きました。 https://github.com/rurema/doctree/pull/2273 Generator の方はよく分かってないので手を付けていません。
このページは目次において「プロセスの実行」のグループにいて、またそれとは別に「Rubyの文法」グループがあります。 ![200127161146](https://user-images.githubusercontent.com/4361134/73156031-c13ccb80-411f-11ea-8cf9-1dab204bc134.png) このことから「Rubyプログラムの実行」ではRubyの文や式がどう評価されていくのかを書くことが期待されているように思えます。 ただ実際のところ「Rubyプログラムの実行」はあんまりメンテできていなさそうです。またどう評価されていくのかは「Rubyの文法」グループ内の記事でより詳しく説明されています。 なので、「Rubyの文法」グループ内の記事で評価のされ方まで解説されている 要素に関しては、「Rubyプログラムの実行」のページからはそのページにリンクを貼るにとどめると良いと思いました。 これは「疑似変数」についてもそうですし、ifなどの制御構文も該当しそうです。 一方、メソッド呼び出しの > 続いて引数式を左から右の順番で評価し、レシーバに対してメソッドの検索を行います。検索が失敗したら例外 NameError を発生、成功したらメソッドを実行します。 みたいなのは、「Rubyプログラムの実行」にこそ書かれていて欲しい内容だと思うので、こういうのはそのまま残すのが良いのかなあと思います。 つまり、全体的にはリンク集的な感じにしつつ、プログラムを実行するという観点から補足することがあれば書く、という感じですかね。
> そういう意味だと、整理する前にメンテナンスされていないことを明示するのがいいのかもしれません。 そうですねえ、メンテナンスするか、メンテナンスされてないことを明示するか、いっそ消してしまうかするのが良いかなと思います。 > リンク集よさそうです。が、疑似変数のようにプログラムの実行時の動作についても解説されているものは「プログラムの実行」の中で書くことがなくなってしまいそうな気もします。 書くことはなくなってもいいんじゃないかなと思っています。 「true, falseなどはローカル変数のように見えますが実際には予約語として処理され、決まった値を返します。代入はできません。詳しくは を参照してください」のような感じで、そういう存在があることだけ分かるようになってればいいかなと思っています ただのリンク集だとあんまり意味はないので、前のコメントで書いた引数の評価順とか、プログラムの実行という意味で書きたいところを充実させたいですね。 制御構造のドキュメントも、細かい挙動についてはプログラムの実行のページに移すと一貫性はありそうです。ただ移してしまうと今までドキュメントを読んでいた人が期待する内容を見つけづらくなってしまう気がしていて、慎重にやる必要はあるかなあと思います
> 元のサンプル自体の話になりますが (2) の例って (3) や (4) をみると直接 Hash[alist] で良さそうなのですが、 flatten(1) って必要なのでしょうか? > https://github.com/rurema/doctree/pull/2095#pullrequestreview-342459119 このIssueをやる時に、ついでにサンプルコードの整理もするとよいのではと思っています。
両端が整数リテラルであれば何度評価されても同じオブジェクトが返るので、「数値リテラル」を「整数リテラル」に置き換えても良いのではないでしょうか。 ちなみに、Bignumであっても同じオブジェクトが返るのかが気になって調べましたが2.4からは同じオブジェクトが返るようです。 ```bash $ docker run -it --rm -v /tmp/test.rb:$(pwd)/test.rb rubylang/all-ruby env ALL_RUBY_SINCE=ruby-1.8.0 ./all-ruby -e 'def x() 1..20000000000000000000000000000000000000000000000000000000000000000000000000; end; p x.object_id == x.object_id' ruby-1.8.0 false ... ruby-2.4.0-preview2 false ruby-2.4.0-preview3 true...
> 第二文を残すなら,同じオブジェクトを返すのが「両端が Integer」のケース以外に無いということを確認する必要があると思います。 確認したところ、両端がIntegerのケース以外は最適化されないようでした。 https://github.com/ruby/ruby/blob/c47cd4be28840159251b4c66df71e10e979316a0/compile.c#L8311-L8332 ```c case NODE_DOT2: case NODE_DOT3:{ int excl = type == NODE_DOT3; VALUE flag = INT2FIX(excl); const NODE *b = node->nd_beg; const NODE *e = node->nd_end;...
issueを上げてからいくらか修正が入っているので、直す時には最新版のRDocを参考にすると良さそうです。 https://github.com/ruby/ruby/commit/e10798b3a3dc1f4e4225ad1b92f9157b58df52d9 https://github.com/ruby/ruby/commit/4cb8b49d41f76d0a2e95cecbd4fdd700d77c5098
> 2.6までは名前を求めるときに定数名を探索、2.7からは定数への代入時に決定、です [View in Slack](https://ruby-jp.slack.com/archives/CLZB6ACR4/p1579842042006100)
https://github.com/ruby/ruby/blob/2c8821c0d218b5886c0073ff123fb2eee6f1c99b/parse.y#L8592-L8601 FIXNUM_MAXとINT_MAXから決まっていそう。環境依存かな。 実際のしきい値を書く必要はないと思うので、「極端に大きい値でなければ扱える」ぐらいに書くのが良いかなと思いました。
The definition looks loaded twice. I'm not sure why it is loaded twice, so could you make a small example to reproduce the problem? By the way, perhaps `rbs test`...