Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Мёртвый Даун Россия  
Дата: 26.09.15 16:29
Оценка: 41 (6)
Я так понимаю, это будет С++17? Ну, крута!

Поддержка C++ модулей в Visual Studio 2015 Update 1



На конференции CppCon, которая проходит прямо сейчас, команда разработчиков компилятора Visual C++ заявила, что в следующем обновлении (Visual Studio 2015 Update 1) в компилятор С++ от Microsoft будет добавлена экспериментальная возможность из нового (ещё не утверждённого) стандарта С++ — поддержка модулей!

Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
c++17
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: fdn721  
Дата: 26.09.15 16:53
Оценка: +1 -4 :)
Здравствуйте, Мёртвый Даун, Вы писали:

Поменяли шило на мыло. Да и чую проблем будет вагон и маленькая тележка. Особенно в реализации от индусов из Microsoft.
Re[2]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Abyx Россия  
Дата: 26.09.15 18:09
Оценка:
Здравствуйте, fdn721, Вы писали:

F>Поменяли шило на мыло. Да и чую проблем будет вагон и маленькая тележка. Особенно в реализации от индусов из Microsoft.


Есть N4465, какая разница кто его реализует.
In Zen We Trust
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: 11molniev  
Дата: 26.09.15 19:40
Оценка: +1
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Я так понимаю, это будет С++17? Ну, крута!

МД>На конференции CppCon, которая проходит прямо сейчас, команда разработчиков компилятора Visual C++ заявила, что в следующем обновлении (Visual Studio 2015 Update 1) в компилятор С++ от Microsoft будет добавлена экспериментальная возможность из нового (ещё не утверждённого) стандарта С++ — поддержка модулей!

Такая поспешность и внезапность для такой серьёзной вещи чревата костыльной реализацией, которая через 5-10 лет будет приносить большие проблемы.
Так то оно идея и хорошая, но вот какой окажется реализация мы только увидим.
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: VTT http://vtt.to
Дата: 26.09.15 19:42
Оценка:
А установщик redistributable пакетов они уже починили, или тоже Update1 ждать?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: UA Украина  
Дата: 27.09.15 11:56
Оценка:
МД>Я так понимаю, это будет С++17? Ну, крута!
МД>

МД>Поддержка C++ модулей в Visual Studio 2015 Update 1


Dll module hell тоже будет?
Re[2]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 11:12
Оценка:
Здравствуйте, UA, Вы писали:

UA>Dll module hell тоже будет?


Судя по всему — да, будет.
И каждый день — без права на ошибку...
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: T4r4sB Россия  
Дата: 30.09.15 11:34
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

А шаблоны экспортировать из модуля можно будет?
Re[3]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 11:43
Оценка: 1 (1) -1 :)
Здравствуйте, Abyx, Вы писали:

A>Есть N4465, какая разница кто его реализует.


Что-то я сомневаюсь, что это вообще надо реализовывать.
На вскидку. Зачем нужен этот новый синтаксис:
import std.vector; // #include <vector>

?
Что это за убожество? Зачем import без диеза? Зачем 'std.' префикс?
Почему нельзя написать, например, так:
#include {vector}

Или, если вам, таки, надо префикс (зачем?), так:
#include {std.vector}


Это же относится к "export" и "module".

Там есть ровно две заслуживающие внимания здравые идеи:
1. включение файла изолированного от распространения макросов.
2. Template explicit specializations. Это верный шаг в направлении поддержки шаблонных виртуальных функций.

Всё остальное — либо лажа, либо внутренняя кухня компилятора, которая может быть реализована в рамках текущего стандарта.
И каждый день — без права на ошибку...
Re[2]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 12:49
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>А шаблоны экспортировать из модуля можно будет?


Да, но если шаблон параметризован чем-то, о чем модуль не знает, то результат будет принадлежать текущей единице трансляции.
И каждый день — без права на ошибку...
Re[4]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Went  
Дата: 30.09.15 16:02
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:
BFE>Что это за убожество? Зачем import без диеза?
Потому что это не функция препроцессора.
Re[5]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 16:26
Оценка:
Здравствуйте, Went, Вы писали:

BFE>>Что это за убожество? Зачем import без диеза?

W>Потому что это не функция препроцессора.

И что? Из-за этого надо вводить чуждый синтаксис? Препроцессору ничто не мешает игнорировать эту конструкцию.
И каждый день — без права на ошибку...
Re[6]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Went  
Дата: 30.09.15 17:07
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>И что? Из-за этого надо вводить чуждый синтаксис?

