Есть ли методика, позволяющая избежать обратной несовместимости, которую нам иногда навязывают?

Иногда сторонние библиотеки вызывают хаос, когда меняют свой интерфейс. В некоторых языках это происходит даже на языковом уровне.

Можно ли написать наш код таким образом, чтобы это предотвратить?

Например, я могу придумать один способ - написать свои собственные функции-оболочки.
Таким образом, изменения будут локализованы для одной функции. Но опять же, это создает большие накладные расходы.

У тебя есть идеи?


person Andrey Rubshtein    schedule 20.12.2011    source источник
comment
Это интересный философский вопрос, но на него нет практического ответа, кроме опыта и удачи. Очень часто схемы, пропагандируемые как предотвращение этой проблемы, делают с точностью до наоборот. (Я не голосую за закрытие, но подозреваю, что эта ветка будет закрыта к тому времени, когда я закончу этот комментарий.) ((Добавлено: ОК, я был неправ - показывает, насколько сложно предсказать будущее.))   -  person Hot Licks    schedule 21.12.2011
comment
Я привел пример одной практической идеи. Думаю, может быть и больше.   -  person Andrey Rubshtein    schedule 21.12.2011


Ответы (2)


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

Примечание к выпуску для разработчиков Mac OS X

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

person leanne    schedule 20.12.2011
comment
Конечно, менее 50% приложений для iPhone, написанных для iOS 4, работают на телефонах с iOS 5. Apple внесла несколько изменений, несовместимых с предыдущей / несовместимой с предыдущей, не имея даже промежуточной промежуточной версии, которая допускает и то, и другое. Так что к советам Apple следует относиться с недоверием. - person Hot Licks; 21.12.2011
comment
Независимо от того, следовала ли Apple своему собственному совету, проверка версий - еще одна действенная идея для обратной совместимости, которую вы сами одобряете в своем собственном ответе в этой ветке. - person leanne; 21.12.2011
comment
Да, но это редко делается хорошо или с достаточной детализацией. Nokia проделала приличную работу наполовину со своими в значительной степени несуществующими продуктами Symbian. - person Hot Licks; 21.12.2011

По сути, вы включаете какой-то механизм версий (обычно с большей степенью детализации, чем просто ограничения на низкую / высокую версию) и пытаетесь сохранить интерфейсы отдельными и «ортогональными». Но многое зависит от того, на какой стороне интерфейса вы находитесь. С «потребительской» стороны вы можете сделать только определенное количество вещей.

IBM System / 38 и ее потомкам удалось сохранить совместимость, так что программы, скомпилированные в первом выпуске, все еще можно было запускать без перекомпиляции 30 лет спустя (и после двух ревизий набора машинных команд, вторая довольно радикальная). Но это необычный случай довольно хорошего (хотя и не идеального) оригинального дизайна в сочетании с довольно сильной мотивацией (крупные банки, которые тратят много долларов на системы) поддерживать совместимость.

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

person Hot Licks    schedule 21.12.2011