[ruby-core:109567] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"mame (Yusuke Endoh)" <noreply@...>
Date:
2022-08-19 08:23:16 UTC
List:
ruby-core #109567
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4KCgpB dCB0aGUgZGV2IG1lZXRpbmcsIEBtYXR6IHJlamVjdGVkIGFsbCBuYW1lIGNhbmRpZGF0ZXMgZXhj ZXB0IGBTdHJ1Y3Q6OlZhbHVlYCBhbmQgYERhdGFgLgoKKiBIZSB3YW50cyB0byBhdm9pZCB0aGUg bmFtZXMgYWxyZWFkeSB1c2VkIGJ5IGdlbXM6IEltbXV0YWJsZVN0cnVjdCwgVmFsdWVDbGFzcywg VmFsdWUKKiBTaG9ydCBjb21tb24gbm91bnMgd291bGQgYmUgY29uZmxpY3Rpbmc6IFVuaXQsIEl0 ZW0sIEJveAoqIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhlIG5ldyBjbGFzcyBpcyBpbW11dGFiaWxp dHksIG5vdCAiZnJvemVuIiwgbm90ICJwbGFpbiIsIG5vdCBzaW1wbGljaXR5OiBGcm96ZW5TdHJ1 Y3QsIFNpbXBsZVN0cnVjdCwgUGxhaW5TdHJ1Y3QKKiBIZSBkb2Vzbid0IHBsYW4gdG8gbWFrZSB0 aGUgb2xkIGBTdHJ1Y3RgIGluaGVyaXQgZnJvbSB0aGUgbmV3IG9uZSwgc28gYEJhc2ljU3RydWN0 YCBsaWtlIGBCYXNpY09iamVjdGAgaXMgbm90IHN1aXRhYmxlCgpJbmNpZGVudGFsbHksIG15IHBy b3Bvc2FsIGluICNub3RlLTM1IHdhcyByZWplY3RlZCBiZWNhdXNlIGFuIGluc3RhbmNlIHZhcmlh YmxlIGlzIHdlYWsgYWdhaW5zdCBhIHR5cG8uIChBIG1pc3NwZWxsZWQgcmVhZGVyIG1ldGhvZCBy YWlzZXMgTmFtZUVycm9yLCBidXQgYSBtaXNzcGVsbGVkIGluc3RhbmNlIHZhcmlhYmxlIHJldHVy bnMgbmlsIGltcGxpY2l0bHkuKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpGZWF0dXJlICMxNjEyMjogU3RydWN0OjpWYWx1ZTogc2ltcGxlIGltbXV0YWJsZSB2YWx1 ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5nZS05 ODc0MAoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQoqIFN0YXR1czogRmVlZGJh Y2sKKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKipWYWx1ZSBPYmplY3QqKiBpcyBhIHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1Y2VkIGJ5 IE1hcnRpbiBGb3dsZXIgKFtoaXMgcG9zdF0oaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtp L1ZhbHVlT2JqZWN0Lmh0bWwpLCBbV2lraXBlZGlhIEVudHJ5XShodHRwczovL2VuLndpa2lwZWRp YS5vcmcvd2lraS9WYWx1ZV9vYmplY3QpKSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAo c2ltcGxpZnlpbmcgdGhlIGlkZWEpOgoKKiByZXByZXNlbnRpbmcgc29tZSByZWxhdGl2ZWx5IHNp bXBsZSBkYXRhOwoqIGltbXV0YWJsZTsKKiBjb21wYXJlZCBieSB0eXBlICYgdmFsdWU7Ciogbmlj ZWx5IHJlcHJlc2VudGVkLgoKVmFsdWUgb2JqZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVzcGVjaWFs bHkgZm9yIGRlZmluaW5nIEFQSXMsIHRoZWlyIGlucHV0L3JldHVybiB2YWx1ZXMuIFJlY2VudGx5 LCB0aGVyZSB3ZXJlIHNvbWUgbW92ZW1lbnQgdG93YXJkcyB1c2luZyBtb3JlIGltbXV0YWJpbGl0 eS1mcmllbmRseSBhcHByb2FjaCBpbiBSdWJ5IHByb2dyYW1taW5nLCBsZWFkaW5nIHRvIGNyZWF0 aW5nIHNldmVyYWwgZGlzY3Vzc2lvbnMvbGlicmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0cy4gRm9y IGV4YW1wbGUsIFtUb20gRGFsbGluZydzIGdlbV0oaHR0cHM6Ly9naXRodWIuY29tL3RvbWRhbGxp bmcvdmFsdWVfc2VtYW50aWNzKSwgW0dvb2QgUnVieSBWYWx1ZSBvYmplY3QgY29udmVudGlvbl0o aHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9nb29kLXZhbHVlLW9iamVjdCkgKGRpc2NsYWltZXI6 IHRoZSBsYXR0ZXIgaXMgbWFpbnRhaW5lZCBieSB5b3VycyB0cnVseSkuCgpJIHByb3Bvc2UgdG8g aW50cm9kdWNlICoqbmF0aXZlIHZhbHVlIG9iamVjdHMqKiB0byBSdWJ5IGFzIGEgY29yZSBjbGFz cy4KCioqV2h5IG5vdCBhIGdlbT8qKgoKKiBJIGJlbGlldmUgdGhhdCBjb25jZXB0IGlzIHRoYXQg c2ltcGxlLCB0aGF0IG5vYm9keSAqd2lsbCBldmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZvciByZXBy ZXNlbnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRoZSBmcmFtZXdvcmsvbGlicmFyeSB1c2VkIGFscmVh ZHkgcHJvdmlkZXMgb25lLgoqIFBvdGVudGlhbGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBsaWJyYXJ5 IChhbmQgcHJvYmFibHkgZXZlbiBjb3JlKSBBUElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUgY29u Y2VwdC4KCioqV2h5IGBTdHJ1Y3RgIGlzIG5vdCBlbm91Z2gqKgoKQ29yZSBgU3RydWN0YCBjbGFz cyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVlLW9iamVjdCwgYW5kIGZyZXF1ZW50bHkgdXNlZCBp bnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFyZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3RzIG9mIHNp bXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYFN0cnVjdGAgaXM6CiogbXV0YWJs ZTsKKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZpbmVzIGB0b19hYCBhbmQgaXMgYEVudW1lcmFibGVg KTsKKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMgYFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhvZHMpLgoK VGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVyb2RlcyB0aGUgc2VtYW50aWNzLCBtYWtpbmcgY29k ZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdoZW4gZHVjay10eXBpbmcgaXMgdXNlZC4KCkZvciBl eGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBzaG93cyB3aHkgYHRvX2FgIGlzIHByb2JsZW1hdGlj OgoKYGBgcnVieQpSZXN1bHQgPSBTdHJ1Y3QubmV3KDpzdWNjZXNzLCA6Y29udGVudCkKCiMgTm93 LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBhc3N1bWVzIGBkYXRhYCBjb3VsZCBiZSBlaXRoZXIg UmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQsIFJlc3VsdF0KIyBTbywgLi4uCgpkYXRhID0gUmVz dWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29tZScpCgpBcnJheShkYXRhKSAjID0+IGV4cGVjdGVk IFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKV0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNv bWUnXQoKIyBvci4uLgpkZWYgZm9vKGFyZzEsIGFyZzIgPSBuaWwpCnAgYXJnMSwgYXJnMgplbmQK CmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyks IG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQpgYGAKCkhhdmluZyBgW11gIGFuZCBg ZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcgdGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0IHZhbHVl IiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBidWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNoZWNrcyAi aWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlzIGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQgdmFsdWUg b2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhvdWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rpb24uCgoq KkNvbmNyZXRlIHByb3Bvc2FsKioKCiogQ2xhc3MgbmFtZTogYFN0cnVjdDo6VmFsdWVgOiBsb3Qg b2YgUnVieWlzdHMgYXJlIHVzZWQgdG8gaGF2ZSBgU3RydWN0YCBhcyBhIHF1aWNrICJzb21ldGhp bmctbGlrZS12YWx1ZSIgZHJvcC1pbiwgc28gYWx0ZXJuYXRpdmUsIG1vcmUgc3RyaWN0IGltcGxl bWVudGF0aW9uLCBiZWluZyBwYXJ0IG9mIGBTdHJ1Y3RgIEFQSSwgd2lsbCBiZSBxdWl0ZSBkaXNj b3ZlcmFibGU7ICphbHRlcm5hdGl2ZToganVzdCBgVmFsdWVgKgoqIENsYXNzIEFQSSBpcyBjb3B5 aW5nIGBTdHJ1Y3RgcyBvbmUgKG1vc3Qgb2YgdGhlIHRpbWUgLS0gZXZlbiByZXVzZXMgdGhlIGlt cGxlbWVudGF0aW9uKSwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgKihub3RlOiB0aGUg aW1tdXRhYmlsaXR5IGlzICoqbm90KiogdGhlIG9ubHkgZGlmZmVyZW5jZSkqOgogICogTm90IGBF bnVtZXJhYmxlYDsKICAqIEltbXV0YWJsZTsKICAqIERvZXNuJ3QgdGhpbmsgb2YgaXRzZWxmIGFz ICJhbG1vc3QgaGFzaCIgKGRvZXNuJ3QgaGF2ZSBgdG9fYWAsIGB2YWx1ZXNgIGFuZCBgW11gIG1l dGhvZHMpOwogICogQ2FuIGhhdmUgZW1wdHkgbWVtYmVycyBsaXN0IChmdW4gZmFjdDogYFN0cnVj dC5uZXcoJ0ZvbycpYCBjcmVhdGluZyBtZW1iZXItbGVzcyBgU3RydWN0OjpGb29gLCBpcyBhbGxv d2VkLCBidXQgYFN0cnVjdC5uZXcoKWAgaXMgbm90KSB0byBhbGxvdyB1c2FnZSBwYXR0ZXJucyBs aWtlOgoKYGBgcnVieQpjbGFzcyBNeVNlcnZpY2UKICBTdWNjZXNzID0gU3RydWN0OjpWYWx1ZS5u ZXcoOnJlc3VsdHMpCiAgTm90Rm91bmQgPSBTdHJ1Y3Q6OlZhbHVlLm5ldwplbmQKYGBgCgpgTm90 Rm91bmRgIGhlcmUsIHVubGlrZSwgc2F5LCBgT2JqZWN0Lm5ldy5mcmVlemVgIChhbm90aGVyIHBh dHRlcm4gZm9yIGNyZWF0aW5nICJlbXB0eSB0eXBlZCB2YWx1ZSBvYmplY3QiKSwgaGFzIG5pY2Ug aW5zcGVjdCBgIzx2YWx1ZSBOb3RGb3VuZD5gLCBhbmQgY3JlYXRlZCBjb25zaXN0ZW50bHkgd2l0 aCB0aGUgYFN1Y2Nlc3NgLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gQW5kIGlmIGl0 IHdpbGwgZXZvbHZlIHRvIGhhdmUgc29tZSBhdHRyaWJ1dGVzLCB0aGUgY29kZSBjaGFuZ2Ugd291 bGQgYmUgZWFzeS4KCioqUGF0Y2ggaXMgcHJvdmlkZWQqKgoKW1NhbXBsZSByZW5kZXJlZCBSRG9j IGRvY3VtZW50YXRpb25dKGh0dHBzOi8venZlcm9rLmdpdGh1Yi5pby9ydWJ5LXJkb2MvU3RydWN0 LVZhbHVlLmh0bWwpCgotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN0 cnVjdF92YWx1ZS5wYXRjaCAoMTguNiBLQikKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3Jn P3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmlu L21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==