[ruby-core:109877] [Ruby master Feature#16122] Data: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-09-10 14:12:53 UTC
List:
ruby-core #109877
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKCj4gUmVnYXJkaW5nIGNyZWF0aW5nIGEgbmV3IERhdGEgc3ViY2xhc3MgaW5zdGFuY2UsIEkg d29uZGVyIGlmIHdlIHNob3VsZCBzdXBwb3J0IGJvdGggcG9zaXRpb25hbCBhbmQga3dhcmdzLCBv ciBpZiB3ZSBzaG91bGQgb25seSBzdXBwb3J0IGtleXdvcmQgYXJndW1lbnRzCgpBbSBJIHVuZGVy c3RhbmRpbmcgY29ycmVjdGx5IHRoYXQgeW91IHByb3Bvc2UgdG8gb25seSBsZWF2ZSBgTWVhc3Vy ZS5uZXcoYW1vdW50OiAxLCB1bml0OiAna20nKWAgc3ludGF4LCBhbmQgZGl0Y2ggYE1lYXN1cmUu bmV3KDEsICdrbScpYCBvbmU/Li4gCgpJZiBzbywgSSBhbSBwb3NpdGl2ZSB0aGF0IHdlICoqc2hv dWxkKiogc3VwcG9ydCBib3RoLCBhbmQgSSBiZWxpZXZlIHRoYXQncyBAbWF0eiAncyBwb3NpdGlv biB0b28uIEkgYmVsaWV2ZSB0aGF0IG5lZWQgdG8gd3JpdGUgYE1lYXN1cmVbYW1vdW50OiAxMCwg dW5pdDogJ2ttJ11gIGluc3RlYWQgb2YgYE1lYXN1cmVbMTAsICdrbSddYCBmb3IgdHJpdmlhbCBk YXRhIGNsYXNzZXMgd291bGQgYmUgYSBzaWduaWZpY2FudCBiYXJyaWVyIHRvd2FyZHMgYWRvcHRp b24gb2YgdGhlIG5ldyBmZWF0dXJlLgoKTm90ZSB0aGF0IHdpdGggZmVhdHVyZXMgdGhhdCBwYXR0 ZXJuLW1hdGNoaW5nIHByb3ZpZGVzLCBldmVuIDEtYXR0cmlidXRlIERhdGEgbWFrZXMgc2Vuc2Ug Zm9yIHN0cm9uZy9leHByZXNzaXZlIHR5cGluZywgZS5nLiBgUmVzdWx0WzFdYCB2cy4gYEVycm9y WyJicnJyIl1gLCBhbmQgYWRkaW5nIF9vbmUgbW9yZSBuYW1lXyB0byB3cml0ZSBoZXJlIHdvdWxk IGJlIGluY3JlZGlibHkgaXJyaXRhdGluZy4KClNvIG15IHN0YW5jZSAoYWdhaW4sIGFzIGZhciBh cyBJIHVuZGVyc3RhbmQsIGl0IGlzIEBtYXR6ICdzLCB0b28pIGZvciBuZXcgbGFuZ3VhZ2UgZmVh dHVyZXMgaXMgb3B0aW1pemF0aW9uIGNhbiBiZSBwb3N0cG9uZWQgaWYgaXQgaXMgbm9uLXRyaXZp YWwsIGJ1dCBmaW5kaW5nIGEgZ29vZCBhbmQgZXhwcmVzc2l2ZSBBUEkgY2FuIG5vdC4KCkFueXdh eSwgaXQgaXMgaW1wbGVtZW50ZWQgYWxyZWFkeSA6KQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxNjEyMjogRGF0YTogc2ltcGxlIGltbXV0YWJsZSB2 YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5n ZS05OTExNwoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQoqIFN0YXR1czogQXNz aWduZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6IHp2ZXJvayAoVmljdG9yIFNoZXBl bGV2KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCioqVmFsdWUgT2Jq ZWN0KiogaXMgYSB1c2VmdWwgY29uY2VwdCwgaW50cm9kdWNlZCBieSBNYXJ0aW4gRm93bGVyIChb aGlzIHBvc3RdKGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9WYWx1ZU9iamVjdC5odG1s KSwgW1dpa2lwZWRpYSBFbnRyeV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFsdWVf b2JqZWN0KSkgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgKHNpbXBsaWZ5aW5nIHRoZSBp ZGVhKToKCiogcmVwcmVzZW50aW5nIHNvbWUgcmVsYXRpdmVseSBzaW1wbGUgZGF0YTsKKiBpbW11 dGFibGU7CiogY29tcGFyZWQgYnkgdHlwZSAmIHZhbHVlOwoqIG5pY2VseSByZXByZXNlbnRlZC4K ClZhbHVlIG9iamVjdHMgYXJlIHN1cGVyLXVzZWZ1bCBlc3BlY2lhbGx5IGZvciBkZWZpbmluZyBB UElzLCB0aGVpciBpbnB1dC9yZXR1cm4gdmFsdWVzLiBSZWNlbnRseSwgdGhlcmUgd2VyZSBzb21l IG1vdmVtZW50IHRvd2FyZHMgdXNpbmcgbW9yZSBpbW11dGFiaWxpdHktZnJpZW5kbHkgYXBwcm9h Y2ggaW4gUnVieSBwcm9ncmFtbWluZywgbGVhZGluZyB0byBjcmVhdGluZyBzZXZlcmFsIGRpc2N1 c3Npb25zL2xpYnJhcmllcyB3aXRoIHZhbHVlIG9iamVjdHMuIEZvciBleGFtcGxlLCBbVG9tIERh bGxpbmcncyBnZW1dKGh0dHBzOi8vZ2l0aHViLmNvbS90b21kYWxsaW5nL3ZhbHVlX3NlbWFudGlj cyksIFtHb29kIFJ1YnkgVmFsdWUgb2JqZWN0IGNvbnZlbnRpb25dKGh0dHBzOi8vZ2l0aHViLmNv bS96dmVyb2svZ29vZC12YWx1ZS1vYmplY3QpIChkaXNjbGFpbWVyOiB0aGUgbGF0dGVyIGlzIG1h aW50YWluZWQgYnkgeW91cnMgdHJ1bHkpLgoKSSBwcm9wb3NlIHRvIGludHJvZHVjZSAqKm5hdGl2 ZSB2YWx1ZSBvYmplY3RzKiogdG8gUnVieSBhcyBhIGNvcmUgY2xhc3MuCgoqKldoeSBub3QgYSBn ZW0/KioKCiogSSBiZWxpZXZlIHRoYXQgY29uY2VwdCBpcyB0aGF0IHNpbXBsZSwgdGhhdCBub2Jv ZHkgKndpbGwgZXZlbiB0cnkqIHRvIHVzZSBhIGdlbSBmb3IgcmVwcmVzZW50aW5nIGl0IHdpdGgs IHVubGVzcyB0aGUgZnJhbWV3b3JrL2xpYnJhcnkgdXNlZCBhbHJlYWR5IHByb3ZpZGVzIG9uZS4K KiBQb3RlbnRpYWxseSwgYSBsb3Qgb2Ygc3RhbmRhcmQgbGlicmFyeSAoYW5kIHByb2JhYmx5IGV2 ZW4gY29yZSkgQVBJcyBjb3VsZCBiZW5lZml0IGZyb20gdGhlIGNvbmNlcHQuCgoqKldoeSBgU3Ry dWN0YCBpcyBub3QgZW5vdWdoKioKCkNvcmUgYFN0cnVjdGAgY2xhc3MgaXMgInNvbWV3aGF0IGFs aWtlIiB2YWx1ZS1vYmplY3QsIGFuZCBmcmVxdWVudGx5IHVzZWQgaW5zdGVhZCBvZiBvbmU6IGl0 IGlzIGNvbXBhcmVkIGJ5IHZhbHVlIGFuZCBjb25zaXN0cyBvZiBzaW1wbGUgYXR0cmlidXRlcy4g T24gdGhlIG90aGVyIGhhbmQsIGBTdHJ1Y3RgIGlzOgoqIG11dGFibGU7CiogY29sbGVjdGlvbi1h bGlrZSAoZGVmaW5lcyBgdG9fYWAgYW5kIGlzIGBFbnVtZXJhYmxlYCk7CiogZGljdGlvbmFyeS1h bGlrZSAoaGFzIGBbXWAgYW5kIGAudmFsdWVzYCBtZXRob2RzKS4KClRoZSBhYm92ZSB0cmFpdHMg c29tZWhvdyBlcm9kZXMgdGhlIHNlbWFudGljcywgbWFraW5nIGNvZGUgbGVzcyBjbGVhciwgZXNw ZWNpYWxseSB3aGVuIGR1Y2stdHlwaW5nIGlzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhpcyBjb2Rl IHNuaXBwZXQgc2hvd3Mgd2h5IGB0b19hYCBpcyBwcm9ibGVtYXRpYzoKCmBgYHJ1YnkKUmVzdWx0 ID0gU3RydWN0Lm5ldyg6c3VjY2VzcywgOmNvbnRlbnQpCgojIE5vdywgaW1hZ2luZSB0aGF0IG90 aGVyIGNvZGUgYXNzdW1lcyBgZGF0YWAgY291bGQgYmUgZWl0aGVyIFJlc3VsdCwgb3IgW1Jlc3Vs dCwgUmVzdWx0LCBSZXN1bHRdCiMgU28sIC4uLgoKZGF0YSA9IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0 IGlzIGF3ZXNvbWUnKQoKQXJyYXkoZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdp dCBpcyBhd2Vzb21lJyldLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KCiMgb3IuLi4KZGVm IGZvbyhhcmcxLCBhcmcyID0gbmlsKQpwIGFyZzEsIGFyZzIKZW5kCgpmb28oKmRhdGEpICMgPT4g ZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpLCBuaWxdLCBnb3QgW3RydWUs ICdpdCBpcyBhd2Vzb21lJ10KYGBgCgpIYXZpbmcgYFtdYCBhbmQgYGVhY2hgIGRlZmluZWQgb24g c29tZXRoaW5nIHRoYXQgaXMgdGhvdWdodCBhcyAianVzdCB2YWx1ZSIgY2FuIGFsc28gbGVhZCB0 byBzdWJ0bGUgYnVncywgd2hlbiBzb21lIG1ldGhvZCBjaGVja3MgImlmIHRoZSByZWNlaXZlZCBh cmd1bWVudCBpcyBjb2xsZWN0aW9uLWFsaWtlIiwgYW5kIHZhbHVlIG9iamVjdCdzIGF1dGhvciBk b2Vzbid0IHRob3VnaHQgb2YgaXQgYXMgYSBjb2xsZWN0aW9uLgoKKipDb25jcmV0ZSBwcm9wb3Nh bCoqCgoqIENsYXNzIG5hbWU6IGBTdHJ1Y3Q6OlZhbHVlYDogbG90IG9mIFJ1Ynlpc3RzIGFyZSB1 c2VkIHRvIGhhdmUgYFN0cnVjdGAgYXMgYSBxdWljayAic29tZXRoaW5nLWxpa2UtdmFsdWUiIGRy b3AtaW4sIHNvIGFsdGVybmF0aXZlLCBtb3JlIHN0cmljdCBpbXBsZW1lbnRhdGlvbiwgYmVpbmcg cGFydCBvZiBgU3RydWN0YCBBUEksIHdpbGwgYmUgcXVpdGUgZGlzY292ZXJhYmxlOyAqYWx0ZXJu YXRpdmU6IGp1c3QgYFZhbHVlYCoKKiBDbGFzcyBBUEkgaXMgY29weWluZyBgU3RydWN0YHMgb25l IChtb3N0IG9mIHRoZSB0aW1lIC0tIGV2ZW4gcmV1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiksIHdp dGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zICoobm90ZTogdGhlIGltbXV0YWJpbGl0eSBpcyAq Km5vdCoqIHRoZSBvbmx5IGRpZmZlcmVuY2UpKjoKICAqIE5vdCBgRW51bWVyYWJsZWA7CiAgKiBJ bW11dGFibGU7CiAgKiBEb2Vzbid0IHRoaW5rIG9mIGl0c2VsZiBhcyAiYWxtb3N0IGhhc2giIChk b2Vzbid0IGhhdmUgYHRvX2FgLCBgdmFsdWVzYCBhbmQgYFtdYCBtZXRob2RzKTsKICAqIENhbiBo YXZlIGVtcHR5IG1lbWJlcnMgbGlzdCAoZnVuIGZhY3Q6IGBTdHJ1Y3QubmV3KCdGb28nKWAgY3Jl YXRpbmcgbWVtYmVyLWxlc3MgYFN0cnVjdDo6Rm9vYCwgaXMgYWxsb3dlZCwgYnV0IGBTdHJ1Y3Qu bmV3KClgIGlzIG5vdCkgdG8gYWxsb3cgdXNhZ2UgcGF0dGVybnMgbGlrZToKCmBgYHJ1YnkKY2xh c3MgTXlTZXJ2aWNlCiAgU3VjY2VzcyA9IFN0cnVjdDo6VmFsdWUubmV3KDpyZXN1bHRzKQogIE5v dEZvdW5kID0gU3RydWN0OjpWYWx1ZS5uZXcKZW5kCmBgYAoKYE5vdEZvdW5kYCBoZXJlLCB1bmxp a2UsIHNheSwgYE9iamVjdC5uZXcuZnJlZXplYCAoYW5vdGhlciBwYXR0ZXJuIGZvciBjcmVhdGlu ZyAiZW1wdHkgdHlwZWQgdmFsdWUgb2JqZWN0IiksIGhhcyBuaWNlIGluc3BlY3QgYCM8dmFsdWUg Tm90Rm91bmQ+YCwgYW5kIGNyZWF0ZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIGBTdWNjZXNzYCwg bWFraW5nIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuIEFuZCBpZiBpdCB3aWxsIGV2b2x2ZSB0byBo YXZlIHNvbWUgYXR0cmlidXRlcywgdGhlIGNvZGUgY2hhbmdlIHdvdWxkIGJlIGVhc3kuCgoqKlBh dGNoIGlzIHByb3ZpZGVkKioKCltTYW1wbGUgcmVuZGVyZWQgUkRvYyBkb2N1bWVudGF0aW9uXSho dHRwczovL3p2ZXJvay5naXRodWIuaW8vcnVieS1yZG9jL1N0cnVjdC1WYWx1ZS5odG1sKQoKLS0t RmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdHJ1Y3RfdmFsdWUucGF0Y2gg KDE4LjYgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6 IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2Ny aWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMv cnVieS1jb3JlPgo=