Спецификация языка C # "Реализация программы", по-видимому, неправильно определена - PullRequest
3 голосов
/ 19 апреля 2011

В спецификации языка C # Программа определяется как

Программа входная информация для компилятора.

В то время как приложение определяется как

Приложение сборка с точкой входа

Но они определяют

Реализация программы - выполнение приложения.

Учитывая определение "Программы", не должно ли это быть ...

Создание экземпляра приложения - исполнение заявки.

вместо?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

номер

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

То, что они говорят, это «так мы используем этот термин»; в принципе нет ничего плохого в выборе любого термина, если определения согласуются. foo, bar и baz были бы такими же правильными, как и program instantiation. Пока имена внутренне непротиворечивы, а определения верны, имена могут быть любыми. Они просто ярлыки.

Кто-то в Microsoft, очевидно, считал, что более важно, чтобы термин program instantiation был отражен в его обычном использовании. Термин program, вероятно, не получил такого же обращения, но, опять же, они просто имена. И названия «атомарные»: слово program вовсе не связано с термином program instantiation.


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

X = ввод в компилятор.

Y = сборка с точкой входа

Z = исполнение Y.

Замена любого из имен чем-либо другим не имеет значения в их использовании.

Если я заменю приведенное выше определение Z новым термином XY:

XY = исполнение Y

это все еще сохраняется. Это просто ярлык, он получает семантическое содержание из определения, а не от его имени. XY не имеет семантической связи с X, а его отношение к Y является лишь случайным.


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

Существует целая ветвь философии , посвященная таким вопросам, и вызывающая «конфликт» в том смысле, в котором вы цитируете, в значительной степени неизбежна.

Автор спецификации C # сделал свой выбор, и пока он внутренне непротиворечив, он «правильный».

3 голосов
/ 20 апреля 2011

Насколько я могу судить, этот термин не встречается в версии спецификации Microsoft. Аннотированная спецификация ECMA имеет эту аннотацию после «Программы»:

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

Хотя поблизости нет других аннотаций. Это кажется несколько странным, и, возможно, именно поэтому его нет в спецификации MS.

1 голос
/ 20 апреля 2011

Исходя из заданных входных данных, то, что выводит компилятор, остается программой, только в формате сборки / приложения, так что это:

Программа, действительная - программа на C #, созданная в соответствии с правилами синтаксиса и диагностируемым семантическим правилом.

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

  1. (6) Набор кодированных инструкций, который позволяет машине, особенно компьютеру, выполнять желаемую последовательность операций.
  2. (7) Последовательность команд в запрограммированной инструкции.

Как то, что вводится в компилятор, так и то, что выводится, может быть помечено выше.

Но на самом деле мне придется проголосовать за закрытие, так как это вопрос относительно семантики английского языка.

...