[ruby-core:109857] [Ruby master Feature#16122] Data: simple immutable value object
From:
"RubyBugs (A Nonymous)" <noreply@...>
Date:
2022-09-08 19:50:53 UTC
List:
ruby-core #109857
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgUnVieUJ1Z3MgKEEgTm9ueW1vdXMpLgoK CkkndmUgZmlsZWQgYSAybmQgZm9sbG93LXVwIHRpY2tldCBbaGVyZV0oaHR0cHM6Ly9idWdzLnJ1 YnktbGFuZy5vcmcvaXNzdWVzLzE5MDAxKSBmb3IgdGhlIFN5bW1ldHJpYyBgI3RvX2hgIG1ldGhv ZCB3aG9zZSB2YWx1ZXMgY2FuIGJlIGZlZCB0byBhIGtleXdvcmQtYXJncyBjb25zdHJ1Y3RvcgoK CgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxNjEy MjogRGF0YTogc2ltcGxlIGltbXV0YWJsZSB2YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5nZS05OTA5NAoKKiBBdXRob3I6IHp2ZXJvayAoVmlj dG9yIFNoZXBlbGV2KQoqIFN0YXR1czogQXNzaWduZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNz aWduZWU6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCioqVmFsdWUgT2JqZWN0KiogaXMgYSB1c2VmdWwgY29uY2VwdCwgaW50 cm9kdWNlZCBieSBNYXJ0aW4gRm93bGVyIChbaGlzIHBvc3RdKGh0dHBzOi8vbWFydGluZm93bGVy LmNvbS9ibGlraS9WYWx1ZU9iamVjdC5odG1sKSwgW1dpa2lwZWRpYSBFbnRyeV0oaHR0cHM6Ly9l bi53aWtpcGVkaWEub3JnL3dpa2kvVmFsdWVfb2JqZWN0KSkgd2l0aCB0aGUgZm9sbG93aW5nIHBy b3BlcnRpZXMgKHNpbXBsaWZ5aW5nIHRoZSBpZGVhKToKCiogcmVwcmVzZW50aW5nIHNvbWUgcmVs YXRpdmVseSBzaW1wbGUgZGF0YTsKKiBpbW11dGFibGU7CiogY29tcGFyZWQgYnkgdHlwZSAmIHZh bHVlOwoqIG5pY2VseSByZXByZXNlbnRlZC4KClZhbHVlIG9iamVjdHMgYXJlIHN1cGVyLXVzZWZ1 bCBlc3BlY2lhbGx5IGZvciBkZWZpbmluZyBBUElzLCB0aGVpciBpbnB1dC9yZXR1cm4gdmFsdWVz LiBSZWNlbnRseSwgdGhlcmUgd2VyZSBzb21lIG1vdmVtZW50IHRvd2FyZHMgdXNpbmcgbW9yZSBp bW11dGFiaWxpdHktZnJpZW5kbHkgYXBwcm9hY2ggaW4gUnVieSBwcm9ncmFtbWluZywgbGVhZGlu ZyB0byBjcmVhdGluZyBzZXZlcmFsIGRpc2N1c3Npb25zL2xpYnJhcmllcyB3aXRoIHZhbHVlIG9i amVjdHMuIEZvciBleGFtcGxlLCBbVG9tIERhbGxpbmcncyBnZW1dKGh0dHBzOi8vZ2l0aHViLmNv bS90b21kYWxsaW5nL3ZhbHVlX3NlbWFudGljcyksIFtHb29kIFJ1YnkgVmFsdWUgb2JqZWN0IGNv bnZlbnRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS96dmVyb2svZ29vZC12YWx1ZS1vYmplY3QpIChk aXNjbGFpbWVyOiB0aGUgbGF0dGVyIGlzIG1haW50YWluZWQgYnkgeW91cnMgdHJ1bHkpLgoKSSBw cm9wb3NlIHRvIGludHJvZHVjZSAqKm5hdGl2ZSB2YWx1ZSBvYmplY3RzKiogdG8gUnVieSBhcyBh IGNvcmUgY2xhc3MuCgoqKldoeSBub3QgYSBnZW0/KioKCiogSSBiZWxpZXZlIHRoYXQgY29uY2Vw dCBpcyB0aGF0IHNpbXBsZSwgdGhhdCBub2JvZHkgKndpbGwgZXZlbiB0cnkqIHRvIHVzZSBhIGdl bSBmb3IgcmVwcmVzZW50aW5nIGl0IHdpdGgsIHVubGVzcyB0aGUgZnJhbWV3b3JrL2xpYnJhcnkg dXNlZCBhbHJlYWR5IHByb3ZpZGVzIG9uZS4KKiBQb3RlbnRpYWxseSwgYSBsb3Qgb2Ygc3RhbmRh cmQgbGlicmFyeSAoYW5kIHByb2JhYmx5IGV2ZW4gY29yZSkgQVBJcyBjb3VsZCBiZW5lZml0IGZy b20gdGhlIGNvbmNlcHQuCgoqKldoeSBgU3RydWN0YCBpcyBub3QgZW5vdWdoKioKCkNvcmUgYFN0 cnVjdGAgY2xhc3MgaXMgInNvbWV3aGF0IGFsaWtlIiB2YWx1ZS1vYmplY3QsIGFuZCBmcmVxdWVu dGx5IHVzZWQgaW5zdGVhZCBvZiBvbmU6IGl0IGlzIGNvbXBhcmVkIGJ5IHZhbHVlIGFuZCBjb25z aXN0cyBvZiBzaW1wbGUgYXR0cmlidXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGBTdHJ1Y3RgIGlz OgoqIG11dGFibGU7CiogY29sbGVjdGlvbi1hbGlrZSAoZGVmaW5lcyBgdG9fYWAgYW5kIGlzIGBF bnVtZXJhYmxlYCk7CiogZGljdGlvbmFyeS1hbGlrZSAoaGFzIGBbXWAgYW5kIGAudmFsdWVzYCBt ZXRob2RzKS4KClRoZSBhYm92ZSB0cmFpdHMgc29tZWhvdyBlcm9kZXMgdGhlIHNlbWFudGljcywg bWFraW5nIGNvZGUgbGVzcyBjbGVhciwgZXNwZWNpYWxseSB3aGVuIGR1Y2stdHlwaW5nIGlzIHVz ZWQuCgpGb3IgZXhhbXBsZSwgdGhpcyBjb2RlIHNuaXBwZXQgc2hvd3Mgd2h5IGB0b19hYCBpcyBw cm9ibGVtYXRpYzoKCmBgYHJ1YnkKUmVzdWx0ID0gU3RydWN0Lm5ldyg6c3VjY2VzcywgOmNvbnRl bnQpCgojIE5vdywgaW1hZ2luZSB0aGF0IG90aGVyIGNvZGUgYXNzdW1lcyBgZGF0YWAgY291bGQg YmUgZWl0aGVyIFJlc3VsdCwgb3IgW1Jlc3VsdCwgUmVzdWx0LCBSZXN1bHRdCiMgU28sIC4uLgoK ZGF0YSA9IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKQoKQXJyYXkoZGF0YSkgIyA9 PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyldLCBnb3QgW3RydWUsICdp dCBpcyBhd2Vzb21lJ10KCiMgb3IuLi4KZGVmIGZvbyhhcmcxLCBhcmcyID0gbmlsKQpwIGFyZzEs IGFyZzIKZW5kCgpmb28oKmRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMg YXdlc29tZScpLCBuaWxdLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KYGBgCgpIYXZpbmcg YFtdYCBhbmQgYGVhY2hgIGRlZmluZWQgb24gc29tZXRoaW5nIHRoYXQgaXMgdGhvdWdodCBhcyAi anVzdCB2YWx1ZSIgY2FuIGFsc28gbGVhZCB0byBzdWJ0bGUgYnVncywgd2hlbiBzb21lIG1ldGhv ZCBjaGVja3MgImlmIHRoZSByZWNlaXZlZCBhcmd1bWVudCBpcyBjb2xsZWN0aW9uLWFsaWtlIiwg YW5kIHZhbHVlIG9iamVjdCdzIGF1dGhvciBkb2Vzbid0IHRob3VnaHQgb2YgaXQgYXMgYSBjb2xs ZWN0aW9uLgoKKipDb25jcmV0ZSBwcm9wb3NhbCoqCgoqIENsYXNzIG5hbWU6IGBTdHJ1Y3Q6OlZh bHVlYDogbG90IG9mIFJ1Ynlpc3RzIGFyZSB1c2VkIHRvIGhhdmUgYFN0cnVjdGAgYXMgYSBxdWlj ayAic29tZXRoaW5nLWxpa2UtdmFsdWUiIGRyb3AtaW4sIHNvIGFsdGVybmF0aXZlLCBtb3JlIHN0 cmljdCBpbXBsZW1lbnRhdGlvbiwgYmVpbmcgcGFydCBvZiBgU3RydWN0YCBBUEksIHdpbGwgYmUg cXVpdGUgZGlzY292ZXJhYmxlOyAqYWx0ZXJuYXRpdmU6IGp1c3QgYFZhbHVlYCoKKiBDbGFzcyBB UEkgaXMgY29weWluZyBgU3RydWN0YHMgb25lIChtb3N0IG9mIHRoZSB0aW1lIC0tIGV2ZW4gcmV1 c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zICoo bm90ZTogdGhlIGltbXV0YWJpbGl0eSBpcyAqKm5vdCoqIHRoZSBvbmx5IGRpZmZlcmVuY2UpKjoK ICAqIE5vdCBgRW51bWVyYWJsZWA7CiAgKiBJbW11dGFibGU7CiAgKiBEb2Vzbid0IHRoaW5rIG9m IGl0c2VsZiBhcyAiYWxtb3N0IGhhc2giIChkb2Vzbid0IGhhdmUgYHRvX2FgLCBgdmFsdWVzYCBh bmQgYFtdYCBtZXRob2RzKTsKICAqIENhbiBoYXZlIGVtcHR5IG1lbWJlcnMgbGlzdCAoZnVuIGZh Y3Q6IGBTdHJ1Y3QubmV3KCdGb28nKWAgY3JlYXRpbmcgbWVtYmVyLWxlc3MgYFN0cnVjdDo6Rm9v YCwgaXMgYWxsb3dlZCwgYnV0IGBTdHJ1Y3QubmV3KClgIGlzIG5vdCkgdG8gYWxsb3cgdXNhZ2Ug cGF0dGVybnMgbGlrZToKCmBgYHJ1YnkKY2xhc3MgTXlTZXJ2aWNlCiAgU3VjY2VzcyA9IFN0cnVj dDo6VmFsdWUubmV3KDpyZXN1bHRzKQogIE5vdEZvdW5kID0gU3RydWN0OjpWYWx1ZS5uZXcKZW5k CmBgYAoKYE5vdEZvdW5kYCBoZXJlLCB1bmxpa2UsIHNheSwgYE9iamVjdC5uZXcuZnJlZXplYCAo YW5vdGhlciBwYXR0ZXJuIGZvciBjcmVhdGluZyAiZW1wdHkgdHlwZWQgdmFsdWUgb2JqZWN0Iiks IGhhcyBuaWNlIGluc3BlY3QgYCM8dmFsdWUgTm90Rm91bmQ+YCwgYW5kIGNyZWF0ZWQgY29uc2lz dGVudGx5IHdpdGggdGhlIGBTdWNjZXNzYCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUu IEFuZCBpZiBpdCB3aWxsIGV2b2x2ZSB0byBoYXZlIHNvbWUgYXR0cmlidXRlcywgdGhlIGNvZGUg Y2hhbmdlIHdvdWxkIGJlIGVhc3kuCgoqKlBhdGNoIGlzIHByb3ZpZGVkKioKCltTYW1wbGUgcmVu ZGVyZWQgUkRvYyBkb2N1bWVudGF0aW9uXShodHRwczovL3p2ZXJvay5naXRodWIuaW8vcnVieS1y ZG9jL1N0cnVjdC1WYWx1ZS5odG1sKQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpzdHJ1Y3RfdmFsdWUucGF0Y2ggKDE4LjYgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5y dWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVi eS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5v cmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=