[ruby-core:109866] [Ruby master Feature#16122] Data: simple immutable value object
From:
"k0kubun (Takashi Kokubun)" <noreply@...>
Date:
2022-09-09 23:06:59 UTC
List:
ruby-core #109866
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgazBrdWJ1biAoVGFrYXNoaSBLb2t1YnVu KS4KCgpzaHVnbyAoU2h1Z28gTWFlZGEpIHdyb3RlIGluICNub3RlLTY1Ogo+IHdoeSBub3QgdXNl IENsYXNzLmRlZmluZSB0byByZXR1cm4gYSBuZXcgaW1tdXRhYmxlIFN0cnVjdC1saWtlIGNsYXNz PwoKR2l2ZW4gdGhhdCBNYXR6IGlzIGFsc28gdGhpbmtpbmcgYWJvdXQgaW50cm9kdWNpbmcgYFN0 cnVjdC5kZWZpbmVgLCBpZiB3ZSBkbyB0aGUgaW1tdXRhYmxlIG9uZSB3aXRoIGBDbGFzcy5kZWZp bmVgLCB3ZSdkIG5lZWQgdG8gYWxzbyBwYXNzIGBpbW11dGFibGU6IHRydWVgIG9yIGBpbW11dGFi bGU6IGZhbHNlYCBmb3IgZWl0aGVyIG9mIHRoZXNlLCB3aGljaCBpcyBsb25nZXIgYW5kIGhhcmRl ciB0byB1c2UuIE90aGVyd2lzZSB5b3UnZCBuZWVkIHRvIGhhdmUgYFN0cnVjdC5kZWZpbmVgIGZv ciBtdXRhYmxlIG9uZSBhbmQgYENsYXNzLmRlZmluZWAgZm9yIGltbXV0YWJsZSBvbmUsIHdoaWNo IHNlZW1zIGluY29uc2lzdGVudC4KCj4gSXQncyBjbGVhcmVyIHRoYXQgQ2xhc3MuZGVmaW5lIHJl dHVybnMgYSBjbGFzcy4KCkkgZmVlbCBEYXRhIGNsYXNzIGlzIGEgZmFpcmx5IGRpZmZlcmVudCBj b25jZXB0IGZyb20gbm9ybWFsIENsYXNzIGJlY2F1c2UgaXQgaGFzIHNwZWNpYWwgZmllbGRzIHVz ZWQgZm9yIGNvbXBhcmlzb24gYW5kIGRlY29uc3RydWN0aW9uLiBZb3Ugc2hvdWxkbid0IGhhdmUg YW55IG11dGFibGUgdGhpbmcgdW5kZXIgYERhdGEuZGVmaW5lYCB3aGlsZSB5b3UncmUgZnJlZSB0 byBkbyBzdWNoIHRoaW5ncyBpbiBgQ2xhc3MubmV3YC4gVG8gbWFrZSBpdCBlYXNpZXIgdG8gbm90 aWNlIHN1Y2ggZGlmZmVyZW5jZSwgaXQgZmVlbHMgY2xlYW5lciB0byBtZSB0byBzZXBhcmF0ZSBg Q2xhc3NgLCBgU3RydWN0YCwgYW5kIGBEYXRhYCB0aGlzIHdheS4KCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IERhdGE6IHNpbXBsZSBpbW11 dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEy MiNjaGFuZ2UtOTkxMDYKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKKiBTdGF0 dXM6IEFzc2lnbmVkCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiB6dmVyb2sgKFZpY3Rv ciBTaGVwZWxldikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZh bHVlIE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZv d2xlciAoW2hpcyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmpl Y3QuaHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L1ZhbHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWlu ZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7 CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVz ZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVm aW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdl cmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5 IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJh bCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwg W1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9z ZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dp dGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRl ciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2Ug KipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkg bm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRo YXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBp dCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRl cyBvbmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9i YWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipX aHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21l d2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Yg b25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJp YnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxl Y3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rp b25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUg dHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xl YXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRo aXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5 ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUg dGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9y IFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRy dWUsICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0 cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9y Li4uCmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRh KSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290 IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZp bmVkIG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNv IGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVj ZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBh dXRob3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4KCioqQ29uY3JldGUg cHJvcG9zYWwqKgoKKiBDbGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0 cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZh bHVlIiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24s IGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsg KmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVj dGBzIG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRp b24pLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxp dHkgaXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVg OwogICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBo YXNoIiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAg KiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9v JylgIGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBg U3RydWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBy dWJ5CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0 cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVy ZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3Ig Y3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAj PHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3Vj Y2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9s dmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5 LgoKKipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRh dGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRt bCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVl LnBhdGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vi c2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11 bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9v cHRpb25zL3J1YnktY29yZT4K