Спецификация языка C# "Реализация программы", по-видимому, неправильно определена
В спецификации языка C# Программа определяется как
Запрограммируйте ввод для компилятора.
В то время как приложение определяется как
Приложение сборка с точкой входа
Но они определяют
Реализация программы - выполнение заявки.
Учитывая определение "Программы", не должно ли это быть...
Реализация приложения - исполнение приложения.
вместо?
3 ответа
Насколько я могу судить, этот термин не встречается в версии спецификации Microsoft. Аннотированная спецификация ECMA имеет эту аннотацию после "Программы":
Программы, сборки, приложения и библиотеки классов
Это определение программы отличается от общего использования. В C# программа - это просто ввод в компилятор. Выход компилятора - это сборка, которая является приложением или библиотекой классов.
Других аннотаций поблизости нет. Это кажется несколько странным, и, возможно, именно поэтому его нет в спецификации MS.
Нет.
Это определения, поэтому они могут быть тем, кем хотят. Ваша ошибка в попытке найти семантическую ссылку в слове 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# сделал свой выбор, и пока он внутренне непротиворечив, он "правильный".
Исходя из заданного ввода, то, что выводит компилятор, остается программой, только в формате сборки / приложения, так что это:
Действительная программа - программа на C#, построенная в соответствии с правилами синтаксиса и диагностируемым семантическим правилом.
Я сделаю смелый шаг здесь и скажу, что мы могли бы удалить себя из такого специфического контекста и посмотреть доступное определение использования на английском языке дляProgram
:
- (6) Набор закодированных инструкций, который позволяет машине, особенно компьютеру, выполнять желаемую последовательность операций.
- (7) Последовательность команд в запрограммированной инструкции.
И то, что вводится в компилятор, и то, что выводится, может быть помечено выше.
Но на самом деле мне придется проголосовать, чтобы закрыть, так как это вопрос относительно семантики английского языка.