[ruby-core:118926] [Ruby master Feature#18368] Range#step semantics for non-Numeric ranges
From:
"zverok (Victor Shepelev) via ruby-core" <ruby-core@...>
Date:
2024-08-22 13:04:12 UTC
List:
ruby-core #118926
SXNzdWUgIzE4MzY4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgenZlcm9rIChWaWN0b3IgU2hlcGVsZXYp Lg0KDQoNCkBtYW1lIEl0IGRvZXNu4oCZdCB0YWtlIGxvbmcsIGJ1dCBJ4oCZbGwgaGF2ZSB0aW1l IGZvciB0aGF0IG9uIHRoZSB3ZWVrZW5kIChtb3N0IHByb2JhYmx5IFN1bmRheSkuDQoNCkkgaG9w ZSB0aGF0IHNvbWUgY2xhcmlmaWNhdGlvbnMgbWlnaHQgaGFwcGVuIGluIGEgZmV3IGRheXMgYmVm b3JlIHRoYXQuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZl YXR1cmUgIzE4MzY4OiBSYW5nZSNzdGVwIHNlbWFudGljcyBmb3Igbm9uLU51bWVyaWMgcmFuZ2Vz DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTgzNjgjY2hhbmdlLTEwOTQ5NQ0K DQoqIEF1dGhvcjogenZlcm9rIChWaWN0b3IgU2hlcGVsZXYpDQoqIFN0YXR1czogT3Blbg0KLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSSBhbSBzb3JyeSBpZiB0aGUg cXVlc3Rpb24gaGFkIGFscmVhZHkgYmVlbiBkaXNjdXNzZWQsIGNhbid0IGZpbmQgdGhlIHJlbGV2 YW50IHRvcGljLg0KDQoiSW50dWl0aXZlbHkiLCB0aGlzIGxvb2tzIChmb3IgbWUpIGxpa2UgYSBt ZWFuaW5nZnVsIHN0YXRlbWVudDoNCg0KYGBgcnVieQ0KKFRpbWUucGFyc2UoJzIwMjEtMTItMDEn KS4uVGltZS5wYXJzZSgnMjAyMS0xMi0yNCcpKS5zdGVwKDEuZGF5KS50b19hDQojICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4gb3Ig anVzdCAyNCo2MCo2MA0KYGBgDQpVbmZvcnR1bmF0ZWx5LCBpdCBkb2Vzbid0IHdvcmsgd2l0aCAi VHlwZUVycm9yIChjYW4ndCBpdGVyYXRlIGZyb20gVGltZSkiLg0KSW5pdGlhbGx5IGl0IGxvb2tl ZCBsaWtlIGEgYnVnIGZvciBtZSwgYnV0IGFmdGVyIGRpZ2dpbmcgYSBiaXQgaW50byBjb2RlL2Rv Y3MsIEkgdW5kZXJzdG9vZCB0aGF0IGBSYW5nZSNzdGVwYCBoYXMgYW4gb2RkIHNlbWFudGljcyBv ZiAiYWR2YW5jZSB0aGUgYmVnaW4gTiB0aW1lcyB3aXRoIGAjc3VjY2AsIGFuZCB5aWVsZCB0aGUg cmVzdWx0Iiwgd2l0aCBOIGJlaW5nIGFsd2F5cyBpbnRlZ2VyOg0KYGBgcnVieQ0KKCdhJy4uJ3on KS5zdGVwKDMpLmZpcnN0KDUpDQojID0+IFsiYSIsICJkIiwgImciLCAiaiIsICJtIl0NCmBgYA0K DQpUaGUgZmFjdCB0aGF0IHNlbWFudGljIGlzICJvZGQiIGlzIGNvbmZpcm1lZCBieSB0aGUgZmFj dCB0aGF0IGZvciBGbG9hdCBpdCBpcyByZWRlZmluZWQgdG8gZG8gd2hhdCBJICJpbnR1aXRpdmVs eSIgZXhwZWN0ZWQ6DQpgYGBydWJ5DQooMS4wLi43LjApLnN0ZXAoMC4zKS5maXJzdCg1KQ0KIyA9 PiBbMS4wLCAxLjMsIDEuNiwgMS45LCAyLjJdIA0KYGBgDQooTGlrZSB3aXRoIFtgUmFuZ2UjPT09 YCBzb21lIHRpbWUgYWdvXShodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTQ1NzUp LCBJIGJlbGlldmUgdGhhdCB0byBiZSBhIHN0cm9uZyBwcm9vZiBvZiB0aGUgd3JvbmcgZ2VuZXJp YyBzZW1hbnRpY3MsIGlmIGZvciBudW1iZXJzIHRoZSBzZW1hbnRpY3MgbmVlZGVkIHRvIGJlIHJl ZGVmaW5lZCBjb21wbGV0ZWx5LikNCg0KQW5vdGhlciB0aGluZyB0byBub3RlIGlzIHRoYXQgInNr aXAgTiBlbGVtZW50cyIgc2VlbSB0byBiZSByYXRoZXIgImdlbmVyaWNhbGx5IEVudW1lcmFibGUt cmVsYXRlZCIgeWV0IGl0IGlzbid0IGRlZmluZWQgb24gYEVudW1lcmFibGVgIChiZWNhdXNlIG5v Ym9keSBuZWVkcyB0aGlzIHNlbWFudGljcywgdHlwaWNhbGx5ISkNCg0KSGVuY2UsIHR3byBxdWVz dGlvbnM6DQoqIENhbiB3ZSByZWRlZmluZSBnZW5lcmljIGBSYW5nZSNzdGVwYCB0byBuZXcgc2Vt YW50aWNzIChvZiB1c2luZyBgYmVnaW4gKyBzdGVwYCBpdGVyYXRpdmVseSk/IEl0IGlzIGhhcmQg dG8gaW1hZ2luZSB0aGUgYW1vdW50IG9mIGFjdHVhbCB1c2FnZSBvZiB0aGUgb2xkIGJlaGF2aW9y ICh3aXRoIFN0cmluZz8uLiB0byB3aGF0IGVuZD8pIGluIHRoZSB3aWxkDQoqIElmIHRoZSBhbnN3 ZXIgaXMgIm5vIiwgY2FuIHdlIGRlZmluZSBhIG5ldyBtZXRob2Qgd2l0aCBuZXcgc2VtYW50aWNz LCBsaWtlLCBJREssIGBSYW5nZSNvdmVyKHNwYW4pYD8NCg0KKipVUEQ6KiogTW9yZSBleGFtcGxl cyBvZiB1c2VmdWwgYmVoYXZpb3IgKGl0IGlzIE5PVCBvbmx5IGFib3V0IGNvcmUgYFRpbWVgIGNs YXNzKToNCg0KYGBgcnVieQ0KcmVxdWlyZSAnYWN0aXZlX3N1cHBvcnQvYWxsJw0KDQooMS5taW51 dGUuLjIwLm1pbnV0ZXMpLnN0ZXAoMi5taW51dGVzKS50b19hDQojPT4gWzEgbWludXRlLCAzIG1p bnV0ZXMsIDUgbWludXRlcywgNyBtaW51dGVzLCA5IG1pbnV0ZXMsIDExIG1pbnV0ZXMsIDEzIG1p bnV0ZXMsIDE1IG1pbnV0ZXMsIDE3IG1pbnV0ZXMsIDE5IG1pbnV0ZXNdDQoNCnJlcXVpcmUgJ3Rv ZCcNCg0KKFRvZDo6VGltZU9mRGF5LnBhcnNlKCI4YW0iKS4uVG9kOjpUaW1lT2ZEYXkucGFyc2Uo IjEwYW0iKSkuc3RlcCgzMC5taW51dGVzKS50b19hIA0KIz0+IFsjPFRvZDo6VGltZU9mRGF5IDA4 OjAwOjAwPiwgIzxUb2Q6OlRpbWVPZkRheSAwODozMDowMD4sICM8VG9kOjpUaW1lT2ZEYXkgMDk6 MDA6MDA+LCAjPFRvZDo6VGltZU9mRGF5IDA5OjMwOjAwPiwgIzxUb2Q6OlRpbWVPZkRheSAxMDow MDowMD5dDQoNCg0KcmVxdWlyZSAnbWF0cml4Jw0KKFZlY3RvclsxLCAyLCAzXS4uKS5zdGVwKFZl Y3RvclsxLCAxLCAxXSkudGFrZSgzKQ0KIz0+IFtWZWN0b3JbMSwgMiwgM10sIFZlY3RvclsyLCAz LCA0XSwgVmVjdG9yWzMsIDQsIDVdXQ0KDQpyZXF1aXJlICd1bml0d2lzZScNCihVbml0d2lzZSgw LCAna20nKS4uVW5pdHdpc2UoMSwgJ2ttJykpLnN0ZXAoVW5pdHdpc2UoMTAwLCAnbScpKS5tYXAo Jjp0b19zKQ0KIz0+IFsiMCBrbSIsICIxLzEwIGttIiwgIjEvNSBrbSIsICIzLzEwIGttIiwgIjIv NSBrbSIsICIwLjUga20iLCAiMy81IGttIiwgIjcvMTAga20iLCAiNC81IGttIiwgIjkvMTAga20i LCAiMSBrbSJdDQpgYGANCg0KDQoqKlVQRDoqKiBSZXNwb25kaW5nIHRvIGRpc2N1c3Npb24gcG9p bnRzOg0KDQoqKlE6KiogTWF0eiBpcyBjb25jZXJuZWQgdGhhdCB0aGUgcHJvcG9zZWQgc2ltcGxl IGRlZmluaXRpb24gd2lsbCBiZSBjb25mdXNpbmcgd2l0aCB0aGUgY2xhc3NlcyB3aGVyZSBgK2Ag aXMgcmVkZWZpbmVkIGFzIGNvbmNhdGVuYXRpb24uDQoNCioqQToqKiBJIGJlbGlldmUgdGhhdCBz aW1wbGljaXR5IG9mIHNlbWFudGljcyBhbmQgZWFzZSBvZiBleHBsYWluaW5nICgiaXQganVzdCB1 c2VzIGArYCB1bmRlcm5lYXRoLCB3aGF0ZXZlciBgK2AgZG9lcywgd2lsbCBiZSBwZXJmb3JtZWQi KSB3aWxsIG1ha2UgdGhlIGNvbmZ1c2lvbiBtaW5pbWFsLg0KDQoqKlE6KiogV2h5IG5vdCBpbnRy b2R1Y2UgbmV3IEFQSSByZXF1aXJlbWVudCAobGlrZSAiY2xhc3Mgb2YgcmFuZ2UncyBgYmVnaW5g IHNob3VsZCBpbXBsZW1lbnQgYGluY3JlbWVudGAgbWV0aG9kLCBhbmQgdGhlbiBpdCB3aWxsIGJl IHVzZWQgaW4gYHN0ZXBgKQ0KDQoqKkE6KiogcmVxdWlyZSAqZXZlcnkqIGdlbSBhdXRob3IgdG8g Y2hhbmdlICpldmVyeSogb2YgdGhlaXIgb2JqZWN0cycgYmVoYXZpb3IuIEZvciB0aGF0LCB0aGV5 IHNob3VsZCBiZSBhd2FyZSBvZiB0aGUgY2hhbmdlLCBjb25zaWRlciBpdCBpbXBvcnRhbnQgZW5v dWdoIHRvIGNhcmUsIGNsZWFybHkgdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IHNlbWFudGljcyBv ZiBpbXBsZW1lbnRhdGlvbiwgaGF2ZSBhIHJlc291cmNlIHRvIHJlbGVhc2UgYSBuZXcgdmVyc2lv bi4uLiBUaGVuIGFsbCB1c2VycyBvZiBhbGwgc3VjaCBnZW1zIHdvdWxkIGJlIHJlcXVpcmVkIHRv IHVwZ3JhZGUuIFRoZSBmZWF0dXJlIHdvdWxkIGJlIERPQSAoZGVhZC1vbi1hcnJpdmFsKS4NCg0K VGhlIHR3byBhbHRlcm5hdGl2ZSB3YXlzIEkgYW0gc3VnZ2VzdGluZzogY2hhbmdlIHRoZSBiZWhh dmlvciBvZiBgI3N0ZXBgIG9yIGludHJvZHVjZSBhIG5ldyBtZXRob2Qgd2l0aCBkZXNpcmVkIGJl aGF2aW9yOg0KMS4gRWFzeSB0byBleHBsYWluIGFuZCBhbm5vdW5jZQ0KMi4gUmVxdWlyZSBubyBv dGhlciBjb2RlIGNoYW5nZXMgdG8gaW1tZWRpYXRlbHkgYmVjb21lIHVzZWZ1bA0KMy4gV2l0aCBz b21ldGhpbmcgbGlrZSBbYmFja3BvcnRzXShodHRwczovL2dpdGh1Yi5jb20vbWFyY2FuZHJlL2Jh Y2twb3J0cykgb3IgW3J1YnktbmV4dF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnktbmV4dC9ydWJ5 LW5leHQpIGVhc3kgdG8gc3RhcnQgdXNpbmcgZXZlbiBpbiBvbGRlciBSdWJ5IHZlcnNpb24sIG1h a2luZyB0aGUgY29kZSBtb3JlIGV4cHJlc3NpdmUgZXZlbiBiZWZvcmUgaXQgd291bGQgYmUgcG9z c2libGUgZm9yIHNvbWUgcGFydGljdWxhciBhcHAvY29tcG55IHRvIHVwZ3JhZGUgdG8gKHNheSkg My4yDQoNCkFsbCBleGFtcGxlcyBvZiBiZWhhdmlvciBmcm9tIHRoZSBjb2RlIGFib3ZlIGFyZSBy ZWFsIGBpcmJgIG91dHB1dCB3aXRoIG1vbmtleS1wYXRjaGVkIGBSYW5nZSNzdGVwYCwgZGVtb25z dHJhdGluZyBob3cgbGl0dGxlIGNoYW5nZSB3aWxsIGJlIG5lZWRlZCB0byBjb2RlIG91dHNpZGUg b2YgdGhlIGBSYW5nZWAuDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29y ZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2Ny aWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1 YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9y dWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=