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.
Updated by naruse (Yui NARUSE) about 6 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.
Updated by kosaki (Motohiro KOSAKI) about 6 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.