Предположим, что к вам в каминную трубу залез Дед Мороз и принес вам Ruby 2.0. Да, у вас нету каминной трубы (и тем более Деда Мороза, но предположим). И в Ruby 2.0 реализован нормальный Unicode, но - backwards compatible. Что вы предпочтете?

  1. Замедление всей обработки строк во всей программе в целом и “магическое” одарение методов String поддержкой Unicode, в стиле mb_func_overload в PHP:

    str = “Я ненавижу ASCII” str[0..4] #=> “Я нен”

  2. Вся обработка строк остается такой же как и была (происходит в байтовом выражении), но при необходимости обрабатывать именно буквы (если вы скажете что это одно и то же – я вас побью) это нужно делать так:

    str = “Я ненавижу ASCII” str.characters[0..4] #=> “Я нен”

В варианте 2 естественно правильный софт (а.к.а. Rails) будет использовать правильный синтаксис при обработке строк. В обоих вариантах нужно компилировать расширение для Ruby. Применение новой адресации к строкам работает только при $KCODE == ‘UTF8’

Пишите в комментариях какой вариант вам нравится больше.

Важное примечание. Я не Матц и я не буду править исходники Ruby на C. Я пытаюсь сделат meaningful-затычку для этой чудовищной дырки, и мне нужно знать как ее сделать правильнее.