Что означает «реализация» в «реализации (не) зависимой»? - PullRequest
0 голосов
/ 10 июня 2018

Что означает «реализация» в «реализации (не) зависимой»?И в чем разница между «зависимостью от реализации (в)» и «зависимой от машины»?

Я использую C, чтобы вы могли объяснить это в C.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Когда стандарт C обсуждает реализацию , это означает реализацию языка C.Таким образом, реализация C - это все 1 , необходимое для интерпретации и выполнения программ на языке C.

Обычно включает компилятор, сопутствующие или совместимые инструменты разработчика, такие как компоновщик и программное обеспечение.библиотека, обеспечивающая подпрограммы поддержки, операционную систему и ее компоненты, такие как загрузчик, и компьютерную систему для ее запуска.

В одной компьютерной системе может быть установлено несколько компиляторов.Вы можете иметь GCC и Clang.Когда программы скомпилированы с GCC и выполнены, это одна реализация C, а когда они скомпилированы с Clang и выполнены, это другая реализация C, даже если они обе работают в одной и той же системе.Одна реализация C - это конкретный полный набор вещей, который используется для перевода и выполнения программ на Си.

Поскольку стандарт Си не полностью определяет, как все, что вы пишите в программе на С, некоторые вещи могут отличаться в разных реализациях,Примечательно, сколько битов в int может варьироваться.Эти вещи зависят от реализации.

Использование «машинно-зависимых» при обращении к C часто является неточным использованием языка, когда действительно подразумевается «зависящий от реализации».Существует тесная связь между функциями машины и особенностями реализации языка Си.Когда кто-то пишет компилятор для машины, которая имеет только 32-разрядные регистры и 32-разрядные целочисленные арифметические инструкции, они, скорее всего, собираются спроектировать свой компилятор так, чтобы int был 32-разрядным.Тем не менее, это выбор.Вполне возможно написать компилятор для 32-битной машины, в которой int равен 64 битам или 16 битам.Первые могут быть более сложными (потому что они должны создавать 64-битную арифметику путем компиляции одиночных арифметических операторов C в несколько инструкций) или расточительными (потому что выполнение только 16-битных операций на машине, способной к 32-битным операциям, не использует ее полноемощность), но это вполне возможно.Таким образом, фактические свойства реализации C являются функцией всей реализации, а не только машины, на которой она работает.

Сноска

1 Стандарт C определяет«Реализация» - «конкретный набор программного обеспечения, работающий в конкретной среде перевода с определенными параметрами управления, который выполняет перевод программ и поддерживает выполнение функций в конкретной среде выполнения» (C 2011 [N1570] 3.12),Однако, разумеется, для того, чтобы выполнить или понять исполняемую программу, являющуюся результатом компиляции, одному из них также требуется аппаратное обеспечение или, по меньшей мере, спецификация аппаратного обеспечения.Поэтому мы можем рассматривать реализацию как все, что требуется для интерпретации и выполнения программы на Си.

0 голосов
/ 10 июня 2018

В C (или C ++) «реализация» относится к программному обеспечению «вокруг» скомпилированной программы, таким как компилятор, стандартные библиотеки и т. Д.Например, GCC предоставляет «реализацию» C для x86-64, а также 32-битную x86 и несколько других.Microsoft предоставляет «реализацию» для x86-64, 32-разрядных x86 и ранее некоторых других.Примером чего-то «зависящего от реализации» является набор символов и кодировка исходного кода (например, поддержка Unicode в исходном коде программы).Другой пример - как файлы обнаруживаются при #include их.

«Машина» относится к аппаратному обеспечению и, возможно, к части ядра.Например, у вас может быть машина с 64-битными указателями или машина с 32-битными указателями.У вас также может быть машина, в которой целочисленная арифметика не является дополнением к двум.Эти вещи зависят от машины.

...