Git Product home page Git Product logo

doctree's Introduction

doctree's People

Contributors

artonx avatar hanachin avatar ima1zumi avatar iwadon avatar kachick avatar kimuraw avatar koic avatar ksss avatar kyanagi avatar moriq avatar nekomaho avatar no6v avatar nurse avatar ohai avatar okkez avatar osyo-manga avatar pocke avatar sanfrecce-osaka avatar scivola avatar sho-h avatar snoozer05 avatar swamp09 avatar tbpgr avatar tzmfreedom avatar u5surf avatar ujihisa avatar universato avatar yugui avatar yui-knk avatar znz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

doctree's Issues

Ruby 2.1.0のリファレンスでもrefineメソッドの説明に「警告が表示される」という記載がある

refinements機能はRuby 2.0.0で仮導入され、Ruby2.1.0で本採用された機能であるため、警告が表示されるのはRuby 2.0.0の場合だけだと思っております。ですが、Ruby2.1.0のリファレンスを見るとrefineメソッドに次のような記載があります。

[注意] refinements は 2.0 現在、実験的な機能として提供されています。以 降のバージョンで仕様が変更になる可能性があります。使用すると必ず警告が 表示されます。

Ruby 2.1.0での実際の動作は確認できていないのですが、もし2.1.0以降で警告が出ないようであれば、上記記述を@SInCE 2.1.0で非表示にしていただければと思います。

$SAFE=4 is obsolete

2.1 では $SAFE=4 is obsolete になっているのに
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fsafelevel.html
は昔の記述のままになっています。

同じページなので、ついでに書いてしまいますが「セーフレベルに関するその他の詳細」に * カレントディレクトリを $: に加えない とありますが、これはセーフレベルに関係なく入らなくなっているはずです。(いつのバージョンからかは調べていません。)

Kernel.#set_trace_func のバージョンごとの挙動について

klassのところで、バージョンごとに細かな違いを見つけました。

以下のversionで試しました。

  • ruby-1.8.7-p374 [ x86_64 ]
  • ruby-1.9.2-p320 [ x86_64 ]
  • ruby-1.9.3-p484 [ x86_64 ]
  • ruby-2.0.0-p195 [ x86_64 ]
  • ruby-2.0.0-p247 [ x86_64 ]
  • ruby-2.0.0-p353 [ x86_64 ]
  • ruby-2.1.0 [ x86_64 ]
puts "\n"
p [RUBY_VERSION, RUBY_PATCHLEVEL]
set_trace_func lambda {|*arg|
  p arg
}
class Foo
end
43.to_s

を実行すると1.8と1.9と2.0以上で微妙に挙動が異なります。

1.8.7では

