[ruby-core:109577] [Ruby master Feature#16122] Struct::Value: simple immutable value object
From:
"zverok (Victor Shepelev)" <noreply@...>
Date:
2022-08-19 16:24:33 UTC
List:
ruby-core #109577
SXNzdWUgIzE2MTIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp LgoKClVtbSB3YWl0LgoKYERhdGFgIGlzIGFjdHVhbGx5IGEgW3BsdXJhbCBmb3JtXShodHRwczov L3d3dy5sZWFybmVuZ2xpc2guZGUvbWlzdGFrZXMvZGF0YS5odG1sKS4gV2hpbGUgdXNpbmcgaXQg YXMgc2luZ3VsYXIgaXMgYWNjZXB0YWJsZSBpbiBtb2Rlcm4gRW5nbGlzaCwgaW4gdGhpcyBjYXNl IHdlIGRvbid0IGhhdmUgYSBwbHVyYWwgZm9yIGl0LgoKSSBiZWxpZXZlIGl0IHdpbGwgYmUgYSBw cm9ibGVtIHdoaWxlIHdyaXRpbmcgZG9jcywgdHV0b3JpYWxzIGFuZCBkaXNjdXNzaW5nIHRoaW5n cy4gIkxldCdzIGRlZmluZSBhIGRhdGEgaGVyZS4gTm93LCBsZXQncyBkZWZpbmUgc29tZSBtb3Jl ID8/PyIgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZlYXR1cmUg IzE2MTIyOiBTdHJ1Y3Q6OlZhbHVlOiBzaW1wbGUgaW1tdXRhYmxlIHZhbHVlIG9iamVjdApodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTYxMjIjY2hhbmdlLTk4NzQ4CgoqIEF1dGhv cjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpCiogU3RhdHVzOiBGZWVkYmFjawoqIFByaW9yaXR5 OiBOb3JtYWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqKlZhbHVl IE9iamVjdCoqIGlzIGEgdXNlZnVsIGNvbmNlcHQsIGludHJvZHVjZWQgYnkgTWFydGluIEZvd2xl ciAoW2hpcyBwb3N0XShodHRwczovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVmFsdWVPYmplY3Qu aHRtbCksIFtXaWtpcGVkaWEgRW50cnldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Zh bHVlX29iamVjdCkpIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIChzaW1wbGlmeWluZyB0 aGUgaWRlYSk6CgoqIHJlcHJlc2VudGluZyBzb21lIHJlbGF0aXZlbHkgc2ltcGxlIGRhdGE7Ciog aW1tdXRhYmxlOwoqIGNvbXBhcmVkIGJ5IHR5cGUgJiB2YWx1ZTsKKiBuaWNlbHkgcmVwcmVzZW50 ZWQuCgpWYWx1ZSBvYmplY3RzIGFyZSBzdXBlci11c2VmdWwgZXNwZWNpYWxseSBmb3IgZGVmaW5p bmcgQVBJcywgdGhlaXIgaW5wdXQvcmV0dXJuIHZhbHVlcy4gUmVjZW50bHksIHRoZXJlIHdlcmUg c29tZSBtb3ZlbWVudCB0b3dhcmRzIHVzaW5nIG1vcmUgaW1tdXRhYmlsaXR5LWZyaWVuZGx5IGFw cHJvYWNoIGluIFJ1YnkgcHJvZ3JhbW1pbmcsIGxlYWRpbmcgdG8gY3JlYXRpbmcgc2V2ZXJhbCBk aXNjdXNzaW9ucy9saWJyYXJpZXMgd2l0aCB2YWx1ZSBvYmplY3RzLiBGb3IgZXhhbXBsZSwgW1Rv bSBEYWxsaW5nJ3MgZ2VtXShodHRwczovL2dpdGh1Yi5jb20vdG9tZGFsbGluZy92YWx1ZV9zZW1h bnRpY3MpLCBbR29vZCBSdWJ5IFZhbHVlIG9iamVjdCBjb252ZW50aW9uXShodHRwczovL2dpdGh1 Yi5jb20venZlcm9rL2dvb2QtdmFsdWUtb2JqZWN0KSAoZGlzY2xhaW1lcjogdGhlIGxhdHRlciBp cyBtYWludGFpbmVkIGJ5IHlvdXJzIHRydWx5KS4KCkkgcHJvcG9zZSB0byBpbnRyb2R1Y2UgKipu YXRpdmUgdmFsdWUgb2JqZWN0cyoqIHRvIFJ1YnkgYXMgYSBjb3JlIGNsYXNzLgoKKipXaHkgbm90 IGEgZ2VtPyoqCgoqIEkgYmVsaWV2ZSB0aGF0IGNvbmNlcHQgaXMgdGhhdCBzaW1wbGUsIHRoYXQg bm9ib2R5ICp3aWxsIGV2ZW4gdHJ5KiB0byB1c2UgYSBnZW0gZm9yIHJlcHJlc2VudGluZyBpdCB3 aXRoLCB1bmxlc3MgdGhlIGZyYW1ld29yay9saWJyYXJ5IHVzZWQgYWxyZWFkeSBwcm92aWRlcyBv bmUuCiogUG90ZW50aWFsbHksIGEgbG90IG9mIHN0YW5kYXJkIGxpYnJhcnkgKGFuZCBwcm9iYWJs eSBldmVuIGNvcmUpIEFQSXMgY291bGQgYmVuZWZpdCBmcm9tIHRoZSBjb25jZXB0LgoKKipXaHkg YFN0cnVjdGAgaXMgbm90IGVub3VnaCoqCgpDb3JlIGBTdHJ1Y3RgIGNsYXNzIGlzICJzb21ld2hh dCBhbGlrZSIgdmFsdWUtb2JqZWN0LCBhbmQgZnJlcXVlbnRseSB1c2VkIGluc3RlYWQgb2Ygb25l OiBpdCBpcyBjb21wYXJlZCBieSB2YWx1ZSBhbmQgY29uc2lzdHMgb2Ygc2ltcGxlIGF0dHJpYnV0 ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgU3RydWN0YCBpczoKKiBtdXRhYmxlOwoqIGNvbGxlY3Rp b24tYWxpa2UgKGRlZmluZXMgYHRvX2FgIGFuZCBpcyBgRW51bWVyYWJsZWApOwoqIGRpY3Rpb25h cnktYWxpa2UgKGhhcyBgW11gIGFuZCBgLnZhbHVlc2AgbWV0aG9kcykuCgpUaGUgYWJvdmUgdHJh aXRzIHNvbWVob3cgZXJvZGVzIHRoZSBzZW1hbnRpY3MsIG1ha2luZyBjb2RlIGxlc3MgY2xlYXIs IGVzcGVjaWFsbHkgd2hlbiBkdWNrLXR5cGluZyBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoaXMg Y29kZSBzbmlwcGV0IHNob3dzIHdoeSBgdG9fYWAgaXMgcHJvYmxlbWF0aWM6CgpgYGBydWJ5ClJl c3VsdCA9IFN0cnVjdC5uZXcoOnN1Y2Nlc3MsIDpjb250ZW50KQoKIyBOb3csIGltYWdpbmUgdGhh dCBvdGhlciBjb2RlIGFzc3VtZXMgYGRhdGFgIGNvdWxkIGJlIGVpdGhlciBSZXN1bHQsIG9yIFtS ZXN1bHQsIFJlc3VsdCwgUmVzdWx0XQojIFNvLCAuLi4KCmRhdGEgPSBSZXN1bHQubmV3KHRydWUs ICdpdCBpcyBhd2Vzb21lJykKCkFycmF5KGRhdGEpICMgPT4gZXhwZWN0ZWQgW1Jlc3VsdCh0cnVl LCAnaXQgaXMgYXdlc29tZScpXSwgZ290IFt0cnVlLCAnaXQgaXMgYXdlc29tZSddCgojIG9yLi4u CmRlZiBmb28oYXJnMSwgYXJnMiA9IG5pbCkKcCBhcmcxLCBhcmcyCmVuZAoKZm9vKCpkYXRhKSAj ID0+IGV4cGVjdGVkIFtSZXN1bHQodHJ1ZSwgJ2l0IGlzIGF3ZXNvbWUnKSwgbmlsXSwgZ290IFt0 cnVlLCAnaXQgaXMgYXdlc29tZSddCmBgYAoKSGF2aW5nIGBbXWAgYW5kIGBlYWNoYCBkZWZpbmVk IG9uIHNvbWV0aGluZyB0aGF0IGlzIHRob3VnaHQgYXMgImp1c3QgdmFsdWUiIGNhbiBhbHNvIGxl YWQgdG8gc3VidGxlIGJ1Z3MsIHdoZW4gc29tZSBtZXRob2QgY2hlY2tzICJpZiB0aGUgcmVjZWl2 ZWQgYXJndW1lbnQgaXMgY29sbGVjdGlvbi1hbGlrZSIsIGFuZCB2YWx1ZSBvYmplY3QncyBhdXRo b3IgZG9lc24ndCB0aG91Z2h0IG9mIGl0IGFzIGEgY29sbGVjdGlvbi4KCioqQ29uY3JldGUgcHJv cG9zYWwqKgoKKiBDbGFzcyBuYW1lOiBgU3RydWN0OjpWYWx1ZWA6IGxvdCBvZiBSdWJ5aXN0cyBh cmUgdXNlZCB0byBoYXZlIGBTdHJ1Y3RgIGFzIGEgcXVpY2sgInNvbWV0aGluZy1saWtlLXZhbHVl IiBkcm9wLWluLCBzbyBhbHRlcm5hdGl2ZSwgbW9yZSBzdHJpY3QgaW1wbGVtZW50YXRpb24sIGJl aW5nIHBhcnQgb2YgYFN0cnVjdGAgQVBJLCB3aWxsIGJlIHF1aXRlIGRpc2NvdmVyYWJsZTsgKmFs dGVybmF0aXZlOiBqdXN0IGBWYWx1ZWAqCiogQ2xhc3MgQVBJIGlzIGNvcHlpbmcgYFN0cnVjdGBz IG9uZSAobW9zdCBvZiB0aGUgdGltZSAtLSBldmVuIHJldXNlcyB0aGUgaW1wbGVtZW50YXRpb24p LCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyAqKG5vdGU6IHRoZSBpbW11dGFiaWxpdHkg aXMgKipub3QqKiB0aGUgb25seSBkaWZmZXJlbmNlKSo6CiAgKiBOb3QgYEVudW1lcmFibGVgOwog ICogSW1tdXRhYmxlOwogICogRG9lc24ndCB0aGluayBvZiBpdHNlbGYgYXMgImFsbW9zdCBoYXNo IiAoZG9lc24ndCBoYXZlIGB0b19hYCwgYHZhbHVlc2AgYW5kIGBbXWAgbWV0aG9kcyk7CiAgKiBD YW4gaGF2ZSBlbXB0eSBtZW1iZXJzIGxpc3QgKGZ1biBmYWN0OiBgU3RydWN0Lm5ldygnRm9vJylg IGNyZWF0aW5nIG1lbWJlci1sZXNzIGBTdHJ1Y3Q6OkZvb2AsIGlzIGFsbG93ZWQsIGJ1dCBgU3Ry dWN0Lm5ldygpYCBpcyBub3QpIHRvIGFsbG93IHVzYWdlIHBhdHRlcm5zIGxpa2U6CgpgYGBydWJ5 CmNsYXNzIE15U2VydmljZQogIFN1Y2Nlc3MgPSBTdHJ1Y3Q6OlZhbHVlLm5ldyg6cmVzdWx0cykK ICBOb3RGb3VuZCA9IFN0cnVjdDo6VmFsdWUubmV3CmVuZApgYGAKCmBOb3RGb3VuZGAgaGVyZSwg dW5saWtlLCBzYXksIGBPYmplY3QubmV3LmZyZWV6ZWAgKGFub3RoZXIgcGF0dGVybiBmb3IgY3Jl YXRpbmcgImVtcHR5IHR5cGVkIHZhbHVlIG9iamVjdCIpLCBoYXMgbmljZSBpbnNwZWN0IGAjPHZh bHVlIE5vdEZvdW5kPmAsIGFuZCBjcmVhdGVkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBgU3VjY2Vz c2AsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLiBBbmQgaWYgaXQgd2lsbCBldm9sdmUg dG8gaGF2ZSBzb21lIGF0dHJpYnV0ZXMsIHRoZSBjb2RlIGNoYW5nZSB3b3VsZCBiZSBlYXN5LgoK KipQYXRjaCBpcyBwcm92aWRlZCoqCgpbU2FtcGxlIHJlbmRlcmVkIFJEb2MgZG9jdW1lbnRhdGlv bl0oaHR0cHM6Ly96dmVyb2suZ2l0aHViLmlvL3J1YnktcmRvYy9TdHJ1Y3QtVmFsdWUuaHRtbCkK Ci0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0X3ZhbHVlLnBh dGNoICgxOC42IEtCKQoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8KClVuc3Vic2Ny aWJlOiA8bWFpbHRvOnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1 YnNjcmliZT4KPGh0dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRp b25zL3J1YnktY29yZT4K