Misc #19613
closedAdd version information to all function documentation
Description
Ruby does not properly support semantic versioning. [1]
Therefore, for example, the function File#exist? should specify if this function existed since Ruby 2.0.0, Ruby 3.0.0, Ruby 3.2.0 and if, maybe, Ruby 2.9.4.3.az doesn't support it.
In this example, if somebody was using File#exists? and were violated to find their code stopped working with Ruby 3.2.0 they might switch to File#exist?.
However by reading the documentation we don't know if File#exist? was just created in 3.2.0 to replace File#exists? or if it was created in 2.0 or 2.4 or whatever.
Maybe there is some version like 2.9.8 where File#exist? didn't exist. Maybe everybody else reading this (population bias: people that use Redmine) knows this. But if you are just reading the documentation then you won't know this and you will have a painful experience.
Possible solutions:
-
Update https://www.ruby-lang.org/en/news/2013/12/21/ruby-version-policy-changes-with-2-1-0/ and add a red warning at the top: RUBY HAS MADE VIOLATIONS OF SEMANTIC VERSIONING UP TO VERSION 3.2.0 THAT WE WILL NOT CORRECT. BUT STARTING IN 3.2.0 WE HAVE/WILL USE SEMANTIC VERSIONING GOING FORWARD.
-
Update https://www.ruby-lang.org/en/news/2013/12/21/ruby-version-policy-changes-with-2-1-0/ and add a red warning at the top: WE HAVE CHANGED OUR POSITION, AND WE WILL BE "INSPIRED" BY SEMVER BUT MAKE NO COMMITMENT TO USE IT COMPLETELY, WE WILL ABANDON THE WORD "SEMVER" TO AVOID CONFUSION.
-
If #1 is not done: update every function documentation to explain all versions and history notes about what applies to that function (this is what PHP does in their official documetation.)
[1]
https://stackoverflow.com/questions/14351272/undefined-method-exists-for-fileclass-nomethoderror
Updated by fulldecent (William Entriken) over 1 year ago
still editin issue... hold on a sec
Updated by fulldecent (William Entriken) over 1 year ago
- Description updated (diff)
Updated by jeremyevans0 (Jeremy Evans) over 1 year ago
- Tracker changed from Bug to Misc
- Backport deleted (
3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN)
Ruby solves this problem by generating separate documentation for each version: https://docs.ruby-lang.org/en/ . If you have questions regarding how methods work for the Ruby version you are using, you should look at the appropriate documentation for that Ruby version. I don't think it makes sense to maintain documentation on the complete history of the method for every method Ruby uses, including continuing to document all methods previously removed with how they worked and when they were removed.
Documentation for older Ruby versions shows both exist?
and exists?
for File
. Ruby 3.2 only documents exist?
. Additionally, method removal is documented in the release notes for the Ruby version.
I don't think it makes sense to edit 10 year old blog posts to add disclaimers. The page already states "more Semantic Versioning type", implying that it does not fully support semantic version. Note that Ruby does basically follow semantic versioning, except that the major version is the first two sets of digits and the minor version is the third set (so for 3.2.1
, the major version is 3.2
and the minor version is 1
)
Updated by hsbt (Hiroshi SHIBATA) over 1 year ago
- Status changed from Open to Closed
Updated by austin (Austin Ziegler) over 1 year ago
jeremyevans0 (Jeremy Evans) wrote in #note-4:
Ruby solves this problem by generating separate documentation for each version: https://docs.ruby-lang.org/en/ . If you have questions regarding how methods work for the Ruby version you are using, you should look at the appropriate documentation for that Ruby version. I don't think it makes sense to maintain documentation on the complete history of the method for every method Ruby uses, including continuing to document all methods previously removed with how they worked and when they were removed.
I think that this is a good idea, but but should be introduced as a feature in RDoc first and then added to documentation in a future release of Ruby. I do not necessarily think editing old versions at this point
# This function...
#
# :deprecated since: 2.6
# This function...
#
# :since: 3.0
Documentation for older Ruby versions shows both
exist?
andexists?
forFile
. Ruby 3.2 only documentsexist?
. Additionally, method removal is documented in the release notes for the Ruby version.
Yes, but the deprecation was earlier than that. If this had been added to the documentation so it would show in both the web-based documentation and in ri
, there would be fewer objections.
Elixir manages this very nicely (but as of right now, it also has not removed any deprecated functions because they do not yet see a need for Elixir v2).
I don't think it makes sense to edit 10 year old blog posts to add disclaimers. The page already states "more Semantic Versioning type", implying that it does not fully support semantic version. Note that Ruby does basically follow semantic versioning, except that the major version is the first two sets of digits and the minor version is the third set (so for
3.2.1
, the major version is3.2
and the minor version is1
)
I agree with you that editing the blog post is not appropriate, but I think that adding tools to improve documentation and encouraging their use in gems as well as in Ruby itself would not be amiss.
Updated by hsbt (Hiroshi SHIBATA) over 1 year ago
@fulldecent (William Entriken) Your tone is unfriendly. Please be more respectful for all developers.
Updated by nobu (Nobuyoshi Nakada) over 1 year ago
FYI, File.exist?
has been documented before 2.0.
https://docs.ruby-lang.org/en/2.0.0/File.html#method-c-exist-3F