[ruby-core:109587] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"Eregon (Benoit Daloze)" <noreply@...>
Date:
2022-08-20 10:31:15 UTC
List:
ruby-core #109587
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4K Cgo+IFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhlIG5ldyBjbGFzcyBpcyBpbW11dGFiaWxpdHksIG5v dCAiZnJvemVuIiwgbm90ICJwbGFpbiIsIG5vdCBzaW1wbGljaXR5OiBGcm96ZW5TdHJ1Y3QsIFNp bXBsZVN0cnVjdCwgUGxhaW5TdHJ1Y3QKCkltbXV0YWJsZSBBRkFJSyBtZWFucyAiZGVlcGx5IGZy b3plbiIsIHdoaWxlIGZyb3plbiBtZWFucyAic2hhbGxvdyBmcm96ZW4iICg9IGBLZXJuZWwjZnJl ZXplL2Zyb3plbj9gKS4KVGhpcyBuZXcgc3RydWN0LWxpa2UgY2xhc3Mgd2lsbCBub3QgZW5zdXJl IGV2ZXJ5IHZhbHVlIGlzIGltbXV0YWJsZSwgc28gaXQgd29uJ3QgZ3VhcmFudGVlIHRoZSBTdHJ1 Y3Q6OlZhbHVlIGluc3RhbmNlIGlzIGltbXV0YWJsZS4KU28gaW4gdGVybXMgb2YgZG9jdW1lbnRh dGlvbiBhbmQgc2VtYW50aWNzIHRoZSBuZXcgY2xhc3Mgd2lsbCBjcmVhdGUgZnJvemVuIGJ1dCBu b3QgaW1tdXRhYmxlIGluc3RhbmNlcy4KClJlZ2FyZGluZyB0aGUgbmFtZSwgSSBsaWtlIERhdGEg YXMgd2VsbC4KSWYgd2Ugd2FudCB0byBhdm9pZCB0aGUgY29uZnVzaW9uIG9mIGBEYXRhLm5ld2Ag cmV0dXJuaW5nIGEgY2xhc3MgYW5kIG5vdCBhbiBpbnN0YW5jZSBvZiBEYXRhLCB3ZSBjb3VsZCBo YXZlIGEgYW5vdGhlciBuYW1lIGZvciAiY3JlYXRlIGEgRGF0YSBzdWJjbGFzcyB3aXRoIHRoZXNl IGZpZWxkcyIsIG1heWJlIGBEYXRhLmZvcig6YSwgOmIpYCBvciBgRGF0YS5uZXdfY2xhc3MoOmEs IDpiKWAvYERhdGEubmV3X3N1YmNsYXNzKDphLCA6YilgIG9yIHNvLgpJIGhhdmUgc2VlbiBtYW55 IHBlb3BsZSBiZWluZyBjb25mdXNlZCB3aXRoIGBTdHJ1Y3QubmV3YCByZXR1cm5pbmcgYSBzdWJj bGFzcywgc28gSSB0aGluayBpdCBpcyBzb21ldGhpbmcgd29ydGggY29uc2lkZXJpbmcgZm9yIHRo ZSBuZXcgc3RydWN0LWxpa2UgY2xhc3MuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkZlYXR1cmUgIzE2MTIyOiBTdHJ1Y3Q6OlZhbHVlOiBzaW1wbGUgaW1tdXRhYmxl IHZhbHVlIG9iamVjdApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hh bmdlLTk4NzYyCgoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCiogU3RhdHVzOiBG ZWVkYmFjawoqIFByaW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoqKlZhbHVlIE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVj ZWQgYnkgTWFydGluIEZvd2xlciAoW2hpcyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20v Ymxpa2kvVmFsdWVPYmplY3QuaHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lr aXBlZGlhLm9yZy93aWtpL1ZhbHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0 aWVzIChzaW1wbGlmeWluZyB0aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZl bHkgc2ltcGxlIGRhdGE7CiogaW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsK KiBuaWNlbHkgcmVwcmVzZW50ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNw ZWNpYWxseSBmb3IgZGVmaW5pbmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVj ZW50bHksIHRoZXJlIHdlcmUgc29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRh YmlsaXR5LWZyaWVuZGx5IGFwcHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8g Y3JlYXRpbmcgc2V2ZXJhbCBkaXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3Rz LiBGb3IgZXhhbXBsZSwgW1RvbSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9t ZGFsbGluZy92YWx1ZV9zZW1hbnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50 aW9uXShodHRwczovL2dpdGh1Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xh aW1lcjogdGhlIGxhdHRlciBpcyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9z ZSB0byBpbnRyb2R1Y2UgKipuYXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3Jl IGNsYXNzLgoKKipXaHkgbm90IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMg dGhhdCBzaW1wbGUsIHRoYXQgbm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9y IHJlcHJlc2VudGluZyBpdCB3aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQg YWxyZWFkeSBwcm92aWRlcyBvbmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxp YnJhcnkgKGFuZCBwcm9iYWJseSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRo ZSBjb25jZXB0LgoKKipXaHkgYFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3Rg IGNsYXNzIGlzICJzb21ld2hhdCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1 c2VkIGluc3RlYWQgb2Ygb25lOiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMg b2Ygc2ltcGxlIGF0dHJpYnV0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBt dXRhYmxlOwoqIGNvbGxlY3Rpb24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVy YWJsZWApOwoqIGRpY3Rpb25hcnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9k cykuCgpUaGUgYWJvdmUgdHJhaXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2lu ZyBjb2RlIGxlc3MgY2xlYXIsIGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoK Rm9yIGV4YW1wbGUsIHRoaXMgY29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxl bWF0aWM6CgpgYGBydWJ5ClJlc3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoK IyBOb3csIGltYWdpbmUgdGhhdCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVp dGhlciBSZXN1bHQsIG9yIFtSZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEg PSBSZXN1bHQubmV3KHRydWUsICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhw ZWN0ZWQgW1Jlc3VsdCh0cnVlLCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMg YXdlc29tZSddCgojIG9yLi4uCmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcy CmVuZAoKZm9vKCpkYXRhKSAjID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNv bWUnKSwgbmlsXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAg YW5kIGBlYWNoYCBkZWZpbmVkIG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3Qg dmFsdWUiIGNhbiBhbHNvIGxlYWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hl Y2tzICJpZiB0aGUgcmVjZWl2ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2 YWx1ZSBvYmplY3QncyBhdXRob3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlv bi4KCioqQ29uY3JldGUgcHJvcG9zYWwqKgoKKiBDbGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6 IGxvdCBvZiBSdWJ5aXN0cyBhcmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNv bWV0aGluZy1saWtlLXZhbHVlIiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3Qg aW1wbGVtZW50YXRpb24sIGJlaW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRl IGRpc2NvdmVyYWJsZTsgKmFsdGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlz IGNvcHlpbmcgYFN0cnVjdGBzIG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0 aGUgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6 IHRoZSBpbW11dGFiaWxpdHkgaXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBO b3QgYEVudW1lcmFibGVgOwogICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGluayBvZiBpdHNl bGYgYXMgImFsbW9zdCBoYXNoIiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBb XWAgbWV0aG9kcyk7CiAgKiBDYW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBg U3RydWN0Lm5ldygnRm9vJylgIGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlz IGFsbG93ZWQsIGJ1dCBgU3RydWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRl cm5zIGxpa2U6CgpgYGBydWJ5CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZh bHVlLm5ldyg6cmVzdWx0cykKICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAK CmBOb3RGb3VuZGAgaGVyZSwgdW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3Ro ZXIgcGF0dGVybiBmb3IgY3JlYXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMg bmljZSBpbnNwZWN0IGAjPHZhbHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRs eSB3aXRoIHRoZSBgU3VjY2Vzc2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQg aWYgaXQgd2lsbCBldm9sdmUgdG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5n ZSB3b3VsZCBiZSBlYXN5LgoKKipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVk IFJEb2MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9T dHJ1Y3QtVmFsdWUuaHRtbCkKCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0Kc3RydWN0X3ZhbHVlLnBhdGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVieS1s YW5nLm9yZy8KClVuc3Vic2NyaWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFu Zy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2Nn aS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29yZT4K