From: "mame (Yusuke Endoh) via ruby-core" Date: 2026-01-08T08:58:16+00:00 Subject: [ruby-core:124456] [Ruby Feature#21826] Deprecating RubyVM::AbstractSyntaxTree Issue #21826 has been updated by mame (Yusuke Endoh). I reserve my opinion on the proposal itself, but just about `node_id_for_backtrace_location`: Earlopain (Earlopain _) wrote in #note-2: > But I don't know of something for `node_id_for_backtrace_location` (https://bugs.ruby-lang.org/issues/19083) so it's too early to deprecate the entire module in my opinion. This is an internal API for retrieving the `node_id` of a `Thread::Backtrace::Location` in order to identify the corresponding Prism node. So, if `Thread::Backtrace::Location#ast` is introduced, I guess `node_id_for_backtrace_location` can be replaced with it. That said, the API is introduced for Rails, and actually still used: https://github.com/rails/rails/blob/d82a7d6bf7aed3dd9629287b2d814b269ac8446f/actionview/lib/action_view/template.rb#L232 So, deprecation and removal needs careful synchronization with them, at least. ---------------------------------------- Feature #21826: Deprecating RubyVM::AbstractSyntaxTree https://bugs.ruby-lang.org/issues/21826#change-116005 * Author: Eregon (Benoit Daloze) * Status: Open ---------------------------------------- I think it is time to deprecate `RubyVM::AbstractSyntaxTree`. [Matz has agreed that going forward the official parser API for Ruby will be the Prism API](https://railsatscale.com/2024-04-16-prism-in-2024/) so it's clear the official Ruby parsing API is the Prism API. `RubyVM::AbstractSyntaxTree` is CRuby-specific and does not work on any other Ruby implementation, the API is unstable, inconvenient, etc: > This module is experimental and its API is not stable, therefore it > might change without notice. As examples, the order of children nodes is > not guaranteed, the number of children nodes might change, there is no > way to access children nodes by name, etc. Because it's under `RubyVM`, it also has the following documented caveats: > This module is for very limited purposes, such as debugging, prototyping, and research. > Normal users must not use it. This module is not portable between Ruby implementations. Given these caveats I think it could possibly be fair enough to remove it without deprecation, however I see no urgency to remove it straight away so I think having it deprecated for one release is nicer for the few gems using it. The advantages of deprecating it are: * Make it clear that this API should not be used in new code * Encourage the few usages to migrate to the Prism API, which is stable, officially supported, designed with many people to be usable and convenient for every parsing/tooling usage, etc. * Improve portability of Ruby code between Ruby implementations So, let's deprecate `RubyVM::AbstractSyntaxTree` in 4.1, and remove it in 4.2? -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/