[ruby-core:109864] [Ruby master Feature#16122] Data: simple immutable value object
From:
"shugo (Shugo Maeda)" <noreply@...>
Date:
2022-09-09 21:26:38 UTC
List:
ruby-core #109864
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgc2h1Z28gKFNodWdvIE1hZWRhKS4KCgpJ ZiB3ZSBjaG9vc2UgYGRlZmluZWAgaW5zdGVhZCBvZiBgbmV3YCwgd2h5IG5vdCB1c2UgQ2xhc3Mu ZGVmaW5lIHRvIHJldHVybiBhIG5ldyBpbW11dGFibGUgU3RydWN0LWxpa2UgY2xhc3M/CgoqIFRo ZSBuYW1lIERhdGEgZG9lc24ndCBpbXBseSBpbW11dGFiaWxpdHksIHNvIENsYXNzLmRlZmluZSBp cyBPSyB0b28uCiogSXQncyBjbGVhcmVyIHRoYXQgQ2xhc3MuZGVmaW5lIHJldHVybnMgYSBjbGFz cy4KCgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAj MTYxMjI6IERhdGE6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5y dWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTkxMDQKCiogQXV0aG9yOiB6dmVyb2sg KFZpY3RvciBTaGVwZWxldikKKiBTdGF0dXM6IEFzc2lnbmVkCiogUHJpb3JpdHk6IE5vcm1hbAoq IEFzc2lnbmVlOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQs IGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRwczovL21hcnRpbmZv d2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBz Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2lu ZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBzb21l IHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUg JiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11 c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZh bHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1v cmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxl YWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1 ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1 Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVj dCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0 KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4K CkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1Ynkg YXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNv bmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2Ug YSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJy YXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0 YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZp dCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpDb3Jl IGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJl cXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQg Y29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0 YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBp cyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVl c2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRp Y3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBp cyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAg aXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpj b250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNv dWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNvLCAu Li4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRhdGEp ICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0cnVl LCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkKcCBh cmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0 IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoKSGF2 aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3VnaHQg YXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBt ZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1hbGlr ZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFzIGEg Y29sbGVjdGlvbi4KCioqQ29uY3JldGUgcHJvcG9zYWwqKgoKKiBDbGFzcyBuYW1lOiBgU3RydWN0 OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEg cXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9y ZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxs IGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xh c3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVu IHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9u cyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNl KSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGlu ayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVl c2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1 biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6 OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVz YWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBT dHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3 CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6 ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVj dCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNv bnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRh YmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBj b2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxl IHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1 YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0 QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxh bmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K