[ruby-core:110072] [Ruby master Feature#16122] Data: simple immutable value object
From:
"ioquatix (Samuel Williams)" <noreply@...>
Date:
2022-09-26 00:39:24 UTC
List:
ruby-core #110072
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgaW9xdWF0aXggKFNhbXVlbCBXaWxsaWFt cykuCgoKSSdkIGxpa2UgdG8ga25vdyBob3cgY29tcGxpY2F0ZWQgaXQgd291bGQgYmUgdG8gc3Vw cG9ydCBhbiBpbnRlcmZhY2UgbGlrZSB0aGlzOgoKYGBgCkhlYWRlciA9IERhdGEuZGVmaW5lKDp0 eXBlLCA6bGVuZ3RoKQoKIyAuLi4KYnVmZmVyID0gSU86OkJ1ZmZlci4uLgpoZWFkZXIgPSBIZWFk ZXIubmV3CgpidWZmZXIudW5wYWNrX2ludG8oaGVhZGVyLCA6VTE2LCA6VTMyKQojIGludGVybmFs bHksIGNhbGwgcmJfaXZfc2V0KGhlYWRlciwgMCwgdmFsdWUpOyByYl9pdl9zZXQoaGVhZGVyLCAx LCB2YWx1ZSkKYGBgCgpXaGF0IEknbSBhc2tpbmcgZm9yLCBpcyBmb3Igc29tZSBraW5kcyBvZiBv YmplY3RzLCBjYW4gd2UgY29uc2lkZXIgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgaW5kZXhlZCBmb3Ig ZWZmaWNpZW50bHkgd3JpdGluZyBpbnRvIHRoZW0gaW4gb3JkZXI/CgpJZiBzbywgY2FuIHdlIGV4 cG9zZSB0aGF0IGludGVyZmFjZSwgZS5nLiBgcmJfaXZfc2V0X2luZGV4ZWQoVkFMVUUgb2JqZWN0 LCBpbnQgaW5kZXgsIFZBTFVFIHZhbHVlKWAgb3Igc29tZXRoaW5nLgoKRm9yIG9iamVjdHMgdGhh dCBkb24ndCBzdXBwb3J0IGl0LCByYWlzaW5nIGFuIGV4Y2VwdGlvbiB3b3VsZCBiZSBmaW5lLiBJ IGltYWdpbmUsIGJvdGggU3RydWN0IGFuZCBEYXRhIGNhbiBzdXBwb3J0IGl0LgoKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxNjEyMjogRGF0YTogc2lt cGxlIGltbXV0YWJsZSB2YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNz dWVzLzE2MTIyI2NoYW5nZS05OTMyMwoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2 KQoqIFN0YXR1czogQXNzaWduZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6IHp2ZXJv ayAoVmljdG9yIFNoZXBlbGV2KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiMjIEludHJvIChvcmlnaW5hbCB0aGVvcmV0aWNhbCBwYXJ0IG9mIHRoZSBwcm9wb3NhbCkK CioqVmFsdWUgT2JqZWN0KiogaXMgYSB1c2VmdWwgY29uY2VwdCwgaW50cm9kdWNlZCBieSBNYXJ0 aW4gRm93bGVyIChbaGlzIHBvc3RdKGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9ibGlraS9WYWx1 ZU9iamVjdC5odG1sKSwgW1dpa2lwZWRpYSBFbnRyeV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3Jn L3dpa2kvVmFsdWVfb2JqZWN0KSkgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgKHNpbXBs aWZ5aW5nIHRoZSBpZGVhKToKCiogcmVwcmVzZW50aW5nIHNvbWUgcmVsYXRpdmVseSBzaW1wbGUg ZGF0YTsKKiBpbW11dGFibGU7CiogY29tcGFyZWQgYnkgdHlwZSAmIHZhbHVlOwoqIG5pY2VseSBy ZXByZXNlbnRlZC4KClZhbHVlIG9iamVjdHMgYXJlIHN1cGVyLXVzZWZ1bCBlc3BlY2lhbGx5IGZv ciBkZWZpbmluZyBBUElzLCB0aGVpciBpbnB1dC9yZXR1cm4gdmFsdWVzLiBSZWNlbnRseSwgdGhl cmUgd2VyZSBzb21lIG1vdmVtZW50IHRvd2FyZHMgdXNpbmcgbW9yZSBpbW11dGFiaWxpdHktZnJp ZW5kbHkgYXBwcm9hY2ggaW4gUnVieSBwcm9ncmFtbWluZywgbGVhZGluZyB0byBjcmVhdGluZyBz ZXZlcmFsIGRpc2N1c3Npb25zL2xpYnJhcmllcyB3aXRoIHZhbHVlIG9iamVjdHMuIEZvciBleGFt cGxlLCBbVG9tIERhbGxpbmcncyBnZW1dKGh0dHBzOi8vZ2l0aHViLmNvbS90b21kYWxsaW5nL3Zh bHVlX3NlbWFudGljcyksIFtHb29kIFJ1YnkgVmFsdWUgb2JqZWN0IGNvbnZlbnRpb25dKGh0dHBz Oi8vZ2l0aHViLmNvbS96dmVyb2svZ29vZC12YWx1ZS1vYmplY3QpIChkaXNjbGFpbWVyOiB0aGUg bGF0dGVyIGlzIG1haW50YWluZWQgYnkgeW91cnMgdHJ1bHkpLgoKSSBwcm9wb3NlIHRvIGludHJv ZHVjZSAqKm5hdGl2ZSB2YWx1ZSBvYmplY3RzKiogdG8gUnVieSBhcyBhIGNvcmUgY2xhc3MuCgoq KldoeSBub3QgYSBnZW0/KioKCiogSSBiZWxpZXZlIHRoYXQgY29uY2VwdCBpcyB0aGF0IHNpbXBs ZSwgdGhhdCBub2JvZHkgKndpbGwgZXZlbiB0cnkqIHRvIHVzZSBhIGdlbSBmb3IgcmVwcmVzZW50 aW5nIGl0IHdpdGgsIHVubGVzcyB0aGUgZnJhbWV3b3JrL2xpYnJhcnkgdXNlZCBhbHJlYWR5IHBy b3ZpZGVzIG9uZS4KKiBQb3RlbnRpYWxseSwgYSBsb3Qgb2Ygc3RhbmRhcmQgbGlicmFyeSAoYW5k IHByb2JhYmx5IGV2ZW4gY29yZSkgQVBJcyBjb3VsZCBiZW5lZml0IGZyb20gdGhlIGNvbmNlcHQu CgoqKldoeSBgU3RydWN0YCBpcyBub3QgZW5vdWdoKioKCkNvcmUgYFN0cnVjdGAgY2xhc3MgaXMg InNvbWV3aGF0IGFsaWtlIiB2YWx1ZS1vYmplY3QsIGFuZCBmcmVxdWVudGx5IHVzZWQgaW5zdGVh ZCBvZiBvbmU6IGl0IGlzIGNvbXBhcmVkIGJ5IHZhbHVlIGFuZCBjb25zaXN0cyBvZiBzaW1wbGUg YXR0cmlidXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGBTdHJ1Y3RgIGlzOgoqIG11dGFibGU7Ciog Y29sbGVjdGlvbi1hbGlrZSAoZGVmaW5lcyBgdG9fYWAgYW5kIGlzIGBFbnVtZXJhYmxlYCk7Ciog ZGljdGlvbmFyeS1hbGlrZSAoaGFzIGBbXWAgYW5kIGAudmFsdWVzYCBtZXRob2RzKS4KClRoZSBh Ym92ZSB0cmFpdHMgc29tZWhvdyBlcm9kZXMgdGhlIHNlbWFudGljcywgbWFraW5nIGNvZGUgbGVz cyBjbGVhciwgZXNwZWNpYWxseSB3aGVuIGR1Y2stdHlwaW5nIGlzIHVzZWQuCgpGb3IgZXhhbXBs ZSwgdGhpcyBjb2RlIHNuaXBwZXQgc2hvd3Mgd2h5IGB0b19hYCBpcyBwcm9ibGVtYXRpYzoKCmBg YHJ1YnkKUmVzdWx0ID0gU3RydWN0Lm5ldyg6c3VjY2VzcywgOmNvbnRlbnQpCgojIE5vdywgaW1h Z2luZSB0aGF0IG90aGVyIGNvZGUgYXNzdW1lcyBgZGF0YWAgY291bGQgYmUgZWl0aGVyIFJlc3Vs dCwgb3IgW1Jlc3VsdCwgUmVzdWx0LCBSZXN1bHRdCiMgU28sIC4uLgoKZGF0YSA9IFJlc3VsdC5u ZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKQoKQXJyYXkoZGF0YSkgIyA9PiBleHBlY3RlZCBbUmVz dWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyldLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10K CiMgb3IuLi4KZGVmIGZvbyhhcmcxLCBhcmcyID0gbmlsKQpwIGFyZzEsIGFyZzIKZW5kCgpmb28o KmRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpLCBuaWxd LCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KYGBgCgpIYXZpbmcgYFtdYCBhbmQgYGVhY2hg IGRlZmluZWQgb24gc29tZXRoaW5nIHRoYXQgaXMgdGhvdWdodCBhcyAianVzdCB2YWx1ZSIgY2Fu IGFsc28gbGVhZCB0byBzdWJ0bGUgYnVncywgd2hlbiBzb21lIG1ldGhvZCBjaGVja3MgImlmIHRo ZSByZWNlaXZlZCBhcmd1bWVudCBpcyBjb2xsZWN0aW9uLWFsaWtlIiwgYW5kIHZhbHVlIG9iamVj dCdzIGF1dGhvciBkb2Vzbid0IHRob3VnaHQgb2YgaXQgYXMgYSBjb2xsZWN0aW9uLgoKIyMgYERh dGFgIGNsYXNzOiBjb25zZW5zdXMgcHJvcG9zYWwvaW1wbGVtZW50YXRpb24sIFNlcCAyMDIyCgoq IE5hbWU6IGBEYXRhYAoqIFBSOiBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjM1 MwoqIEV4YW1wbGUgZG9jcyByZW5kZXJpbmc6IGh0dHBzOi8venZlcm9rLnNwYWNlL3J1YnktcmRv Yy9EYXRhLmh0bWwKKiBGdWxsIEFQSToKICAqIGBEYXRhOjpkZWZpbmVgIGNyZWF0ZXMgYSBuZXcg RGF0YSBjbGFzczsgYWNjZXB0cyBvbmx5IHN5bWJvbHMgKG5vIGBrZXl3b3JkX2luaXQ6YCwgbm8g ImZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjbGFzcyBuYW1lIiBsaWtlIHRoZSBgU3RydWN0YCBoYWQp CiAgKiBgPGRhdGFfY2xhc3M+OjptZW1iZXJzYDogbGlzdCBvZiBtZW1iZXIgbmFtZXMKICAqIGA8 ZGF0YV9jbGFzcz46Om5ld2A6IGFjY2VwdHMgZWl0aGVyIGtleXdvcmQgb3IgcG9zaXRpb25hbCBh cmd1bWVudHMgKGJ1dCBub3QgbWl4KTsgY29udmVydHMgYWxsIG9mIHRoZSB0byBrZXl3b3JkIGFy Z3M7IHJhaXNlcyBgQXJndW1lbnRFcnJvcmAgaWYgdGhlcmUgYXJlICoqdG9vIG1hbnkgcG9zaXRp b25hbCBhcmd1bWVudHMqKgogICogYCNpbml0aWFsaXplYDogYWNjZXB0cyBvbmx5IGtleXdvcmQg YXJndW1lbnRzOyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByYWlzZXMgYEFyZ3VtZW50RXJy b3JgIG9uIG1pc3Npbmcgb3IgZXh0cmEgYXJndW1lbnRzOyBpdCBpcyBlYXN5IHRvIHJlZGVmaW5l IGBpbml0aWFsaXplYCB0byBwcm92aWRlIGRlZmF1bHRzIG9yIGhhbmRsZSBleHRyYSBhcmdzLgog ICogYCM9PWAKICAqIGAjZXFsP2AKICAqIGAjaW5zcGVjdGAvYCN0b19zYCAoc2FtZSByZXByZXNl bnRhdGlvbikKICAqIGAjZGVjb25zdHJ1Y3RgCiAgKiBgI2RlY29uc3RydWN0X2tleXNgCiAgKiBg I2hhc2hgCiAgKiBgI21lbWJlcnNgCiAgKiBgI3RvX2hgCgojIyBIaXN0b3JpY2FsIG9yaWdpbmFs IHByb3Bvc2FsCgoqIENsYXNzIG5hbWU6IGBTdHJ1Y3Q6OlZhbHVlYDogbG90IG9mIFJ1Ynlpc3Rz IGFyZSB1c2VkIHRvIGhhdmUgYFN0cnVjdGAgYXMgYSBxdWljayAic29tZXRoaW5nLWxpa2UtdmFs dWUiIGRyb3AtaW4sIHNvIGFsdGVybmF0aXZlLCBtb3JlIHN0cmljdCBpbXBsZW1lbnRhdGlvbiwg YmVpbmcgcGFydCBvZiBgU3RydWN0YCBBUEksIHdpbGwgYmUgcXVpdGUgZGlzY292ZXJhYmxlOyAq YWx0ZXJuYXRpdmU6IGp1c3QgYFZhbHVlYCoKKiBDbGFzcyBBUEkgaXMgY29weWluZyBgU3RydWN0 YHMgb25lIChtb3N0IG9mIHRoZSB0aW1lIC0tIGV2ZW4gcmV1c2VzIHRoZSBpbXBsZW1lbnRhdGlv biksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zICoobm90ZTogdGhlIGltbXV0YWJpbGl0 eSBpcyAqKm5vdCoqIHRoZSBvbmx5IGRpZmZlcmVuY2UpKjoKICAqIE5vdCBgRW51bWVyYWJsZWA7 CiAgKiBJbW11dGFibGU7CiAgKiBEb2Vzbid0IHRoaW5rIG9mIGl0c2VsZiBhcyAiYWxtb3N0IGhh c2giIChkb2Vzbid0IGhhdmUgYHRvX2FgLCBgdmFsdWVzYCBhbmQgYFtdYCBtZXRob2RzKTsKICAq IENhbiBoYXZlIGVtcHR5IG1lbWJlcnMgbGlzdCAoZnVuIGZhY3Q6IGBTdHJ1Y3QubmV3KCdGb28n KWAgY3JlYXRpbmcgbWVtYmVyLWxlc3MgYFN0cnVjdDo6Rm9vYCwgaXMgYWxsb3dlZCwgYnV0IGBT dHJ1Y3QubmV3KClgIGlzIG5vdCkgdG8gYWxsb3cgdXNhZ2UgcGF0dGVybnMgbGlrZToKCmBgYHJ1 YnkKY2xhc3MgTXlTZXJ2aWNlCiAgU3VjY2VzcyA9IFN0cnVjdDo6VmFsdWUubmV3KDpyZXN1bHRz KQogIE5vdEZvdW5kID0gU3RydWN0OjpWYWx1ZS5uZXcKZW5kCmBgYAoKYE5vdEZvdW5kYCBoZXJl LCB1bmxpa2UsIHNheSwgYE9iamVjdC5uZXcuZnJlZXplYCAoYW5vdGhlciBwYXR0ZXJuIGZvciBj cmVhdGluZyAiZW1wdHkgdHlwZWQgdmFsdWUgb2JqZWN0IiksIGhhcyBuaWNlIGluc3BlY3QgYCM8 dmFsdWUgTm90Rm91bmQ+YCwgYW5kIGNyZWF0ZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIGBTdWNj ZXNzYCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuIEFuZCBpZiBpdCB3aWxsIGV2b2x2 ZSB0byBoYXZlIHNvbWUgYXR0cmlidXRlcywgdGhlIGNvZGUgY2hhbmdlIHdvdWxkIGJlIGVhc3ku CgoqKlBhdGNoIGlzIHByb3ZpZGVkKioKCltTYW1wbGUgcmVuZGVyZWQgUkRvYyBkb2N1bWVudGF0 aW9uXShodHRwczovL3p2ZXJvay5naXRodWIuaW8vcnVieS1yZG9jL1N0cnVjdC1WYWx1ZS5odG1s KQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdHJ1Y3RfdmFsdWUu cGF0Y2ggKDE4LjYgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwoKVW5zdWJz Y3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVu c3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29w dGlvbnMvcnVieS1jb3JlPgo=