ml.ruby-lang.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

ruby-dev

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
ruby-dev@ml.ruby-lang.org

November 2023

  • 1 participants
  • 7 discussions
[ruby-dev:52063] [Ruby master Bug#11183] Cumulative error on Complex::I ** 100000000000000000000000000000000
by kyanagi (Kouhei Yanagita) 16 Nov '23

16 Nov '23
Issue #11183 has been updated by kyanagi (Kouhei Yanagita). https://github.com/ruby/ruby/pull/8931 self の偏角が45度の整数倍であるような場合に特別扱いするようにしてみました。 ``` 1i ** (10 ** 100) #=> 1+0i 1i ** (10 ** 100 + 1) #=> 0+1i (1+1i) ** (10 ** 100) # warning: in a**b, b may be too big #=> (Infinity+0.0i) (1+1i) ** (10 ** 100 + 1) # warning: in a**b, b may be too big #=> (Infinity+Infinity*i) ``` * self が 1, -1, 1i, -1i の場合 * bignum 乗であっても正しい答えを返します。 * self が実数または純虚数で絶対値が1でない場合 * 偏角が 45 度の奇数倍である場合 * 小さい数(大きい数)が0(Infinity)となりますが、その前提のもとで正しい答えを返します。 絶対値が 1 で偏角が 45 度の奇数倍である複素数は、実部・虚部(1/\sqrt{2})をFloatで正確に表現することはできないため、 偏角が45度の奇数倍である複素数オブジェクトの n 乗は、絶対値が1からずれていくことになります。 なお、60 度など他の角度についてですが、偏角が 45 度の整数倍を除く有理数度である複素数は、Complex では正確には表現できません。(実部または虚部のいずれかが無理数になる) 従って、Complex オブジェクトの偏角は 45 度の整数倍であるか無理数であるかになるため、 偏角を n 倍することで n 乗を求める計算が誤差なしでできるのは、偏角が 45 度の整数倍の場合に限られることになります。 ---------------------------------------- Bug #11183: Cumulative error on Complex::I ** 100000000000000000000000000000000 https://bugs.ruby-lang.org/issues/11183#change-105340 * Author: ko1 (Koichi Sasada) * Status: Open * Priority: Normal * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ``` p Complex::I ** 100000000000000000000000000000000 ``` が、32bit 環境だと、 ``` ruby 2.3.0dev (2015-05-21 trunk 50502) [i386-mswin32_110] t.rb:1: warning: in a**b, b may be too big (-0.08483712490438944+1.5651333429325577e+32i) ``` こんな感じで、変な値が出ます。 ``` # ubuntu 64bit だと (0.9943722416631883-0.10594264962575697i) ``` できれば、こっちも 1+0i にぴたっとしてるといいのでしょうが。 この問題に対する、うささんのコメント: > 真面目にコードを読むと、Complex#** は引数(指数)がFixnumでない場合は複素数をいったん極座標形式に変換してからrとθの双方をそれぞれ計算し、最後にf_complex_polarを使ってComplexオブジェクトにしてるのですが、θはFloatなので当然に誤差が蓄積し、という感じです。まあ、誤差が蓄積しなかったとしても、f_complex_polarの中でせっかくθが0°・90°・180°・270°のケースを特別扱いしようとしてるのにdouble値を==で比較してるのでまったく救われそうにない、という感じではありますが。 > θをn倍する計算に対して、nが整数である場合は360°は0°と同じという性質を利用して誤差を蓄積しない計算をすればだいぶマシになるとは思いますが、しかしめんどくさいっすね。 ---Files-------------------------------- my_complex.diff (2.09 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52062] [Ruby master Bug#18024] Ractor crashes when connections are closed in multiple Ractors
by tagomoris (Satoshi Tagomori) 13 Nov '23

13 Nov '23
Issue #18024 has been updated by tagomoris (Satoshi Tagomori). I retried this script on my laptop (macOS Ventura) and Ruby 3.2.2, and I also couldn't reproduce the crash. So the problem could be an environment-specific one. Could someone close this? ---------------------------------------- Bug #18024: Ractor crashes when connections are closed in multiple Ractors https://bugs.ruby-lang.org/issues/18024#change-105322 * Author: tagomoris (Satoshi Tagomori) * Status: Assigned * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- When multiple Ractors will accept and close connections, that script caused the crash shown below. This pattern is taken when we want to distribute the overhead of `accept` to multiple CPU cores. Script: ``` require 'socket' try_times = 10 worker_num = 2 listener = TCPServer.new("127.0.0.1", 8228) listener.listen(100) workers = worker_num.times.map do |i| Ractor.new(i, listener.dup) do |index, sock| while conn = sock.accept begin data = conn.read p "Worker|#{index} Data: #{data}" conn.close rescue => e p "Worker|#{index} #{e.full_message}" end end rescue => e $stderr.puts "Error, worker#{index}: #{e.full_message}" end end p "Starting a sender" sender = Ractor.new(try_times) do |tries| tries.times.each do s = TCPSocket.new("127.0.0.1", 8228) s.write("yay") ensure s.close rescue nil end end sender.take workers.each{|w| w.take} p "End" ``` Crash report: ``` <internal:ractor>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. "Starting a sender" "Worker|1 Data: yay" snippets/ractor_accept.rb:30: [BUG] Bus Error at 0x00000014000001f5 ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20] -- Crash Report log information -------------------------------------------- See Crash Report log file under the one of following: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports. -- Control frame information ----------------------------------------------- c:0006 p:---- s:0023 e:000022 CFUNC :close c:0005 p:0028 s:0019 e:000017 BLOCK snippets/ractor_accept.rb:30 [FINISH] c:0004 p:---- s:0014 e:000013 CFUNC :times c:0003 p:---- s:0011 e:000010 CFUNC :each c:0002 p:0008 s:0007 e:000006 BLOCK snippets/ractor_accept.rb:26 [FINISH] c:0001 p:---- s:0003 e:000002 (none) [FINISH] -- Ruby level backtrace information ---------------------------------------- snippets/ractor_accept.rb:26:in `block in <main>' snippets/ractor_accept.rb:26:in `each' snippets/ractor_accept.rb:26:in `times' snippets/ractor_accept.rb:30:in `block (2 levels) in <main>' snippets/ractor_accept.rb:30:in `close' -- Other runtime information ----------------------------------------------- * Loaded script: snippets/ractor_accept.rb * Loaded features: 0 enumerator.so 1 thread.rb 2 rational.so 3 complex.so 4 ruby2_keywords.rb 5 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 6 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 7 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/rbconfig.rb 8 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/compatibility.rb 9 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/defaults.rb 10 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/deprecate.rb 11 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/errors.rb 12 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/exceptions.rb 13 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/basic_specification.rb 14 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/stub_specification.rb 15 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/text.rb 16 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/user_interaction.rb 17 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/specification_policy.rb 18 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/util/list.rb 19 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/platform.rb 20 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/version.rb 21 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/requirement.rb 22 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/specification.rb 23 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/util.rb 24 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/dependency.rb 25 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_gem.rb 26 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 27 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/monitor.rb 28 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb 29 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_warn.rb 30 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems.rb 31 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/path_support.rb 32 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/version.rb 33 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/core_ext/name_error.rb 34 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/levenshtein.rb 35 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/jaro_winkler.rb 36 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checker.rb 37 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb 38 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb 39 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers.rb 40 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/method_name_checker.rb 41 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/key_error_checker.rb 42 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/null_checker.rb 43 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/tree_spell_checker.rb 44 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/require_path_checker.rb 45 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/formatters/plain_formatter.rb 46 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean.rb 47 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 48 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 49 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/socket.rb * Process memory map: 1042f8000-1042fc000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 1042fc000-104300000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104300000-104304000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104304000-104308000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104308000-104310000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104310000-104314000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104314000-104318000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104318000-10431c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10431c000-104320000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104320000-104328000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104328000-10432c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10432c000-104330000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104330000-104338000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104338000-10433c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10433c000-104340000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104340000-104348000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104348000-10434c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10434c000-104350000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104350000-104354000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104354000-104394000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104394000-104398000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104398000-10439c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10439c000-1043a0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 1043a0000-1043a4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 1043a4000-1043a8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043a8000-1043ac000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043ac000-1043b0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043b0000-1043b4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043b4000-1043b8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043b8000-1043bc000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043bc000-1043c0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043c0000-1043c4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043c4000-1043e8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043e8000-1043ec000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043ec000-1043f0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043f0000-104400000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 104400000-104404000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104404000-104408000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104408000-10440c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 10440c000-104410000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104568000-1045e8000 r-x /usr/lib/dyld 1045e8000-1045f0000 r-- /usr/lib/dyld 1045f0000-1045f4000 rw- /usr/lib/dyld 1045f4000-104628000 rw- /usr/lib/dyld 104628000-10466c000 r-- /usr/lib/dyld 10466c000-104670000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104670000-104974000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104974000-10497c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 10497c000-104980000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104980000-10498c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 10498c000-104a7c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104a7c000-104a80000 --- 104a80000-104b24000 rw- 104b24000-104b28000 --- 104b28000-104bcc000 rw- 104bcc000-104bd0000 --- 104bd0000-104c74000 rw- 104c74000-104c78000 --- 104c78000-104d1c000 rw- 104d1c000-104d20000 --- 104d20000-104dc4000 rw- 104dc4000-104dc8000 --- 104dc8000-104e6c000 rw- 104e6c000-104e70000 --- 104e70000-104f14000 rw- 104f14000-104f18000 --- 104f18000-104fbc000 rw- 104fbc000-104fc0000 --- 104fc0000-105064000 rw- 105064000-105068000 --- 105068000-10510c000 rw- 10510c000-105110000 --- 105110000-1051b4000 rw- 1051b4000-1051b8000 --- 1051b8000-10525c000 rw- 10525c000-105260000 --- 105260000-105304000 rw- 105304000-105308000 --- 105308000-1053ac000 rw- 1053ac000-1053b0000 --- 1053b0000-105454000 rw- 105454000-105458000 --- 105458000-1054fc000 rw- 1054fc000-105500000 --- 105500000-1055a4000 rw- 1055a4000-1055a8000 --- 1055a8000-10564c000 rw- 10564c000-105650000 --- 105650000-1056f4000 rw- 1056f4000-1056f8000 --- 1056f8000-10579c000 rw- 10579c000-1057a0000 --- 1057a0000-105844000 rw- 105844000-105848000 --- 105848000-1058ec000 rw- 1058ec000-1058f0000 --- 1058f0000-105994000 rw- 105994000-105998000 --- 105998000-105a3c000 rw- 105a3c000-105a40000 --- 105a40000-105ae4000 rw- 105ae4000-105ae8000 --- 105ae8000-105b8c000 rw- 105b8c000-105b90000 --- 105b90000-105c34000 rw- 105c34000-105c38000 --- 105c38000-105cdc000 rw- 105cdc000-105ce0000 --- 105ce0000-105d84000 rw- 105d84000-105d88000 --- 105d88000-105e2c000 rw- 105e2c000-105e30000 --- 105e30000-105ed4000 rw- 105ed4000-105ed8000 --- 105ed8000-105f7c000 rw- 131e00000-131f00000 rw- 132000000-132800000 rw- 132800000-133000000 rw- 138000000-138800000 rw- 138800000-139000000 rw- 139000000-139800000 rw- 139800000-13a000000 rw- 13a000000-13a800000 rw- 13a800000-13b000000 rw- 13b000000-13b800000 rw- 13b800000-13c000000 rw- 13c000000-13c800000 rw- 13c800000-13d000000 rw- 13d000000-13d800000 rw- 13d800000-13e000000 rw- 13e000000-13e800000 rw- 13e800000-13f000000 rw- 13f000000-13f800000 rw- 13f800000-140000000 rw- 141e00000-141f00000 rw- 141f00000-142000000 rw- 142000000-142800000 rw- 148000000-148800000 rw- 148800000-149000000 rw- 149000000-149800000 rw- 149800000-14a000000 rw- 14a000000-14a800000 rw- 14a800000-14b000000 rw- 14b000000-14b800000 rw- 14b800000-14c000000 rw- 14c000000-14c800000 rw- 14c800000-14d000000 rw- 14d000000-14d800000 rw- 14d800000-14e000000 rw- 14e000000-14e800000 rw- 14e800000-14f000000 rw- 14f000000-14f800000 rw- 14f800000-150000000 rw- 151e00000-151f00000 rw- 151f00000-152000000 rw- 152000000-152800000 rw- 152800000-153000000 rw- 153000000-155000000 rw- 155000000-155004000 rw- 155100000-155200000 rw- 158000000-158800000 rw- 158800000-159000000 rw- 159000000-159800000 rw- 159800000-15a000000 rw- 15a000000-15a800000 rw- 15a800000-15b000000 rw- 15b000000-15b800000 rw- 15b800000-15c000000 rw- 15c000000-15c800000 rw- 15c800000-15d000000 rw- 15d000000-15d800000 rw- 15d800000-15e000000 rw- 15e000000-15e800000 rw- 15e800000-15f000000 rw- 15f000000-15f800000 rw- 15f800000-160000000 rw- 167b08000-16b30c000 --- 16b30c000-16bb08000 rw- 16bb08000-16bb0c000 --- 16bb0c000-16bb94000 rw- 16bb94000-16bb98000 --- 16bb98000-16bda0000 rw- 16bda0000-16bda4000 --- 16bda4000-16bfac000 rw- 16bfac000-16bfb0000 --- 16bfb0000-16c1b8000 rw- 180000000-190000000 r-- 190000000-1a0000000 r-- 1a0000000-1b0000000 r-- 1b0000000-1c0000000 r-- 1c0000000-1d0000000 r-- 1d0000000-1e0000000 r-- 1e0000000-1e6000000 r-- 1e6000000-1e6e2c000 r-- 1e6e2c000-1e8000000 rw- 1e8000000-1f0000000 r-- 1f0000000-1f2000000 r-- 1f2000000-1f2bcc000 r-- 1f2bcc000-1f4864000 rw- 1f4864000-1f6000000 r-- 1f6000000-1f6864000 r-- 1f6864000-1fa57c000 r-- 1fa57c000-1fc000000 r-- 1fc000000-200000000 r-- 200000000-210000000 r-- 210000000-220000000 r-- 220000000-230000000 r-- 230000000-240000000 r-- 240000000-250000000 r-- 250000000-260000000 r-- 260000000-270000000 r-- 270000000-280000000 r-- fc0000000-1000000000 --- 1000000000-7000000000 --- [IMPORTANT] Don't forget to include the Crash Report log file under DiagnosticReports directory in bug reports. Abort trap: 6 ``` ---Files-------------------------------- ruby_2021-07-06-231613_Moris-Macbook-Air.crash (35.9 KB) ruby_2021-08-24-203317_Moris-Macbook-Air.crash (17.4 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52061] [Ruby master Bug#18024] Ractor crashes when connections are closed in multiple Ractors
by dazuma (Daniel Azuma) 13 Nov '23

13 Nov '23
Issue #18024 has been updated by dazuma (Daniel Azuma). Also not able to reproduce on `ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]` or `ruby 3.3.0dev (2023-11-13T21:00:10Z master e8ab3f7010) [x86_64-darwin23]`. I wonder if this was an environment issue in the original report. ---------------------------------------- Bug #18024: Ractor crashes when connections are closed in multiple Ractors https://bugs.ruby-lang.org/issues/18024#change-105315 * Author: tagomoris (Satoshi Tagomori) * Status: Assigned * Priority: Normal * Assignee: ko1 (Koichi Sasada) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- When multiple Ractors will accept and close connections, that script caused the crash shown below. This pattern is taken when we want to distribute the overhead of `accept` to multiple CPU cores. Script: ``` require 'socket' try_times = 10 worker_num = 2 listener = TCPServer.new("127.0.0.1", 8228) listener.listen(100) workers = worker_num.times.map do |i| Ractor.new(i, listener.dup) do |index, sock| while conn = sock.accept begin data = conn.read p "Worker|#{index} Data: #{data}" conn.close rescue => e p "Worker|#{index} #{e.full_message}" end end rescue => e $stderr.puts "Error, worker#{index}: #{e.full_message}" end end p "Starting a sender" sender = Ractor.new(try_times) do |tries| tries.times.each do s = TCPSocket.new("127.0.0.1", 8228) s.write("yay") ensure s.close rescue nil end end sender.take workers.each{|w| w.take} p "End" ``` Crash report: ``` <internal:ractor>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. "Starting a sender" "Worker|1 Data: yay" snippets/ractor_accept.rb:30: [BUG] Bus Error at 0x00000014000001f5 ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [arm64-darwin20] -- Crash Report log information -------------------------------------------- See Crash Report log file under the one of following: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports. -- Control frame information ----------------------------------------------- c:0006 p:---- s:0023 e:000022 CFUNC :close c:0005 p:0028 s:0019 e:000017 BLOCK snippets/ractor_accept.rb:30 [FINISH] c:0004 p:---- s:0014 e:000013 CFUNC :times c:0003 p:---- s:0011 e:000010 CFUNC :each c:0002 p:0008 s:0007 e:000006 BLOCK snippets/ractor_accept.rb:26 [FINISH] c:0001 p:---- s:0003 e:000002 (none) [FINISH] -- Ruby level backtrace information ---------------------------------------- snippets/ractor_accept.rb:26:in `block in <main>' snippets/ractor_accept.rb:26:in `each' snippets/ractor_accept.rb:26:in `times' snippets/ractor_accept.rb:30:in `block (2 levels) in <main>' snippets/ractor_accept.rb:30:in `close' -- Other runtime information ----------------------------------------------- * Loaded script: snippets/ractor_accept.rb * Loaded features: 0 enumerator.so 1 thread.rb 2 rational.so 3 complex.so 4 ruby2_keywords.rb 5 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 6 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 7 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/rbconfig.rb 8 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/compatibility.rb 9 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/defaults.rb 10 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/deprecate.rb 11 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/errors.rb 12 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/exceptions.rb 13 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/basic_specification.rb 14 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/stub_specification.rb 15 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/text.rb 16 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/user_interaction.rb 17 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/specification_policy.rb 18 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/util/list.rb 19 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/platform.rb 20 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/version.rb 21 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/requirement.rb 22 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/specification.rb 23 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/util.rb 24 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/dependency.rb 25 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_gem.rb 26 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 27 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/monitor.rb 28 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb 29 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/core_ext/kernel_warn.rb 30 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems.rb 31 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/rubygems/path_support.rb 32 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/version.rb 33 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/core_ext/name_error.rb 34 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/levenshtein.rb 35 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/jaro_winkler.rb 36 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checker.rb 37 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb 38 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb 39 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/name_error_checkers.rb 40 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/method_name_checker.rb 41 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/key_error_checker.rb 42 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/null_checker.rb 43 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/tree_spell_checker.rb 44 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/spell_checkers/require_path_checker.rb 45 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean/formatters/plain_formatter.rb 46 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/did_you_mean.rb 47 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 48 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 49 /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/socket.rb * Process memory map: 1042f8000-1042fc000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 1042fc000-104300000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104300000-104304000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104304000-104308000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/bin/ruby 104308000-104310000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104310000-104314000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104314000-104318000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104318000-10431c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10431c000-104320000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104320000-104328000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104328000-10432c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10432c000-104330000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104330000-104338000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104338000-10433c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10433c000-104340000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104340000-104348000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104348000-10434c000 --- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10434c000-104350000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104350000-104354000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104354000-104394000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104394000-104398000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 104398000-10439c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 10439c000-1043a0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 1043a0000-1043a4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/encdb.bundle 1043a4000-1043a8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043a8000-1043ac000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043ac000-1043b0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043b0000-1043b4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/enc/trans/transdb.bundle 1043b4000-1043b8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043b8000-1043bc000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043bc000-1043c0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043c0000-1043c4000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/monitor.bundle 1043c4000-1043e8000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043e8000-1043ec000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043ec000-1043f0000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 1043f0000-104400000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/socket.bundle 104400000-104404000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104404000-104408000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104408000-10440c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 10440c000-104410000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/ruby/3.0.0/arm64-darwin20/io/wait.bundle 104568000-1045e8000 r-x /usr/lib/dyld 1045e8000-1045f0000 r-- /usr/lib/dyld 1045f0000-1045f4000 rw- /usr/lib/dyld 1045f4000-104628000 rw- /usr/lib/dyld 104628000-10466c000 r-- /usr/lib/dyld 10466c000-104670000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104670000-104974000 r-x /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104974000-10497c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 10497c000-104980000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104980000-10498c000 rw- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 10498c000-104a7c000 r-- /Users/tagomoris/.rbenv/versions/3.0.0/lib/libruby.3.0.dylib 104a7c000-104a80000 --- 104a80000-104b24000 rw- 104b24000-104b28000 --- 104b28000-104bcc000 rw- 104bcc000-104bd0000 --- 104bd0000-104c74000 rw- 104c74000-104c78000 --- 104c78000-104d1c000 rw- 104d1c000-104d20000 --- 104d20000-104dc4000 rw- 104dc4000-104dc8000 --- 104dc8000-104e6c000 rw- 104e6c000-104e70000 --- 104e70000-104f14000 rw- 104f14000-104f18000 --- 104f18000-104fbc000 rw- 104fbc000-104fc0000 --- 104fc0000-105064000 rw- 105064000-105068000 --- 105068000-10510c000 rw- 10510c000-105110000 --- 105110000-1051b4000 rw- 1051b4000-1051b8000 --- 1051b8000-10525c000 rw- 10525c000-105260000 --- 105260000-105304000 rw- 105304000-105308000 --- 105308000-1053ac000 rw- 1053ac000-1053b0000 --- 1053b0000-105454000 rw- 105454000-105458000 --- 105458000-1054fc000 rw- 1054fc000-105500000 --- 105500000-1055a4000 rw- 1055a4000-1055a8000 --- 1055a8000-10564c000 rw- 10564c000-105650000 --- 105650000-1056f4000 rw- 1056f4000-1056f8000 --- 1056f8000-10579c000 rw- 10579c000-1057a0000 --- 1057a0000-105844000 rw- 105844000-105848000 --- 105848000-1058ec000 rw- 1058ec000-1058f0000 --- 1058f0000-105994000 rw- 105994000-105998000 --- 105998000-105a3c000 rw- 105a3c000-105a40000 --- 105a40000-105ae4000 rw- 105ae4000-105ae8000 --- 105ae8000-105b8c000 rw- 105b8c000-105b90000 --- 105b90000-105c34000 rw- 105c34000-105c38000 --- 105c38000-105cdc000 rw- 105cdc000-105ce0000 --- 105ce0000-105d84000 rw- 105d84000-105d88000 --- 105d88000-105e2c000 rw- 105e2c000-105e30000 --- 105e30000-105ed4000 rw- 105ed4000-105ed8000 --- 105ed8000-105f7c000 rw- 131e00000-131f00000 rw- 132000000-132800000 rw- 132800000-133000000 rw- 138000000-138800000 rw- 138800000-139000000 rw- 139000000-139800000 rw- 139800000-13a000000 rw- 13a000000-13a800000 rw- 13a800000-13b000000 rw- 13b000000-13b800000 rw- 13b800000-13c000000 rw- 13c000000-13c800000 rw- 13c800000-13d000000 rw- 13d000000-13d800000 rw- 13d800000-13e000000 rw- 13e000000-13e800000 rw- 13e800000-13f000000 rw- 13f000000-13f800000 rw- 13f800000-140000000 rw- 141e00000-141f00000 rw- 141f00000-142000000 rw- 142000000-142800000 rw- 148000000-148800000 rw- 148800000-149000000 rw- 149000000-149800000 rw- 149800000-14a000000 rw- 14a000000-14a800000 rw- 14a800000-14b000000 rw- 14b000000-14b800000 rw- 14b800000-14c000000 rw- 14c000000-14c800000 rw- 14c800000-14d000000 rw- 14d000000-14d800000 rw- 14d800000-14e000000 rw- 14e000000-14e800000 rw- 14e800000-14f000000 rw- 14f000000-14f800000 rw- 14f800000-150000000 rw- 151e00000-151f00000 rw- 151f00000-152000000 rw- 152000000-152800000 rw- 152800000-153000000 rw- 153000000-155000000 rw- 155000000-155004000 rw- 155100000-155200000 rw- 158000000-158800000 rw- 158800000-159000000 rw- 159000000-159800000 rw- 159800000-15a000000 rw- 15a000000-15a800000 rw- 15a800000-15b000000 rw- 15b000000-15b800000 rw- 15b800000-15c000000 rw- 15c000000-15c800000 rw- 15c800000-15d000000 rw- 15d000000-15d800000 rw- 15d800000-15e000000 rw- 15e000000-15e800000 rw- 15e800000-15f000000 rw- 15f000000-15f800000 rw- 15f800000-160000000 rw- 167b08000-16b30c000 --- 16b30c000-16bb08000 rw- 16bb08000-16bb0c000 --- 16bb0c000-16bb94000 rw- 16bb94000-16bb98000 --- 16bb98000-16bda0000 rw- 16bda0000-16bda4000 --- 16bda4000-16bfac000 rw- 16bfac000-16bfb0000 --- 16bfb0000-16c1b8000 rw- 180000000-190000000 r-- 190000000-1a0000000 r-- 1a0000000-1b0000000 r-- 1b0000000-1c0000000 r-- 1c0000000-1d0000000 r-- 1d0000000-1e0000000 r-- 1e0000000-1e6000000 r-- 1e6000000-1e6e2c000 r-- 1e6e2c000-1e8000000 rw- 1e8000000-1f0000000 r-- 1f0000000-1f2000000 r-- 1f2000000-1f2bcc000 r-- 1f2bcc000-1f4864000 rw- 1f4864000-1f6000000 r-- 1f6000000-1f6864000 r-- 1f6864000-1fa57c000 r-- 1fa57c000-1fc000000 r-- 1fc000000-200000000 r-- 200000000-210000000 r-- 210000000-220000000 r-- 220000000-230000000 r-- 230000000-240000000 r-- 240000000-250000000 r-- 250000000-260000000 r-- 260000000-270000000 r-- 270000000-280000000 r-- fc0000000-1000000000 --- 1000000000-7000000000 --- [IMPORTANT] Don't forget to include the Crash Report log file under DiagnosticReports directory in bug reports. Abort trap: 6 ``` ---Files-------------------------------- ruby_2021-07-06-231613_Moris-Macbook-Air.crash (35.9 KB) ruby_2021-08-24-203317_Moris-Macbook-Air.crash (17.4 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52060] [Ruby master Bug#11183] Cumulative error on Complex::I ** 100000000000000000000000000000000
by JesseJohnson (Jesse Johnson) 13 Nov '23

13 Nov '23
Issue #11183 has been updated by JesseJohnson (Jesse Johnson). This behavior still exists in Ruby 3.2.2. In order to fix this Complex#** would need to handle the special cases of self being 0+1i and 0-1i. Correct: ``` irb(main):052:0> Complex(0, -1) ** 1000000000000000000 => (1+0i) irb(main):053:0> Complex(0, -1) ** 1000000000000000001 => (0-1i) irb(main):054:0> Complex(0, -1) ** 1000000000000000002 => (-1+0i) irb(main):055:0> Complex(0, -1) ** 1000000000000000003 => (0+1i) irb(main):056:0> Complex(0, -1) ** 1000000000000000004 => (1+0i) irb(main):057:0> Complex(0, 1) ** 1000000000000000000 => (1+0i) irb(main):058:0> Complex(0, 1) ** 1000000000000000001 => (0+1i) irb(main):059:0> Complex(0, 1) ** 1000000000000000002 => (-1+0i) irb(main):060:0> Complex(0, 1) ** 1000000000000000003 => (0-1i) irb(main):061:0> Complex(0, 1) ** 1000000000000000004 => (1+0i) ``` Suboptimal: ``` irb(main):066:0> Complex(0, -1) ** 10000000000000000000 (irb):66: warning: in a**b, b may be too big => (-0.9125701512929312+0.40892018655135703i) irb(main):067:0> Complex(0, -1) ** 10000000000000000001 (irb):67: warning: in a**b, b may be too big => (-0.9125701512929312+0.40892018655135703i) irb(main):068:0> Complex(0, -1) ** 10000000000000000002 (irb):68: warning: in a**b, b may be too big => (-0.9125701512929312+0.40892018655135703i) irb(main):069:0> Complex(0, -1) ** 10000000000000000003 (irb):69: warning: in a**b, b may be too big => (-0.9125701512929312+0.40892018655135703i) irb(main):070:0> Complex(0, -1) ** 10000000000000000004 (irb):70: warning: in a**b, b may be too big => (-0.9125701512929312+0.40892018655135703i) irb(main):071:0> Complex(0, 1) ** 10000000000000000000 (irb):71: warning: in a**b, b may be too big => (-0.9125701512929312-0.40892018655135703i) irb(main):072:0> Complex(0, 1) ** 10000000000000000001 (irb):72: warning: in a**b, b may be too big => (-0.9125701512929312-0.40892018655135703i) irb(main):073:0> Complex(0, 1) ** 10000000000000000002 (irb):73: warning: in a**b, b may be too big => (-0.9125701512929312-0.40892018655135703i) irb(main):074:0> Complex(0, 1) ** 10000000000000000003 (irb):74: warning: in a**b, b may be too big => (-0.9125701512929312-0.40892018655135703i) irb(main):075:0> Complex(0, 1) ** 10000000000000000004 (irb):75: warning: in a**b, b may be too big => (-0.9125701512929312-0.40892018655135703i) irb(main):076:0> in):070:0> Complex(0, -1) ** 10000000000000000004 => (-0.9125701512929312-0.40892018655135703i) ``` ---------------------------------------- Bug #11183: Cumulative error on Complex::I ** 100000000000000000000000000000000 https://bugs.ruby-lang.org/issues/11183#change-105310 * Author: ko1 (Koichi Sasada) * Status: Open * Priority: Normal * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ``` p Complex::I ** 100000000000000000000000000000000 ``` が、32bit 環境だと、 ``` ruby 2.3.0dev (2015-05-21 trunk 50502) [i386-mswin32_110] t.rb:1: warning: in a**b, b may be too big (-0.08483712490438944+1.5651333429325577e+32i) ``` こんな感じで、変な値が出ます。 ``` # ubuntu 64bit だと (0.9943722416631883-0.10594264962575697i) ``` できれば、こっちも 1+0i にぴたっとしてるといいのでしょうが。 この問題に対する、うささんのコメント: > 真面目にコードを読むと、Complex#** は引数(指数)がFixnumでない場合は複素数をいったん極座標形式に変換してからrとθの双方をそれぞれ計算し、最後にf_complex_polarを使ってComplexオブジェクトにしてるのですが、θはFloatなので当然に誤差が蓄積し、という感じです。まあ、誤差が蓄積しなかったとしても、f_complex_polarの中でせっかくθが0°・90°・180°・270°のケースを特別扱いしようとしてるのにdouble値を==で比較してるのでまったく救われそうにない、という感じではありますが。 > θをn倍する計算に対して、nが整数である場合は360°は0°と同じという性質を利用して誤差を蓄積しない計算をすればだいぶマシになるとは思いますが、しかしめんどくさいっすね。 ---Files-------------------------------- my_complex.diff (2.09 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52059] [Ruby master Bug#10436] ruby -c and ripper inconsistency: m(&nil) {}
by jemmai (Jemma Issroff) 13 Nov '23

13 Nov '23
Issue #10436 has been updated by jemmai (Jemma Issroff). This bug still exists on Ripper. Should we try revive @jeremyevans0's patch? It is potentially worth noting that Prism creates a `ParseError`: "Multiple block arguments; only one block is allowed" ---------------------------------------- Bug #10436: ruby -c and ripper inconsistency: m(&nil) {} https://bugs.ruby-lang.org/issues/10436#change-105301 * Author: akr (Akira Tanaka) * Status: Open * Priority: Normal * ruby -v: ruby 2.2.0dev (2014-10-27 trunk 48168) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- m(&nil) {} というまちがったコードは ruby -c でちゃんとエラーになるのに、 Ripper.sexp ではならないようです。 ``` % cat z.rb m(&nil) {} % ruby -c z.rb z.rb:1: both block arg and actual block given % ruby -rripper -e 'p Ripper.sexp(STDIN.read)' < z.rb [:program, [[:method_add_block, [:method_add_arg, [:fcall, [:@ident, "m", [1, 0]]], [:arg_paren, [:args_add_block, [], [:var_ref, [:@kw, "nil", [1, 3]]]]]], [:brace_block, nil, [[:void_stmt]]]]]] % ruby -v ruby 2.2.0dev (2014-10-27 trunk 48168) [x86_64-linux] ``` ---Files-------------------------------- ripper-block_dup_check-10436.patch (2.2 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52058] [Ruby master Bug#8445] IO.open and IO#set_enconding does not support :fallback option
by JesseJohnson (Jesse Johnson) 13 Nov '23

13 Nov '23
Issue #8445 has been updated by JesseJohnson (Jesse Johnson). I can replicate this in 3.2.2. ---------------------------------------- Bug #8445: IO.open and IO#set_enconding does not support :fallback option https://bugs.ruby-lang.org/issues/8445#change-105299 * Author: pjmtdw (Haruhiro Yoshimoto) * Status: Assigned * Priority: Normal * Assignee: akr (Akira Tanaka) * ruby -v: trunk(ruby 2.1.0dev) ---------------------------------------- RubyDoc says that `IO.open` and `IO#set_encoding` supports optional argument defined in `String#encode`. http://ruby-doc.org/core-2.0/IO.html#method-c-new-label-Options In fact, `:invalid, :undef and :replace` works as expected. However, `:fallback` option does not work neither for `IO.open` and `IO#set_encoding`. Following is the example code which does not work. `f(x)` is never called even if hoge.txt contains non convertible character. ```ruby File.open("./hoge.txt","r:Shift_JIS:utf-8", :fallback => lambda{|x|f(x)}){|f| ... } File.open("./hoge.txt"){|f| f.set_encoding("Shift_JIS","utf-8",:fallback => lambda{|x|f(x)}) ... } ``` I Think this is because `fill_cbuf()` in `io.c` calls `rb_econv_convert()` from `transcode.c` directly. On the other hand, `fallback_func` is called in `transcode_loop()`, which is called by `str_encode()`. Since `transcode_loop()` also calls `rb_econv_convert()`, I wrote a small patch which moves some codes from `transcode_loop()` to `rb_econv_convert()` to fix the problem. The attached file is the patch. Hope this helps. ---Files-------------------------------- support-fallback-for-io.patch (3.9 KB) -- https://bugs.ruby-lang.org/
1 0
0 0
[ruby-dev:52057] [Ruby master Bug#6351] transcode table generator does not support multi characters of Unicode
by JesseJohnson (Jesse Johnson) 13 Nov '23

13 Nov '23
Issue #6351 has been updated by JesseJohnson (Jesse Johnson). @duerst Is this still an issue? If so, is there a test case? ---------------------------------------- Bug #6351: transcode table generator does not support multi characters of Unicode https://bugs.ruby-lang.org/issues/6351#change-105291 * Author: usa (Usaku NAKAMURA) * Status: Assigned * Priority: Normal * Assignee: duerst (Martin Dürst) * ruby -v: ruby 2.0.0dev (2012-04-24 trunk 35457) * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- 改めてチケット起こします。[ruby-dev:45576] より。 On 2012/04/24 17:11, "Martin J. Dürst" wrote: > On 2012/04/24 17:02, U.Nakamura wrote: > >> データは例によってNetBSDのものが利用できそうです。 >> なのですが、transcodeってUnicodeの第0面(BMP)以外はサポートし >> てましたっけ? > > もちろんです :-) もうちょっと調べました。BMP 以外は transcode の最初から全く問題ないです が、現時点で引っかかるのは次のものです (http://x0213.org/codetable/euc-jis-2004-std.txt から抜粋): 0xA4F7 U+304B+309A # [2000] 0xA4F8 U+304D+309A # [2000] 0xA4F9 U+304F+309A # [2000] 0xA4FA U+3051+309A # [2000] 0xA4FB U+3053+309A # [2000] 0xA5F7 U+30AB+309A # [2000] 0xA5F8 U+30AD+309A # [2000] 0xA5F9 U+30AF+309A # [2000] 0xA5FA U+30B1+309A # [2000] 0xA5FB U+30B3+309A # [2000] 0xA5FC U+30BB+309A # [2000] 0xA5FD U+30C4+309A # [2000] 0xA5FE U+30C8+309A # [2000] 0xA6F8 U+31F7+309A # [2000] 0xABC4 U+00E6+0300 # [2000] 0xABC8 U+0254+0300 # [2000] 0xABC9 U+0254+0301 # [2000] 0xABCA U+028C+0300 # [2000] 0xABCB U+028C+0301 # [2000] 0xABCC U+0259+0300 # [2000] 0xABCD U+0259+0301 # [2000] 0xABCE U+025A+0300 # [2000] 0xABCF U+025A+0301 # [2000] 0xABE5 U+02E9+02E5 # [2000] 0xABE6 U+02E5+02E9 # [2000] ようするに、JIS X 0213 で一文字になっているが、Unicode で二文字になって いるものです。EUC-JISX0213 から UTF-8 は問題ないですが、逆は現在引っかか ります。windows-1258 も (逆ですが) 同じ問題がありますので、いずれはなく さないといけないと思いましたが、今回はいいきっかけのではないかと思います。 よろしくお願いします。 Martin. -- https://bugs.ruby-lang.org/
1 0
0 0

HyperKitty Powered by HyperKitty version 1.3.12.