[ruby-core:109816] [Ruby master Feature#16122] Data: simple immutable value object
From:
"RubyBugs (A Nonymous)" <noreply@...>
Date:
2022-09-01 16:04:48 UTC
List:
ruby-core #109816
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgUnVieUJ1Z3MgKEEgTm9ueW1vdXMpLg0K DQoNCioqMy4gS2V5d29yZCBhcmcgY29uc3RydWN0b3JzKioNCg0KQmVjYXVzZSBhIG5vbi1tdXRh dGluZyBjb3B5LXdpdGgtY2hhbmdlcyBzdWNoIGFzIGAjd2l0aGAgd2lsbCBuZWVkIHRvIHRha2Ug a2V5d29yZCBhcmd1bWVudHMgdG8gaW5kaWNhdGUgd2hpY2ggdmFsdWVzIHRvIGNoYW5nZSwgaXTi gJlzIHVzZWZ1bCB0byBwcm92aWRlIGEgY29uc3RydWN0b3IgZm9ybSB3aGljaCBhbHNvIGFjY2Vw dHMga2V5d29yZCBhcmd1bWVudHMNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KRmVhdHVyZSAjMTYxMjI6IERhdGE6IHNpbXBsZSBpbW11dGFibGUgdmFsdWUgb2Jq ZWN0DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk5MDU1 DQoNCiogQXV0aG9yOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxldikNCiogU3RhdHVzOiBBc3NpZ25l ZA0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFzc2lnbmVlOiB6dmVyb2sgKFZpY3RvciBTaGVwZWxl dikNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCioqVmFsdWUgT2Jq ZWN0KiogaXMgYSB1c2VmdWwgY29uY2VwdCwgaW50cm9kdWNlZCBieSBNYXJ0aW4gRm93bGVyIChb aGlzIHBvc3RdKGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9WYWx1ZU9iamVjdC5odG1s KSwgW1dpa2lwZWRpYSBFbnRyeV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFsdWVf b2JqZWN0KSkgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgKHNpbXBsaWZ5aW5nIHRoZSBp ZGVhKToNCg0KKiByZXByZXNlbnRpbmcgc29tZSByZWxhdGl2ZWx5IHNpbXBsZSBkYXRhOw0KKiBp bW11dGFibGU7DQoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsNCiogbmljZWx5IHJlcHJlc2Vu dGVkLg0KDQpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVm aW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdl cmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5 IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJh bCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwg W1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9z ZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dp dGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRl ciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4NCg0KSSBwcm9wb3NlIHRvIGludHJvZHVj ZSAqKm5hdGl2ZSB2YWx1ZSBvYmplY3RzKiogdG8gUnVieSBhcyBhIGNvcmUgY2xhc3MuDQoNCioq V2h5IG5vdCBhIGdlbT8qKg0KDQoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1w bGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2Vu dGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBw cm92aWRlcyBvbmUuDQoqIFBvdGVudGlhbGx5LCBhIGxvdCBvZiBzdGFuZGFyZCBsaWJyYXJ5IChh bmQgcHJvYmFibHkgZXZlbiBjb3JlKSBBUElzIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUgY29uY2Vw dC4NCg0KKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqDQoNCkNvcmUgYFN0cnVjdGAgY2xh c3MgaXMgInNvbWV3aGF0IGFsaWtlIiB2YWx1ZS1vYmplY3QsIGFuZCBmcmVxdWVudGx5IHVzZWQg aW5zdGVhZCBvZiBvbmU6IGl0IGlzIGNvbXBhcmVkIGJ5IHZhbHVlIGFuZCBjb25zaXN0cyBvZiBz aW1wbGUgYXR0cmlidXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGBTdHJ1Y3RgIGlzOg0KKiBtdXRh YmxlOw0KKiBjb2xsZWN0aW9uLWFsaWtlIChkZWZpbmVzIGB0b19hYCBhbmQgaXMgYEVudW1lcmFi bGVgKTsNCiogZGljdGlvbmFyeS1hbGlrZSAoaGFzIGBbXWAgYW5kIGAudmFsdWVzYCBtZXRob2Rz KS4NCg0KVGhlIGFib3ZlIHRyYWl0cyBzb21laG93IGVyb2RlcyB0aGUgc2VtYW50aWNzLCBtYWtp bmcgY29kZSBsZXNzIGNsZWFyLCBlc3BlY2lhbGx5IHdoZW4gZHVjay10eXBpbmcgaXMgdXNlZC4N Cg0KRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJv YmxlbWF0aWM6DQoNCmBgYHJ1YnkNClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250 ZW50KQ0KDQojIE5vdywgaW1hZ2luZSB0aGF0IG90aGVyIGNvZGUgYXNzdW1lcyBgZGF0YWAgY291 bGQgYmUgZWl0aGVyIFJlc3VsdCwgb3IgW1Jlc3VsdCwgUmVzdWx0LCBSZXN1bHRdDQojIFNvLCAu Li4NCg0KZGF0YSA9IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKQ0KDQpBcnJheShk YXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKV0sIGdvdCBb dHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnXQ0KDQojIG9yLi4uDQpkZWYgZm9vKGFyZzEsIGFyZzIgPSBu aWwpDQpwIGFyZzEsIGFyZzINCmVuZA0KDQpmb28oKmRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3Vs dCh0cnVlLCAnaXQgaXMgYXdlc29tZScpLCBuaWxdLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21l J10NCmBgYA0KDQpIYXZpbmcgYFtdYCBhbmQgYGVhY2hgIGRlZmluZWQgb24gc29tZXRoaW5nIHRo YXQgaXMgdGhvdWdodCBhcyAianVzdCB2YWx1ZSIgY2FuIGFsc28gbGVhZCB0byBzdWJ0bGUgYnVn cywgd2hlbiBzb21lIG1ldGhvZCBjaGVja3MgImlmIHRoZSByZWNlaXZlZCBhcmd1bWVudCBpcyBj b2xsZWN0aW9uLWFsaWtlIiwgYW5kIHZhbHVlIG9iamVjdCdzIGF1dGhvciBkb2Vzbid0IHRob3Vn aHQgb2YgaXQgYXMgYSBjb2xsZWN0aW9uLg0KDQoqKkNvbmNyZXRlIHByb3Bvc2FsKioNCg0KKiBD bGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBo YXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBz byBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2Yg YFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBq dXN0IGBWYWx1ZWAqDQoqIENsYXNzIEFQSSBpcyBjb3B5aW5nIGBTdHJ1Y3RgcyBvbmUgKG1vc3Qg b2YgdGhlIHRpbWUgLS0gZXZlbiByZXVzZXMgdGhlIGltcGxlbWVudGF0aW9uKSwgd2l0aCB0aGUg Zm9sbG93aW5nIGV4Y2VwdGlvbnMgKihub3RlOiB0aGUgaW1tdXRhYmlsaXR5IGlzICoqbm90Kiog dGhlIG9ubHkgZGlmZmVyZW5jZSkqOg0KICAqIE5vdCBgRW51bWVyYWJsZWA7DQogICogSW1tdXRh YmxlOw0KICAqIERvZXNuJ3QgdGhpbmsgb2YgaXRzZWxmIGFzICJhbG1vc3QgaGFzaCIgKGRvZXNu J3QgaGF2ZSBgdG9fYWAsIGB2YWx1ZXNgIGFuZCBgW11gIG1ldGhvZHMpOw0KICAqIENhbiBoYXZl IGVtcHR5IG1lbWJlcnMgbGlzdCAoZnVuIGZhY3Q6IGBTdHJ1Y3QubmV3KCdGb28nKWAgY3JlYXRp bmcgbWVtYmVyLWxlc3MgYFN0cnVjdDo6Rm9vYCwgaXMgYWxsb3dlZCwgYnV0IGBTdHJ1Y3QubmV3 KClgIGlzIG5vdCkgdG8gYWxsb3cgdXNhZ2UgcGF0dGVybnMgbGlrZToNCg0KYGBgcnVieQ0KY2xh c3MgTXlTZXJ2aWNlDQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykNCiAg Tm90Rm91bmQgPSBTdHJ1Y3Q6OlZhbHVlLm5ldw0KZW5kDQpgYGANCg0KYE5vdEZvdW5kYCBoZXJl LCB1bmxpa2UsIHNheSwgYE9iamVjdC5uZXcuZnJlZXplYCAoYW5vdGhlciBwYXR0ZXJuIGZvciBj cmVhdGluZyAiZW1wdHkgdHlwZWQgdmFsdWUgb2JqZWN0IiksIGhhcyBuaWNlIGluc3BlY3QgYCM8 dmFsdWUgTm90Rm91bmQ+YCwgYW5kIGNyZWF0ZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIGBTdWNj ZXNzYCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuIEFuZCBpZiBpdCB3aWxsIGV2b2x2 ZSB0byBoYXZlIHNvbWUgYXR0cmlidXRlcywgdGhlIGNvZGUgY2hhbmdlIHdvdWxkIGJlIGVhc3ku DQoNCioqUGF0Y2ggaXMgcHJvdmlkZWQqKg0KDQpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1l bnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUu aHRtbCkNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3RydWN0 X3ZhbHVlLnBhdGNoICgxOC42IEtCKQ0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvDQoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9y Zz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJp bi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=