[ruby-core:110113] [Ruby master Feature#16122] Data: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-09-27 18:32:04 UTC
List:
ruby-core #110113
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKCkBtYXR6IFRoYW5rIHlvdSEKQG5vYnUgRG9uZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IERhdGE6IHNpbXBsZSBpbW11dGFibGUg dmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFu Z2UtOTkzNzEKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKKiBTdGF0dXM6IEFz c2lnbmVkCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVlOiB6dmVyb2sgKFZpY3RvciBTaGVw ZWxldikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIyBJbnRybyAo b3JpZ2luYWwgdGhlb3JldGljYWwgcGFydCBvZiB0aGUgcHJvcG9zYWwpCgoqKlZhbHVlIE9iamVj dCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hp cyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCks IFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29i amVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRl YSk6CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRh YmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpW YWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJ cywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBt b3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNo IGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNz aW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxs aW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3Mp LCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20v enZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWlu dGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUg dmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2Vt PyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5 ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1 bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiog UG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVu IGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVj dGAgaXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlr ZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBp cyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9u IHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxp a2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxp a2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNv bWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVj aWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBz bmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9 IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhl ciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQs IFJlc3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBp cyBhd2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQg aXMgYXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBm b28oYXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4 cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAn aXQgaXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNv bWV0aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8g c3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJn dW1lbnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9l c24ndCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4KCiMjIGBEYXRhYCBjbGFzczogY29u c2Vuc3VzIHByb3Bvc2FsL2ltcGxlbWVudGF0aW9uLCBTZXAgMjAyMgoKKiBOYW1lOiBgRGF0YWAK KiBQUjogaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzYzNTMKKiBFeGFtcGxlIGRv Y3MgcmVuZGVyaW5nOiBodHRwczovL3p2ZXJvay5zcGFjZS9ydWJ5LXJkb2MvRGF0YS5odG1sCiog RnVsbCBBUEk6CiAgKiBgRGF0YTo6ZGVmaW5lYCBjcmVhdGVzIGEgbmV3IERhdGEgY2xhc3M7IGFj Y2VwdHMgb25seSBzeW1ib2xzIChubyBga2V5d29yZF9pbml0OmAsIG5vICJmaXJzdCBhcmd1bWVu dCBpcyB0aGUgY2xhc3MgbmFtZSIgbGlrZSB0aGUgYFN0cnVjdGAgaGFkKQogICogYDxkYXRhX2Ns YXNzPjo6bWVtYmVyc2A6IGxpc3Qgb2YgbWVtYmVyIG5hbWVzCiAgKiBgPGRhdGFfY2xhc3M+Ojpu ZXdgOiBhY2NlcHRzIGVpdGhlciBrZXl3b3JkIG9yIHBvc2l0aW9uYWwgYXJndW1lbnRzIChidXQg bm90IG1peCk7IGNvbnZlcnRzIGFsbCBvZiB0aGUgdG8ga2V5d29yZCBhcmdzOyByYWlzZXMgYEFy Z3VtZW50RXJyb3JgIGlmIHRoZXJlIGFyZSAqKnRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRz KioKICAqIGAjaW5pdGlhbGl6ZWA6IGFjY2VwdHMgb25seSBrZXl3b3JkIGFyZ3VtZW50czsgdGhl IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmFpc2VzIGBBcmd1bWVudEVycm9yYCBvbiBtaXNzaW5n IG9yIGV4dHJhIGFyZ3VtZW50czsgaXQgaXMgZWFzeSB0byByZWRlZmluZSBgaW5pdGlhbGl6ZWAg dG8gcHJvdmlkZSBkZWZhdWx0cyBvciBoYW5kbGUgZXh0cmEgYXJncy4KICAqIGAjPT1gCiAgKiBg I2VxbD9gCiAgKiBgI2luc3BlY3RgL2AjdG9fc2AgKHNhbWUgcmVwcmVzZW50YXRpb24pCiAgKiBg I2RlY29uc3RydWN0YAogICogYCNkZWNvbnN0cnVjdF9rZXlzYAogICogYCNoYXNoYAogICogYCNt ZW1iZXJzYAogICogYCN0b19oYAoKIyMgSGlzdG9yaWNhbCBvcmlnaW5hbCBwcm9wb3NhbAoKKiBD bGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBo YXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBz byBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2Yg YFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBq dXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBv ZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBm b2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0 aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxl OwogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBo YXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0 eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1l bWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBp cyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2Vy dmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9 IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXks IGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5 IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5k PmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0 aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21l IGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBw cm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96 dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtC KQoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRv OnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0 dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29y ZT4K