Issue #11973 has been updated by Chuck Remes.


I may have miscommunicated, so let me try to clarify. I think these should be the rules

1. If the platform supports posix_fadvise, then it should NOT raise NotImplementedError under any circumstances.

2. If the platform supports posix_fadvise but it does NOT support all arguments like POSIX_FADV_NOREUSE, then it should return nil like it does now. It is not reasonable to test for and figure out all different legal arguments across multiple platforms, so the current behavior is the best that we can do.

3. If the platform DOES NOT SUPPORT posix_fadvise, then it should raise NotImplementedError in all cases.

I hope that is more clear. These rules should make IO#advise MORE CONSISTENT.

----------------------------------------
Bug #11973: IO#advise should raise NotImplementedError on platforms that do not support that call
https://bugs.ruby-lang.org/issues/11973#change-56063

* Author: Chuck Remes
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.4.0
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Right now IO#advise returns nil when passed legal arguments even on platforms that do not support that POSIX function (like OS X). To be consistent with other calls in core, I think that IO#advise should raise NotImplementedError for unsupported platforms.

A similar topic on IO#advise was recently discussed in https://bugs.ruby-lang.org/issues/11806#note-6.

To support this idea, I'd like to point to how File#link behaves in a similar situation on platforms that do not support hard links in the filesystem. It raises NotImplementedError.

https://github.com/ruby/ruby/blob/trunk/file.c#L2723

I am bringing up this issue so we can make Ruby behave more consistently and behave in a consistent manner when trying to access functions on unsupported platforms.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>