juliklive , venting since 2003

Вопрос к начинающим (и не очень) Рубинистам

Предположим, что к вам в каминную трубу залез Дед Мороз и принес вам 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-затычку для этой чудовищной дырки, и мне нужно знать как ее сделать правильнее.

Suspects: Веб-стройка

What others said

mblsha

Хотя хотелось бы увидеть реализацию первого, с возможностью экспорта/импорта в бинарные. А для целей производительности сделать какой-нибудь ByteString.

Dragula

Первое. Строка -- это же последовательность символов? Почему тогда для выборки первых четырех нужно сначала выбрать все символы, а потом только выбрать четыре?

Если нужна байтовая строка, то, imho, нужно действительно каст в ByteString или его подобие делать. Например, как-то так:

str.to_bs[0..4] str.bytes[0..4]

Yaroslav

Первое, конечно. Но это ведь фантастика?

nnick

Вариант 1. Но пока эти японаихмать раскачаются...

Хоть я тоже не Матц :), но блин, начинают закрадываться дурные мысли и чесаться руки прикрутить ICU к Ruby самому... и сделать это самым opinionated образом...

Please, somebody, stop me!

enternet

Лучше первое. Зачем вообще что-то переделывать если не стараться сделать это максимально культурно.

clops

Второе!

Julik

Клопс, поскольку тебя можно подозревать в саботаже - обоснуй

MiRacLe

Второе, строго потому, что "старый"(уже существующий) софт, использующий ugly-hack-и, перестанет работать в первом варианте (я что-то не так понял?)

или первый, но с некой настройкой, aka "ini_set('enable_overloading',0)" - опять-таки, чтобы была возможность BC.

Доктор Зойдберг

Если к вам в каминную трубу залез Дед Мороз и принёс вам Ruby 2.0, то это значит, что вы вели себя плохо в этом году. Перестаньте играть в гляделки с вашим компьютером и выйдите на природу, поиграйте в снежки, покатайтесь на лыжах и санках. Физическая разминка укрепит здоровье, а свежий воздух придаст бодрость. С наступающим!

Доктор Зойдберг.

Julik

Всем спасибо, общим голосованием останавливаемся на варианте 1.