[ruby-core:109571] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-08-19 10:19:51 UTC
List:
ruby-core #109571
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4KCgpJIGFtIG5vdCAxMDAlIHNhdGlzZmllZCB3aXRoIGFueSBvZiB0aGUgY2FuZGlkYXRlcywg YnV0IFN0cnVjdDo6VmFsdWUgYW5kIERhdGEgYXJlIGJldHRlciB0aGFuIG90aGVycy4KU3RydWN0 OjpWYWx1ZSBjYW4gY2F1c2UgY29uZmxpY3Qgd2hlbiBzb21lb25lIGlzIHVzaW5nIGBTdHJ1Y3Qu bmV3KCJWYWx1ZSIsIDpmb28sIDpiYXIpYCAodGhpcyBvbGQtc3R5bGUgY29kZSBjcmVhdGVzIFN0 cnVjdDo6VmFsdWUgY2xhc3MpLgpEYXRhIGlzIGEgbGl0dGxlIGFtYmlndW91cywgYnV0IHByb2Jh Ymx5IHdlIGNhbiBnZXQgdXNlZC4KCk1hdHouCiAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IFN0cnVjdDo6VmFsdWU6IHNpbXBsZSBpbW11 dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEy MiNjaGFuZ2UtOTg3NDMKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikKKiBTdGF0 dXM6IEZlZWRiYWNrCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 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=