Перемещение от визуального Sourcesafe до подвижного

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

В этом конкретном случае override и final в конечном итоге используются в грамматике в местах, где никакие пользовательские идентификаторы не могут появиться. Таким образом, в этих местах идентификаторы могут иметь особое значение, и вне этих контекстов они могут рассматриваться как обычный идентификатор, оставляя идентификаторы доступными для пользователей. C++/CLI использует эту технику с 2005, и они называются контекстно-зависимыми ключевыми словами , что описано в разделе стандарта C ++ / CLI , разделе 9.1.1 Идентификаторы.

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

  • Использование [[attributes]], что было сочтено нежелательным по причинам, в том числе скрытым ключевым словам ( модифицированный пример из статьи ниже ):

    class A : public B {
      virtual void f [[override]] () { ... }
      virtual void h [[final]] () { ... }
    };
    
  • Использовать зарезервированные ключевые слова, которые потенциально нарушают существующий код, если не выбраны некрасивые имена ( модифицированный пример из статьи ниже ):

    class A : public B {
      virtual void f override_func () { ... }
      virtual void h final_func () { ... }
    };
    
  • Использовать контекстно-зависимые ключевые слова, что не нарушает существующий код, допускает хороших имен ( измененный пример из статьи ниже ):

    class A : public B {
      virtual void f() override { ... }
      virtual void h() final { ... }
    };
    

Следующий абзац из статьи суммирует аргумент для использования контекстно-зависимых ключевых слов по сравнению с двумя другими вариантами ( выделение мин ):

В Рапперсвиле было отмечено, что этот подход может затруднить исправление ошибок и выделение синтаксиса. Например, подсветка синтаксиса немного сложнее, потому что вместо глобальной подсветки ключевого слова вам нужно выполнить синтаксический анализ, чтобы узнать, находится ли идентификатор в том месте, где он имеет особое значение и должен быть выделен. Но это не является исключительно сложным, особенно в сравнении с другими гораздо более сложными вещами, которые мы уже должны делать в C ++, по сравнению с другими языками.

Это незначительные неудобства для нескольких авторов компиляторов в течение недели , но незаметны для пользователей. Это правильный компромисс . В противном случае наличие уродливых глобально зарезервированных имен (вариант 2) или неприемлемых и явно связанных атрибутов (вариант 1) облегчит работу нескольких авторов компиляторов в течение недели, но это то, с чем миллионы пользователей будут вынуждены жить вечно . [1 137]

Изменения были применены к стандарту через N3206: Управление переопределением: Устранение атрибутов и N3272: Продолжение контроля над переопределением .

19
задан Martin Geisler 30 March 2012 в 12:24
поделиться

5 ответов

Хотя я не выполнял это конкретное преобразование, я перешел с VSS на SVN, используя (IIRC) этот сценарий . Возможно, вам захочется обратиться к портному и выполнить поиск vss2hg. Также имейте в виду, что может иметь смысл пройти промежуточный этап, такой как vss2svn + svn2hg или аналогичный.

Главный совет, который я бы дал, таков: напишите сценарий преобразования, чтобы вы могли легко его повторно запустить. Это позволит вам каждую ночь выполнять преобразование из VSS в Hg и убедиться, что все выполняется правильно, прежде чем вы нажмете на спусковой крючок.

14
ответ дан 30 November 2019 в 03:16
поделиться

The Mercurial wiki has this page, which might be of interest: https://www.mercurial-scm.org/wiki/SourceSafeConversion. I've never used Visual source safe, so I don't have any personal experience with it.

I also found a mail from Patrick Mézard about the subject, but unfortunately he writes that a VSS converter will be difficult. He also talks about converting to Subversion first, and then from Subversion to Mercurial. I guess that means that there are VSS -> SVN converts out there. You can probably google that yourself.

5
ответ дан 30 November 2019 в 03:16
поделиться

Я использовал сценарий vss2hg.pl из здесь . Это Perl-скрипт, поэтому сначала вам нужно установить ActivePerl .

Он работал отлично, но у меня возникла проблема с датами. Оказывается, скрипт поддерживает три формата даты. По умолчанию установлен британский формат даты (в строке 547). Два других формата даты закомментированы в коде. После включения формата даты в США скрипт без проблем преобразовал мою базу данных SourceSafe.

6
ответ дан 30 November 2019 в 03:16
поделиться

Я являюсь автором сценария vss2hg.pl и использовал его для переноса многих проектов с VSS на Mercurial. В нем есть одна или две незначительные ошибки, когда некоторые комментарии не полностью преобразованы, но я не видел других проблем. Он преобразует полную историю и устраняет проблему с VSS, когда часы ПК пользователя могут влиять на порядок, в котором, по-видимому, вносятся изменения.

Версия скрипта доступна здесь .

13
ответ дан 30 November 2019 в 03:16
поделиться

Я просто попытался использовать vss2hg и столкнулся с проблемой, что он принимает и конвертирует только 1 пользователя. Это означает, что все мои изменения и т. Д. Будут неточными, так как я не смогу увидеть, кто их сделал. Это потому, что я не настроил всех необходимых пользователей в hg?

0
ответ дан 30 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: