[ruby-core:109815] [Ruby master Feature#16122] Data: simple immutable value object
From:
"RubyBugs (A Nonymous)" <noreply@...>
Date:
2022-09-01 16:00:34 UTC
List:
ruby-core #109815
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgUnVieUJ1Z3MgKEEgTm9ueW1vdXMpLgoK CioqMi4gSGlnaGx5IG9wdGltaXplZCBoYXNoIGFuZCBlcWw/KioKCkJlY2F1c2Ugd2UgdXNlIHZh bHVlIG9iamVjdHMgaW4gbG9vcHMsIHByb2ZpbGluZyBsZWQgdXMgdG8gdGhlIGNvbW1pdHMgaW4g b3VyIGZvcmsgb2YgdGNyYXlmb3JkL3ZhbHVlcywgd2hpY2ggb3B0aW1pemUgdGhlc2UgbWV0aG9k cywgc28gdGhhdCB1c2luZyBWYWx1ZSBvYmplY3RzIGluIFNldHMgYW5kIGFzIEhhc2gga2V5cyB3 aWxsIGJlIGFzIHBlcmZvcm1hbnQgYXMgcG9zc2libGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE2MTIyOiBEYXRhOiBzaW1wbGUgaW1tdXRhYmxl IHZhbHVlIG9iamVjdApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hh bmdlLTk5MDU0CgoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCiogU3RhdHVzOiBB c3NpZ25lZAoqIFByaW9yaXR5OiBOb3JtYWwKKiBBc3NpZ25lZTogenZlcm9rIChWaWN0b3IgU2hl cGVsZXYpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKipWYWx1ZSBP YmplY3QqKiBpcyBhIHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1Y2VkIGJ5IE1hcnRpbiBGb3dsZXIg KFtoaXMgcG9zdF0oaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL1ZhbHVlT2JqZWN0Lmh0 bWwpLCBbV2lraXBlZGlhIEVudHJ5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWx1 ZV9vYmplY3QpKSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoc2ltcGxpZnlpbmcgdGhl IGlkZWEpOgoKKiByZXByZXNlbnRpbmcgc29tZSByZWxhdGl2ZWx5IHNpbXBsZSBkYXRhOwoqIGlt bXV0YWJsZTsKKiBjb21wYXJlZCBieSB0eXBlICYgdmFsdWU7CiogbmljZWx5IHJlcHJlc2VudGVk LgoKVmFsdWUgb2JqZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVzcGVjaWFsbHkgZm9yIGRlZmluaW5n IEFQSXMsIHRoZWlyIGlucHV0L3JldHVybiB2YWx1ZXMuIFJlY2VudGx5LCB0aGVyZSB3ZXJlIHNv bWUgbW92ZW1lbnQgdG93YXJkcyB1c2luZyBtb3JlIGltbXV0YWJpbGl0eS1mcmllbmRseSBhcHBy b2FjaCBpbiBSdWJ5IHByb2dyYW1taW5nLCBsZWFkaW5nIHRvIGNyZWF0aW5nIHNldmVyYWwgZGlz Y3Vzc2lvbnMvbGlicmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIFtUb20g RGFsbGluZydzIGdlbV0oaHR0cHM6Ly9naXRodWIuY29tL3RvbWRhbGxpbmcvdmFsdWVfc2VtYW50 aWNzKSwgW0dvb2QgUnVieSBWYWx1ZSBvYmplY3QgY29udmVudGlvbl0oaHR0cHM6Ly9naXRodWIu Y29tL3p2ZXJvay9nb29kLXZhbHVlLW9iamVjdCkgKGRpc2NsYWltZXI6IHRoZSBsYXR0ZXIgaXMg bWFpbnRhaW5lZCBieSB5b3VycyB0cnVseSkuCgpJIHByb3Bvc2UgdG8gaW50cm9kdWNlICoqbmF0 aXZlIHZhbHVlIG9iamVjdHMqKiB0byBSdWJ5IGFzIGEgY29yZSBjbGFzcy4KCioqV2h5IG5vdCBh IGdlbT8qKgoKKiBJIGJlbGlldmUgdGhhdCBjb25jZXB0IGlzIHRoYXQgc2ltcGxlLCB0aGF0IG5v Ym9keSAqd2lsbCBldmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZvciByZXByZXNlbnRpbmcgaXQgd2l0 aCwgdW5sZXNzIHRoZSBmcmFtZXdvcmsvbGlicmFyeSB1c2VkIGFscmVhZHkgcHJvdmlkZXMgb25l LgoqIFBvdGVudGlhbGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBsaWJyYXJ5IChhbmQgcHJvYmFibHkg ZXZlbiBjb3JlKSBBUElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUgY29uY2VwdC4KCioqV2h5IGBT dHJ1Y3RgIGlzIG5vdCBlbm91Z2gqKgoKQ29yZSBgU3RydWN0YCBjbGFzcyBpcyAic29tZXdoYXQg YWxpa2UiIHZhbHVlLW9iamVjdCwgYW5kIGZyZXF1ZW50bHkgdXNlZCBpbnN0ZWFkIG9mIG9uZTog aXQgaXMgY29tcGFyZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3RzIG9mIHNpbXBsZSBhdHRyaWJ1dGVz LiBPbiB0aGUgb3RoZXIgaGFuZCwgYFN0cnVjdGAgaXM6CiogbXV0YWJsZTsKKiBjb2xsZWN0aW9u LWFsaWtlIChkZWZpbmVzIGB0b19hYCBhbmQgaXMgYEVudW1lcmFibGVgKTsKKiBkaWN0aW9uYXJ5 LWFsaWtlIChoYXMgYFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhvZHMpLgoKVGhlIGFib3ZlIHRyYWl0 cyBzb21laG93IGVyb2RlcyB0aGUgc2VtYW50aWNzLCBtYWtpbmcgY29kZSBsZXNzIGNsZWFyLCBl c3BlY2lhbGx5IHdoZW4gZHVjay10eXBpbmcgaXMgdXNlZC4KCkZvciBleGFtcGxlLCB0aGlzIGNv ZGUgc25pcHBldCBzaG93cyB3aHkgYHRvX2FgIGlzIHByb2JsZW1hdGljOgoKYGBgcnVieQpSZXN1 bHQgPSBTdHJ1Y3QubmV3KDpzdWNjZXNzLCA6Y29udGVudCkKCiMgTm93LCBpbWFnaW5lIHRoYXQg b3RoZXIgY29kZSBhc3N1bWVzIGBkYXRhYCBjb3VsZCBiZSBlaXRoZXIgUmVzdWx0LCBvciBbUmVz dWx0LCBSZXN1bHQsIFJlc3VsdF0KIyBTbywgLi4uCgpkYXRhID0gUmVzdWx0Lm5ldyh0cnVlLCAn aXQgaXMgYXdlc29tZScpCgpBcnJheShkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwg J2l0IGlzIGF3ZXNvbWUnKV0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQoKIyBvci4uLgpk ZWYgZm9vKGFyZzEsIGFyZzIgPSBuaWwpCnAgYXJnMSwgYXJnMgplbmQKCmZvbygqZGF0YSkgIyA9 PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyksIG5pbF0sIGdvdCBbdHJ1 ZSwgJ2l0IGlzIGF3ZXNvbWUnXQpgYGAKCkhhdmluZyBgW11gIGFuZCBgZWFjaGAgZGVmaW5lZCBv biBzb21ldGhpbmcgdGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0IHZhbHVlIiBjYW4gYWxzbyBsZWFk IHRvIHN1YnRsZSBidWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNoZWNrcyAiaWYgdGhlIHJlY2VpdmVk IGFyZ3VtZW50IGlzIGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQgdmFsdWUgb2JqZWN0J3MgYXV0aG9y IGRvZXNuJ3QgdGhvdWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rpb24uCgoqKkNvbmNyZXRlIHByb3Bv c2FsKioKCiogQ2xhc3MgbmFtZTogYFN0cnVjdDo6VmFsdWVgOiBsb3Qgb2YgUnVieWlzdHMgYXJl IHVzZWQgdG8gaGF2ZSBgU3RydWN0YCBhcyBhIHF1aWNrICJzb21ldGhpbmctbGlrZS12YWx1ZSIg ZHJvcC1pbiwgc28gYWx0ZXJuYXRpdmUsIG1vcmUgc3RyaWN0IGltcGxlbWVudGF0aW9uLCBiZWlu ZyBwYXJ0IG9mIGBTdHJ1Y3RgIEFQSSwgd2lsbCBiZSBxdWl0ZSBkaXNjb3ZlcmFibGU7ICphbHRl cm5hdGl2ZToganVzdCBgVmFsdWVgKgoqIENsYXNzIEFQSSBpcyBjb3B5aW5nIGBTdHJ1Y3RgcyBv bmUgKG1vc3Qgb2YgdGhlIHRpbWUgLS0gZXZlbiByZXVzZXMgdGhlIGltcGxlbWVudGF0aW9uKSwg d2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgKihub3RlOiB0aGUgaW1tdXRhYmlsaXR5IGlz ICoqbm90KiogdGhlIG9ubHkgZGlmZmVyZW5jZSkqOgogICogTm90IGBFbnVtZXJhYmxlYDsKICAq IEltbXV0YWJsZTsKICAqIERvZXNuJ3QgdGhpbmsgb2YgaXRzZWxmIGFzICJhbG1vc3QgaGFzaCIg KGRvZXNuJ3QgaGF2ZSBgdG9fYWAsIGB2YWx1ZXNgIGFuZCBgW11gIG1ldGhvZHMpOwogICogQ2Fu IGhhdmUgZW1wdHkgbWVtYmVycyBsaXN0IChmdW4gZmFjdDogYFN0cnVjdC5uZXcoJ0ZvbycpYCBj cmVhdGluZyBtZW1iZXItbGVzcyBgU3RydWN0OjpGb29gLCBpcyBhbGxvd2VkLCBidXQgYFN0cnVj dC5uZXcoKWAgaXMgbm90KSB0byBhbGxvdyB1c2FnZSBwYXR0ZXJucyBsaWtlOgoKYGBgcnVieQpj bGFzcyBNeVNlcnZpY2UKICBTdWNjZXNzID0gU3RydWN0OjpWYWx1ZS5uZXcoOnJlc3VsdHMpCiAg Tm90Rm91bmQgPSBTdHJ1Y3Q6OlZhbHVlLm5ldwplbmQKYGBgCgpgTm90Rm91bmRgIGhlcmUsIHVu bGlrZSwgc2F5LCBgT2JqZWN0Lm5ldy5mcmVlemVgIChhbm90aGVyIHBhdHRlcm4gZm9yIGNyZWF0 aW5nICJlbXB0eSB0eXBlZCB2YWx1ZSBvYmplY3QiKSwgaGFzIG5pY2UgaW5zcGVjdCBgIzx2YWx1 ZSBOb3RGb3VuZD5gLCBhbmQgY3JlYXRlZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgYFN1Y2Nlc3Ng LCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gQW5kIGlmIGl0IHdpbGwgZXZvbHZlIHRv IGhhdmUgc29tZSBhdHRyaWJ1dGVzLCB0aGUgY29kZSBjaGFuZ2Ugd291bGQgYmUgZWFzeS4KCioq UGF0Y2ggaXMgcHJvdmlkZWQqKgoKW1NhbXBsZSByZW5kZXJlZCBSRG9jIGRvY3VtZW50YXRpb25d KGh0dHBzOi8venZlcm9rLmdpdGh1Yi5pby9ydWJ5LXJkb2MvU3RydWN0LVZhbHVlLmh0bWwpCgot LS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN0cnVjdF92YWx1ZS5wYXRj aCAoMTguNiBLQikKCgotLSAKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCgpVbnN1YnNjcmli ZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJz Y3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9u cy9ydWJ5LWNvcmU+Cg==