[ruby-core:109684] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-08-25 10:40:36 UTC
List:
ruby-core #109684
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4KCgpXZSBhcmUgZ29pbmcgdG8gaW1wbGVtZW50IERhdGEgY2xhc3MgaW4gdGhlIGZvbGxvd2lu ZyBzcGVjOgoKKiBgRCA9IERhdGEuZGVmKDpmb28sIDpiYXIpYCB0byBkZWZpbmUgYSBkYXRhIGNs YXNzIChzdWJjbGFzcyBvZiBEYXRhKQoqIGBEYXRhLm5ld2AgcmFpc2VzIGV4Y2VwdGlvbiAodW5s aWtlIFN0cnVjdCkKKiBgZCA9IEQubmV3KDEsMilgIHRvIGNyZWF0ZSBEYXRhIGluc3RhbmNlCiog IE9yIGBkID0gRC5uZXcoZm9vOjEsIGZvbzoyKWAKKiBgRC5uZXcoMSlgIG9yIGBELm5ldygxLDIs MylgIHJhaXNlcyBBcmd1bWVudEVycm9yCiogYEQubmV3KGZvbzoxKWAgb3IgYEQubmV3KGZvbzox LGJhcjoyLGJhejozKWAgcmFpc2VzIEFyZ3VtZW50RXJyb3IKKiBJbnN0ZWFkIG9mIGBELm5ldygu Li4pYCB5b3UgbWF5IHdhbnQgdG8gdXNlIGBEWy4uLl1gCgpXZSBuZWVkIGZ1cnRoZXIgZGlzY3Vz c2lvbiByZWdhcmRpbmcgdGhlIGZvbGxvd2luZzoKCiogZGVmYXVsdCB2YWx1ZSB0byBpbml0aWFs aXplIERhdGEKKiBob3cgdG8gY2FsbCBgaW5pdGlhbGl6ZWAgbWV0aG9kIGZvciBgRGAgY2xhc3MK KiB3aGV0aGVyIHdlIHdpbGwgaW50cm9kdWNlIGBTdHJ1Y3QuZGVmYAoKTWF0ei4KCgoKCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IFN0cnVj dDo6VmFsdWU6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5 LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTg5MDgKCiogQXV0aG9yOiB6dmVyb2sgKFZp Y3RvciBTaGVwZWxldikKKiBTdGF0dXM6IEZlZWRiYWNrCiogUHJpb3JpdHk6IE5vcm1hbAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCioqVmFsdWUgT2JqZWN0KiogaXMg YSB1c2VmdWwgY29uY2VwdCwgaW50cm9kdWNlZCBieSBNYXJ0aW4gRm93bGVyIChbaGlzIHBvc3Rd KGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9WYWx1ZU9iamVjdC5odG1sKSwgW1dpa2lw ZWRpYSBFbnRyeV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFsdWVfb2JqZWN0KSkg d2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgKHNpbXBsaWZ5aW5nIHRoZSBpZGVhKToKCiog cmVwcmVzZW50aW5nIHNvbWUgcmVsYXRpdmVseSBzaW1wbGUgZGF0YTsKKiBpbW11dGFibGU7Ciog Y29tcGFyZWQgYnkgdHlwZSAmIHZhbHVlOwoqIG5pY2VseSByZXByZXNlbnRlZC4KClZhbHVlIG9i amVjdHMgYXJlIHN1cGVyLXVzZWZ1bCBlc3BlY2lhbGx5IGZvciBkZWZpbmluZyBBUElzLCB0aGVp ciBpbnB1dC9yZXR1cm4gdmFsdWVzLiBSZWNlbnRseSwgdGhlcmUgd2VyZSBzb21lIG1vdmVtZW50 IHRvd2FyZHMgdXNpbmcgbW9yZSBpbW11dGFiaWxpdHktZnJpZW5kbHkgYXBwcm9hY2ggaW4gUnVi eSBwcm9ncmFtbWluZywgbGVhZGluZyB0byBjcmVhdGluZyBzZXZlcmFsIGRpc2N1c3Npb25zL2xp YnJhcmllcyB3aXRoIHZhbHVlIG9iamVjdHMuIEZvciBleGFtcGxlLCBbVG9tIERhbGxpbmcncyBn ZW1dKGh0dHBzOi8vZ2l0aHViLmNvbS90b21kYWxsaW5nL3ZhbHVlX3NlbWFudGljcyksIFtHb29k IFJ1YnkgVmFsdWUgb2JqZWN0IGNvbnZlbnRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS96dmVyb2sv Z29vZC12YWx1ZS1vYmplY3QpIChkaXNjbGFpbWVyOiB0aGUgbGF0dGVyIGlzIG1haW50YWluZWQg YnkgeW91cnMgdHJ1bHkpLgoKSSBwcm9wb3NlIHRvIGludHJvZHVjZSAqKm5hdGl2ZSB2YWx1ZSBv YmplY3RzKiogdG8gUnVieSBhcyBhIGNvcmUgY2xhc3MuCgoqKldoeSBub3QgYSBnZW0/KioKCiog SSBiZWxpZXZlIHRoYXQgY29uY2VwdCBpcyB0aGF0IHNpbXBsZSwgdGhhdCBub2JvZHkgKndpbGwg ZXZlbiB0cnkqIHRvIHVzZSBhIGdlbSBmb3IgcmVwcmVzZW50aW5nIGl0IHdpdGgsIHVubGVzcyB0 aGUgZnJhbWV3b3JrL2xpYnJhcnkgdXNlZCBhbHJlYWR5IHByb3ZpZGVzIG9uZS4KKiBQb3RlbnRp YWxseSwgYSBsb3Qgb2Ygc3RhbmRhcmQgbGlicmFyeSAoYW5kIHByb2JhYmx5IGV2ZW4gY29yZSkg QVBJcyBjb3VsZCBiZW5lZml0IGZyb20gdGhlIGNvbmNlcHQuCgoqKldoeSBgU3RydWN0YCBpcyBu b3QgZW5vdWdoKioKCkNvcmUgYFN0cnVjdGAgY2xhc3MgaXMgInNvbWV3aGF0IGFsaWtlIiB2YWx1 ZS1vYmplY3QsIGFuZCBmcmVxdWVudGx5IHVzZWQgaW5zdGVhZCBvZiBvbmU6IGl0IGlzIGNvbXBh cmVkIGJ5IHZhbHVlIGFuZCBjb25zaXN0cyBvZiBzaW1wbGUgYXR0cmlidXRlcy4gT24gdGhlIG90 aGVyIGhhbmQsIGBTdHJ1Y3RgIGlzOgoqIG11dGFibGU7CiogY29sbGVjdGlvbi1hbGlrZSAoZGVm aW5lcyBgdG9fYWAgYW5kIGlzIGBFbnVtZXJhYmxlYCk7CiogZGljdGlvbmFyeS1hbGlrZSAoaGFz IGBbXWAgYW5kIGAudmFsdWVzYCBtZXRob2RzKS4KClRoZSBhYm92ZSB0cmFpdHMgc29tZWhvdyBl cm9kZXMgdGhlIHNlbWFudGljcywgbWFraW5nIGNvZGUgbGVzcyBjbGVhciwgZXNwZWNpYWxseSB3 aGVuIGR1Y2stdHlwaW5nIGlzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhpcyBjb2RlIHNuaXBwZXQg c2hvd3Mgd2h5IGB0b19hYCBpcyBwcm9ibGVtYXRpYzoKCmBgYHJ1YnkKUmVzdWx0ID0gU3RydWN0 Lm5ldyg6c3VjY2VzcywgOmNvbnRlbnQpCgojIE5vdywgaW1hZ2luZSB0aGF0IG90aGVyIGNvZGUg YXNzdW1lcyBgZGF0YWAgY291bGQgYmUgZWl0aGVyIFJlc3VsdCwgb3IgW1Jlc3VsdCwgUmVzdWx0 LCBSZXN1bHRdCiMgU28sIC4uLgoKZGF0YSA9IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNv bWUnKQoKQXJyYXkoZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vz b21lJyldLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KCiMgb3IuLi4KZGVmIGZvbyhhcmcx LCBhcmcyID0gbmlsKQpwIGFyZzEsIGFyZzIKZW5kCgpmb28oKmRhdGEpICMgPT4gZXhwZWN0ZWQg W1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpLCBuaWxdLCBnb3QgW3RydWUsICdpdCBpcyBh d2Vzb21lJ10KYGBgCgpIYXZpbmcgYFtdYCBhbmQgYGVhY2hgIGRlZmluZWQgb24gc29tZXRoaW5n IHRoYXQgaXMgdGhvdWdodCBhcyAianVzdCB2YWx1ZSIgY2FuIGFsc28gbGVhZCB0byBzdWJ0bGUg YnVncywgd2hlbiBzb21lIG1ldGhvZCBjaGVja3MgImlmIHRoZSByZWNlaXZlZCBhcmd1bWVudCBp cyBjb2xsZWN0aW9uLWFsaWtlIiwgYW5kIHZhbHVlIG9iamVjdCdzIGF1dGhvciBkb2Vzbid0IHRo b3VnaHQgb2YgaXQgYXMgYSBjb2xsZWN0aW9uLgoKKipDb25jcmV0ZSBwcm9wb3NhbCoqCgoqIENs YXNzIG5hbWU6IGBTdHJ1Y3Q6OlZhbHVlYDogbG90IG9mIFJ1Ynlpc3RzIGFyZSB1c2VkIHRvIGhh dmUgYFN0cnVjdGAgYXMgYSBxdWljayAic29tZXRoaW5nLWxpa2UtdmFsdWUiIGRyb3AtaW4sIHNv IGFsdGVybmF0aXZlLCBtb3JlIHN0cmljdCBpbXBsZW1lbnRhdGlvbiwgYmVpbmcgcGFydCBvZiBg U3RydWN0YCBBUEksIHdpbGwgYmUgcXVpdGUgZGlzY292ZXJhYmxlOyAqYWx0ZXJuYXRpdmU6IGp1 c3QgYFZhbHVlYCoKKiBDbGFzcyBBUEkgaXMgY29weWluZyBgU3RydWN0YHMgb25lIChtb3N0IG9m IHRoZSB0aW1lIC0tIGV2ZW4gcmV1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiksIHdpdGggdGhlIGZv bGxvd2luZyBleGNlcHRpb25zICoobm90ZTogdGhlIGltbXV0YWJpbGl0eSBpcyAqKm5vdCoqIHRo ZSBvbmx5IGRpZmZlcmVuY2UpKjoKICAqIE5vdCBgRW51bWVyYWJsZWA7CiAgKiBJbW11dGFibGU7 CiAgKiBEb2Vzbid0IHRoaW5rIG9mIGl0c2VsZiBhcyAiYWxtb3N0IGhhc2giIChkb2Vzbid0IGhh dmUgYHRvX2FgLCBgdmFsdWVzYCBhbmQgYFtdYCBtZXRob2RzKTsKICAqIENhbiBoYXZlIGVtcHR5 IG1lbWJlcnMgbGlzdCAoZnVuIGZhY3Q6IGBTdHJ1Y3QubmV3KCdGb28nKWAgY3JlYXRpbmcgbWVt YmVyLWxlc3MgYFN0cnVjdDo6Rm9vYCwgaXMgYWxsb3dlZCwgYnV0IGBTdHJ1Y3QubmV3KClgIGlz IG5vdCkgdG8gYWxsb3cgdXNhZ2UgcGF0dGVybnMgbGlrZToKCmBgYHJ1YnkKY2xhc3MgTXlTZXJ2 aWNlCiAgU3VjY2VzcyA9IFN0cnVjdDo6VmFsdWUubmV3KDpyZXN1bHRzKQogIE5vdEZvdW5kID0g U3RydWN0OjpWYWx1ZS5uZXcKZW5kCmBgYAoKYE5vdEZvdW5kYCBoZXJlLCB1bmxpa2UsIHNheSwg YE9iamVjdC5uZXcuZnJlZXplYCAoYW5vdGhlciBwYXR0ZXJuIGZvciBjcmVhdGluZyAiZW1wdHkg dHlwZWQgdmFsdWUgb2JqZWN0IiksIGhhcyBuaWNlIGluc3BlY3QgYCM8dmFsdWUgTm90Rm91bmQ+ YCwgYW5kIGNyZWF0ZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIGBTdWNjZXNzYCwgbWFraW5nIHRo ZSBjb2RlIG1vcmUgcmVhZGFibGUuIEFuZCBpZiBpdCB3aWxsIGV2b2x2ZSB0byBoYXZlIHNvbWUg YXR0cmlidXRlcywgdGhlIGNvZGUgY2hhbmdlIHdvdWxkIGJlIGVhc3kuCgoqKlBhdGNoIGlzIHBy b3ZpZGVkKioKCltTYW1wbGUgcmVuZGVyZWQgUkRvYyBkb2N1bWVudGF0aW9uXShodHRwczovL3p2 ZXJvay5naXRodWIuaW8vcnVieS1yZG9jL1N0cnVjdC1WYWx1ZS5odG1sKQoKLS0tRmlsZXMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdHJ1Y3RfdmFsdWUucGF0Y2ggKDE4LjYgS0Ip CgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86 cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0 cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3Jl Pgo=