[ruby-core:110084] [Ruby master Feature#16122] Data: simple immutable value object
From:
"matz (Yukihiro Matsumoto)" <noreply@...>
Date:
2022-09-26 09:58:22 UTC
List:
ruby-core #110084
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4KCgpAenZlcm9rIFRoZSBzdW1tYXJ5IGxvb2tzIE9LLiBJIGFjY2VwdGVkLgoKQGlvcXVhdGl4 IFlvdXIgcHJvcG9zYWwgc2hvdWxkIGJlIGhhbmRsZWQgc2VwYXJhdGVseS4gIENvdWxkIHlvdSBz dWJtaXQgYSBuZXcgb25lPwoKTWF0ei4KCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkZlYXR1cmUgIzE2MTIyOiBEYXRhOiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9i amVjdApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk5MzM5 CgoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCiogU3RhdHVzOiBBc3NpZ25lZAoq IFByaW9yaXR5OiBOb3JtYWwKKiBBc3NpZ25lZTogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyMgSW50cm8gKG9yaWdpbmFs IHRoZW9yZXRpY2FsIHBhcnQgb2YgdGhlIHByb3Bvc2FsKQoKKipWYWx1ZSBPYmplY3QqKiBpcyBh IHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1Y2VkIGJ5IE1hcnRpbiBGb3dsZXIgKFtoaXMgcG9zdF0o aHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL1ZhbHVlT2JqZWN0Lmh0bWwpLCBbV2lraXBl ZGlhIEVudHJ5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWx1ZV9vYmplY3QpKSB3 aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoc2ltcGxpZnlpbmcgdGhlIGlkZWEpOgoKKiBy ZXByZXNlbnRpbmcgc29tZSByZWxhdGl2ZWx5IHNpbXBsZSBkYXRhOwoqIGltbXV0YWJsZTsKKiBj b21wYXJlZCBieSB0eXBlICYgdmFsdWU7CiogbmljZWx5IHJlcHJlc2VudGVkLgoKVmFsdWUgb2Jq ZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVzcGVjaWFsbHkgZm9yIGRlZmluaW5nIEFQSXMsIHRoZWly IGlucHV0L3JldHVybiB2YWx1ZXMuIFJlY2VudGx5LCB0aGVyZSB3ZXJlIHNvbWUgbW92ZW1lbnQg dG93YXJkcyB1c2luZyBtb3JlIGltbXV0YWJpbGl0eS1mcmllbmRseSBhcHByb2FjaCBpbiBSdWJ5 IHByb2dyYW1taW5nLCBsZWFkaW5nIHRvIGNyZWF0aW5nIHNldmVyYWwgZGlzY3Vzc2lvbnMvbGli cmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIFtUb20gRGFsbGluZydzIGdl bV0oaHR0cHM6Ly9naXRodWIuY29tL3RvbWRhbGxpbmcvdmFsdWVfc2VtYW50aWNzKSwgW0dvb2Qg UnVieSBWYWx1ZSBvYmplY3QgY29udmVudGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9n b29kLXZhbHVlLW9iamVjdCkgKGRpc2NsYWltZXI6IHRoZSBsYXR0ZXIgaXMgbWFpbnRhaW5lZCBi eSB5b3VycyB0cnVseSkuCgpJIHByb3Bvc2UgdG8gaW50cm9kdWNlICoqbmF0aXZlIHZhbHVlIG9i amVjdHMqKiB0byBSdWJ5IGFzIGEgY29yZSBjbGFzcy4KCioqV2h5IG5vdCBhIGdlbT8qKgoKKiBJ IGJlbGlldmUgdGhhdCBjb25jZXB0IGlzIHRoYXQgc2ltcGxlLCB0aGF0IG5vYm9keSAqd2lsbCBl dmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZvciByZXByZXNlbnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRo ZSBmcmFtZXdvcmsvbGlicmFyeSB1c2VkIGFscmVhZHkgcHJvdmlkZXMgb25lLgoqIFBvdGVudGlh bGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBsaWJyYXJ5IChhbmQgcHJvYmFibHkgZXZlbiBjb3JlKSBB UElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUgY29uY2VwdC4KCioqV2h5IGBTdHJ1Y3RgIGlzIG5v dCBlbm91Z2gqKgoKQ29yZSBgU3RydWN0YCBjbGFzcyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVl LW9iamVjdCwgYW5kIGZyZXF1ZW50bHkgdXNlZCBpbnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFy ZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3RzIG9mIHNpbXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3Ro ZXIgaGFuZCwgYFN0cnVjdGAgaXM6CiogbXV0YWJsZTsKKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZp bmVzIGB0b19hYCBhbmQgaXMgYEVudW1lcmFibGVgKTsKKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMg YFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhvZHMpLgoKVGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVy b2RlcyB0aGUgc2VtYW50aWNzLCBtYWtpbmcgY29kZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdo ZW4gZHVjay10eXBpbmcgaXMgdXNlZC4KCkZvciBleGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBz aG93cyB3aHkgYHRvX2FgIGlzIHByb2JsZW1hdGljOgoKYGBgcnVieQpSZXN1bHQgPSBTdHJ1Y3Qu bmV3KDpzdWNjZXNzLCA6Y29udGVudCkKCiMgTm93LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBh c3N1bWVzIGBkYXRhYCBjb3VsZCBiZSBlaXRoZXIgUmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQs IFJlc3VsdF0KIyBTbywgLi4uCgpkYXRhID0gUmVzdWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29t ZScpCgpBcnJheShkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNv bWUnKV0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQoKIyBvci4uLgpkZWYgZm9vKGFyZzEs IGFyZzIgPSBuaWwpCnAgYXJnMSwgYXJnMgplbmQKCmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBb UmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyksIG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3 ZXNvbWUnXQpgYGAKCkhhdmluZyBgW11gIGFuZCBgZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcg dGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0IHZhbHVlIiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBi dWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNoZWNrcyAiaWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlz IGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQgdmFsdWUgb2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhv dWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rpb24uCgojIyBgRGF0YWAgY2xhc3M6IGNvbnNlbnN1cyBw cm9wb3NhbC9pbXBsZW1lbnRhdGlvbiwgU2VwIDIwMjIKCiogTmFtZTogYERhdGFgCiogUFI6IGh0 dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82MzUzCiogRXhhbXBsZSBkb2NzIHJlbmRl cmluZzogaHR0cHM6Ly96dmVyb2suc3BhY2UvcnVieS1yZG9jL0RhdGEuaHRtbAoqIEZ1bGwgQVBJ OgogICogYERhdGE6OmRlZmluZWAgY3JlYXRlcyBhIG5ldyBEYXRhIGNsYXNzOyBhY2NlcHRzIG9u bHkgc3ltYm9scyAobm8gYGtleXdvcmRfaW5pdDpgLCBubyAiZmlyc3QgYXJndW1lbnQgaXMgdGhl IGNsYXNzIG5hbWUiIGxpa2UgdGhlIGBTdHJ1Y3RgIGhhZCkKICAqIGA8ZGF0YV9jbGFzcz46Om1l bWJlcnNgOiBsaXN0IG9mIG1lbWJlciBuYW1lcwogICogYDxkYXRhX2NsYXNzPjo6bmV3YDogYWNj ZXB0cyBlaXRoZXIga2V5d29yZCBvciBwb3NpdGlvbmFsIGFyZ3VtZW50cyAoYnV0IG5vdCBtaXgp OyBjb252ZXJ0cyBhbGwgb2YgdGhlIHRvIGtleXdvcmQgYXJnczsgcmFpc2VzIGBBcmd1bWVudEVy cm9yYCBpZiB0aGVyZSBhcmUgKip0b28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyoqCiAgKiBg I2luaXRpYWxpemVgOiBhY2NlcHRzIG9ubHkga2V5d29yZCBhcmd1bWVudHM7IHRoZSBkZWZhdWx0 IGltcGxlbWVudGF0aW9uIHJhaXNlcyBgQXJndW1lbnRFcnJvcmAgb24gbWlzc2luZyBvciBleHRy YSBhcmd1bWVudHM7IGl0IGlzIGVhc3kgdG8gcmVkZWZpbmUgYGluaXRpYWxpemVgIHRvIHByb3Zp ZGUgZGVmYXVsdHMgb3IgaGFuZGxlIGV4dHJhIGFyZ3MuCiAgKiBgIz09YAogICogYCNlcWw/YAog ICogYCNpbnNwZWN0YC9gI3RvX3NgIChzYW1lIHJlcHJlc2VudGF0aW9uKQogICogYCNkZWNvbnN0 cnVjdGAKICAqIGAjZGVjb25zdHJ1Y3Rfa2V5c2AKICAqIGAjaGFzaGAKICAqIGAjbWVtYmVyc2AK ICAqIGAjdG9faGAKCiMjIEhpc3RvcmljYWwgb3JpZ2luYWwgcHJvcG9zYWwKCiogQ2xhc3MgbmFt ZTogYFN0cnVjdDo6VmFsdWVgOiBsb3Qgb2YgUnVieWlzdHMgYXJlIHVzZWQgdG8gaGF2ZSBgU3Ry dWN0YCBhcyBhIHF1aWNrICJzb21ldGhpbmctbGlrZS12YWx1ZSIgZHJvcC1pbiwgc28gYWx0ZXJu YXRpdmUsIG1vcmUgc3RyaWN0IGltcGxlbWVudGF0aW9uLCBiZWluZyBwYXJ0IG9mIGBTdHJ1Y3Rg IEFQSSwgd2lsbCBiZSBxdWl0ZSBkaXNjb3ZlcmFibGU7ICphbHRlcm5hdGl2ZToganVzdCBgVmFs dWVgKgoqIENsYXNzIEFQSSBpcyBjb3B5aW5nIGBTdHJ1Y3RgcyBvbmUgKG1vc3Qgb2YgdGhlIHRp bWUgLS0gZXZlbiByZXVzZXMgdGhlIGltcGxlbWVudGF0aW9uKSwgd2l0aCB0aGUgZm9sbG93aW5n IGV4Y2VwdGlvbnMgKihub3RlOiB0aGUgaW1tdXRhYmlsaXR5IGlzICoqbm90KiogdGhlIG9ubHkg ZGlmZmVyZW5jZSkqOgogICogTm90IGBFbnVtZXJhYmxlYDsKICAqIEltbXV0YWJsZTsKICAqIERv ZXNuJ3QgdGhpbmsgb2YgaXRzZWxmIGFzICJhbG1vc3QgaGFzaCIgKGRvZXNuJ3QgaGF2ZSBgdG9f YWAsIGB2YWx1ZXNgIGFuZCBgW11gIG1ldGhvZHMpOwogICogQ2FuIGhhdmUgZW1wdHkgbWVtYmVy cyBsaXN0IChmdW4gZmFjdDogYFN0cnVjdC5uZXcoJ0ZvbycpYCBjcmVhdGluZyBtZW1iZXItbGVz cyBgU3RydWN0OjpGb29gLCBpcyBhbGxvd2VkLCBidXQgYFN0cnVjdC5uZXcoKWAgaXMgbm90KSB0 byBhbGxvdyB1c2FnZSBwYXR0ZXJucyBsaWtlOgoKYGBgcnVieQpjbGFzcyBNeVNlcnZpY2UKICBT dWNjZXNzID0gU3RydWN0OjpWYWx1ZS5uZXcoOnJlc3VsdHMpCiAgTm90Rm91bmQgPSBTdHJ1Y3Q6 OlZhbHVlLm5ldwplbmQKYGBgCgpgTm90Rm91bmRgIGhlcmUsIHVubGlrZSwgc2F5LCBgT2JqZWN0 Lm5ldy5mcmVlemVgIChhbm90aGVyIHBhdHRlcm4gZm9yIGNyZWF0aW5nICJlbXB0eSB0eXBlZCB2 YWx1ZSBvYmplY3QiKSwgaGFzIG5pY2UgaW5zcGVjdCBgIzx2YWx1ZSBOb3RGb3VuZD5gLCBhbmQg Y3JlYXRlZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgYFN1Y2Nlc3NgLCBtYWtpbmcgdGhlIGNvZGUg bW9yZSByZWFkYWJsZS4gQW5kIGlmIGl0IHdpbGwgZXZvbHZlIHRvIGhhdmUgc29tZSBhdHRyaWJ1 dGVzLCB0aGUgY29kZSBjaGFuZ2Ugd291bGQgYmUgZWFzeS4KCioqUGF0Y2ggaXMgcHJvdmlkZWQq KgoKW1NhbXBsZSByZW5kZXJlZCBSRG9jIGRvY3VtZW50YXRpb25dKGh0dHBzOi8venZlcm9rLmdp dGh1Yi5pby9ydWJ5LXJkb2MvU3RydWN0LVZhbHVlLmh0bWwpCgotLS1GaWxlcy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN0cnVjdF92YWx1ZS5wYXRjaCAoMTguNiBLQikKCgotLSAK aHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNv cmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlz dHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==