[ruby-core:109964] [Ruby master Feature#16122] Data: simple immutable value object
From:
"ufuk (Ufuk Kayserilioglu)" <noreply@...>
Date:
2022-09-20 21:08:24 UTC
List:
ruby-core #109964
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgdWZ1ayAoVWZ1ayBLYXlzZXJpbGlvZ2x1 KS4KCgp6dmVyb2sgKFZpY3RvciBTaGVwZWxldikgd3JvdGUgaW4gI25vdGUtNzU6Cj4gKiBJIGFt IG5vdCBzdXJlIHRoYXQgIm5hbWluZyBhcyBhIGZpcnN0IGFyZ3VtZW50IiBpcyBhIHdpZGVseSB1 c2VkIGZlYXR1cmUsIGJ1dCBpdCBzZWVtcyBuaWNlLCBzbyBJIGxlZnQgaXQgZm9yIGBEYXRhYCB0 b28gKGFuZCB0ZXN0cyBjb25maXJtaW5nIGl0cyBleGlzdGVuY2UpOyBJIGltYWdpbmUgdGhhdCBp biBzb21lIHN5c3RlbXMsIGRvaW5nIGBEYXRhLmRlZmluZSgnTXlUeXBlJywgOm1lbWJlcnMpYCBt aWdodCBiZSBwcmVmZXJyZWQgd2F5OwoKSW4gbXkgb3BpbmlvbiwgdGhpcyBpcyBhIGdvb2QgdGlt ZSB0byBicmVhayBmcmVlIGZyb20gdGhpcyBvbGQgQVBJIGFuZCBzdGFydCB3aXRoIGEgYmV0dGVy IGRlc2lnbi4gVGhlIGZhY3QgdGhhdCB0aGUgYGNsYXNzX25hbWVgIGFyZ3VtZW50IGRlZmluZXMg YSBjb25zdGFudCB1bmRlciBgU3RydWN0YCBpcyBhIGxpdHRsZSB0b28gbWFnaWNhbCwgbmVlZGxl c3NseSBwb2xsdXRlcyB0aGUgbmFtZXNwYWNlLCBhbmQgbGVhZHMgdG8gbmFtZSBjbGFzaGVzLiBJ IHdvdWxkIHByZWZlciBpdCBpZiBgRGF0YWAgZGlkbid0IGluaGVyaXQgdGhlIHNhbWUgdGhpbmcg ZnJvbSBgU3RydWN0YCBhbmQgaGFkIGEgbW9yZSBwdXJwb3NlIGRlc2lnbmVkIEFQSSBmcm9tIHRo ZSBzdGFydC4KCkkgY2FuIGFsc28gc2VlIGZyb20gQG1hdHogJ3MgcHJldmlvdXMgbWVzc2FnZSBp biB0aGlzIHRocmVhZCB0aGF0IGhlIGNvbnNpZGVycyB0aGF0IHN5bnRheCBhcyAib2xkLXN0eWxl Ii4gTW9yZW92ZXIsIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBjbGFzc19uYW1lYCBwYXJhbWV0ZXIg d2FzIG9uZSBvZiBoaXMgcmVhc29ucyBhZ2FpbnN0IHRoZSBuYW1lIGBTdHJ1Y3Q6OlZhbHVlYC4g SXQgd291bGQgaGF2ZSBiZWVuIGhvcnJpYmxlIHRvIG5vdCBiZSBhYmxlIHRvIHVzZSBpdCBpZiBp dCB3YXMgdGhlIGJlc3QgbmFtZSBmb3IgdGhlIGNvbmNlcHQsIGp1c3QgYmVjYXVzZSBpdCBjb3Vs ZCBjbGFzaCB3aXRoIHNvbWVvbmUgZWxzZSdzIG1hZ2ljYWwgc3RydWN0IGNsYXNzLiBMdWNraWx5 IGBEYXRhYCB3YXMgYSBiZXR0ZXIgbmFtZSBmb3IgaXQuIEknZCByYXRoZXIgdGhhdCB3ZSBkb24n dCBwYWludCBvdXJzZWx2ZXMgaW50byBzaW1pbGFyIGNvcm5lcnMgaW4gdGhlIGZ1dHVyZS4KCm1h dHogKFl1a2loaXJvIE1hdHN1bW90bykgd3JvdGUgaW4gI25vdGUtNDU6Cj4gU3RydWN0OjpWYWx1 ZSBjYW4gY2F1c2UgY29uZmxpY3Qgd2hlbiBzb21lb25lIGlzIHVzaW5nIGBTdHJ1Y3QubmV3KCJW YWx1ZSIsIDpmb28sIDpiYXIpYCAodGhpcyBvbGQtc3R5bGUgY29kZSBjcmVhdGVzIFN0cnVjdDo6 VmFsdWUgY2xhc3MpLgoKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CkZlYXR1cmUgIzE2MTIyOiBEYXRhOiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9iamVjdApodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk5MjE0CgoqIEF1dGhv cjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCiogU3RhdHVzOiBBc3NpZ25lZAoqIFByaW9yaXR5 OiBOb3JtYWwKKiBBc3NpZ25lZTogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKipWYWx1ZSBPYmplY3QqKiBpcyBhIHVzZWZ1 bCBjb25jZXB0LCBpbnRyb2R1Y2VkIGJ5IE1hcnRpbiBGb3dsZXIgKFtoaXMgcG9zdF0oaHR0cHM6 Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL1ZhbHVlT2JqZWN0Lmh0bWwpLCBbV2lraXBlZGlhIEVu dHJ5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWx1ZV9vYmplY3QpKSB3aXRoIHRo ZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoc2ltcGxpZnlpbmcgdGhlIGlkZWEpOgoKKiByZXByZXNl bnRpbmcgc29tZSByZWxhdGl2ZWx5IHNpbXBsZSBkYXRhOwoqIGltbXV0YWJsZTsKKiBjb21wYXJl ZCBieSB0eXBlICYgdmFsdWU7CiogbmljZWx5IHJlcHJlc2VudGVkLgoKVmFsdWUgb2JqZWN0cyBh cmUgc3VwZXItdXNlZnVsIGVzcGVjaWFsbHkgZm9yIGRlZmluaW5nIEFQSXMsIHRoZWlyIGlucHV0 L3JldHVybiB2YWx1ZXMuIFJlY2VudGx5LCB0aGVyZSB3ZXJlIHNvbWUgbW92ZW1lbnQgdG93YXJk cyB1c2luZyBtb3JlIGltbXV0YWJpbGl0eS1mcmllbmRseSBhcHByb2FjaCBpbiBSdWJ5IHByb2dy YW1taW5nLCBsZWFkaW5nIHRvIGNyZWF0aW5nIHNldmVyYWwgZGlzY3Vzc2lvbnMvbGlicmFyaWVz IHdpdGggdmFsdWUgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIFtUb20gRGFsbGluZydzIGdlbV0oaHR0 cHM6Ly9naXRodWIuY29tL3RvbWRhbGxpbmcvdmFsdWVfc2VtYW50aWNzKSwgW0dvb2QgUnVieSBW YWx1ZSBvYmplY3QgY29udmVudGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL3p2ZXJvay9nb29kLXZh bHVlLW9iamVjdCkgKGRpc2NsYWltZXI6IHRoZSBsYXR0ZXIgaXMgbWFpbnRhaW5lZCBieSB5b3Vy cyB0cnVseSkuCgpJIHByb3Bvc2UgdG8gaW50cm9kdWNlICoqbmF0aXZlIHZhbHVlIG9iamVjdHMq KiB0byBSdWJ5IGFzIGEgY29yZSBjbGFzcy4KCioqV2h5IG5vdCBhIGdlbT8qKgoKKiBJIGJlbGll dmUgdGhhdCBjb25jZXB0IGlzIHRoYXQgc2ltcGxlLCB0aGF0IG5vYm9keSAqd2lsbCBldmVuIHRy eSogdG8gdXNlIGEgZ2VtIGZvciByZXByZXNlbnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRoZSBmcmFt ZXdvcmsvbGlicmFyeSB1c2VkIGFscmVhZHkgcHJvdmlkZXMgb25lLgoqIFBvdGVudGlhbGx5LCBh IGxvdCBvZiBzdGFuZGFyZCBsaWJyYXJ5IChhbmQgcHJvYmFibHkgZXZlbiBjb3JlKSBBUElzIGNv dWxkIGJlbmVmaXQgZnJvbSB0aGUgY29uY2VwdC4KCioqV2h5IGBTdHJ1Y3RgIGlzIG5vdCBlbm91 Z2gqKgoKQ29yZSBgU3RydWN0YCBjbGFzcyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVlLW9iamVj dCwgYW5kIGZyZXF1ZW50bHkgdXNlZCBpbnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFyZWQgYnkg dmFsdWUgYW5kIGNvbnNpc3RzIG9mIHNpbXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3RoZXIgaGFu ZCwgYFN0cnVjdGAgaXM6CiogbXV0YWJsZTsKKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZpbmVzIGB0 b19hYCBhbmQgaXMgYEVudW1lcmFibGVgKTsKKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMgYFtdYCBh bmQgYC52YWx1ZXNgIG1ldGhvZHMpLgoKVGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVyb2RlcyB0 aGUgc2VtYW50aWNzLCBtYWtpbmcgY29kZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdoZW4gZHVj ay10eXBpbmcgaXMgdXNlZC4KCkZvciBleGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBzaG93cyB3 aHkgYHRvX2FgIGlzIHByb2JsZW1hdGljOgoKYGBgcnVieQpSZXN1bHQgPSBTdHJ1Y3QubmV3KDpz dWNjZXNzLCA6Y29udGVudCkKCiMgTm93LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBhc3N1bWVz IGBkYXRhYCBjb3VsZCBiZSBlaXRoZXIgUmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQsIFJlc3Vs dF0KIyBTbywgLi4uCgpkYXRhID0gUmVzdWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29tZScpCgpB cnJheShkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKV0s IGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQoKIyBvci4uLgpkZWYgZm9vKGFyZzEsIGFyZzIg PSBuaWwpCnAgYXJnMSwgYXJnMgplbmQKCmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0 KHRydWUsICdpdCBpcyBhd2Vzb21lJyksIG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUn XQpgYGAKCkhhdmluZyBgW11gIGFuZCBgZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcgdGhhdCBp cyB0aG91Z2h0IGFzICJqdXN0IHZhbHVlIiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBidWdzLCB3 aGVuIHNvbWUgbWV0aG9kIGNoZWNrcyAiaWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlzIGNvbGxl Y3Rpb24tYWxpa2UiLCBhbmQgdmFsdWUgb2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhvdWdodCBv ZiBpdCBhcyBhIGNvbGxlY3Rpb24uCgoqKkNvbmNyZXRlIHByb3Bvc2FsKioKCiogQ2xhc3MgbmFt 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==