С точки зрения программирования, что означает семантика?

Различия:

Первый сет

  • (B) git rebase master

    *---*---* [master]
             \
              *---*---*---* [A]
                       \
                        *---*---* [B](HEAD)
    

Ничего не произошло. В ветке master нет новых коммитов с момента создания ветки B.

  • (B) git checkout master

    *---*---* [master](HEAD)
             \
              *---*---*---* [A]
                       \
                        *---*---* [B]
    
  • (мастер) git merge B

    *---*---*-----------------------* [Master](HEAD)
             \                     /
              *---*---*---* [A]   /
                       \         /
                        *---*---* [B]
    

Второй набор

  • (B) git rebase --onto master A B

    *---*---*-- [master]
            |\
            | *---*---*---* [A]
            |
            *---*---* [B](HEAD)
    
  • (B) git checkout master

    *---*---*-- [master](HEAD)
            |\
            | *---*---*---* [A]
            |
            *---*---* [B]
    
  • (мастер) git merge B

    *---*---*----------------------* [master](HEAD)
            |\                    /
            | *---*---*---* [A]  /
            |                   /  
            *---*--------------* [B]
    

Я хочу объединить мои изменения B (и только мои изменения B, никаких изменений A) в master

Будьте осторожны с тем, что вы понимаете под «только мои изменения B».

В первом наборе ветвь B (перед последним слиянием):

 *---*---*
          \
           *---*---*
                    \
                     *---*---* [B]

И во втором наборе ваша ветвь B:

*---*---*
        |
        |
        |
        *---*---* [B]

Если Я правильно понимаю, что вы хотите только коммитов B, которые не находятся в ветке A . Итак, второй набор - это правильный выбор для вас до слияния.

23
задан Richard Nienaber 27 May 2009 в 17:00
поделиться

7 ответов

но что это означает с точки зрения компьютерного жаргона?

По сути, то же самое. Пример:

x = 5;

Выше приведен синтаксис (представление). значение (то есть семантика) этого термина состоит в том, чтобы присвоить значение 5 символу (переменной или любому другому) с именем x . Разные языки предлагают разные синтаксисы для обеспечения одинаковой семантики. Например, указанное выше присвоение будет записано как

x := 5;

на Паскале и как

x <- 5

на нескольких других языках. Во всех случаях значение по существу одинаково. Но иногда один и тот же синтаксис может иметь разные значения в зависимости от языка и / или контекста. VB, например, переопределяет оператор равенства, чтобы обозначать две разные вещи. Во-первых, задание, как указано выше.

Во-вторых, в следующем фрагменте кода вместо назначения он принимает значение сравнения двух значений:

If x = 5 Then Console.WriteLine("x is 5")
26
ответ дан 29 November 2019 в 01:30
поделиться

Применяется словарное определение

Семантика - это (являются ли?) Все о значении слов.

Например, если вы используете .NET-тип KeyValuePair для представления чего-то ДРУГОГО, кроме ключа и значения, у вас возникнет семантическая проблема. Это может сработать ... это может быть лучшее решение, но оно не является семантически точным.

Это именно то, о чем он говорит в том сообщении в блоге. В языках типа C мы перечисляем возвращаемые типы первыми, но на самом деле возвращаемые значения идут последними. Это семантически неточно.

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

Семантика - это то, ЧТО мы подразумеваем, что программа должна делать. Sytax - это языковое ограничение на то, как мы выражаем семантику.

Теоретически, пока семантика программы верна, не имеет значения, на каком языке она была написана.

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

Насколько я понимаю, семантика - это «то, что все это значит для человека». Это то, что он разделяет, а не то, как он это делает.

3
ответ дан 29 November 2019 в 01:30
поделиться

Еще немного контекста из блога:

Поэтому в C вы помещаете хранилище сначала метаданные (статический int customerCount;), а не семантика в первую очередь (это могло быть var customerCount: static int;).

Он говорит, что "static int" стоит перед "customerCount". Вызов «static int» метаданных хранилища и семантики «customerCount» . Метаданные хранилища - это информация о том, что хранится в переменной - в нем неявно указано, сколько битов она занимает, какие значения она может содержать, разделяется ли она между экземплярами и ее непостоянство.

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

3
ответ дан 29 November 2019 в 01:30
поделиться

Другими словами, учитывая контекст статьи, он говорит, что разработчикам C # было бы лучше сосредоточиться на том, как они будут хранить данные внутренне, когда была объявлена ​​переменная, и не особо заботился об указании точного метода объявления переменной.

Другими словами, делая это в C #

static int customerCount

, вы говорите компилятору подготовить хранилище для статически доступного целого числа, а затем указываете ему пометить это хранилище как customerCount

, тогда как в VB вы использовал бы эту строку

dim shared customerCount as Integer

, сообщая компилятору, теоретически, что у вас есть переменная с именем customerCount , которую он должен хранить и делать статически доступной, и, кстати, это целое число.

Все это действительно тонкое различие, вроде как.

3
ответ дан 29 November 2019 в 01:30
поделиться

В терминах жаргона языков программирования существует несколько понятий семантики:

  • Статическая семантика сообщает вам, какие грамматические программы также хорошо сформированы. Многие языки либо не имеют статической семантики (Scheme, Ruby, Python, Icon, Lua, Perl), либо имеют статическую семантику, которая в первую очередь связана с реализацией системы типов (Java, C, C #, Haskell). «Объявление требуется перед использованием» - еще одна возможная статическая семантика. Статическая семантика отвечает на вопрос « имеет ли смысл эта программа? » и делает это во время компиляции.

  • Динамическая семантика сообщает вам одно из двух:

    • Учитывая, что программа имеет смысл, каково его значение? Значение было определено математически множеством различных способов. Классическая динамическая семантика может определять функцию (или связь) между входами программы и выходами программы. Функции смысла («денотационная семантика») были впервые предложены Даной Скотт и Кристофером Стрейчи; смысловые отношения («аксиоматическая семантика») были впервые предложены Тони Хоаром. Скотт и Хоар выиграли премию Тьюринга; Стрейчи, вероятно, так бы и поступил, но он умер молодым. Хороший способ познакомиться - это прочитать книгу Тони Хора Essays in Computing Science .
    • Учитывая, что программа имеет смысл, как она будет себя вести при выполнении? . Такая семантика обычно называется «операционной семантикой» и описывает выполнение программы на некоторой абстрактной машине. Опять же, существует много-много разновидностей. Сегодня операционная семантика является предпочтительным инструментом, потому что существуют мощные методы доказательства, поэтому, например, с помощью операционной семантики вы можете доказать, что в управляемом коде никогда не бывает ошибок памяти. Робин Милнер получил свою награду Тьюринга частично за различные операционные методы, используемые для описания параллельных или многопоточных программ (CCS и вычисление числа Пи). Его книга 1999 г. о Коммуникационных и мобильных системах также очень хорошо читается, если вы пропустите доказательства: -)

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

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