[ruby-core:109874] [Ruby master Feature#16122] Data: simple immutable value object
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2022-09-10 13:46:11 UTC
List:
ruby-core #109874
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K CgpMb29rcyBnb29kIHRvIG1lLgoKUmVnYXJkaW5nIG92ZXJyaWRpbmcgYGluaXRpYWxpemVgIGFu ZCBjYWxsaW5nIGBzdXBlcmAsIHRoYXQgd291bGQgbm90IHdvcmsgaWYgd2UgZGVmaW5lIGFuIG9w dGltaXplZCBgaW5pdGlhbGl6ZWAgaW5zdGFuY2UgbWV0aG9kIG9uIHRoZSBzdWJjbGFzcyBieSBE YXRhLmRlZmluZSAoaXQgd291bGQgcmVzdWx0IGluIE5vTWV0aG9kRXJyb3Igb3IgdGhlIHNsb3dl ciBnZW5lcmljIGluaXRpYWxpemUpLgpUaGF0IGNhbiBiZSB3b3JrZWQgYXJvdW5kIG9uIHRoZSBW TSBzaWRlIGJ5IGRlZmluaW5nIHRoZSBvcHRpbWl6ZWQgYGluaXRpYWxpemVgIGluIGEgbW9kdWxl LCBidXQgdGhhdCdzIGV4dHJhIG92ZXJoZWFkL2Zvb3RwcmludC4KSXQgaXMgd2hhdCBpcyBkb25l IGZvciBTdHJ1Y3QgdGhvdWdoIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1 YnkvYmxvYi9tYXN0ZXIvc3JjL21haW4vcnVieS90cnVmZmxlcnVieS9jb3JlL3N0cnVjdC5yYgoK SW4gZ2VuZXJhbCB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgYGluaXRpYWxpemVgIGNhdXNl cyBhIG5vbi10cml2aWFsIG92ZXJoZWFkIChsb3RzIG9mIGdlbmVyaWMgSGFzaCBvcGVyYXRpb25z KSwKdW5sZXNzIGBpbml0aWFsaXplYCBpcyBvcHRpbWl6ZWQgYW5kIGdlbmVyYXRlZCBwZXIgRGF0 YSBzdWJjbGFzcywgd2hlcmUgaXQgY2FuIHRoZW4gdXNlIGxpdGVyYWwga2V5d29yZCBhcmd1bWVu dHMgd2hpY2ggYXJlIG11Y2ggYmV0dGVyIG9wdGltaXplZC4KClNvIEkgdGhpbmsgaXQgd291bGQg YmUgYmVzdCB0byBzcGVjaWFsaXplIGBpbml0aWFsaXplYCBwZXIgc3ViY2xhc3MuCkNvbmNyZXRl bHkgd2Ugd291bGQgZGVmaW5lIGBpbml0aWFsaXplYCBvbiBEYXRhIHN1YmNsYXNzZXMsIGJ1dCBu b3Qgb24gRGF0YSBpdHNlbGYuIFRoYXQga2VlcHMgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIHNwZWNp YWxpemUgYGluaXRpYWxpemVgIHBlciBzdWJjbGFzcy4KVGhpcyBhbHNvIG1lYW5zLCB0byBvdmVy cmlkZSBgaW5pdGlhbGl6ZWAgd2l0aCBkZWZhdWx0cywgb25lIHdvdWxkIG5lZWQgdG8gdXNlIGBh bGlhc2AgdG8gY2FsbCB0aGUgb3JpZ2luYWwgYGluaXRpYWxpemVgIChtdWNoIGJldHRlciBmb3Ig bWVtb3J5IGZvb3RwcmludCwgbm8gZXh0cmEgc3ViY2xhc3MpLCBvciBzdWJjbGFzcyB0aGUgRGF0 YSBzdWJjbGFzcyB0byB1c2UgYHN1cGVyYC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IERhdGE6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUg b2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTkx MTQKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKKiBTdGF0dXM6IEFzc2lnbmVk CiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZhbHVlIE9iamVjdCoq IGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBw b3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtX aWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVj dCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6 CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxl OwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1 ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywg dGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3Zl bWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGlu IFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9u cy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5n J3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBb R29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20venZl cm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFp bmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFs dWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoq CgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3 aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxl c3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90 ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNv cmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAg aXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIg dmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBj b21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRo ZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2Ug KGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2Ug KGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVo b3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFs bHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlw cGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0 cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBj b2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJl c3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBh d2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMg YXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28o YXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVj dGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQg aXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0 aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3Vi dGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1l bnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24n dCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4KCioqQ29uY3JldGUgcHJvcG9zYWwqKgoK KiBDbGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0 byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWlu LCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQg b2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZl OiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9z dCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRo ZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3Qq KiB0aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRh YmxlOwogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24n dCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBl bXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5n IG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygp YCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15 U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3Vu ZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBz YXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVt cHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZv dW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2lu ZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBz b21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBp cyBwcm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6 Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVz LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42 IEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFp bHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4K PGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1Ynkt Y29yZT4K