[ruby-core:109568] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"mame (Yusuke Endoh)" <noreply@...>
Date:
2022-08-19 08:30:33 UTC
List:
ruby-core #109568
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWFtZSAoWXVzdWtlIEVuZG9oKS4KCgpU aGlzIGlzIG15IHBlcnNvbmFsIG9waW5pb24uIEkgdGhpbmsgYERhdGFgIGlzIGEgZ29vZCBjaG9p Y2Ugc2luY2UgdGhlcmUgYXJlIGZldyBjb21wYXRpYmlsaXR5IGlzc3VlcyBhdCB0aGlzIHRpbWUg ZGVzcGl0ZSB0aGUgc2hvcnQgYW5kIHNpbXBsZSBuYW1lLiBJZiB3ZSB3ZXJlIHRvIHVzZSBhIHNs aWdodGx5IGRpZmZlcmVudCB3b3JkIGZvciB0aGlzLCBzdWNoIGFzIGBEYXRhQ2xhc3NgLCBJIGRv bid0IHNlZSBtdWNoIHBvaW50IGluIGNob29zaW5nIHRoaXMgd29yZC4KCgotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUgIzE2MTIyOiBTdHJ1Y3Q6OlZhbHVl OiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9iamVjdApodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk4NzQxCgoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hl cGVsZXYpCiogU3RhdHVzOiBGZWVkYmFjawoqIFByaW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNlZnVs IGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRwczov L21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEgRW50 cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGggdGhl IGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2Vu dGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVk IGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFy ZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5wdXQv cmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dhcmRz IHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3Jh bW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJpZXMg d2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRw czovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZh bHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2QtdmFs dWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlvdXJz IHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoq IHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2 ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5 KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1l d29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHksIGEg bG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291 bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3Vn aCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0 LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2 YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5k LCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRv X2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFu ZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRo ZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNr LXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdo eSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1 Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMg YGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0 XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykKCkFy cmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwg Z290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJnMiA9 IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQo dHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSdd CmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0IGlz IHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdo ZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVj dGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0IG9m IGl0IGFzIGEgY29sbGVjdGlvbi4KCioqQ29uY3JldGUgcHJvcG9zYWwqKgoKKiBDbGFzcyBuYW1l OiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1 Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRlcm5h dGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAg QVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1 ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUgdGlt ZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dpbmcg ZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25seSBk aWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxlOwogICogRG9l c24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0b19h YCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJz IGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1sZXNz IGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3QpIHRv IGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQogIFN1 Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6 VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmplY3Qu bmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVkIHZh bHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBj cmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29kZSBt b3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0 ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRlZCoq CgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0 aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0tIApo dHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29y ZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0 cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K