Cистема модулей C++ уже доступна в Visual Studio 2015

Первое обновление Update 1 к Visual Studio 2015 принесло новую экспериментальную возможность для C++. Долгожданная Система модулей C++, которая возможно войдет в стандарт C++ 17.

Любой, кто разрабатывал большой проект на C++, знаком с проблемами, связанными с необходимостью связывать компоненты через заголовочные файлы. Дупликация между заголовочными файлами и исходным кодом, необходимость использовать идиому PIMPL, не говоря уже об огромных накладных расходах на вычитывание с диска бесконечных цепочек маленьких заголовочных файлов при компиляции

Итак, чтобы попробовать новые возможности, необходимо:

  • Создать исходный файл модуля с расширением ixx (почему-то для cpp файлов это не работает) и использовать ключи компилятора /experimental:module
// file: MyModule.ixx
module M;

export int f(int x)
{
    return 2 + x;
}
export double g(double y, int z)
{
    return y * z;
}
 
    • В файле, куда подключается модуль использовать ключи компилятора /experimental:module /module:reference ../Modules/M.ifc
// file: main.cpp
#include "stdafx.h"
#include <iostream>

import M;

int main()
{
    std::cout<<f(5)<<std::endl;
    std::cout<<g(0.0, 1);
    return 0;
}
 

При компиляции модуля помимо обычного OBJ файла появляется файл IFC, содержащий метаданные об интерфейсе модуля. Представление этого файла основано на работе Gabriel Dos Reis and Bjarne Stroustrup под названием «Внутреннее представление программы», реализацию можно найти на GitHub.

Следует отметить, что пока Visual Studio не предлагает встроенных средств для просмотра интерфейсов модулей, как это сделано, к примеру, для .NET сборок. Ожидаем, что полная поддержка модулей принесет с собой и удобные вспомогательные инструменты для работы с ними

Полный исходный код можно найти на BitBucket


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *