Да, это возможно, если вы ограничиваете себя пересечением языковых и библиотечных функций Ruby 1.8.7, Ruby 2.3.7 и всего, что между ними.
Последний большой прорыв назад-совместимостью стал переход с Ruby 1.8 на Ruby 1.9Обработка строк была полностью изменена, поэтому, чтобы что-то сделать с обработкой текста, вам нужно быть очень осторожным.
В верхней части моей головы:
- В Ruby 1.8 считаются строкибыть последовательностью байтов. В Ruby 1.9. строки - это фабрика для разных итераторов, итерирующая в терминах кодовых точек, символов или байтов.
- Поэтому в Ruby 1.9 строки больше не
Enumerable
. - Индексирование в строкувернет
Integer
в Ruby 1.8 и односимвольный String
в Ruby 1.9. - Символьные литералы (например,
?a
) приведут к Integer
в Ruby 1.8 и односимвольномуString
в Ruby 1.9. - В Ruby 1.8 предполагается, что все строки находятся в одной кодировке (обычно ASCII, но могут быть изменены на очень ограниченный набор, а именно UTF-8 и несколько азиатских пар). кодировок). Ruby 1.9 полностью поддерживает кодирование, каждая строка имеет свою собственную отдельную кодировку, каждый поток ввода-вывода имеет две кодировки (внутреннюю и внешнюю), и каждый исходный файл имеет отдельную кодировку.
Лучше всего ограничиться использованием только того, что указано в ISO Ruby Language Specification . Спецификация была специально написана так, чтобы все существующие на тот момент реализации Ruby (MRI, YARV, IronRuby, JRuby, MacRuby, Rubinius) автоматически соответствовали друг другу, что в основном означает, что спецификация указывает только минимально необходимое подмножество пересечения Ruby 1.8.6, Ruby 1.8.7 и Ruby 1.9.0.
Поскольку с тех пор не было никаких изменений, несовместимых с предыдущими версиями, вы можете быть уверены, что ваш код будет работать на всех версиях Ruby 1.8. От 6 до (но исключая) 3.0, и на всех ISO-совместимых реализациях Ruby, насколько я знаю, MRI, YARV, JRuby, IronRuby, Rubinius, MacRuby, MRuby, MagLev и TruffleRuby.