[ruby-core:118040] [Ruby master Bug#20512] Order of magnitude performance differenfce in single character slicing UTF-8 strings before and after length method is executed
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2024-05-28 07:34:51 UTC
List:
ruby-core #118040
SXNzdWUgIzIwNTEyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQpXaGF0IGlzIGhhcHBlbmluZyBoZXJlIGlzIHRoYXQgYGxlbmd0aGAgdHJpZ2dlcnMgc2Nh bm5pbmcgdGhlIHN0cmluZyBgY29kZXJhbmdlYC4NCg0KQW5kIHdoZW4gdGhlIGNvZGVyYW5nZSBp cyB1bmtub3duLCBgU3RyaW5nI1tdYCBpcyBzbG93ZXIgZm9yIHZhcmlhYmxlLWxlbmd0aCBjaGFy YWN0ZXIgZW5jb2RpbmdzIChsaWtlIFVURi04KS4NCg0KT24gMy4zOg0KDQpgYGBydWJ5DQpyZXF1 aXJlICdqc29uJw0KcmVxdWlyZSAnb2Jqc3BhY2UnDQpyZXF1aXJlICdiZW5jaG1hcmsnDQoNCiMg U2luZ2xlIGJ5dGUgc3ltYm9scw0KbGV0dGVycyA9ICgiYSIuLiJ6IikudG9fYQ0KbGVuZ3RoID0g MTAwMDAwDQoNCnN0ciA9IGxlbmd0aC50aW1lcy5tYXB7bGV0dGVyc1tyYW5kKDI2KV19LmpvaW4N Cg0KIyBTbG93DQpwIEJlbmNobWFyay5yZWFsdGltZSB7IGxlbmd0aC50aW1lc3t8aXwgc3RyW2ld fSB9DQpwIEJlbmNobWFyay5yZWFsdGltZSB7IGxlbmd0aC50aW1lc3t8aXwgc3RyW2ldfSB9DQpw dXRzIEpTT04ucGFyc2UoT2JqZWN0U3BhY2UuZHVtcChzdHIpKVsiY29kZXJhbmdlIl0NCnAgQmVu Y2htYXJrLnJlYWx0aW1lIHsgc3RyLmxlbmd0aCB9ICAjIHBlcmZvcm1hbmNlIGhhY2sNCnB1dHMg SlNPTi5wYXJzZShPYmplY3RTcGFjZS5kdW1wKHN0cikpWyJjb2RlcmFuZ2UiXQ0KYGBgDQoNCmBg YA0KJCBydWJ5IC12IC90bXAvc3RyLnJiDQpydWJ5IDMuMy4xICgyMDI0LTA0LTIzIHJldmlzaW9u IGM1NmNkODYzODgpIFthcm02NC1kYXJ3aW4yM10NCjAuMTcyMTY2OTk5ODk1MTI1NjMNCjAuMTc2 MzQ1MDAwMDQzNTExNA0KdW5rbm93bg0KNS45OTk1ODAwMjU2NzI5MTNlLTA2DQo3Yml0DQowLjAw NDg5NDk5OTc4NzIxMTQxOA0KYGBgDQoNClNlZSBob3cgYGNvZGVyYW5nZWAgY2hhbmdlcyBmcm9t IGB1bmtub3duYCB0byBgN2JpdGAsIGFsbG93aW5nIGBTdHJpbmcjW11gIHRvIHRyZWF0IHRoZSBz dHJpbmcgYXMgcHVyZSBBU0NJSSwgaGVuY2UgY2FuIGRpcmVjdGx5IGNvbXB1dGUgdGhlIHN1YnN0 cmluZyBwb3NpdGlvbiB3aXRoIGEgc2ltcGxlIG9mZnNldC4NCg0KVGhlIHF1ZXN0aW9uIGhlcmUg aXMgd2hldGhlciBgU3RyaW5nI1tdYCBzaG91bGQgdHJpZ2dlciBzY2FubmluZyB0aGUgY29kZXJh bmdlLiBJdCB3b3VsZCBkZWZpbml0ZWx5IG1ha2Ugc29tZSBjb2RlIGZhc3RlciwgYnV0IG1heSBz bG93IGRvd24gc29tZSBvdGhlcnMsIHNvIGl0J3MgYSBiaXQgZGViYXRhYmxlLCBidXQgSSdkIGJl IGluIGZhdm9yIG9mIGl0Lg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpCdWcgIzIwNTEyOiBPcmRlciBvZiBtYWduaXR1ZGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5m Y2UgaW4gc2luZ2xlIGNoYXJhY3RlciBzbGljaW5nIFVURi04IHN0cmluZ3MgYmVmb3JlIGFuZCBh ZnRlciBsZW5ndGggbWV0aG9kIGlzIGV4ZWN1dGVkDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMjA1MTIjY2hhbmdlLTEwODQ1OQ0KDQoqIEF1dGhvcjogZ2luZXIgKFN0YW5pc2xh diBHZXJtYW4tRXZ0dXNoZW5rbykNCiogU3RhdHVzOiBPcGVuDQoqIHJ1YnkgLXY6IHJ1YnkgMy4y LjIgKDIwMjMtMDMtMzAgcmV2aXNpb24gZTUxMDE0ZjljMCkgW3g4Nl82NC1saW51eF0NCiogQmFj a3BvcnQ6IDMuMTogVU5LTk9XTiwgMy4yOiBVTktOT1dOLCAzLjM6IFVOS05PV04NCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClNsaWNpbmcgb2YgYSBzaW5nbGUgY2hh cmFjdGVyIG9mIFVURi04IHN0cmluZyBiZWNvbWVzIH4xNSB0aW1lcyBmYXN0ZXIgYWZ0ZXIgbWV0 aG9kICJsZW5ndGgiIGlzIGV4ZWN1dGVkIG9uIHRoZSBzdHJpbmcuDQoNCmBgYHJ1YnkNCiMgU2lu Z2xlIGJ5dGUgc3ltYm9scw0KbGV0dGVycyA9ICgiYSIuLiJ6IikudG9fYQ0KbGVuZ3RoID0gMTAw MDAwDQoNCnN0ciA9IGxlbmd0aC50aW1lcy5tYXB7bGV0dGVyc1tyYW5kKDI2KV19LmpvaW4NCg0K IyBTbG93DQpzdGFydCA9IFRpbWUubm93DQpsZW5ndGgudGltZXN7fGl8IHN0cltpXX0NCnB1dHMg VGltZS5ub3cgLSBzdGFydCAgIyAwLjE2OTE1NjIwMQ0KDQpzdHIubGVuZ3RoICAjIHBlcmZvcm1h bmNlIGhhY2sNCg0KIyBGYXN0DQpzdGFydCA9IFRpbWUubm93DQpsZW5ndGgudGltZXN7fGl8IHN0 cltpXX0NCnB1dHMgVGltZS5ub3cgLSBzdGFydCAgIyAwLjAwOTg4MzkxOQ0KDQoNCiMgVVRGLTgg U3ltYm9scw0KbGV0dGVycyA9ICgi0LAiLi4i0Y8iKS50b19hDQpsZW5ndGggPSAxMDAwMA0KDQpz dHIgPSBsZW5ndGgudGltZXMubWFwe2xldHRlcnNbcmFuZCgyNildfS5qb2luDQoNCiMgU2xvdw0K c3RhcnQgPSBUaW1lLm5vdw0KbGVuZ3RoLnRpbWVze3xpfCBzdHJbaV19DQpwdXRzIFRpbWUubm93 IC0gc3RhcnQgICMgMC4zMjYyMDQwMDcNCg0Kc3RyLmxlbmd0aCAgIyBwZXJmb3JtYW5jZSBoYWNr DQoNCiMgRmFzdA0Kc3RhcnQgPSBUaW1lLm5vdw0KbGVuZ3RoLnRpbWVze3xpfCBzdHJbaV19DQpw dXRzIFRpbWUubm93IC0gc3RhcnQgICMgMC4wMTY5NDMwOTMNCmBgYA0KDQoNCg0KLS0gDQpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5y dWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1s ZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1Ynkt bGFuZy5vcmcvbWFpbG1hbjMvcG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5LWxhbmcu b3JnLw==