Exception message of Errno::ENOENT contains strings @ rb_sysopen and @ dir_initialize in Ruby 2.1
Exception message of Errno::ENOENT exception contains strings "@ rb_sysopen" or "@ dir_initialize" in Ruby 2.1.0-rc1. It doesn't contain them in Ruby 2.0. I would expect exception message not to contain those strings.
Example in Ruby 2.1:
2.1.0dev :001 > File.new('/path/to/not/existent/file')
Errno::ENOENT: No such file or directory @ rb_sysopen - /path/to/not/existent/file
2.1.0dev :002 > Dir.open('/path/to/not/existent/folder')
Errno::ENOENT: No such file or directory @ dir_initialize - /path/to/not/existent/folder
from /home/andrey/.rvm/rubies/ruby-2.1.0-rc1/bin/irb:11:in `'
2.1.0dev :003 >
Version: ruby 2.1.0dev (2013-12-20 trunk 44301) [x86_64-linux]
It's installed via RVM.
#1 [ruby-core:59278] Updated by naruse (Yui NARUSE) over 4 years ago
At first, I say what it is.
It is the C function name where the exception is raised.
Therefore you can't the name from Ruby.
The background is that IO-related exceptions may be raised many places.
If I encounter an unexpected exception, only errno is not sufficient information.
I cannot debug without where the error is generated.
The string gives us the information.
Anyway normal ruby users don't need such information.
Therefore it may be hidden on release build.
#2 [ruby-core:60060] Updated by kosaki (Motohiro KOSAKI) about 4 years ago
I don't like just turning hidden because I can't agree release build doesn't need debug.
But I agree current format is a little confusable and C function name is less important.
String format could be improved if someone propose better idea.