Технические соображения по поводу отказа от поддержки старых версий компилятора?

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

Некоторые из самых жестоких из них, такие как GCC 3.2 (2003!), ICC 9, MSVC (почти заброшенный, а не C++!) И компилятор Sun (в какой-то старой версии, о которой мы все еще заботимся), не поддерживают языковые функции, которые могли бы сделать разработку намного проще. Определенно есть также случаи, когда предоставление пользователям возможности придерживаться этих компиляторов требует от них большой производительности, что противоречит целям того, что мы предоставляем.

Итак, в какой момент мы говорим, что достаточно, достаточно? Я вижу несколько аргументов для прекращения поддержки конкретного компилятора:

  • Низкая производительность сгенерированного кода (относительно новых версий, о которых спрашивают здесь)
  • Отсутствие поддержки языковых функций
  • Плохая доступность в системах разработки (больше для проприетарного, чем GCC, но также есть проблемы с системным администратором для получения старого GCC)
  • Возможность нефиксированных ошибок (мы выделили ICE в ICC и xlC, что еще может скрываться?)

Я уверен, что скучал по некоторым другим, и я не уверен, как их весить. Итак, какие аргументы я пропустил? Какие другие технические соображения вступают в игру?

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

3 ответа

Ваш вопрос концептуально такой же, как у веб-разработчиков, которые хотят знать, когда им следует прекратить поддержку Internet Explorer 6. Ответ заключается в том, что вам нужно провести исследование.

  1. Сколько людей используют старые компиляторы?
  2. Сколько из них используют более новые?
  3. Сколько будет желать обновить?
  4. Сколько пользователей вы потеряете? (Это можно рассчитать по ответам на 1, 2 и 3).
  5. Сколько времени и работы сэкономит вам отказ от поддержки старых компиляторов?

В основном ваше решение сводится к сравнению ответов на 4 и 5. Похоже, что это проект с открытым исходным кодом из вашего описания, но если это бизнес, вы можете сравнить его численно (если потерянные деньги меньше, чем сэкономленные, отказаться от поддержки)). Если это не бизнес, это немного сложнее, так как вы должны угадать человеческие затраты, что может быть немного сложнее.

Я не думаю, что это что-то особенное, чтобы сделать эффективность старой технологии компилятора. Это бизнес-решение, и оно действительно сводится к тому, хотите ли вы сохранить своих клиентов или потерять их. Клиенты не занимаются технологиями, они занимаются бизнесом и бизнес-решениями.

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

По сути, вам действительно нужно быть осторожным, когда и как вы собираетесь сообщить своей клиентской базе, что вы собираетесь удалить часть своего набора продуктов. Как вы им и говорите. Просто брось его на колени. Запланируйте это.

Вам нужна внутренняя утвержденная контролируемая политика, и начните ее развертывать, возможно, рассказывая об этом на собраниях групп пользователей, а затем убедитесь, что у вас есть приличный период времени (2 года - это хорошо, разрешите клиенту завершить текущие реализации (1 год) плюс некоторые Расслабьтесь, прежде чем приступить к внедрению, и создайте инфраструктуру поддержки, чтобы помочь клиенту вовремя мигрировать.

То, как вы планируете это, будет определять реакцию ваших клиентов. Прошло несколько лет, я работал в фирме программного обеспечения, которая продавала действительно сложный продукт высокого класса для управления электрическими сетями. Продукт продается за 2 миллиона фунтов стерлингов за полный пакет, и каждый клиент подписывает контракт на 25-летнюю поддержку. Каким-то образом мы решили рационализировать аппаратное обеспечение. Мы предлагали его на AIX, Solaris, Tru64 и HPUX. Но по причине мы решили рационализировать это на AIX, что, я думаю, у нас было соглашение. Так или иначе, один из покупателей, который был магазином Solaris, очень расстроился из-за этого, и затем в течение следующих 4 лет мы никогда не слышали от них ни слова. Нет телефонных звонков, пропатчен, на сайтах проверок. Ничего такого.

Причина, по которой мы решили изменить это, поскольку мы делали проект с 6 сигмами, и указали, что мы будем экономить около 19 миллионов фунтов стерлингов в год, покупая рационализацию инфраструктуры до AIX и NT. Но в конечном итоге мы отказались от одного из наших основных клиентов, фактически уничтожив наше сообщество групп пользователей.

Решение было принято поспешно, и оно имело обратный эффект. Поэтому я думаю, что ваша лучшая идея - это спланировать это.

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

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

Другие вопросы по тегам