[ruby-core:109503] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2022-08-16 15:54:25 UTC
List:
ruby-core #109503
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K CgptYW1lIChZdXN1a2UgRW5kb2gpIHdyb3RlIGluICNub3RlLTM1Ogo+IEJUVywgSSBwZXJzb25h bGx5IHdhbnRlZCBTdHJ1Y3QgdG8gc3RvcmUgdGhlIGZpZWxkIHZhbHVlcyBzaW1wbHkgaW4gaW5z dGFuY2UgdmFyaWFibGVzIHJhdGhlciB0aGFuIHRoZSBoaWRkZW4gc3RvcmFnZS4KPiBJIGtub3cg aXQgaXMgaW1wb3NzaWJsZSB0byBjaGFuZ2UgU3RydWN0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNv biwgYnV0IGlmIHdlIGludHJvZHVjZSBhIG5ldyBTdHJ1Y3QtbGlrZSBjbGFzcywgSSB3b25kZXIg aWYgd2UgY2FuIGNoYW5nZSB0aGlzIHRvbz8KCkZXSVcsIFRydWZmbGVSdWJ5IHVzZWQgdG8gdXNl IGl2YXJzIGZvciBgU3RydWN0YCBidXQgY2hhbmdlZCB0byAiaGlkZGVuIGl2YXJzIiBmb3IgY29t cGF0aWJpbGl0eS4KSGlkZGVuIGl2YXJzIHByb2JhYmx5IGFkZHMgYSBiaXQgbW9yZSBmbGV4aWJp bGl0eSBpbiB0aGUgaW1wbGVtZW50YXRpb24gYnV0IGFsc28gbWVhbnMgZS5nLiBgYXR0cl9yZWFk ZXJgIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gaW1wbGVtZW50IGBTdHJ1Y3Q6OlZhbHVlYC4K SSdkIHRoaW5rIGl0J2QgYmUgbmljZSBpZiB3ZSBjYW4gc2hhcmUgaW1wbGVtZW50YXRpb24gY29k ZSBiZXR3ZWVuIFN0cnVjdCBhbmQgU3RydWN0OjpWYWx1ZSwgc28gaXQgc2VlbXMgYmVzdCB0byB1 c2UgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gZnJvbSB0aGF0IFBPVi4KCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTYxMjI6IFN0cnVjdDo6VmFsdWU6 IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2JqZWN0Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3Jn L2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTg2NzIKCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVw ZWxldikKKiBTdGF0dXM6IEZlZWRiYWNrCiogUHJpb3JpdHk6IE5vcm1hbAotLS0tLS0tLS0tLS0t 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=