[ruby-core:109963] [Ruby master Feature#16122] Data: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-09-20 18:16:51 UTC
List:
ruby-core #109963
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKCkBub2J1IFRoYW5rcyEKCkkndmUgYXBwbGllZCBhbGwgc3VnZ2VzdGlvbnMgZm9yIHRoZSBj b2RlIHJldmlldywgZXhjZXB0IGZvciBbdGhpcyBvbmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5 L3J1YnkvcHVsbC82MzUzI2Rpc2N1c3Npb25fcjk2Nzc0MjAxOSkgKEkndmUgYW5zd2VyZWQgd2h5 IGl0IGlzIGRvbmUgdGhhdCB3YXkpLCBhbmQgYGRlZmluZV9zdHJ1Y3RgIG9uZS4gTXkgcmVhc29u aW5nIGlzIHRoaXM6CgoqIEkgYW0gbm90IHN1cmUgdGhhdCAibmFtaW5nIGFzIGEgZmlyc3QgYXJn dW1lbnQiIGlzIGEgd2lkZWx5IHVzZWQgZmVhdHVyZSwgYnV0IGl0IHNlZW1zIG5pY2UsIHNvIEkg bGVmdCBpdCBmb3IgYERhdGFgIHRvbyAoYW5kIHRlc3RzIGNvbmZpcm1pbmcgaXRzIGV4aXN0ZW5j ZSk7IEkgaW1hZ2luZSB0aGF0IGluIHNvbWUgc3lzdGVtcywgZG9pbmcgYERhdGEuZGVmaW5lKCdN eVR5cGUnLCA6bWVtYmVycylgIG1pZ2h0IGJlIHByZWZlcnJlZCB3YXk7CiogSWYgd2UgbGVhdmUg dGhhdCBhc2lkZSwgdGhlIGRpZmZlcmVuY2VzIGR1ZSB0byBhIGJvb2wgZmxhZyBhcmUgdmVyeSBz bWFsbCAoc29tZSA1LTYgbGluZXMgb2YgNzAtbGluZXMgbWV0aG9kKSwgc28gaXQgc2VlbXMgdGhh dCBrZWVwaW5nIGl0IGFsbCB0b2dldGhlciBpcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQuCgpC dXQgcGxlYXNlIHRlbGwgbWUgaWYgeW91IGRpc2FncmVlLCBhbmQgSSdsbCBjaGFuZ2UgdGhlIGlt cGxlbWVudGF0aW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpG ZWF0dXJlICMxNjEyMjogRGF0YTogc2ltcGxlIGltbXV0YWJsZSB2YWx1ZSBvYmplY3QKaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5nZS05OTIxMwoKKiBBdXRob3I6 IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQoqIFN0YXR1czogQXNzaWduZWQKKiBQcmlvcml0eTog Tm9ybWFsCiogQXNzaWduZWU6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCioqVmFsdWUgT2JqZWN0KiogaXMgYSB1c2VmdWwg Y29uY2VwdCwgaW50cm9kdWNlZCBieSBNYXJ0aW4gRm93bGVyIChbaGlzIHBvc3RdKGh0dHBzOi8v bWFydGluZm93bGVyLmNvbS9ibGlraS9WYWx1ZU9iamVjdC5odG1sKSwgW1dpa2lwZWRpYSBFbnRy eV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFsdWVfb2JqZWN0KSkgd2l0aCB0aGUg Zm9sbG93aW5nIHByb3BlcnRpZXMgKHNpbXBsaWZ5aW5nIHRoZSBpZGVhKToKCiogcmVwcmVzZW50 aW5nIHNvbWUgcmVsYXRpdmVseSBzaW1wbGUgZGF0YTsKKiBpbW11dGFibGU7CiogY29tcGFyZWQg YnkgdHlwZSAmIHZhbHVlOwoqIG5pY2VseSByZXByZXNlbnRlZC4KClZhbHVlIG9iamVjdHMgYXJl IHN1cGVyLXVzZWZ1bCBlc3BlY2lhbGx5IGZvciBkZWZpbmluZyBBUElzLCB0aGVpciBpbnB1dC9y ZXR1cm4gdmFsdWVzLiBSZWNlbnRseSwgdGhlcmUgd2VyZSBzb21lIG1vdmVtZW50IHRvd2FyZHMg dXNpbmcgbW9yZSBpbW11dGFiaWxpdHktZnJpZW5kbHkgYXBwcm9hY2ggaW4gUnVieSBwcm9ncmFt bWluZywgbGVhZGluZyB0byBjcmVhdGluZyBzZXZlcmFsIGRpc2N1c3Npb25zL2xpYnJhcmllcyB3 aXRoIHZhbHVlIG9iamVjdHMuIEZvciBleGFtcGxlLCBbVG9tIERhbGxpbmcncyBnZW1dKGh0dHBz Oi8vZ2l0aHViLmNvbS90b21kYWxsaW5nL3ZhbHVlX3NlbWFudGljcyksIFtHb29kIFJ1YnkgVmFs dWUgb2JqZWN0IGNvbnZlbnRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS96dmVyb2svZ29vZC12YWx1 ZS1vYmplY3QpIChkaXNjbGFpbWVyOiB0aGUgbGF0dGVyIGlzIG1haW50YWluZWQgYnkgeW91cnMg dHJ1bHkpLgoKSSBwcm9wb3NlIHRvIGludHJvZHVjZSAqKm5hdGl2ZSB2YWx1ZSBvYmplY3RzKiog dG8gUnVieSBhcyBhIGNvcmUgY2xhc3MuCgoqKldoeSBub3QgYSBnZW0/KioKCiogSSBiZWxpZXZl IHRoYXQgY29uY2VwdCBpcyB0aGF0IHNpbXBsZSwgdGhhdCBub2JvZHkgKndpbGwgZXZlbiB0cnkq IHRvIHVzZSBhIGdlbSBmb3IgcmVwcmVzZW50aW5nIGl0IHdpdGgsIHVubGVzcyB0aGUgZnJhbWV3 b3JrL2xpYnJhcnkgdXNlZCBhbHJlYWR5IHByb3ZpZGVzIG9uZS4KKiBQb3RlbnRpYWxseSwgYSBs b3Qgb2Ygc3RhbmRhcmQgbGlicmFyeSAoYW5kIHByb2JhYmx5IGV2ZW4gY29yZSkgQVBJcyBjb3Vs ZCBiZW5lZml0IGZyb20gdGhlIGNvbmNlcHQuCgoqKldoeSBgU3RydWN0YCBpcyBub3QgZW5vdWdo KioKCkNvcmUgYFN0cnVjdGAgY2xhc3MgaXMgInNvbWV3aGF0IGFsaWtlIiB2YWx1ZS1vYmplY3Qs IGFuZCBmcmVxdWVudGx5IHVzZWQgaW5zdGVhZCBvZiBvbmU6IGl0IGlzIGNvbXBhcmVkIGJ5IHZh bHVlIGFuZCBjb25zaXN0cyBvZiBzaW1wbGUgYXR0cmlidXRlcy4gT24gdGhlIG90aGVyIGhhbmQs IGBTdHJ1Y3RgIGlzOgoqIG11dGFibGU7CiogY29sbGVjdGlvbi1hbGlrZSAoZGVmaW5lcyBgdG9f YWAgYW5kIGlzIGBFbnVtZXJhYmxlYCk7CiogZGljdGlvbmFyeS1hbGlrZSAoaGFzIGBbXWAgYW5k IGAudmFsdWVzYCBtZXRob2RzKS4KClRoZSBhYm92ZSB0cmFpdHMgc29tZWhvdyBlcm9kZXMgdGhl IHNlbWFudGljcywgbWFraW5nIGNvZGUgbGVzcyBjbGVhciwgZXNwZWNpYWxseSB3aGVuIGR1Y2st dHlwaW5nIGlzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhpcyBjb2RlIHNuaXBwZXQgc2hvd3Mgd2h5 IGB0b19hYCBpcyBwcm9ibGVtYXRpYzoKCmBgYHJ1YnkKUmVzdWx0ID0gU3RydWN0Lm5ldyg6c3Vj Y2VzcywgOmNvbnRlbnQpCgojIE5vdywgaW1hZ2luZSB0aGF0IG90aGVyIGNvZGUgYXNzdW1lcyBg ZGF0YWAgY291bGQgYmUgZWl0aGVyIFJlc3VsdCwgb3IgW1Jlc3VsdCwgUmVzdWx0LCBSZXN1bHRd CiMgU28sIC4uLgoKZGF0YSA9IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKQoKQXJy YXkoZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyldLCBn b3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KCiMgb3IuLi4KZGVmIGZvbyhhcmcxLCBhcmcyID0g bmlsKQpwIGFyZzEsIGFyZzIKZW5kCgpmb28oKmRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0 cnVlLCAnaXQgaXMgYXdlc29tZScpLCBuaWxdLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10K YGBgCgpIYXZpbmcgYFtdYCBhbmQgYGVhY2hgIGRlZmluZWQgb24gc29tZXRoaW5nIHRoYXQgaXMg dGhvdWdodCBhcyAianVzdCB2YWx1ZSIgY2FuIGFsc28gbGVhZCB0byBzdWJ0bGUgYnVncywgd2hl biBzb21lIG1ldGhvZCBjaGVja3MgImlmIHRoZSByZWNlaXZlZCBhcmd1bWVudCBpcyBjb2xsZWN0 aW9uLWFsaWtlIiwgYW5kIHZhbHVlIG9iamVjdCdzIGF1dGhvciBkb2Vzbid0IHRob3VnaHQgb2Yg aXQgYXMgYSBjb2xsZWN0aW9uLgoKKipDb25jcmV0ZSBwcm9wb3NhbCoqCgoqIENsYXNzIG5hbWU6 IGBTdHJ1Y3Q6OlZhbHVlYDogbG90IG9mIFJ1Ynlpc3RzIGFyZSB1c2VkIHRvIGhhdmUgYFN0cnVj dGAgYXMgYSBxdWljayAic29tZXRoaW5nLWxpa2UtdmFsdWUiIGRyb3AtaW4sIHNvIGFsdGVybmF0 aXZlLCBtb3JlIHN0cmljdCBpbXBsZW1lbnRhdGlvbiwgYmVpbmcgcGFydCBvZiBgU3RydWN0YCBB UEksIHdpbGwgYmUgcXVpdGUgZGlzY292ZXJhYmxlOyAqYWx0ZXJuYXRpdmU6IGp1c3QgYFZhbHVl YCoKKiBDbGFzcyBBUEkgaXMgY29weWluZyBgU3RydWN0YHMgb25lIChtb3N0IG9mIHRoZSB0aW1l IC0tIGV2ZW4gcmV1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiksIHdpdGggdGhlIGZvbGxvd2luZyBl eGNlcHRpb25zICoobm90ZTogdGhlIGltbXV0YWJpbGl0eSBpcyAqKm5vdCoqIHRoZSBvbmx5IGRp ZmZlcmVuY2UpKjoKICAqIE5vdCBgRW51bWVyYWJsZWA7CiAgKiBJbW11dGFibGU7CiAgKiBEb2Vz bid0IHRoaW5rIG9mIGl0c2VsZiBhcyAiYWxtb3N0IGhhc2giIChkb2Vzbid0IGhhdmUgYHRvX2Fg LCBgdmFsdWVzYCBhbmQgYFtdYCBtZXRob2RzKTsKICAqIENhbiBoYXZlIGVtcHR5IG1lbWJlcnMg bGlzdCAoZnVuIGZhY3Q6IGBTdHJ1Y3QubmV3KCdGb28nKWAgY3JlYXRpbmcgbWVtYmVyLWxlc3Mg YFN0cnVjdDo6Rm9vYCwgaXMgYWxsb3dlZCwgYnV0IGBTdHJ1Y3QubmV3KClgIGlzIG5vdCkgdG8g YWxsb3cgdXNhZ2UgcGF0dGVybnMgbGlrZToKCmBgYHJ1YnkKY2xhc3MgTXlTZXJ2aWNlCiAgU3Vj Y2VzcyA9IFN0cnVjdDo6VmFsdWUubmV3KDpyZXN1bHRzKQogIE5vdEZvdW5kID0gU3RydWN0OjpW YWx1ZS5uZXcKZW5kCmBgYAoKYE5vdEZvdW5kYCBoZXJlLCB1bmxpa2UsIHNheSwgYE9iamVjdC5u ZXcuZnJlZXplYCAoYW5vdGhlciBwYXR0ZXJuIGZvciBjcmVhdGluZyAiZW1wdHkgdHlwZWQgdmFs dWUgb2JqZWN0IiksIGhhcyBuaWNlIGluc3BlY3QgYCM8dmFsdWUgTm90Rm91bmQ+YCwgYW5kIGNy ZWF0ZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIGBTdWNjZXNzYCwgbWFraW5nIHRoZSBjb2RlIG1v cmUgcmVhZGFibGUuIEFuZCBpZiBpdCB3aWxsIGV2b2x2ZSB0byBoYXZlIHNvbWUgYXR0cmlidXRl cywgdGhlIGNvZGUgY2hhbmdlIHdvdWxkIGJlIGVhc3kuCgoqKlBhdGNoIGlzIHByb3ZpZGVkKioK CltTYW1wbGUgcmVuZGVyZWQgUkRvYyBkb2N1bWVudGF0aW9uXShodHRwczovL3p2ZXJvay5naXRo dWIuaW8vcnVieS1yZG9jL1N0cnVjdC1WYWx1ZS5odG1sKQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpzdHJ1Y3RfdmFsdWUucGF0Y2ggKDE4LjYgS0IpCgoKLS0gCmh0 dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3Jl LXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3Rz LnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=