[ruby-core:110086] [Ruby master Feature#16122] Data: simple immutable value object
From:
"nobu (Nobuyoshi Nakada)" <noreply@...>
Date:
2022-09-26 12:15:26 UTC
List:
ruby-core #110086
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku CgoKQHp2ZXJvayBDb3VsZCB5b3UgYWRkIHRoZSAoc2ltcGxlKSBORVdTIGVudHJ5IHRvbz8KCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IERh dGE6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTkzNDEKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBT aGVwZWxldikKKiBTdGF0dXM6IEFzc2lnbmVkCiogUHJpb3JpdHk6IE5vcm1hbAoqIEFzc2lnbmVl OiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQojIyBJbnRybyAob3JpZ2luYWwgdGhlb3JldGljYWwgcGFydCBvZiB0aGUgcHJv cG9zYWwpCgoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQg YnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxp a2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBl ZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVz IChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkg c2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBu aWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNp YWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50 bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmls aXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3Jl YXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBG b3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFs bGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9u XShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1l cjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0 byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNs YXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhh dCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJl cHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxy ZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJh cnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBj b25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNs YXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2Vk IGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Yg c2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBtdXRh YmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVyYWJs ZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9kcyku CgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2luZyBj b2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoKRm9y IGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0 aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBO b3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhl ciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEgPSBS ZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhwZWN0 ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdl c29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVu ZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUn KSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5k IGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFs dWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tz ICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1 ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4K CiMjIGBEYXRhYCBjbGFzczogY29uc2Vuc3VzIHByb3Bvc2FsL2ltcGxlbWVudGF0aW9uLCBTZXAg MjAyMgoKKiBOYW1lOiBgRGF0YWAKKiBQUjogaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9w dWxsLzYzNTMKKiBFeGFtcGxlIGRvY3MgcmVuZGVyaW5nOiBodHRwczovL3p2ZXJvay5zcGFjZS9y dWJ5LXJkb2MvRGF0YS5odG1sCiogRnVsbCBBUEk6CiAgKiBgRGF0YTo6ZGVmaW5lYCBjcmVhdGVz IGEgbmV3IERhdGEgY2xhc3M7IGFjY2VwdHMgb25seSBzeW1ib2xzIChubyBga2V5d29yZF9pbml0 OmAsIG5vICJmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2xhc3MgbmFtZSIgbGlrZSB0aGUgYFN0cnVj dGAgaGFkKQogICogYDxkYXRhX2NsYXNzPjo6bWVtYmVyc2A6IGxpc3Qgb2YgbWVtYmVyIG5hbWVz CiAgKiBgPGRhdGFfY2xhc3M+OjpuZXdgOiBhY2NlcHRzIGVpdGhlciBrZXl3b3JkIG9yIHBvc2l0 aW9uYWwgYXJndW1lbnRzIChidXQgbm90IG1peCk7IGNvbnZlcnRzIGFsbCBvZiB0aGUgdG8ga2V5 d29yZCBhcmdzOyByYWlzZXMgYEFyZ3VtZW50RXJyb3JgIGlmIHRoZXJlIGFyZSAqKnRvbyBtYW55 IHBvc2l0aW9uYWwgYXJndW1lbnRzKioKICAqIGAjaW5pdGlhbGl6ZWA6IGFjY2VwdHMgb25seSBr ZXl3b3JkIGFyZ3VtZW50czsgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmFpc2VzIGBBcmd1 bWVudEVycm9yYCBvbiBtaXNzaW5nIG9yIGV4dHJhIGFyZ3VtZW50czsgaXQgaXMgZWFzeSB0byBy ZWRlZmluZSBgaW5pdGlhbGl6ZWAgdG8gcHJvdmlkZSBkZWZhdWx0cyBvciBoYW5kbGUgZXh0cmEg YXJncy4KICAqIGAjPT1gCiAgKiBgI2VxbD9gCiAgKiBgI2luc3BlY3RgL2AjdG9fc2AgKHNhbWUg cmVwcmVzZW50YXRpb24pCiAgKiBgI2RlY29uc3RydWN0YAogICogYCNkZWNvbnN0cnVjdF9rZXlz YAogICogYCNoYXNoYAogICogYCNtZW1iZXJzYAogICogYCN0b19oYAoKIyMgSGlzdG9yaWNhbCBv cmlnaW5hbCBwcm9wb3NhbAoKKiBDbGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBS dWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1s aWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50 YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVy YWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcg YFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVt ZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11 dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1l cmFibGVgOwogICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFs bW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9k cyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5l dygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQs IGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6 CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6 cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3Vu ZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVy biBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNw ZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRo ZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2ls bCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBi ZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9j dW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFs dWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0 X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8K ClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3Vi amVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFp bG1hbi9vcHRpb25zL3J1YnktY29yZT4K