Почему он чуждый? Обычное ключевое слово. Новое, но рядовое ключевое слово. Почему вложенные модули через точку, а не через двойное двоеточие? Ну, наверное, чтобы как-то указать, что модули это не пространства имен, а вещи, им перпендикулярные.

BFE>Препроцессору ничто не мешает игнорировать эту конструкцию.

Директива препроцессора (визуально), которая игнорируется препроцессором? При том, что остальные новые ключевые слова диез не подразумевают?

Но в целом я с вами солидарен. Предложенное решение выглядит подозрительно. А если учесть, какой длинный путь такому решению потребуется до внедрения в массы, то вообще труба. Параллельно конкурирующие друг с другом модули и инклуды, боюсь, вообще мозги выносить будут. Слишком длинный это шаг, слишком много он поломает.
Отредактировано 30.09.2015 17:11 Went . Предыдущая версия .
Re[7]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 18:05
Оценка: -1
Здравствуйте, Went, Вы писали:

BFE>>И что? Из-за этого надо вводить чуждый синтаксис?

W>Почему он чуждый? Обычное ключевое слово. Новое, но рядовое ключевое слово.

Новые ключевые слова в язык вводить сложно. Что, если есть класс:
class import {...};

тогда
import specialvector;

это просто глобальная переменная...

W>Почему вложенные модули через точку, а не через двойное двоеточие? Ну, наверное, чтобы как-то указать, что модули это не пространства имен, а вещи, им перпендикулярные.


Я думаю, авторы просто списывали синтаксис с другого языка. Не подумав.

BFE>>Препроцессору ничто не мешает игнорировать эту конструкцию.

W>Директива препроцессора (визуально), которая игнорируется препроцессором? При том, что остальные новые ключевые слова диез не подразумевают?
Может не игнорироваться, может включать модуль (чтобы это действие не означало). Не суть.

W>Но в целом я с вами солидарен. Предложенное решение выглядит подозрительно. А если учесть, какой длинный путь такому решению потребуется до внедрения в массы, то вообще труба. Параллельно конкурирующие друг с другом модули и инклуды, боюсь, вообще мозги выносить будут. Слишком длинный это шаг, слишком много он поломает.


Мне вообще идея модулей кажется несколько странной в том виде, в котором она предложена. Это слишком сильно похоже на систему управления precompiled хеадерами. Ну, а если это precompiled хеадер'ы, то к чему весь этот огород? Скомпилируйте h-файл в промежуточный формат и сделайте изолированное от макросов подключение. Будет ровно то же самое.
И каждый день — без права на ошибку...
Re[8]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Went  
Дата: 30.09.15 18:56
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:
BFE>Мне вообще идея модулей кажется несколько странной в том виде, в котором она предложена. Это слишком сильно похоже на систему управления precompiled хеадерами. Ну, а если это precompiled хеадер'ы, то к чему весь этот огород? Скомпилируйте h-файл в промежуточный формат и сделайте изолированное от макросов подключение. Будет ровно то же самое.
Да, не сильно вдумываясь в детали, мне тоже кажется, что достаточно было ввести новый формат "модуль", в котором будет либа + скомпилированные заголовоки. И чтобы этот модуль можно было подключать как статически, так и динамически. То есть:
1. Таргет компилятора "модуль". Модуль может быть как полностью скомпилированным в машинный код, так и "кроссплатформенным", содержащим "сырой код" в какой-то удобной для компилятора форме.
2. Более мощная система изолирования реализаций в заголовочных файлах. Чтобы можно было указать что именно экспортирует этот модуль, а что он вытянул для своей реализации.
3. Директива препроцессора #import "blablalba.cm" — раскрывается во включение необходимых (скомпилированных) заголовков + некий аналог #pragma comment(lib...), подключающий тело модуля при линковке.
4. Директива препроцессора #include "blablalba.cm" — раскрывается только во включение заголовоков без подключения, давая возможность подключить указанный модуль через какой-то вызов стандартной библиотеки std::import("blablalba.cm"). Также вынести в стандарт поиск функций в модулях по именам. Например:
void main()
{
  auto module = std::import("module.cm");
  auto create_object = module.function<Object(void)>("create_object");
  auto object = create_object();
}

