Всегда ли старые гемы работают на более поздних версиях ruby? - PullRequest
0 голосов
/ 16 февраля 2019

Я использую довольно свежую версию ruby ​​(2.5.1), но некоторые старые гемы.У меня есть некоторые проблемы.Мне было интересно, правильно ли, что некоторые драгоценные камни работают только с определенными версиями ruby?

Если гем работал с ruby ​​2.3.0, правда ли, что он определенно будет работать с 2.5.1 (т. Е. Потому что 2.5.1> 2.3.0)?Или это не всегда так?

Наверное, я спрашиваю: всегда ли новые версии ruby ​​обратно совместимы со старыми гемами?

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

Если гем работал с ruby ​​2.3.0, правда ли, что он определенно будет работать с 2.5.1

Это не правильно.Языки программирования развиваются с ростом.Это означает, что сопровождающие языка делают множество улучшений или реорганизаций, чтобы они стали новыми функциями или удаляли старые компоненты из языка.Когда языковое сообщество объявляет о новых функциях или удаляет старые функции, такие как Fixnum в ruby, разработчики должны следовать инструкциям и соответствующим образом реорганизовывать свою кодовую базу.Другими словами, разработчики должны иметь хорошее тестовое покрытие, чтобы обнаружить любой сбой и немедленно исправить его.

В вашем сценарии, как я понимаю, у вас нет тестового покрытия.Единственное, что нужно сделать, это просто обновить версии ваших драгоценных камней до последних.

0 голосов
/ 16 февраля 2019

Начиная с Ruby 2.1.0 политика версий заключалась в том, что изменение версии MINOR может привести к критическим изменениям API.

Если какой-либо драгоценный камень использует API, которыйизменения, возникнет несовместимость.

Номер версии MINOR изменился дважды между 2.3.* и 2.5.*, так что даже если гем был написан в соответствии с документированным API, есть нет гарантии , что он продолжит работать, если сопровождающий драгоценного камня не предпримет усилий для тестирования драгоценного камня (и при необходимости обновит его).Автоматизированные тестовые наборы очень помогают.

Стандартный способ документирования совместимости версий, который фактически проверяется, - путем предоставления required_ruby_version в .gemspec файлах .

ИнтересноЕсли какой-то конкретный гем действительно плохо написан, я думаю, он может сломаться даже между совместимыми версиями Ruby.Это не то, с чем я сталкивался в экосистеме Ruby, но я допустил аналогичную ошибку при написании кода Java (а Java славится обратной совместимостью), где мой собственный код случайно использовал класс, который не былчасть API.Есть много драгоценных камней.Кто знает, что там?:)

0 голосов
/ 16 февраля 2019

Gem - это просто подключаемый модуль, написанный на Ruby.

Конечно, Ruby развивается, появляются новые функции, исчезают старые.

Лучше всего указывать Rubyверсия в .gemspec файле.Например, как этот .

Но если нет, то вы должны вручную проверить производительность.Поэтому вы можете прочитать исходный код gem или попробовать использовать его и проверить его.

Для автоматизации, конечно, лучше всего использовать тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...