[ruby-core:109883] [Ruby master Feature#16122] Data: simple immutable value object
From:
"nobu (Nobuyoshi Nakada)" <noreply@...>
Date:
2022-09-11 02:54:01 UTC
List:
ruby-core #109883
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku CgoKenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpIHdyb3RlIGluICNub3RlLTY4Ogo+IFB1bGwgcmVx dWVzdDogaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzYzNTMKClZlcnkgbmljZS4K CkkgZG9uJ3QgdGhpbmsgYGtleXdvcmRfaW5pdGAgYW5kICJuYW1pbmcgYXMgdGhlIGZpcnN0IGFy Z3VtZW50IgpmZWF0dXJlcyBhcmUgbmVlZGVkIGZvciBuZXcgYERhdGFgLiAgU28sIEkgZ3Vlc3Mg dGhhdCBzcGxpdHRpbmcgdGhlCmByYl9zdHJ1Y3Rfc19kZWZgIGZ1bmN0aW9uIHJhdGhlciB0aGFu IGV4dHJhY3RpbmcgaXQgdG8KYGRlZmluZV9zdHJ1Y3RgIHdpdGggYSBib29sIGZsYWcuCgoKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxNjEyMjogRGF0 YTogc2ltcGxlIGltbXV0YWJsZSB2YWx1ZSBvYmplY3QKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5v cmcvaXNzdWVzLzE2MTIyI2NoYW5nZS05OTEyNAoKKiBBdXRob3I6IHp2ZXJvayAoVmljdG9yIFNo ZXBlbGV2KQoqIFN0YXR1czogQXNzaWduZWQKKiBQcmlvcml0eTogTm9ybWFsCiogQXNzaWduZWU6 IHp2ZXJvayAoVmljdG9yIFNoZXBlbGV2KQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCioqVmFsdWUgT2JqZWN0KiogaXMgYSB1c2VmdWwgY29uY2VwdCwgaW50cm9kdWNl ZCBieSBNYXJ0aW4gRm93bGVyIChbaGlzIHBvc3RdKGh0dHBzOi8vbWFydGluZm93bGVyLmNvbS9i bGlraS9WYWx1ZU9iamVjdC5odG1sKSwgW1dpa2lwZWRpYSBFbnRyeV0oaHR0cHM6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvVmFsdWVfb2JqZWN0KSkgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRp ZXMgKHNpbXBsaWZ5aW5nIHRoZSBpZGVhKToKCiogcmVwcmVzZW50aW5nIHNvbWUgcmVsYXRpdmVs eSBzaW1wbGUgZGF0YTsKKiBpbW11dGFibGU7CiogY29tcGFyZWQgYnkgdHlwZSAmIHZhbHVlOwoq IG5pY2VseSByZXByZXNlbnRlZC4KClZhbHVlIG9iamVjdHMgYXJlIHN1cGVyLXVzZWZ1bCBlc3Bl Y2lhbGx5IGZvciBkZWZpbmluZyBBUElzLCB0aGVpciBpbnB1dC9yZXR1cm4gdmFsdWVzLiBSZWNl bnRseSwgdGhlcmUgd2VyZSBzb21lIG1vdmVtZW50IHRvd2FyZHMgdXNpbmcgbW9yZSBpbW11dGFi aWxpdHktZnJpZW5kbHkgYXBwcm9hY2ggaW4gUnVieSBwcm9ncmFtbWluZywgbGVhZGluZyB0byBj cmVhdGluZyBzZXZlcmFsIGRpc2N1c3Npb25zL2xpYnJhcmllcyB3aXRoIHZhbHVlIG9iamVjdHMu IEZvciBleGFtcGxlLCBbVG9tIERhbGxpbmcncyBnZW1dKGh0dHBzOi8vZ2l0aHViLmNvbS90b21k YWxsaW5nL3ZhbHVlX3NlbWFudGljcyksIFtHb29kIFJ1YnkgVmFsdWUgb2JqZWN0IGNvbnZlbnRp b25dKGh0dHBzOi8vZ2l0aHViLmNvbS96dmVyb2svZ29vZC12YWx1ZS1vYmplY3QpIChkaXNjbGFp bWVyOiB0aGUgbGF0dGVyIGlzIG1haW50YWluZWQgYnkgeW91cnMgdHJ1bHkpLgoKSSBwcm9wb3Nl IHRvIGludHJvZHVjZSAqKm5hdGl2ZSB2YWx1ZSBvYmplY3RzKiogdG8gUnVieSBhcyBhIGNvcmUg Y2xhc3MuCgoqKldoeSBub3QgYSBnZW0/KioKCiogSSBiZWxpZXZlIHRoYXQgY29uY2VwdCBpcyB0 aGF0IHNpbXBsZSwgdGhhdCBub2JvZHkgKndpbGwgZXZlbiB0cnkqIHRvIHVzZSBhIGdlbSBmb3Ig cmVwcmVzZW50aW5nIGl0IHdpdGgsIHVubGVzcyB0aGUgZnJhbWV3b3JrL2xpYnJhcnkgdXNlZCBh bHJlYWR5IHByb3ZpZGVzIG9uZS4KKiBQb3RlbnRpYWxseSwgYSBsb3Qgb2Ygc3RhbmRhcmQgbGli cmFyeSAoYW5kIHByb2JhYmx5IGV2ZW4gY29yZSkgQVBJcyBjb3VsZCBiZW5lZml0IGZyb20gdGhl IGNvbmNlcHQuCgoqKldoeSBgU3RydWN0YCBpcyBub3QgZW5vdWdoKioKCkNvcmUgYFN0cnVjdGAg Y2xhc3MgaXMgInNvbWV3aGF0IGFsaWtlIiB2YWx1ZS1vYmplY3QsIGFuZCBmcmVxdWVudGx5IHVz ZWQgaW5zdGVhZCBvZiBvbmU6IGl0IGlzIGNvbXBhcmVkIGJ5IHZhbHVlIGFuZCBjb25zaXN0cyBv ZiBzaW1wbGUgYXR0cmlidXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGBTdHJ1Y3RgIGlzOgoqIG11 dGFibGU7CiogY29sbGVjdGlvbi1hbGlrZSAoZGVmaW5lcyBgdG9fYWAgYW5kIGlzIGBFbnVtZXJh YmxlYCk7CiogZGljdGlvbmFyeS1hbGlrZSAoaGFzIGBbXWAgYW5kIGAudmFsdWVzYCBtZXRob2Rz KS4KClRoZSBhYm92ZSB0cmFpdHMgc29tZWhvdyBlcm9kZXMgdGhlIHNlbWFudGljcywgbWFraW5n IGNvZGUgbGVzcyBjbGVhciwgZXNwZWNpYWxseSB3aGVuIGR1Y2stdHlwaW5nIGlzIHVzZWQuCgpG b3IgZXhhbXBsZSwgdGhpcyBjb2RlIHNuaXBwZXQgc2hvd3Mgd2h5IGB0b19hYCBpcyBwcm9ibGVt YXRpYzoKCmBgYHJ1YnkKUmVzdWx0ID0gU3RydWN0Lm5ldyg6c3VjY2VzcywgOmNvbnRlbnQpCgoj IE5vdywgaW1hZ2luZSB0aGF0IG90aGVyIGNvZGUgYXNzdW1lcyBgZGF0YWAgY291bGQgYmUgZWl0 aGVyIFJlc3VsdCwgb3IgW1Jlc3VsdCwgUmVzdWx0LCBSZXN1bHRdCiMgU28sIC4uLgoKZGF0YSA9 IFJlc3VsdC5uZXcodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKQoKQXJyYXkoZGF0YSkgIyA9PiBleHBl Y3RlZCBbUmVzdWx0KHRydWUsICdpdCBpcyBhd2Vzb21lJyldLCBnb3QgW3RydWUsICdpdCBpcyBh d2Vzb21lJ10KCiMgb3IuLi4KZGVmIGZvbyhhcmcxLCBhcmcyID0gbmlsKQpwIGFyZzEsIGFyZzIK ZW5kCgpmb28oKmRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29t ZScpLCBuaWxdLCBnb3QgW3RydWUsICdpdCBpcyBhd2Vzb21lJ10KYGBgCgpIYXZpbmcgYFtdYCBh bmQgYGVhY2hgIGRlZmluZWQgb24gc29tZXRoaW5nIHRoYXQgaXMgdGhvdWdodCBhcyAianVzdCB2 YWx1ZSIgY2FuIGFsc28gbGVhZCB0byBzdWJ0bGUgYnVncywgd2hlbiBzb21lIG1ldGhvZCBjaGVj a3MgImlmIHRoZSByZWNlaXZlZCBhcmd1bWVudCBpcyBjb2xsZWN0aW9uLWFsaWtlIiwgYW5kIHZh bHVlIG9iamVjdCdzIGF1dGhvciBkb2Vzbid0IHRob3VnaHQgb2YgaXQgYXMgYSBjb2xsZWN0aW9u LgoKKipDb25jcmV0ZSBwcm9wb3NhbCoqCgoqIENsYXNzIG5hbWU6IGBTdHJ1Y3Q6OlZhbHVlYDog bG90IG9mIFJ1Ynlpc3RzIGFyZSB1c2VkIHRvIGhhdmUgYFN0cnVjdGAgYXMgYSBxdWljayAic29t ZXRoaW5nLWxpa2UtdmFsdWUiIGRyb3AtaW4sIHNvIGFsdGVybmF0aXZlLCBtb3JlIHN0cmljdCBp bXBsZW1lbnRhdGlvbiwgYmVpbmcgcGFydCBvZiBgU3RydWN0YCBBUEksIHdpbGwgYmUgcXVpdGUg ZGlzY292ZXJhYmxlOyAqYWx0ZXJuYXRpdmU6IGp1c3QgYFZhbHVlYCoKKiBDbGFzcyBBUEkgaXMg Y29weWluZyBgU3RydWN0YHMgb25lIChtb3N0IG9mIHRoZSB0aW1lIC0tIGV2ZW4gcmV1c2VzIHRo ZSBpbXBsZW1lbnRhdGlvbiksIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zICoobm90ZTog dGhlIGltbXV0YWJpbGl0eSBpcyAqKm5vdCoqIHRoZSBvbmx5IGRpZmZlcmVuY2UpKjoKICAqIE5v dCBgRW51bWVyYWJsZWA7CiAgKiBJbW11dGFibGU7CiAgKiBEb2Vzbid0IHRoaW5rIG9mIGl0c2Vs ZiBhcyAiYWxtb3N0IGhhc2giIChkb2Vzbid0IGhhdmUgYHRvX2FgLCBgdmFsdWVzYCBhbmQgYFtd YCBtZXRob2RzKTsKICAqIENhbiBoYXZlIGVtcHR5IG1lbWJlcnMgbGlzdCAoZnVuIGZhY3Q6IGBT dHJ1Y3QubmV3KCdGb28nKWAgY3JlYXRpbmcgbWVtYmVyLWxlc3MgYFN0cnVjdDo6Rm9vYCwgaXMg YWxsb3dlZCwgYnV0IGBTdHJ1Y3QubmV3KClgIGlzIG5vdCkgdG8gYWxsb3cgdXNhZ2UgcGF0dGVy bnMgbGlrZToKCmBgYHJ1YnkKY2xhc3MgTXlTZXJ2aWNlCiAgU3VjY2VzcyA9IFN0cnVjdDo6VmFs dWUubmV3KDpyZXN1bHRzKQogIE5vdEZvdW5kID0gU3RydWN0OjpWYWx1ZS5uZXcKZW5kCmBgYAoK YE5vdEZvdW5kYCBoZXJlLCB1bmxpa2UsIHNheSwgYE9iamVjdC5uZXcuZnJlZXplYCAoYW5vdGhl ciBwYXR0ZXJuIGZvciBjcmVhdGluZyAiZW1wdHkgdHlwZWQgdmFsdWUgb2JqZWN0IiksIGhhcyBu aWNlIGluc3BlY3QgYCM8dmFsdWUgTm90Rm91bmQ+YCwgYW5kIGNyZWF0ZWQgY29uc2lzdGVudGx5 IHdpdGggdGhlIGBTdWNjZXNzYCwgbWFraW5nIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuIEFuZCBp ZiBpdCB3aWxsIGV2b2x2ZSB0byBoYXZlIHNvbWUgYXR0cmlidXRlcywgdGhlIGNvZGUgY2hhbmdl IHdvdWxkIGJlIGVhc3kuCgoqKlBhdGNoIGlzIHByb3ZpZGVkKioKCltTYW1wbGUgcmVuZGVyZWQg UkRvYyBkb2N1bWVudGF0aW9uXShodHRwczovL3p2ZXJvay5naXRodWIuaW8vcnVieS1yZG9jL1N0 cnVjdC1WYWx1ZS5odG1sKQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpzdHJ1Y3RfdmFsdWUucGF0Y2ggKDE4LjYgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxh bmcub3JnLwoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5n Lm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dp LWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=