[ruby-core:109986] [Ruby master Feature#16122] Data: simple immutable value object
From:
"nobu (Nobuyoshi Nakada)" <noreply@...>
Date:
2022-09-22 03:30:03 UTC
List:
ruby-core #109986
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku DQoNCg0KQXMgQHVmdWsgd3JvdGUg8J+ZjywgSSBkb27igJl0IHRoaW5rIHRoZSBiZWhhdmlvciB3 b3J0aCB0byBiZSBrZXB0Lg0KSW4gdGhlIGNhc2UgeW91IHdhbnQgYSBuYW1lLCB5b3UgY2FuIGFz c2lnbiBpdCB0byBhIGNvbnN0YW50Lg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpGZWF0dXJlICMxNjEyMjogRGF0YTogc2ltcGxlIGltbXV0YWJsZSB2YWx1ZSBv YmplY3QNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjEyMiNjaGFuZ2UtOTky MzYNCg0KKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQ0KKiBTdGF0dXM6IEFzc2ln bmVkDQoqIFByaW9yaXR5OiBOb3JtYWwNCiogQXNzaWduZWU6IHp2ZXJvayAoVmljdG9yIFNoZXBl bGV2KQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKipWYWx1ZSBP YmplY3QqKiBpcyBhIHVzZWZ1bCBjb25jZXB0LCBpbnRyb2R1Y2VkIGJ5IE1hcnRpbiBGb3dsZXIg KFtoaXMgcG9zdF0oaHR0cHM6Ly9tYXJ0aW5mb3dsZXIuY29tL2JsaWtpL1ZhbHVlT2JqZWN0Lmh0 bWwpLCBbV2lraXBlZGlhIEVudHJ5XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWx1 ZV9vYmplY3QpKSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyAoc2ltcGxpZnlpbmcgdGhl IGlkZWEpOg0KDQoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7DQoq IGltbXV0YWJsZTsNCiogY29tcGFyZWQgYnkgdHlwZSAmIHZhbHVlOw0KKiBuaWNlbHkgcmVwcmVz ZW50ZWQuDQoNClZhbHVlIG9iamVjdHMgYXJlIHN1cGVyLXVzZWZ1bCBlc3BlY2lhbGx5IGZvciBk ZWZpbmluZyBBUElzLCB0aGVpciBpbnB1dC9yZXR1cm4gdmFsdWVzLiBSZWNlbnRseSwgdGhlcmUg d2VyZSBzb21lIG1vdmVtZW50IHRvd2FyZHMgdXNpbmcgbW9yZSBpbW11dGFiaWxpdHktZnJpZW5k bHkgYXBwcm9hY2ggaW4gUnVieSBwcm9ncmFtbWluZywgbGVhZGluZyB0byBjcmVhdGluZyBzZXZl cmFsIGRpc2N1c3Npb25zL2xpYnJhcmllcyB3aXRoIHZhbHVlIG9iamVjdHMuIEZvciBleGFtcGxl LCBbVG9tIERhbGxpbmcncyBnZW1dKGh0dHBzOi8vZ2l0aHViLmNvbS90b21kYWxsaW5nL3ZhbHVl X3NlbWFudGljcyksIFtHb29kIFJ1YnkgVmFsdWUgb2JqZWN0IGNvbnZlbnRpb25dKGh0dHBzOi8v Z2l0aHViLmNvbS96dmVyb2svZ29vZC12YWx1ZS1vYmplY3QpIChkaXNjbGFpbWVyOiB0aGUgbGF0 dGVyIGlzIG1haW50YWluZWQgYnkgeW91cnMgdHJ1bHkpLg0KDQpJIHByb3Bvc2UgdG8gaW50cm9k dWNlICoqbmF0aXZlIHZhbHVlIG9iamVjdHMqKiB0byBSdWJ5IGFzIGEgY29yZSBjbGFzcy4NCg0K KipXaHkgbm90IGEgZ2VtPyoqDQoNCiogSSBiZWxpZXZlIHRoYXQgY29uY2VwdCBpcyB0aGF0IHNp bXBsZSwgdGhhdCBub2JvZHkgKndpbGwgZXZlbiB0cnkqIHRvIHVzZSBhIGdlbSBmb3IgcmVwcmVz ZW50aW5nIGl0IHdpdGgsIHVubGVzcyB0aGUgZnJhbWV3b3JrL2xpYnJhcnkgdXNlZCBhbHJlYWR5 IHByb3ZpZGVzIG9uZS4NCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkg KGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25j ZXB0Lg0KDQoqKldoeSBgU3RydWN0YCBpcyBub3QgZW5vdWdoKioNCg0KQ29yZSBgU3RydWN0YCBj bGFzcyBpcyAic29tZXdoYXQgYWxpa2UiIHZhbHVlLW9iamVjdCwgYW5kIGZyZXF1ZW50bHkgdXNl ZCBpbnN0ZWFkIG9mIG9uZTogaXQgaXMgY29tcGFyZWQgYnkgdmFsdWUgYW5kIGNvbnNpc3RzIG9m IHNpbXBsZSBhdHRyaWJ1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYFN0cnVjdGAgaXM6DQoqIG11 dGFibGU7DQoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVy YWJsZWApOw0KKiBkaWN0aW9uYXJ5LWFsaWtlIChoYXMgYFtdYCBhbmQgYC52YWx1ZXNgIG1ldGhv ZHMpLg0KDQpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1h a2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2Vk Lg0KDQpGb3IgZXhhbXBsZSwgdGhpcyBjb2RlIHNuaXBwZXQgc2hvd3Mgd2h5IGB0b19hYCBpcyBw cm9ibGVtYXRpYzoNCg0KYGBgcnVieQ0KUmVzdWx0ID0gU3RydWN0Lm5ldyg6c3VjY2VzcywgOmNv bnRlbnQpDQoNCiMgTm93LCBpbWFnaW5lIHRoYXQgb3RoZXIgY29kZSBhc3N1bWVzIGBkYXRhYCBj b3VsZCBiZSBlaXRoZXIgUmVzdWx0LCBvciBbUmVzdWx0LCBSZXN1bHQsIFJlc3VsdF0NCiMgU28s IC4uLg0KDQpkYXRhID0gUmVzdWx0Lm5ldyh0cnVlLCAnaXQgaXMgYXdlc29tZScpDQoNCkFycmF5 KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290 IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddDQoNCiMgb3IuLi4NCmRlZiBmb28oYXJnMSwgYXJnMiA9 IG5pbCkNCnAgYXJnMSwgYXJnMg0KZW5kDQoNCmZvbygqZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVz dWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyksIG5pbF0sIGdvdCBbdHJ1ZSwgJ2l0IGlzIGF3ZXNv bWUnXQ0KYGBgDQoNCkhhdmluZyBgW11gIGFuZCBgZWFjaGAgZGVmaW5lZCBvbiBzb21ldGhpbmcg dGhhdCBpcyB0aG91Z2h0IGFzICJqdXN0IHZhbHVlIiBjYW4gYWxzbyBsZWFkIHRvIHN1YnRsZSBi dWdzLCB3aGVuIHNvbWUgbWV0aG9kIGNoZWNrcyAiaWYgdGhlIHJlY2VpdmVkIGFyZ3VtZW50IGlz IGNvbGxlY3Rpb24tYWxpa2UiLCBhbmQgdmFsdWUgb2JqZWN0J3MgYXV0aG9yIGRvZXNuJ3QgdGhv dWdodCBvZiBpdCBhcyBhIGNvbGxlY3Rpb24uDQoNCioqQ29uY3JldGUgcHJvcG9zYWwqKg0KDQoq IENsYXNzIG5hbWU6IGBTdHJ1Y3Q6OlZhbHVlYDogbG90IG9mIFJ1Ynlpc3RzIGFyZSB1c2VkIHRv IGhhdmUgYFN0cnVjdGAgYXMgYSBxdWljayAic29tZXRoaW5nLWxpa2UtdmFsdWUiIGRyb3AtaW4s IHNvIGFsdGVybmF0aXZlLCBtb3JlIHN0cmljdCBpbXBsZW1lbnRhdGlvbiwgYmVpbmcgcGFydCBv ZiBgU3RydWN0YCBBUEksIHdpbGwgYmUgcXVpdGUgZGlzY292ZXJhYmxlOyAqYWx0ZXJuYXRpdmU6 IGp1c3QgYFZhbHVlYCoNCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9z dCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRo ZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3Qq KiB0aGUgb25seSBkaWZmZXJlbmNlKSo6DQogICogTm90IGBFbnVtZXJhYmxlYDsNCiAgKiBJbW11 dGFibGU7DQogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9l c24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7DQogICogQ2FuIGhh dmUgZW1wdHkgbWVtYmVycyBsaXN0IChmdW4gZmFjdDogYFN0cnVjdC5uZXcoJ0ZvbycpYCBjcmVh dGluZyBtZW1iZXItbGVzcyBgU3RydWN0OjpGb29gLCBpcyBhbGxvd2VkLCBidXQgYFN0cnVjdC5u ZXcoKWAgaXMgbm90KSB0byBhbGxvdyB1c2FnZSBwYXR0ZXJucyBsaWtlOg0KDQpgYGBydWJ5DQpj bGFzcyBNeVNlcnZpY2UNCiAgU3VjY2VzcyA9IFN0cnVjdDo6VmFsdWUubmV3KDpyZXN1bHRzKQ0K ICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3DQplbmQNCmBgYA0KDQpgTm90Rm91bmRgIGhl cmUsIHVubGlrZSwgc2F5LCBgT2JqZWN0Lm5ldy5mcmVlemVgIChhbm90aGVyIHBhdHRlcm4gZm9y IGNyZWF0aW5nICJlbXB0eSB0eXBlZCB2YWx1ZSBvYmplY3QiKSwgaGFzIG5pY2UgaW5zcGVjdCBg Izx2YWx1ZSBOb3RGb3VuZD5gLCBhbmQgY3JlYXRlZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgYFN1 Y2Nlc3NgLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZS4gQW5kIGlmIGl0IHdpbGwgZXZv bHZlIHRvIGhhdmUgc29tZSBhdHRyaWJ1dGVzLCB0aGUgY29kZSBjaGFuZ2Ugd291bGQgYmUgZWFz eS4NCg0KKipQYXRjaCBpcyBwcm92aWRlZCoqDQoNCltTYW1wbGUgcmVuZGVyZWQgUkRvYyBkb2N1 bWVudGF0aW9uXShodHRwczovL3p2ZXJvay5naXRodWIuaW8vcnVieS1yZG9jL1N0cnVjdC1WYWx1 ZS5odG1sKQ0KDQotLS1GaWxlcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdHJ1 Y3RfdmFsdWUucGF0Y2ggKDE4LjYgS0IpDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy8NCgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcu b3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2kt YmluL21haWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==