терминология — Что такое сфера деятельности модуля C ++?

Я видел несколько ссылок на термин «компетенция» в контексте модулей C ++, например, в https://gcc.gnu.org/wiki/cxx-modules:

Baz (); // Baz's declaration visible from purview Quux interface

Что именно относится к модулю C ++?

15

Решение

Давайте разберем этот вопрос на три части:

  1. Что такое модуль C ++?
  2. Что такое компетенция?
  3. Какова сфера деятельности модуля C ++?

Модули C ++

Модули являются будущей особенностью C ++ и в настоящее время не являются частью языкового стандарта (т.е. не C ++ 17). В двух словах, модули предназначены для того, чтобы вы могли импортировать проанализированные / скомпилированные конструкции C ++, а не текстовые файлы заголовка в ваш модуль перевода (что мы и делаем в настоящее время, используя #include директивы препроцессора). Текстовое включение огромного количества текста заголовка является частью того, что замедляет компиляцию C ++; если бы мы могли скомпилировать большую часть кода «заголовка» один раз, знать, что он нам предлагает, и компилятор запомнил бы только это (в форме «модулей»), мы могли бы сказать компилятору, что мы используем материал из определенных модулей, а не в том числе много заголовков.

Термин «компетенция»

Это английский термин, который используется в основном на юридическом языке, поэтому многие из нас (которые не говорят по-английски) никогда не слышали его. Что ж, давайте посмотрим на это в словаре (Merriam-Webster):

сфера, п. :
1.
(а) тело или принимающая часть закона
(б) предел, цель или область действия закона
2. диапазон или предел полномочий, компетенции, ответственности, озабоченности или намерения
3. диапазон зрения, понимания или познания

Так что, в основном, «сфера действия X» = «Что Х покрывает или содержит».

Сфера компетенции модулей C ++

Теперь давайте посмотрим на Проект технической спецификации модулей C ++ (именно это определяет функцию предлагаемых модулей). Это объяснит, что является целью модуля:

Область действия модуля начинается с объявления модуля и продолжается до конца модуля перевода. Сфера именованного модуля M — это набор сфер модульных модулей модулей М.

Таким образом, в основном, когда вы пишете объявление модуля, вы начинаете с объявлений, которые не охватываются моделью (например, откуда-то еще), затем вы «запускаете», определяя экспорт модуля, а затем перечисляете объявления / определения, которые покрыты. по модулю.

Пример:

// module interface of module M
int f();
export module M;
int g();
export int h();

Так int g() а также int h() находятся в «компетенции модели», но int f() нет.

В этом примере есть только один «модульный блок»; если у нас были дополнительные файлы / переводческие единицы, их соответствующее содержание после export module M также будет в компетенции.

26

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector