[ruby-core:110068] [Ruby master Feature#16122] Data: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-09-25 11:43:11 UTC
List:
ruby-core #110068
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKRGVzY3JpcHRpb24gdXBkYXRlZAoKQG1hdHogSSd2ZSB1cGRhdGVkIHRoZSB0aWNrZXQgdGV4 dCB3aXRoIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW1wbGVtZW50ZWQgQVBJIGFuZCBsaW5rcy4K ClRoYW5rIHlvdSEKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVh dHVyZSAjMTYxMjI6IERhdGE6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTkzMTkKCiogQXV0aG9yOiB6 dmVyb2sgKFZpY3RvciBTaGVwZWxldikKKiBTdGF0dXM6IEFzc2lnbmVkCiogUHJpb3JpdHk6IE5v cm1hbAoqIEFzc2lnbmVlOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIyBJbnRybyAob3JpZ2luYWwgdGhlb3JldGljYWwg cGFydCBvZiB0aGUgcHJvcG9zYWwpCgoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNl cHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRwczovL21hcnRp bmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0 dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxv d2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBz b21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5 cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBl ci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJu IHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5n IG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcs IGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2 YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dp dGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9i amVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2Jq ZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5 KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1 YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0 IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1 c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9s aWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9m IHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVu ZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpD b3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQg ZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBh bmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3Ry dWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFu ZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZh bHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1h bnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGlu ZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9f YWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3Ms IDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFg IGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNv LCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRh dGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0 cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkK cCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwg J2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoK SGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3Vn aHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29t ZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1h bGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFz IGEgY29sbGVjdGlvbi4KCiMjIGBEYXRhYCBjbGFzczogY29uc2Vuc3VzIHByb3Bvc2FsL2ltcGxl bWVudGF0aW9uLCBTZXAgMjAyMgoKKiBOYW1lOiBgRGF0YWAKKiBQUjogaHR0cHM6Ly9naXRodWIu Y29tL3J1YnkvcnVieS9wdWxsLzYzNTMKKiBFeGFtcGxlIGRvY3MgcmVuZGVyaW5nOiBodHRwczov L3p2ZXJvay5zcGFjZS9ydWJ5LXJkb2MvRGF0YS5odG1sCiogRnVsbCBBUEk6CiAgKiBgRGF0YTo6 ZGVmaW5lYCBjcmVhdGVzIGEgbmV3IERhdGEgY2xhc3M7IGFjY2VwdHMgb25seSBzeW1ib2xzIChu byBga2V5d29yZF9pbml0OmAsIG5vICJmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2xhc3MgbmFtZSIg bGlrZSB0aGUgYFN0cnVjdGAgaGFkKQogICogYDxkYXRhX2NsYXNzPjo6bWVtYmVyc2A6IGxpc3Qg b2YgbWVtYmVyIG5hbWVzCiAgKiBgPGRhdGFfY2xhc3M+OjpuZXdgOiBhY2NlcHRzIGVpdGhlciBr ZXl3b3JkIG9yIHBvc2l0aW9uYWwgYXJndW1lbnRzIChidXQgbm90IG1peCk7IGNvbnZlcnRzIGFs bCBvZiB0aGUgdG8ga2V5d29yZCBhcmdzOyByYWlzZXMgYEFyZ3VtZW50RXJyb3JgIGlmIHRoZXJl IGFyZSAqKnRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzKioKICAqIGAjaW5pdGlhbGl6ZWA6 IGFjY2VwdHMgb25seSBrZXl3b3JkIGFyZ3VtZW50czsgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp b24gcmFpc2VzIGBBcmd1bWVudEVycm9yYCBvbiBtaXNzaW5nIG9yIGV4dHJhIGFyZ3VtZW50czsg aXQgaXMgZWFzeSB0byByZWRlZmluZSBgaW5pdGlhbGl6ZWAgdG8gcHJvdmlkZSBkZWZhdWx0cyBv ciBoYW5kbGUgZXh0cmEgYXJncy4KICAqIGAjPT1gCiAgKiBgI2VxbD9gCiAgKiBgI2luc3BlY3Rg L2AjdG9fc2AgKHNhbWUgcmVwcmVzZW50YXRpb24pCiAgKiBgI2RlY29uc3RydWN0YAogICogYCNk ZWNvbnN0cnVjdF9rZXlzYAogICogYCNoYXNoYAogICogYCNtZW1iZXJzYAogICogYCN0b19oYAoK IyMgSGlzdG9yaWNhbCBvcmlnaW5hbCBwcm9wb3NhbAoKKiBDbGFzcyBuYW1lOiBgU3RydWN0OjpW YWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVp Y2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBz dHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJl IHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3Mg QVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVuIHJl dXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAq KG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNlKSo6 CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGluayBv ZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2Ag YW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBm YWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZv b2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdl IHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1 Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVu ZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAg KGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIp LCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNp c3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxl LiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2Rl IGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxlIHJl bmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1Ynkt cmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1Z3Mu cnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1 YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcu b3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K