5. Новые скобки для включения, например #import [stl.vector], если потребуется новый способ искать модули в каком-то "стандартизированном" менеджере пакетов. Позволяющий писать и #include [stl.vector], если хочется подключить заголовок по-старинке без затягивания кода.
Хотя, все это выходит довольно похожим на предложенное Майкрософтом
Re[4]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Abyx Россия  
Дата: 30.09.15 20:37
Оценка:
Здравствуйте, B0FEE664, Вы писали:

A>>Есть N4465, какая разница кто его реализует.


BFE>Что-то я сомневаюсь, что это вообще надо реализовывать.

BFE>На вскидку. Зачем нужен этот новый синтаксис:
BFE>
BFE>import std.vector; // #include <vector>
BFE>

BFE>?
BFE>Что это за убожество? Зачем import без диеза? Зачем 'std.' префикс?

#import сломает существующие препроцессоры (препроцессор бывает внешним, а не встроенным в компилятор).
директива import к препроцессору отношения не имеет, ей незачем иметь #

'std.' нужен очевидно потому что это пространство имен (в широком смысле слова).
чтобы не путать std.vector с boost.vector, llvm.adt.vector, mylib.vector и т.п.

BFE>Почему нельзя написать, например, так:

BFE>[ccode]
BFE>#include {vector}
почему фигурные скобки? что за убожество? нравится шифт нажимать?
In Zen We Trust
Re[9]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Abyx Россия  
Дата: 30.09.15 20:43
Оценка: +1
Здравствуйте, Went, Вы писали:

W>Хотя, все это выходит довольно похожим на предложенное Майкрософтом


это не "предложенное Майкрософтом", а результат работы всей SG2.
это всеравно что сказать что С++11/14/1z придумала майкрософт, потому что Саттер — председатель комитета по стандартизации.
In Zen We Trust
Re[5]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: B0FEE664  
Дата: 30.09.15 21:05
Оценка:
Здравствуйте, Abyx, Вы писали:

BFE>>Что это за убожество? Зачем import без диеза? Зачем 'std.' префикс?


A>#import сломает существующие препроцессоры (препроцессор бывает внешним, а не встроенным в компилятор).

A>директива import к препроцессору отношения не имеет, ей незачем иметь #

А типов import, export и module в глобальном пространстве никаких исходников никогда не встречается?

A>'std.' нужен очевидно потому что это пространство имен (в широком смысле слова).

A>чтобы не путать std.vector с boost.vector, llvm.adt.vector, mylib.vector и т.п.

Это не пространство имён, а название модуля. Зачем std. префикс, если у стандартных инклюдов его нет:
Смотрите, никакой путаницы нет:
#include <array>
#include <boost/array>



BFE>>Почему нельзя написать, например, так:

BFE>>[ccode]
BFE>>#include {vector}
A>почему фигурные скобки?

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

A>что за убожество?

Предложите лучше.

A>нравится шифт нажимать?

Французы, например, правый альт жмут, чтобы фигурные скобки набрать — и ничего, не жалуются.
И каждый день — без права на ошибку...
Re[6]: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: Abyx Россия  
Дата: 30.09.15 22:26
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>А типов import, export и module в глобальном пространстве никаких исходников никогда не встречается?


если каждый модуль имеет свое пространство имен (а так и должно быть), то "import foo.bar;" это не валидный синтаксис
и если все директивы import в начале единицы трансляции, то там не будет никаких struct import;

A>>'std.' нужен очевидно потому что это пространство имен (в широком смысле слова).

A>>чтобы не путать std.vector с boost.vector, llvm.adt.vector, mylib.vector и т.п.

BFE>Это не пространство имён, а название модуля. Зачем std. префикс, если у стандартных инклюдов его нет:

BFE>Смотрите, никакой путаницы нет:
BFE>
BFE>#include <array>
BFE>#include <boost/array>
BFE>

то что все стандартные заголовочные файлы засунуты в папку первого уровня — это историческая ошибка. лучше бы они были <std/vector>
In Zen We Trust
Re: Поддержка C++ модулей в Visual Studio 2015 Update 1
От: CEMb  
Дата: 02.10.15 03:34
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Я так понимаю, это будет С++17? Ну, крута!


а бета уже есть? где можно попробовать?

upd.ps: сижу на работе, вокруг целая армия яверов, я один с++, даже радостно поделиться не с кем
Отредактировано 02.10.2015 3:50 CEMb . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.