[ruby-core:109502] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"mame (Yusuke Endoh)" <noreply@...>
Date:
2022-08-16 15:31:01 UTC
List:
ruby-core #109502
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4KCgpC VFcsIEkgcGVyc29uYWxseSB3YW50ZWQgU3RydWN0IHRvIHN0b3JlIHRoZSBmaWVsZCB2YWx1ZXMg c2ltcGx5IGluIGluc3RhbmNlIHZhcmlhYmxlcyByYXRoZXIgdGhhbiB0aGUgaGlkZGVuIHN0b3Jh Z2UuIEZvciBleGFtcGxlOgoKYGBgCkZvb0JhciA9IFN0cnVjdDo6VmFsdWUubmV3KDpmb28sIDpi YXIpCgpjbGFzcyBGb29CYXIKICBkZWYgZm9vX3BsdXNfYmFyCiAgICAjIFRoZXNlIGJhcmUgImZv byIgYW5kICJiYXIiIGFyZSBub3QgdmlzdWFsbHkgb2J2aW91cwogICAgIyB3aGV0aGVyIHRoZXkg YXJlIGEgbWV0aG9kIGNhbGwgb3IgbG9jYWwgdmFyaWFibGUgYWNjZXNzCgogICAgZm9vICsgYmFy CgogICAgIyBXZSBjYW4gd3JpdGUgaXQgYXMgZm9sbG93cywgYnV0IGl0IGlzIGEgYml0IHZlcmJv c2UKCiAgICBzZWxmLmZvbyArIHNlbGYuYmFyCgogICAgIyBJZiB0aGV5IGFyZSBzdG9yZWQgaW4g aW5zdGFuY2UgdmFyaWFibGVzLAogICAgIyBpdCBpcyBvYnZpb3VzIHRoYXQgdGhleSBhcmUgZmll bGQgYWNjZXNzCiAgICAKICAgIEBmb28gKyBAYmFyCiAgZW5kCmVuZApgYGAKCkkga25vdyBpdCBp cyBpbXBvc3NpYmxlIHRvIGNoYW5nZSBTdHJ1Y3QgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29uLCBi dXQgaWYgd2UgaW50cm9kdWNlIGEgbmV3IFN0cnVjdC1saWtlIGNsYXNzLCBJIHdvbmRlciBpZiB3 ZSBjYW4gY2hhbmdlIHRoaXMgdG9vPwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpGZWF0dXJlICMxNjEyMjogU3RydWN0OjpWYWx1ZTogc2ltcGxlIGltbXV0YWJsZSB2 YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5n ZS05ODY3MAoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQoqIFN0YXR1czogRmVl ZGJhY2sKKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKipWYWx1ZSBPYmplY3QqKiBpcyBhIHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1Y2Vk IGJ5IE1hcnRpbiBGb3dsZXIgKFtoaXMgcG9zdF0oaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2Js aWtpL1ZhbHVlT2JqZWN0Lmh0bWwpLCBbV2lraXBlZGlhIEVudHJ5XShodHRwczovL2VuLndpa2lw ZWRpYS5vcmcvd2lraS9WYWx1ZV9vYmplY3QpKSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGll cyAoc2ltcGxpZnlpbmcgdGhlIGlkZWEpOgoKKiByZXByZXNlbnRpbmcgc29tZSByZWxhdGl2ZWx5 IHNpbXBsZSBkYXRhOwoqIGltbXV0YWJsZTsKKiBjb21wYXJlZCBieSB0eXBlICYgdmFsdWU7Ciog bmljZWx5IHJlcHJlc2VudGVkLgoKVmFsdWUgb2JqZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVzcGVj aWFsbHkgZm9yIGRlZmluaW5nIEFQSXMsIHRoZWlyIGlucHV0L3JldHVybiB2YWx1ZXMuIFJlY2Vu dGx5LCB0aGVyZSB3ZXJlIHNvbWUgbW92ZW1lbnQgdG93YXJkcyB1c2luZyBtb3JlIGltbXV0YWJp bGl0eS1mcmllbmRseSBhcHByb2FjaCBpbiBSdWJ5IHByb2dyYW1taW5nLCBsZWFkaW5nIHRvIGNy ZWF0aW5nIHNldmVyYWwgZGlzY3Vzc2lvbnMvbGlicmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0cy4g Rm9yIGV4YW1wbGUsIFtUb20gRGFsbGluZydzIGdlbV0oaHR0cHM6Ly9naXRodWIuY29tL3RvbWRh bGxpbmcvdmFsdWVfc2VtYW50aWNzKSwgW0dvb2QgUnVieSBWYWx1ZSBvYmplY3QgY29udmVudGlv bl0oaHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9nb29kLXZhbHVlLW9iamVjdCkgKGRpc2NsYWlt ZXI6IHRoZSBsYXR0ZXIgaXMgbWFpbnRhaW5lZCBieSB5b3VycyB0cnVseSkuCgpJIHByb3Bvc2Ug dG8gaW50cm9kdWNlICoqbmF0aXZlIHZhbHVlIG9iamVjdHMqKiB0byBSdWJ5IGFzIGEgY29yZSBj bGFzcy4KCioqV2h5IG5vdCBhIGdlbT8qKgoKKiBJIGJlbGlldmUgdGhhdCBjb25jZXB0IGlzIHRo YXQgc2ltcGxlLCB0aGF0IG5vYm9keSAqd2lsbCBldmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZvciBy ZXByZXNlbnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRoZSBmcmFtZXdvcmsvbGlicmFyeSB1c2VkIGFs cmVhZHkgcHJvdmlkZXMgb25lLgoqIFBvdGVudGlhbGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBsaWJy YXJ5IChhbmQgcHJvYmFibHkgZXZlbiBjb3JlKSBBUElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUg Y29uY2VwdC4KCioqV2h5IGBTdHJ1Y3RgIGlzIG5vdCBlbm91Z2gqKgoKQ29yZSBgU3RydWN0YCBj bGFzcyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVlLW9iamVjdCwgYW5kIGZyZXF1ZW50bHkgdXNl ZCBpbnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFyZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3RzIG9m IHNpbXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYFN0cnVjdGAgaXM6CiogbXV0 YWJsZTsKKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZpbmVzIGB0b19hYCBhbmQgaXMgYEVudW1lcmFi bGVgKTsKKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMgYFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhvZHMp LgoKVGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVyb2RlcyB0aGUgc2VtYW50aWNzLCBtYWtpbmcg Y29kZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdoZW4gZHVjay10eXBpbmcgaXMgdXNlZC4KCkZv ciBleGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBzaG93cyB3aHkgYHRvX2FgIGlzIHByb2JsZW1h dGljOgoKYGBgcnVieQpSZXN1bHQgPSBTdHJ1Y3QubmV3KDpzdWNjZXNzLCA6Y29udGVudCkKCiMg Tm93LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBhc3N1bWVzIGBkYXRhYCBjb3VsZCBiZSBlaXRo ZXIgUmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQsIFJlc3VsdF0KIyBTbywgLi4uCgpkYXRhID0g UmVzdWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29tZScpCgpBcnJheShkYXRhKSAjID0+IGV4cGVj dGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKV0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3 ZXNvbWUnXQoKIyBvci4uLgpkZWYgZm9vKGFyZzEsIGFyZzIgPSBuaWwpCnAgYXJnMSwgYXJnMgpl bmQKCmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21l JyksIG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQpgYGAKCkhhdmluZyBgW11gIGFu ZCBgZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcgdGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0IHZh bHVlIiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBidWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNoZWNr cyAiaWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlzIGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQgdmFs dWUgb2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhvdWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rpb24u CgoqKkNvbmNyZXRlIHByb3Bvc2FsKioKCiogQ2xhc3MgbmFtZTogYFN0cnVjdDo6VmFsdWVgOiBs b3Qgb2YgUnVieWlzdHMgYXJlIHVzZWQgdG8gaGF2ZSBgU3RydWN0YCBhcyBhIHF1aWNrICJzb21l dGhpbmctbGlrZS12YWx1ZSIgZHJvcC1pbiwgc28gYWx0ZXJuYXRpdmUsIG1vcmUgc3RyaWN0IGlt cGxlbWVudGF0aW9uLCBiZWluZyBwYXJ0IG9mIGBTdHJ1Y3RgIEFQSSwgd2lsbCBiZSBxdWl0ZSBk aXNjb3ZlcmFibGU7ICphbHRlcm5hdGl2ZToganVzdCBgVmFsdWVgKgoqIENsYXNzIEFQSSBpcyBj b3B5aW5nIGBTdHJ1Y3RgcyBvbmUgKG1vc3Qgb2YgdGhlIHRpbWUgLS0gZXZlbiByZXVzZXMgdGhl IGltcGxlbWVudGF0aW9uKSwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgKihub3RlOiB0 aGUgaW1tdXRhYmlsaXR5IGlzICoqbm90KiogdGhlIG9ubHkgZGlmZmVyZW5jZSkqOgogICogTm90 IGBFbnVtZXJhYmxlYDsKICAqIEltbXV0YWJsZTsKICAqIERvZXNuJ3QgdGhpbmsgb2YgaXRzZWxm IGFzICJhbG1vc3QgaGFzaCIgKGRvZXNuJ3QgaGF2ZSBgdG9fYWAsIGB2YWx1ZXNgIGFuZCBgW11g IG1ldGhvZHMpOwogICogQ2FuIGhhdmUgZW1wdHkgbWVtYmVycyBsaXN0IChmdW4gZmFjdDogYFN0 cnVjdC5uZXcoJ0ZvbycpYCBjcmVhdGluZyBtZW1iZXItbGVzcyBgU3RydWN0OjpGb29gLCBpcyBh bGxvd2VkLCBidXQgYFN0cnVjdC5uZXcoKWAgaXMgbm90KSB0byBhbGxvdyB1c2FnZSBwYXR0ZXJu cyBsaWtlOgoKYGBgcnVieQpjbGFzcyBNeVNlcnZpY2UKICBTdWNjZXNzID0gU3RydWN0OjpWYWx1 ZS5uZXcoOnJlc3VsdHMpCiAgTm90Rm91bmQgPSBTdHJ1Y3Q6OlZhbHVlLm5ldwplbmQKYGBgCgpg Tm90Rm91bmRgIGhlcmUsIHVubGlrZSwgc2F5LCBgT2JqZWN0Lm5ldy5mcmVlemVgIChhbm90aGVy IHBhdHRlcm4gZm9yIGNyZWF0aW5nICJlbXB0eSB0eXBlZCB2YWx1ZSBvYmplY3QiKSwgaGFzIG5p Y2UgaW5zcGVjdCBgIzx2YWx1ZSBOb3RGb3VuZD5gLCBhbmQgY3JlYXRlZCBjb25zaXN0ZW50bHkg d2l0aCB0aGUgYFN1Y2Nlc3NgLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gQW5kIGlm IGl0IHdpbGwgZXZvbHZlIHRvIGhhdmUgc29tZSBhdHRyaWJ1dGVzLCB0aGUgY29kZSBjaGFuZ2Ug d291bGQgYmUgZWFzeS4KCioqUGF0Y2ggaXMgcHJvdmlkZWQqKgoKW1NhbXBsZSByZW5kZXJlZCBS RG9jIGRvY3VtZW50YXRpb25dKGh0dHBzOi8venZlcm9rLmdpdGh1Yi5pby9ydWJ5LXJkb2MvU3Ry dWN0LVZhbHVlLmh0bWwpCgotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CnN0cnVjdF92YWx1ZS5wYXRjaCAoMTguNiBLQikKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcu b3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2kt YmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==