Support marshaling of ruby2_keywords flag
This patch makes Marshal.dump and load aware of ruby2_keywords flag.
def bar(key:) key end ruby2_keywords def foo(*args) args = Marshal.load(Marshal.dump(args)) bar(*args) end foo(key: 42) #=> 42
Honestly, I'm not fully convinced if this is really needed. It would be helpful for applications and libraries that serializes the whole arguments by using Marshal, e.g., drb. (Currently, drb does not support keyword separation.) But I'm unsure how many applications does so; ActiveJob and Sidekiq use their own dedicated serialization mechanism based on JSON. This patch does not help them, and they should use #16486 to support ruby2_keywords flag. I'd like to hear opinions.
Updated by mame (Yusuke Endoh) 7 months ago
- Status changed from Open to Closed
Applied in changeset git|b23fd59cbb3f097bcd559d0c85a86ff7a1eeeb7e.
marshal.c: Support dump and load of a Hash with the ruby2_keywords flag
It is useful for a program that dumps and load arguments (like drb).
In future, they should deal with both positional arguments and keyword
ones explicitly, but until ruby2_keywords is deprecated, it is good to
support the flag in marshal.
The implementation is similar to String's encoding; it is dumped as a
hidden instance variable.