[ruby-dev:49791] [Ruby trunk Bug#12748] irb の評価結果が2回表示されます
From:
dogatana@...
Date:
2016-09-11 09:49:45 UTC
List:
ruby-dev #49791
Issue #12748 has been updated by Toshihiko Ichida.
io.c の io_fwrite() に問題があるようです。
この関数内で #ifdef _WIN32 内の、rb_w32_write_console() と、その下の io_binwrite() の両方が呼び出されるために、2回出力されています。
リダイレクトすると片方だけになります。
~~~
> ruby -e 'p 1'
# io_fwrite: rb_w32
handle: 14c
dwMode: 7
1# io_fwrite: io_binwrite
# io_fwrite: rb_w32
handle: 14c
dwMode: 7
# io_fwrite: io_binwrite
1
> ruby -e 'p 1' > dump.txt
# io_fwrite: io_binwrite
# io_fwrite: io_binwrite
~~~
同様の記述が rb_write_error_str() にもあり、こちらも確認が必要かもしれません。
rb_w32_write_console() と コンソール出力かどうかの判定方法が異なるのが気になります。
win32.c の rb_w32_write_console() を眺めたところ、ENABLE_VIRTUAL_TERMINAL_PROCESSING を判定しているので、色出力を対応するための処理のようですね。
2.4 からの追加でしょうか。
----------------------------------------
Bug #12748: irb の評価結果が2回表示されます
https://bugs.ruby-lang.org/issues/12748#change-60470
* Author: Toshihiko Ichida
* Status: Feedback
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.4.0preview2 (2016-09-09 trunk 56129) [i386-mswin32_140]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
irbを実行すると次のように評価結果が2回表示されます。
副作用のある呼び出しをしても副作用そのものは1回だけ実行されているので、表示上だけの問題でないかと思います。
作成: Visual Studio 2015 Community
実行: Windows 10 Pro 64bit
~~~
*****@*****-PC C:\usr\local\bin
> irb
irb(main):001:0> irb(main):001:0> 1
=> 1
=> 1
irb(main):002:0> irb(main):002:0> 1 + 2
=> 3
=> 3
irb(main):003:0> irb(main):003:0> "ruby"
=> "ruby"
=> "ruby"
irb(main):004:0> irb(main):004:0> exit
~~~
--
https://bugs.ruby-lang.org/