[ruby-core:109500] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"mame (Yusuke Endoh)" <noreply@...>
Date:
2022-08-16 15:18:02 UTC
List:
ruby-core #109500
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4KCgpA bm9idSBwcm9wb3NlZCBgRGF0YWAsIHdoaWNoIHVzZWQgdG8gYmUgYSBjbGFzcyBmb3IgZXh0ZW5z aW9uIGxpYnJhcnkgYXV0aG9ycywgYnV0IGRlcHJlY2F0ZWQgc2luY2UgcnVieSAyLjUgYW5kIHJl bW92ZWQgc2luY2UgMy4wLiBXZSBtaWdodCByZXVzZSBpdCBub3cuCgpTdW1tYXJpc2UgdGhlIHBy b3Bvc2VkIG5hbWUgY2FuZGlkYXRlczoKCiogU3RydWN0OjpWYWx1ZQoqIEltbXV0YWJsZVN0cnVk Y3QKKiBGcm96ZW5TdHJ1Y3QKKiBVbml0CiogSXRlbQoqIEJveAoqIFNpbXBsZVN0cnVjdAoqIFBs YWluU3RydWN0CiogQmFzaWNTdHJ1Y3QKKiBWYWx1ZUNsYXNzIChwcm92aWRlZCBieSB2YWx1ZXMg Z2VtPykKKiBWYWx1ZSAocHJvdmlkZWQgYnkgdmFsdWVzIGdlbSkKKiBEYXRhCgotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE2MTIyOiBTdHJ1Y3Q6OlZh bHVlOiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9iamVjdApodHRwczovL2J1Z3MucnVieS1sYW5n Lm9yZy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk4NjY4CgoqIEF1dGhvcjogenZlcm9rIChWaWN0b3Ig U2hlcGVsZXYpCiogU3RhdHVzOiBGZWVkYmFjawoqIFByaW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNl ZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRw czovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEg RW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGgg dGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJl c2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBh cmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3Rz IGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5w dXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dh cmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJv Z3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJp ZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXSho dHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5 IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2Qt dmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlv dXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0 cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVs aWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4g dHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZy YW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHks IGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMg Y291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVu b3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2Jq ZWN0LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBi eSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBo YW5kLCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMg YHRvX2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11g IGFuZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVz IHRoZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBk dWNrLXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dz IHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXco OnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3Vt ZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVz dWx0XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykK CkFycmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScp XSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJn MiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1 bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29t ZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0 IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3Ms IHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29s bGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0 IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4KCioqQ29uY3JldGUgcHJvcG9zYWwqKgoKKiBDbGFzcyBu YW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBT dHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRl cm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVj dGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBW YWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUg dGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dp bmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25s eSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxlOwogICog RG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0 b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1i ZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1s ZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3Qp IHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQog IFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVj dDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmpl Y3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVk IHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFu ZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29k ZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJp YnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRl ZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2su Z2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0t IApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1Ynkt Y29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9s aXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K