["line", "trace.rb", 6, nil, #<Binding:0x7f6256248500>, false]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x7f6256248280>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x7f6256248208>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x7f6256247e48>, false]
["end", "trace.rb", 6, nil, nil, false]
["line", "trace.rb", 8, nil, #<Binding:0x7f6256247c18>, false]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x7f6256247a38>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x7f62562476a0>, Fixnum]

これは今のマニュアルどおりです。

1.9.2と1.9.3になると

["c-return", "trace.rb", 5, :set_trace_func, #<Binding:0x000000015fa1d0>, Kernel]
["line", "trace.rb", 6, nil, #<Binding:0x000000015f9fc8>, nil]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x000000015f9dc0>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x000000015f9be0>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x000000015f9a00>, nil]
["end", "trace.rb", 7, nil, #<Binding:0x000000015f9820>, nil]
["line", "trace.rb", 8, nil, #<Binding:0x000000015f9668>, nil]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x000000015f94b0>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x000000015f92a8>, Fixnum]

のように、

  • line class endのときklassnilになった
  • set_trace_func もc-returnイベントとして扱われるようになった

2.0.0以上になるとset_trace_funcの評価が変化して

["c-return", "trace.rb", 3, :set_trace_func, #<Binding:0x00000001addc10>, Kernel]

となります。5行目から3行目へと、lineが変化します。

パッチを作る上でご相談が2点あります。

  1. 上にあげたバージョン以外の検証も必要でしょうか? パッチレベルを含めて最低限、どのバージョンを検証すればいいか、アドバイスを頂けると幸いです。
  2. マニュアルのマクロの書き方なのですが、
#@since 1.8.7
["line", "trace.rb", 6, nil, #<Binding:0x7f6256248500>, false]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x7f6256248280>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x7f6256248208>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x7f6256247e48>, false]
["end", "trace.rb", 6, nil, nil, false]
["line", "trace.rb", 8, nil, #<Binding:0x7f6256247c18>, false]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x7f6256247a38>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x7f62562476a0>, Fixnum]
#@end

# => 1.8.7とそれ以降では例を全て変える必要あり

#@since 1.9.2
["c-return", "trace.rb", 5, :set_trace_func, #<Binding:0x000000015fa1d0>, Kernel]
#@since 2.0.0
["c-return", "trace.rb", 3, :set_trace_func, #<Binding:0x00000001addc10>, Kernel]
#@end
["line", "trace.rb", 6, nil, #<Binding:0x000000015f9fc8>, nil]
["c-call", "trace.rb", 6, :inherited, #<Binding:0x000000015f9dc0>, Class]
["c-return", "trace.rb", 6, :inherited, #<Binding:0x000000015f9be0>, Class]
["class", "trace.rb", 6, nil, #<Binding:0x000000015f9a00>, nil]
["end", "trace.rb", 7, nil, #<Binding:0x000000015f9820>, nil]
["line", "trace.rb", 8, nil, #<Binding:0x000000015f9668>, nil]
["c-call", "trace.rb", 8, :to_s, #<Binding:0x000000015f94b0>, Fixnum]
["c-return", "trace.rb", 8, :to_s, #<Binding:0x000000015f92a8>, Fixnum]
#@end

# => 1.9.2とそれ以降では一行目だけ変える必要あり

ではだめですよね :)
うまく分岐させる方法があったら教えてください。

String#gsub and String#scan

ブロック付きの gsub の置き換えなし版が scan になるので、説明か @see を追加すると良いのではないでしょうか。

Ruby 2.1.1版のドキュメントを提供する?

problem

docs.ruby-lang.orgには今のところ2.1.0版しかないようですが、今からRubyを始める人は2.1.1を入れると思うので、「リファレンスがない」と思われるのではないかとちょっと気になりました。

対策(案1)

2.1.1や、今後出る2.1.2, 2.1.3などについても項目を用意する。

  • pros: わかりやすい。
  • cons: いわゆるパッチレベルリリースごとに、docs.ruby-lang.orgの更新とリファレンス生成の追加を行う必要がある。

対策(案2)

docs.ruby-lang.orgのリンクを、"2.1.0" ではなく "2.1.x" という記述に変更する。

  • pros: メンテが不要なので楽。
  • cons: 2.1.0と2.1.1の間で「非互換とも考えられるバグ修正」が入ったときに困る?

一言

個人的には案2でよいような気がします(従来もパッチレベル単位のドキュメントは用意してなかったですし)。

クラス定義文

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2feval.html

クラス定義文の評価値を得ることはできません。

次の記事の「モジュール定義文」と同じく、「最後に評価した本体の式の値」ではないですか?

書式についても、次の記事の「モジュール定義文」の方は「本体」と書かれていますが、
クラス定義文の方は「式」と書かれているのも気になります。

一方、もし同名のクラスがすでにある場合はそれを使います。
そのときスーパー クラス式が指定されており、その結果と得たクラスのスーパークラスが
(equal? において) 違うときは新しいクラスを生成します。

これはどういう意味でしょうか?

class C1; end
class C2; end
class S < C1; end
class S < C2; end

こういうコードのことを言っているのでしょうか?

2.2.0対応残り

b8cde3c 現在、残り作業は以下です。

=== Core classes updates (outstanding ones only)

* Process
  * Extended method:
    * Process execution methods such as Process.spawn opens the file in write
      mode for redirect from [:out, :err].

=== Core classes compatibility issues (excluding feature bug fixes)

* Proc
  * incompatible changes:
    * ArgumentError is no longer raised when lambda Proc is passed as a
      block, and the number of yielded arguments does not match the formal
      arguments of the lambda, if just an array is yielded and its length
      matches.

* Process
  * Process execution methods such as Process.spawn opens the file in write
    mode for redirect from [:out, :err].
    Before Ruby 2.2, it was opened in read mode.

=== Stdlib updates (outstanding ones only)

* Rake
  * Updated to Rake 10.4.0.  For full release notes see:

    http://docs.seattlerb.org/rake/History_rdoc.html#label-10.4.0

* RubyGems
  * Updated to RubyGems 2.4.2.  For full release notes see:

    http://docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01

* XMLRPC
  * Added new parser class named LibXMLStreamParser.

=== Stdlib compatibility issues (excluding feature bug fixes)

* time.rb
  * Time.parse, Time.strptime, Time.rfc2822, Time.xmlschema may produce
    fixed-offset Time objects.
    It is happen when usual localtime doesn't preserve the offset from UTC.
  * Time.httpdate produces always UTC Time object.
  * Time.strptime raises ArgumentError when no date information.

=== C API updates

* すべて

Mutex#unlock の戻り値が古い

1.9 からの thread.c の実装だと nil は返らなくなってるようです。

1.8 でも thread.rb ではるりまの記述のような動きに見えますが、Mutex.new.unlock くらいしかしていませんが、実行してみると thread.c の方の Mutex の動きに見えました(1.8 でも ThreadError でした)。そちらも見ると大変そうなので、1.9 以降の Mutex#unlock の戻り値の修正だけします。

symrefの丸括弧の例

symref.rd の「()」(丸括弧)のところで、「例の内側のカッコ」「例の外側のカッコ」とありますが、例は (true and false) とだけあり、外側のカッコに相当する例がないように見受けられます。

1.9.2対応残り

https://bugs.ruby-lang.org/issues/8832#note-10 より。(curses と date も 1.9.1 未対応と思うため追加)

  • Kernel
    • incompatible changes:
      • Kernel#instance_eval yields the receiver.

      • Kernel#exec

      • Kernel#spawn

      • Kernel#system

      • Kernel#(...`)
        ..etc.

        On Windows, the current directory is no longer implicitly
        prepended to the default command search path, just like other
        platforms.

標準ライブラリは以下が未対応のようです。大体は 1.9.1 相当なのではないかと思います。(こちらは丸ごと非対応なので 1 行のみにしました)

  • curses
  • date
  • digest
  • rss
  • json

2.0.0対応残り

https://bugs.ruby-lang.org/issues/8832#note-10 より。

2.0.0 の NEWS 分は以下でした。

  • Added keyword arguments.
  • Default source encoding is changed to UTF-8. (was US-ASCII)
  • No warning for unused variables starting with '_'
  • Module
    • added method:
      • added Module#prepend which is similar to Module#include,
        however a method in the prepended module overrides the
        corresponding method in the prepending module.
      • added Module.prepended and Module.prepend_features, similar
        to included and append_features.
  • Zlib::GzipReader#lines
  • Zlib::GzipReader#bytes
    These methods are deprecated in favor of each_line, each_byte,
    each_char and each_codepoint.
  • Fixnum
  • Bignum
  • Float
    Fixnums, Bignums and Floats are frozen.
  • cgi
  • io/console
    • extended method:
      • IO#raw, IO#raw!, and IO#getch accept keyword arguments, :min and :time.
  • io/wait
  • json
  • net/http
  • net/imap
  • openssl?
  • rake
  • rubygems
  • shellwords
  • tmpdir
  • zlib
  • NUM2SHORT() and NUM2USHORT() added. They are similar to NUM2INT, but short.
  • rb_newobj_of() and NEWOBJ_OF() added. They create a new object of a given class.

refm/api/ASSIGN.low 中の Win32API や soap などに何かマークを付ける

1.8.7 がサポート終了のため、対応が終わってないものの 1.9 から外れている以下などのライブラリについては ASSIGN.low で対象外の旨を STATUS に追記したいです。

  • Win32API
  • soap
  • wsdl
  • xsd

deprecated とか unbundled などどうでしょうか?

# LIBRARY_NAME                  OWNER           STATUS
#---------------------------------------------------------
Win32API                                        deprecated
bigdecimal                      sho-h           done

fiddleの関数名に関する記述は正しい?

"与えられた関数名の最初の文字が大文字なら、 定義されるメソッド名の最初の文字は小文字になります。" の部分が合ってるかわからないみたいです。これは1.9時代の名残とかだったりするんでしょうか?

なお、試されたのは以下のコードのようでした。

require "fiddle"

module X
  extend Fiddle::Importer
  dlload "kernel32"
  extern "void CloseHandle()"
end
...

メソッドの呼び出し

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2feval.html

Object#instance_eval の三つだけが例外で、以下のように変更されます。

Object.instance_eval
self がそのレシーバ、class がそのレシーバの特異クラス

instance_evalメソッドの表記がクラスメソッドになっています。
あと、instance_evalメソッドが定義されているのはBasicObjectクラスなんですが、どうなんでしょう。

StringIO#openにブロックを渡した際の戻り値が違う?

--- open(string = '', mode = 'r+') {|io| ... } -> StringIO

--- open(string = '', mode = 'r+') {|io| ... } -> StringIO

動作を見る限りでは、StringIO#openにブロックを渡した場合は、StringIO(のインスタンス)ではなくブロックを評価した結果が返ってきているように思います。

% ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x64-mswin64_100]

% irb
irb(main):001:0> require "stringio"
=> true
irb(main):002:0> StringIO.open { |f| f.write "hello" }
=> 5
irb(main):003:0> StringIO.open { |f| f.write "hello"; 123 }
=> 123
irb(main):004:0> StringIO.open { |f| f.write "hello"; f }
=> #<StringIO:0x000000020db428>
irb(main):005:0>

正規表現の\u{}の説明が古い?

いつからかは確認していないのですが、正規表現の中の \u{...} という書き方では16進4桁以上のユニコード文字を指定できるようになっているようです。

ソースを見ると、6桁までいけそうです。(↓で6となっているから。)

https://github.com/ruby/ruby/blob/44a9509f2ff2be85b97ade9806857e0948c29a1b/parse.y#L5728

    codepoint = scan_hex(lex_p, 6, &numlen);

ただ、今のドキュメントは \u{HHHH HHHH ....} ユニコード文字列 (\uHHHH と同じ) と書いているので4桁までしか使えないように読めてしまいます。なので、次のように変更するのはどうでしょうか?

diff --git a/refm/doc/spec/regexp19 b/refm/doc/spec/regexp19
index 7533910..b300723 100644
--- a/refm/doc/spec/regexp19
+++ b/refm/doc/spec/regexp19
@@ -71,7 +71,7 @@
   \M-x         メタ (x|0x80)
   \M-\C-x      メタ制御文字 
   \uHHHH       ユニコード文字 (HHHH の16進数4桁)
-  \u{HHHH HHHH ....} ユニコード文字列 (\uHHHH と同じ)
+  \u{HHHHHH HHHHHH ....} ユニコード文字列 (HHHHHH の16進数6桁まで指定可能。 \u{20} などというように6桁より少ない桁でも指定可能。)
 \b は文字クラス内でのみ有効な表現です。文字クラスの外では
 単語の区切りを表すメタ文字列と解釈されます。

懸念点は、どのバージョンから4桁以上も書けるようになったか調べていないので、 @since なしでこれを入れても大丈夫なのかどうかわからないところです。

私は、今日のtrunkで試しました。

%  /tmp/local/bin/ruby -v -e 'p(/[\u{20}]/ =~ " ")'
ruby 2.2.0dev (2014-02-23 trunk 45151) [x86_64-linux]
0

&&, || の定義が不十分

&&, ||, and, or を用いた式の評価結果がどうなるかは「演算子式」の「and」「or」の項にしか書かれていないようです。

http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2foperator.html#and
http://docs.ruby-lang.org/ja/2.2.0/doc/spec=2foperator.html#or

しかし,これでは結果の真/偽がどうなるかは分かっても,評価結果が具体的にどのようなオブジェクトになるのかが分かりません。

試した限りでは

  • exp1 || exp2 の評価結果は,exp1 の評価結果が真ならそれになり,偽なら exp2 の評価結果になる
  • exp1 && exp2 の評価結果は,exp1 の評価結果が偽ならそれになり,真なら exp2 の評価結果になる

ようなのですが,これが Ruby の仕様なのかどうか確認できればと思います。

Object クラスの `!~` メソッドが目次では `!` になっている

Object クラスの !~ メソッドが目次では ! になっています。
http://docs.ruby-lang.org/ja/2.1.0/class/Object.html

原因は全然追��えていませんが、bitclust htmlfile の処理の途中で ID(?) が Object/i.=21._builtin のようになっていて、上記ページのページ内リンクの URL も http://docs.ruby-lang.org/ja/2.1.0/class/Object.html#I_--21 となっているので、bitclust の処理過程のどこかで ~ が抜けてしまっているのかな、という気がします。

ここに報告すべきじゃなかったらすみません。

1.9.3対応残り

https://bugs.ruby-lang.org/issues/8832#note-2 より。

組み込みは以下が未対応のようです。

  • pack-template: S> から l!< までがない

標準ライブラリは以下が未対応のようです。

  • date
  • json
  • minitest
  • net/http: Net::HTTPRequest#set_form だけない?
  • openssl?
  • rake
  • rexml
  • rubygems
  • webrick

正規表現の \s に \v が抜けている?

「正規表現」の「文字クラス」の「文字クラスの略記法」において,

\s 空白文字 [ \t\r\n\f]
\S 非空白文字 [^ \t\r\n\f]

となっているのですが,

p 128.times.map(&:chr).join.scan(/\s/) #=> ["\t", "\n", "\v", "\f", "\r", " "]

なので,\v が抜けているような気がします。

Errno::EXXX.=== は 正しくは SystemCallError.===

cdf0c85 で一度移動されているようですが、Errno::EXXX で共通して定義されたメソッドという訳ではなく、親の SystemCallError でのみ定義してあるようです。なので、(完全に元にという訳ではないですが、) SystemCallError.=== にするのが正しいと思いました。

$ ruby -ve 'p Errno::ENOENT.method(:===)'
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux]
#<Method: Errno::ENOENT(SystemCallError).===>
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
#<Method: Errno::ENOENT(SystemCallError).===>

正規表現で\x{}を使えない?

正規表現のドキュメントには \x{7HHHHHHH} コードポイント値の16進数表現 (7HHHHHHH の16進数で表現) とあるのですが、今のtrunkだと使えないみたいです。

% /tmp/local/bin/ruby -v -e '/\x{00000020}/'
ruby 2.2.0dev (2014-02-23 trunk 45151) [x86_64-linux]
-e:1: invalid hex escape
/\x{00000020}/
   ^
-e:1: warning: possibly useless use of a literal in void context
-e:1: syntax error, unexpected '{', expecting end-of-input
/\x{00000020}/
    ^

この記述は正規表現のドキュメントをリニューアルしたとき ad88ff3 に追加されたようです。たぶん、この頃は使えたのでしょうが、今は使えなくなっているようなので、 @if を追加するなどして新しいバージョンでは隠れるようにするのはどうでしょうか?

いつから使えなくなったかは確認していないのでどう @if を指定すればよいかは提案できないのですが。。。

div はメソッド / の呼び出しとして定義?

Nemeric#div に

div はメソッド / の呼び出しとして定義されています。

とあるのですが,「呼び出しとして定義」ってどういう意味でしょうか。素直に読むと x/yx.div(y) が同じ値を返すように読めます。

しかし,

3.0.div(2) #=> 1
3.0/2 #=> 1.5

のように違っています。

while/untilが返す値

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fprogram.html

値を返さない式の例
while, until, while 修飾式, until 修飾式

http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcontrol.html

while は nil を返します。
while 修飾した式は nil を返します。
until は nil を返します。
until 修飾した式は nil を返します。

「値を返さない」と「nilを返す」は大違いではないですか?
なぜなら、 http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcontrol.html には、

値を返さない式を代入式の右辺に置くと parse error になります

と書いてあるからです。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.