[ruby-core:109691] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-08-25 13:34:12 UTC
List:
ruby-core #109691
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4KCgoxLiBJIHNsaWdodGx5IHJlZ3JldHRlZCB0byBtYWtlIGBTdHJ1Y3QubmV3YCB0byBjcmVh dGUgYSBzdWJjbGFzcywgbm90IGFuIGluc3RhbmNlLiBTbyB0aGlzIHRpbWUgSSBkaWRuJ3QgY2hv b3NlIGBuZXdgLiBgY3JlYXRlYCBvciBgZ2VuZXJhdGVgIHdvdWxkIGhhdmUgYSBzaW1pbGFyIGlz c3VlIHdpdGggYG5ld2AuIGBkZWZpbmVgIG1pZ2h0IGJlIGEgY2FuZGlkYXRlLiBCdXQgSSBzdGls bCBwcmVmZXIgc2hvcnRlciBvbmUsIGJ1dCB5b3UgY2FuIHRyeSB0byBwZXJzdWFkZSBtZS4KMi4g U29tZXRpbWVzIGl0J3MgaGFuZHkgdG8gZmlsbCBkYXRhIG1lbWJlcnMgKGUuZy4sIGZvbykgYnkg dGhlIGRlZmF1bHQgdmFsdWUuIEJ1dCB3ZSBzdGlsbCBoYXZlIG5vIGlkZWEgdG8gc3BlY2lmeSB0 aG9zZSBkZWZhdWx0IHZhbHVlcy4gQW5kIGlmIGRlZmF1bHQgdmFsdWVzIGFyZSBhdmFpbGFibGUs IHRoZXJlIGNvdWxkIGJlIGFuIGlzc3VlIHJlZ2FyZGluZyBtb2RpZnlpbmcgdGhlIHZhbHVlIChl LmcuLCBhbiBlbXB0eSBhcnJheSBpcyBnaXZlbiBmb3IgYSBkZWZhdWx0IHZhbHVlLCB3aGF0IGlm IGl0J3MgbW9kaWZpZWQpLgozLiBXaGVuIHdlIGFsbG93IG1peGluZyBwb3NpdGlvbmFsIGFuZCBr ZXl3b3JkIGluaXRpYWxpemVycywgaW1wbGVtZW50aW5nIGBpbml0aWFsaXplYCBtYXkgYmUgYSBi aXQgY29tcGxleC4gQnV0IHdlIG1heSB1bmlmeSAyIGtpbmRzIG9mIGluaXRpYWxpemVycyB0byBr ZXl3b3JkIGluaXRpYWxpemVyIGluIGBEI25ld2AuIEJ1dCBpdCdzIGltcGxlbWVudGF0aW9uIGRl dGFpbC4gTmVlZCB0byBiZSBkaXNjdXNzZWQgbGF0ZXIuCgpgYGAKRD1EYXRhLmRlZig6Zm9vLCA6 YmFyKQpjbGFzcyBECiAgIyBpZiBhcmd1bWVudHMgdG8gYG5ld2AgaXMgcGFzc2VkIGRpcmVjdGx5 CiAgZGVmIGluaXRpYWxpemUoKmFyZ3MsKiprd2QpCiAgICAgIyAuLi4gY2hlY2tpbmcgcG9zaXRp b25hbCBhbmQga2V5d29yZCBpbml0aWFsaXplcnMKICBlbmQKICAjIGluc3RlYWQKICBkZWYgaW5p dGlhbGl6ZSgqKmt3ZCkgIyBvbmx5IHRha2VzIGtleXdvcmQgYXJndW1lbnRzCiAgICAgIyAuLi4g aW5pdGlhbGl6YXRpb24gYmVjb21lIG11Y2ggc2ltcGxlcgogIGVuZAplbmQKYGBgCgpPaCwgSSBm b3Jnb3QuIER1cmluZyB0aGUgZGlzY3Vzc2lvbiwgc29tZW9uZSBjYW1lIHVwIHdpdGggYW4gaWRl YSBvZiBBbm9ueW1vdXMgRGF0YSwgZGF0YSBpbnN0YW5jZSB3aXRob3V0IGNyZWF0aW5nIGEgc3Vi Y2xhc3MgKGtpbmRhIGxpa2UgKE5hbWVkKVR1cGxlcyBpbiBvdGhlciBsYW5ndWFnZXMpLiBUaGlz IGlzIGFub3RoZXIgdG9waWMuCgpNYXR6LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpGZWF0dXJlICMxNjEyMjogU3RydWN0OjpWYWx1ZTogc2ltcGxlIGltbXV0YWJs ZSB2YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2No YW5nZS05ODkxOAoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQoqIFN0YXR1czog RmVlZGJhY2sKKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKipWYWx1ZSBPYmplY3QqKiBpcyBhIHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1 Y2VkIGJ5IE1hcnRpbiBGb3dsZXIgKFtoaXMgcG9zdF0oaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29t L2JsaWtpL1ZhbHVlT2JqZWN0Lmh0bWwpLCBbV2lraXBlZGlhIEVudHJ5XShodHRwczovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9WYWx1ZV9vYmplY3QpKSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVy dGllcyAoc2ltcGxpZnlpbmcgdGhlIGlkZWEpOgoKKiByZXByZXNlbnRpbmcgc29tZSByZWxhdGl2 ZWx5IHNpbXBsZSBkYXRhOwoqIGltbXV0YWJsZTsKKiBjb21wYXJlZCBieSB0eXBlICYgdmFsdWU7 CiogbmljZWx5IHJlcHJlc2VudGVkLgoKVmFsdWUgb2JqZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVz cGVjaWFsbHkgZm9yIGRlZmluaW5nIEFQSXMsIHRoZWlyIGlucHV0L3JldHVybiB2YWx1ZXMuIFJl Y2VudGx5LCB0aGVyZSB3ZXJlIHNvbWUgbW92ZW1lbnQgdG93YXJkcyB1c2luZyBtb3JlIGltbXV0 YWJpbGl0eS1mcmllbmRseSBhcHByb2FjaCBpbiBSdWJ5IHByb2dyYW1taW5nLCBsZWFkaW5nIHRv IGNyZWF0aW5nIHNldmVyYWwgZGlzY3Vzc2lvbnMvbGlicmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0 cy4gRm9yIGV4YW1wbGUsIFtUb20gRGFsbGluZydzIGdlbV0oaHR0cHM6Ly9naXRodWIuY29tL3Rv bWRhbGxpbmcvdmFsdWVfc2VtYW50aWNzKSwgW0dvb2QgUnVieSBWYWx1ZSBvYmplY3QgY29udmVu dGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9nb29kLXZhbHVlLW9iamVjdCkgKGRpc2Ns YWltZXI6IHRoZSBsYXR0ZXIgaXMgbWFpbnRhaW5lZCBieSB5b3VycyB0cnVseSkuCgpJIHByb3Bv c2UgdG8gaW50cm9kdWNlICoqbmF0aXZlIHZhbHVlIG9iamVjdHMqKiB0byBSdWJ5IGFzIGEgY29y ZSBjbGFzcy4KCioqV2h5IG5vdCBhIGdlbT8qKgoKKiBJIGJlbGlldmUgdGhhdCBjb25jZXB0IGlz IHRoYXQgc2ltcGxlLCB0aGF0IG5vYm9keSAqd2lsbCBldmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZv ciByZXByZXNlbnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRoZSBmcmFtZXdvcmsvbGlicmFyeSB1c2Vk IGFscmVhZHkgcHJvdmlkZXMgb25lLgoqIFBvdGVudGlhbGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBs aWJyYXJ5IChhbmQgcHJvYmFibHkgZXZlbiBjb3JlKSBBUElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0 aGUgY29uY2VwdC4KCioqV2h5IGBTdHJ1Y3RgIGlzIG5vdCBlbm91Z2gqKgoKQ29yZSBgU3RydWN0 YCBjbGFzcyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVlLW9iamVjdCwgYW5kIGZyZXF1ZW50bHkg dXNlZCBpbnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFyZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3Rz IG9mIHNpbXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYFN0cnVjdGAgaXM6Ciog bXV0YWJsZTsKKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZpbmVzIGB0b19hYCBhbmQgaXMgYEVudW1l cmFibGVgKTsKKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMgYFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhv ZHMpLgoKVGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVyb2RlcyB0aGUgc2VtYW50aWNzLCBtYWtp bmcgY29kZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdoZW4gZHVjay10eXBpbmcgaXMgdXNlZC4K CkZvciBleGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBzaG93cyB3aHkgYHRvX2FgIGlzIHByb2Js ZW1hdGljOgoKYGBgcnVieQpSZXN1bHQgPSBTdHJ1Y3QubmV3KDpzdWNjZXNzLCA6Y29udGVudCkK CiMgTm93LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBhc3N1bWVzIGBkYXRhYCBjb3VsZCBiZSBl aXRoZXIgUmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQsIFJlc3VsdF0KIyBTbywgLi4uCgpkYXRh ID0gUmVzdWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29tZScpCgpBcnJheShkYXRhKSAjID0+IGV4 cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKV0sIGdvdCBbdHJ1ZSwgJ2l0IGlz IGF3ZXNvbWUnXQoKIyBvci4uLgpkZWYgZm9vKGFyZzEsIGFyZzIgPSBuaWwpCnAgYXJnMSwgYXJn MgplbmQKCmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vz b21lJyksIG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQpgYGAKCkhhdmluZyBgW11g IGFuZCBgZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcgdGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0 IHZhbHVlIiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBidWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNo ZWNrcyAiaWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlzIGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQg dmFsdWUgb2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhvdWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rp b24uCgoqKkNvbmNyZXRlIHByb3Bvc2FsKioKCiogQ2xhc3MgbmFtZTogYFN0cnVjdDo6VmFsdWVg OiBsb3Qgb2YgUnVieWlzdHMgYXJlIHVzZWQgdG8gaGF2ZSBgU3RydWN0YCBhcyBhIHF1aWNrICJz b21ldGhpbmctbGlrZS12YWx1ZSIgZHJvcC1pbiwgc28gYWx0ZXJuYXRpdmUsIG1vcmUgc3RyaWN0 IGltcGxlbWVudGF0aW9uLCBiZWluZyBwYXJ0IG9mIGBTdHJ1Y3RgIEFQSSwgd2lsbCBiZSBxdWl0 ZSBkaXNjb3ZlcmFibGU7ICphbHRlcm5hdGl2ZToganVzdCBgVmFsdWVgKgoqIENsYXNzIEFQSSBp cyBjb3B5aW5nIGBTdHJ1Y3RgcyBvbmUgKG1vc3Qgb2YgdGhlIHRpbWUgLS0gZXZlbiByZXVzZXMg dGhlIGltcGxlbWVudGF0aW9uKSwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgKihub3Rl OiB0aGUgaW1tdXRhYmlsaXR5IGlzICoqbm90KiogdGhlIG9ubHkgZGlmZmVyZW5jZSkqOgogICog Tm90IGBFbnVtZXJhYmxlYDsKICAqIEltbXV0YWJsZTsKICAqIERvZXNuJ3QgdGhpbmsgb2YgaXRz ZWxmIGFzICJhbG1vc3QgaGFzaCIgKGRvZXNuJ3QgaGF2ZSBgdG9fYWAsIGB2YWx1ZXNgIGFuZCBg W11gIG1ldGhvZHMpOwogICogQ2FuIGhhdmUgZW1wdHkgbWVtYmVycyBsaXN0IChmdW4gZmFjdDog YFN0cnVjdC5uZXcoJ0ZvbycpYCBjcmVhdGluZyBtZW1iZXItbGVzcyBgU3RydWN0OjpGb29gLCBp cyBhbGxvd2VkLCBidXQgYFN0cnVjdC5uZXcoKWAgaXMgbm90KSB0byBhbGxvdyB1c2FnZSBwYXR0 ZXJucyBsaWtlOgoKYGBgcnVieQpjbGFzcyBNeVNlcnZpY2UKICBTdWNjZXNzID0gU3RydWN0OjpW YWx1ZS5uZXcoOnJlc3VsdHMpCiAgTm90Rm91bmQgPSBTdHJ1Y3Q6OlZhbHVlLm5ldwplbmQKYGBg CgpgTm90Rm91bmRgIGhlcmUsIHVubGlrZSwgc2F5LCBgT2JqZWN0Lm5ldy5mcmVlemVgIChhbm90 aGVyIHBhdHRlcm4gZm9yIGNyZWF0aW5nICJlbXB0eSB0eXBlZCB2YWx1ZSBvYmplY3QiKSwgaGFz IG5pY2UgaW5zcGVjdCBgIzx2YWx1ZSBOb3RGb3VuZD5gLCBhbmQgY3JlYXRlZCBjb25zaXN0ZW50 bHkgd2l0aCB0aGUgYFN1Y2Nlc3NgLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gQW5k IGlmIGl0IHdpbGwgZXZvbHZlIHRvIGhhdmUgc29tZSBhdHRyaWJ1dGVzLCB0aGUgY29kZSBjaGFu Z2Ugd291bGQgYmUgZWFzeS4KCioqUGF0Y2ggaXMgcHJvdmlkZWQqKgoKW1NhbXBsZSByZW5kZXJl ZCBSRG9jIGRvY3VtZW50YXRpb25dKGh0dHBzOi8venZlcm9rLmdpdGh1Yi5pby9ydWJ5LXJkb2Mv U3RydWN0LVZhbHVlLmh0bWwpCgotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCnN0cnVjdF92YWx1ZS5wYXRjaCAoMTguNiBLQikKCgotLSAKaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxh bmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9j Z2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==