Обратная совместимость в программном обеспечении
Обратная совместимость применительно к программному обеспечению означает способность более поздних версий программы работать с файлами, созданными более ранней версией этой же программы или программы, реализующей те же алгоритмы, что и более ранняя версия. Так, например, в Microsoft Office присутствует поддержка целого ряда форматов, которые на данный момент почти не используются.
Сравните с моим:
Обратная совместимость — когда новое приложение для новой ОС, работает под старой версией ОС.
Перевожу, если сразу непонятно:
Новое приложение, для того чтобы работать под старой ОС, должно сохранять старые функции, отсутствующие в новой.
Так же, как новый MS Office сохраняет старые форматы.
Да и вы не должны мне писать, однако пишете. И я не должен, однако пишу. Давайте-ка понизим накал — время жалко. Поэтому к делу.
Ваш пример опять неудачен, хотя бы потому, что не раскрыт. Попробую сделать это за вас. Ваши скрипты не заводятся по одной из трех причин:
1. Удалена команда. Случай редкий, поскольку снижена функциональность без объявления войны. Типичный breaking changes. Объявление обязательно, поскольку необъявленные брикинги чреваты судебными исками, и не всегда «As is» прокатывает.
2. Функционал команды изменен. Случай нередкий. Обычно в этом случае меняется и формат команды, включая имя. Просто для того, чтобы сохранить старую команду для обеспечения совместимости.
3. Функционал добавлен к другой команде. См. п.2
4. Функционал изменен без смены имени и формата. По каким-то неведомым причинам. Нетипично, но тогда это breaking changes и требуется объявление потому что… см. п.1. Где удобнее всего сделать? При вызове команды.
5. см. п.4 но без объявления — наш случай. Это косяк, потому что… см. п.1
А вот представьте — переход на Windows 10, и не одно приложение не работает. Ни одно! Как вы полагаете, было бы это breaking changes? Да ни фига, как бы эта винда не называлась — пусть даже «Windows XP чуть-чуть получше». Это была бы новая система. И к ней новые приложения. И никаких ченджей.
Да, я об этом и сказал. Но здесь речь идет о взаимодействие компонента не с классом компонентов, а одного с одним. ОС и консоль. Поэтому все брикинги должны быть убраны. Это невозможно, или затруднительно для класса компонентов (например для всех приложений под Windows при переходе на 10-ку), но обязательно для случая один на один.
Ну какой тут брикинг ченджс? Ребята, мы сделали новую прогу, но пара функций точно не работает, а еще процентов 50 мы точно не знаем. Удачного кодинга или юзинга!
Вы че, смеетесь? Или троллите меня? Я человек доверчивый, меня троллить легко — а вам ни славы, ни удовольствия.
Нет, не оно. «Оно» относится к ситуации, когда компонент рассчитан на взаимодействие с неким классом других компонентов. Тогда завляются требования, исполнение которых гарантирует корректное взаимодействие. Если таковые не исполняются, взаимодействие компонентов не гарантируется. Но возможно. Пожалуй, наиболее яркий пример — Windows 10. В которую и были внесены breaking changes, о чем было широко заявлено. Большиство простеньких приложений прокатывало, но более сложные, использующие функционал ОС по максимуму, судорожно начали лепить костыли. Ну и MS тоже в этом поучаствовала.
В нашем случае однм компонент взаимодействует с другим. ОС с консолью. Поэтому все костыли должны быть слеплены до релиза.
breaking changes абсолютно никакого отношения к рассмтриваемой ситуации не имеет.
Ну или если упереться в формальный термин, то в нашем случае breaking changes — это голимый косяк. Это примерно как однопоточное приложение признать потоконебезопасным.
Мой пост не о PS Core. И не о PS. Если вы перечитаете первые пару абзацев, то возможно уясните, что у меня нет задачи дать строгий алгоритм, а указать на возможные проблемы, и возможные пути их разрешения. Что я и сделал.
Повторюсь. Косяк в дефолтной консоли — он мой, и не является, не должен являться проблемой остальных. А уж когда я с ним разберусь… это, в принципе, никого не касается.
Отдельно дополню. Знаки вопроса в 5-ке при вводе — мой косяк, мне кажется я это дал понять в тексте, и он несущественнен для сути поста. Он только мой. А вот косяки 7-ки, это косяки консоли. Они общие, поэтому я на них и акцентировался.
Не знаю, и вникать не хочу. Если вы заметили, я на этом внимание не акцентировал, и не предлагал убить дефолтную 5-ку. Полагаю, что это результат моих дефолтных установок. Пока мне не мешает, при необходимости поправлю. А в качестве иллюстрации правильности программной локализации как раз даже наоборот — помогает.
Что касается «делаете неправильно» попробуйте выдать chcp 1251, например, а затем chcp 65001, тоже например. В разных консолях. А после каждой chcp запустить код типа:
Результат вас удивит. В 5-ке вы получите
1251
1251
65001
65001
а в 7-ке:
1251
437 (скорее всего, потому что 437 — дефолтная, ну или другую текущую CP)
65001
437 (или опять же другую текущую)
Вот и вся проблема. Две абсолютно одинаковых команды не должны по-разному работать в разных версиях одной и той же программы.
вообще-то если «эта функция не является частью новой версии», то она не явялется частью новой версии. Неожиданно, правда?
Другое дело, что часто «эта функция» сохраняется для совместимости со старой версией, а к ней добавляется аналогичная новая с расширенным фнкционалом. Примерно так же, как это и произошло с PS и PS Core.
Добавлю. Если привычная функция, любая, в новой версии начинает вести себя некорректно, значительно снижая свою функциональность, имхо, это вполне достаточное основание полагать, что новая версия не доработана.
С чего бы это? Моя задача, конкретно здесь и конкретно на первом этапе, была предельно проста — показать как установить дефолтную кодовую страницу в реестре. Она устанавливается с помощью команды CHCP. CHCP в PS Core работает некорректно. Возможно, в PS Core есть масса других полезных функций. Да та же кроссплатформенность.
Но тема поста — не PS Core.
Вот смотрите. Вы мне не ответили на неявно поставленный вопрос — как с помощью CHCP изменить кодовую страницу вывода. Моя версия насчет формата с двумя страницами тоже не подтвердилась. А значит, по моему мнению, CHCP в данной версии работает некорректно.
zakon.ru/blog/2016/11/9/nekachestvennoe_programmnoe_obespechenie_zaschita_interesov_pravopriobretatelya
п. 1.2.
Честно говоря, надоело уже давно. Так что, всего вам доброго.
Вот выдержка с вашей же ссылки:
Сравните с моим:
Перевожу, если сразу непонятно:
Новое приложение, для того чтобы работать под старой ОС, должно сохранять старые функции, отсутствующие в новой.
Так же, как новый MS Office сохраняет старые форматы.
Ваш пример опять неудачен, хотя бы потому, что не раскрыт. Попробую сделать это за вас. Ваши скрипты не заводятся по одной из трех причин:
1. Удалена команда. Случай редкий, поскольку снижена функциональность без объявления войны. Типичный breaking changes. Объявление обязательно, поскольку необъявленные брикинги чреваты судебными исками, и не всегда «As is» прокатывает.
2. Функционал команды изменен. Случай нередкий. Обычно в этом случае меняется и формат команды, включая имя. Просто для того, чтобы сохранить старую команду для обеспечения совместимости.
3. Функционал добавлен к другой команде. См. п.2
4. Функционал изменен без смены имени и формата. По каким-то неведомым причинам. Нетипично, но тогда это breaking changes и требуется объявление потому что… см. п.1. Где удобнее всего сделать? При вызове команды.
5. см. п.4 но без объявления — наш случай. Это косяк, потому что… см. п.1
Ну какой тут брикинг ченджс? Ребята, мы сделали новую прогу, но пара функций точно не работает, а еще процентов 50 мы точно не знаем. Удачного кодинга или юзинга!
Вы че, смеетесь? Или троллите меня? Я человек доверчивый, меня троллить легко — а вам ни славы, ни удовольствия.
В нашем случае однм компонент взаимодействует с другим. ОС с консолью. Поэтому все костыли должны быть слеплены до релиза.
Ну или если упереться в формальный термин, то в нашем случае breaking changes — это голимый косяк. Это примерно как однопоточное приложение признать потоконебезопасным.
Повторюсь. Косяк в дефолтной консоли — он мой, и не является, не должен являться проблемой остальных. А уж когда я с ним разберусь… это, в принципе, никого не касается.
Что касается «делаете неправильно» попробуйте выдать chcp 1251, например, а затем chcp 65001, тоже например. В разных консолях. А после каждой chcp запустить код типа:
Результат вас удивит. В 5-ке вы получите
1251
1251
65001
65001
а в 7-ке:
1251
437 (скорее всего, потому что 437 — дефолтная, ну или другую текущую CP)
65001
437 (или опять же другую текущую)
Вот и вся проблема. Две абсолютно одинаковых команды не должны по-разному работать в разных версиях одной и той же программы.
Другое дело, что часто «эта функция» сохраняется для совместимости со старой версией, а к ней добавляется аналогичная новая с расширенным фнкционалом. Примерно так же, как это и произошло с PS и PS Core.
Но тема поста — не PS Core.