[ruby-core:110013] [Ruby master Feature#16122] Data: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-09-22 22:57:44 UTC
List:
ruby-core #110013
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp Lg0KDQoNCj4gSSB3b25kZXIgYWJvdXQgdGhlIOKAnHdlaXJkIG5hbWXigJ0gbWVtYmVyc+KApg0K DQpPaCByaWdodC4gTGVmdCBhIG5vdGUgdG8gc2VsZiBhbmQgbWlzc2VkIGl0IG15c2VsZiDwn6Sm DQpJIGFkanVzdGVkIHRoZSB0ZXN0cyAodGhvdWdoIHRoZSBub3RlIHdhcyBsZWZ0IGV2ZW4gYmVm b3JlIHRoZSBgdGVzdF9lZGdlX2Nhc2VzYCBtZXRob2Qgd2FzIGFkZGVkLCBzbyBtb3N0IG9mIGl0 IHdhcyB0ZXN0ZWQgYWxyZWFkeSkuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCkZlYXR1cmUgIzE2MTIyOiBEYXRhOiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9i amVjdA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2MTIyI2NoYW5nZS05OTI2 NA0KDQoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpDQoqIFN0YXR1czogQXNzaWdu ZWQNCiogUHJpb3JpdHk6IE5vcm1hbA0KKiBBc3NpZ25lZTogenZlcm9rIChWaWN0b3IgU2hlcGVs ZXYpDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqKlZhbHVlIE9i amVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAo W2hpcyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRt bCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVl X29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUg aWRlYSk6DQoNCiogcmVwcmVzZW50aW5nIHNvbWUgcmVsYXRpdmVseSBzaW1wbGUgZGF0YTsNCiog aW1tdXRhYmxlOw0KKiBjb21wYXJlZCBieSB0eXBlICYgdmFsdWU7DQoqIG5pY2VseSByZXByZXNl bnRlZC4NCg0KVmFsdWUgb2JqZWN0cyBhcmUgc3VwZXItdXNlZnVsIGVzcGVjaWFsbHkgZm9yIGRl ZmluaW5nIEFQSXMsIHRoZWlyIGlucHV0L3JldHVybiB2YWx1ZXMuIFJlY2VudGx5LCB0aGVyZSB3 ZXJlIHNvbWUgbW92ZW1lbnQgdG93YXJkcyB1c2luZyBtb3JlIGltbXV0YWJpbGl0eS1mcmllbmRs eSBhcHByb2FjaCBpbiBSdWJ5IHByb2dyYW1taW5nLCBsZWFkaW5nIHRvIGNyZWF0aW5nIHNldmVy YWwgZGlzY3Vzc2lvbnMvbGlicmFyaWVzIHdpdGggdmFsdWUgb2JqZWN0cy4gRm9yIGV4YW1wbGUs IFtUb20gRGFsbGluZydzIGdlbV0oaHR0cHM6Ly9naXRodWIuY29tL3RvbWRhbGxpbmcvdmFsdWVf c2VtYW50aWNzKSwgW0dvb2QgUnVieSBWYWx1ZSBvYmplY3QgY29udmVudGlvbl0oaHR0cHM6Ly9n aXRodWIuY29tL3p2ZXJvay9nb29kLXZhbHVlLW9iamVjdCkgKGRpc2NsYWltZXI6IHRoZSBsYXR0 ZXIgaXMgbWFpbnRhaW5lZCBieSB5b3VycyB0cnVseSkuDQoNCkkgcHJvcG9zZSB0byBpbnRyb2R1 Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLg0KDQoq KldoeSBub3QgYSBnZW0/KioNCg0KKiBJIGJlbGlldmUgdGhhdCBjb25jZXB0IGlzIHRoYXQgc2lt cGxlLCB0aGF0IG5vYm9keSAqd2lsbCBldmVuIHRyeSogdG8gdXNlIGEgZ2VtIGZvciByZXByZXNl bnRpbmcgaXQgd2l0aCwgdW5sZXNzIHRoZSBmcmFtZXdvcmsvbGlicmFyeSB1c2VkIGFscmVhZHkg cHJvdmlkZXMgb25lLg0KKiBQb3RlbnRpYWxseSwgYSBsb3Qgb2Ygc3RhbmRhcmQgbGlicmFyeSAo YW5kIHByb2JhYmx5IGV2ZW4gY29yZSkgQVBJcyBjb3VsZCBiZW5lZml0IGZyb20gdGhlIGNvbmNl cHQuDQoNCioqV2h5IGBTdHJ1Y3RgIGlzIG5vdCBlbm91Z2gqKg0KDQpDb3JlIGBTdHJ1Y3RgIGNs YXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2Vk IGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Yg c2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoNCiogbXV0 YWJsZTsNCiogY29sbGVjdGlvbi1hbGlrZSAoZGVmaW5lcyBgdG9fYWAgYW5kIGlzIGBFbnVtZXJh YmxlYCk7DQoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9k cykuDQoNClRoZSBhYm92ZSB0cmFpdHMgc29tZWhvdyBlcm9kZXMgdGhlIHNlbWFudGljcywgbWFr aW5nIGNvZGUgbGVzcyBjbGVhciwgZXNwZWNpYWxseSB3aGVuIGR1Y2stdHlwaW5nIGlzIHVzZWQu DQoNCkZvciBleGFtcGxlLCB0aGlzIGNvZGUgc25pcHBldCBzaG93cyB3aHkgYHRvX2FgIGlzIHBy b2JsZW1hdGljOg0KDQpgYGBydWJ5DQpSZXN1bHQgPSBTdHJ1Y3QubmV3KDpzdWNjZXNzLCA6Y29u dGVudCkNCg0KIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNv dWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQ0KIyBTbywg Li4uDQoNCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykNCg0KQXJyYXko ZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyldLCBnb3Qg W3RydWUsICdpdCBpcyBhd2Vzb21lJ10NCg0KIyBvci4uLg0KZGVmIGZvbyhhcmcxLCBhcmcyID0g bmlsKQ0KcCBhcmcxLCBhcmcyDQplbmQNCg0KZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1 bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29t ZSddDQpgYGANCg0KSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0 aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1 Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMg Y29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91 Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4NCg0KKipDb25jcmV0ZSBwcm9wb3NhbCoqDQoNCiog Q2xhc3MgbmFtZTogYFN0cnVjdDo6VmFsdWVgOiBsb3Qgb2YgUnVieWlzdHMgYXJlIHVzZWQgdG8g aGF2ZSBgU3RydWN0YCBhcyBhIHF1aWNrICJzb21ldGhpbmctbGlrZS12YWx1ZSIgZHJvcC1pbiwg c28gYWx0ZXJuYXRpdmUsIG1vcmUgc3RyaWN0IGltcGxlbWVudGF0aW9uLCBiZWluZyBwYXJ0IG9m IGBTdHJ1Y3RgIEFQSSwgd2lsbCBiZSBxdWl0ZSBkaXNjb3ZlcmFibGU7ICphbHRlcm5hdGl2ZTog anVzdCBgVmFsdWVgKg0KKiBDbGFzcyBBUEkgaXMgY29weWluZyBgU3RydWN0YHMgb25lIChtb3N0 IG9mIHRoZSB0aW1lIC0tIGV2ZW4gcmV1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiksIHdpdGggdGhl IGZvbGxvd2luZyBleGNlcHRpb25zICoobm90ZTogdGhlIGltbXV0YWJpbGl0eSBpcyAqKm5vdCoq IHRoZSBvbmx5IGRpZmZlcmVuY2UpKjoNCiAgKiBOb3QgYEVudW1lcmFibGVgOw0KICAqIEltbXV0 YWJsZTsNCiAgKiBEb2Vzbid0IHRoaW5rIG9mIGl0c2VsZiBhcyAiYWxtb3N0IGhhc2giIChkb2Vz bid0IGhhdmUgYHRvX2FgLCBgdmFsdWVzYCBhbmQgYFtdYCBtZXRob2RzKTsNCiAgKiBDYW4gaGF2 ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0 aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5l dygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6DQoNCmBgYHJ1YnkNCmNs YXNzIE15U2VydmljZQ0KICBTdWNjZXNzID0gU3RydWN0OjpWYWx1ZS5uZXcoOnJlc3VsdHMpDQog IE5vdEZvdW5kID0gU3RydWN0OjpWYWx1ZS5uZXcNCmVuZA0KYGBgDQoNCmBOb3RGb3VuZGAgaGVy ZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3Ig Y3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAj PHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3Vj Y2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9s dmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5 Lg0KDQoqKkNvbnNlbnN1cyB1cGRhdGUsIFNlcCAyMDIyKioNCg0KKiBBUEkgYWdyZWVkDQoqIE5h bWUgZm9yIHRoZSBjbGFzczogYERhdGFgDQoqIFtQdWxsIFJlcXVlc3RdKGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC82MzUzKQ0KKiBbU2FtcGxlIGRvY3VtZW50YXRpb24gcmVuZGVy aW5nXShodHRwczovL3p2ZXJvay5zcGFjZS9ydWJ5LXJkb2MvRGF0YS5odG1sKQ0KDQotLS1GaWxl cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdHJ1Y3RfdmFsdWUucGF0Y2ggKDE4 LjYgS0IpDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCgpVbnN1YnNjcmli ZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1YmplY3Q9dW5zdWJz Y3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21haWxtYW4vb3B0aW9u cy9ydWJ5LWNvcmU+Cg==