Войти
ФлеймФорумПрограммирование

Модули C++ (29 стр)

Страницы: 126 27 28 29 30 31 Следующая »
#420
18:44, 10 окт 2023

Сейчас вот тыкнул — и, оказывается, MSVC даже, наоборот, typename confuse<n>::template q не поддерживает и пишет синтах еггог, и требует простого confuse<n>::q в обоих случаях.

#421
20:40, 10 окт 2023

Имбирная Ведьмочка
> Это только в новомодных виндах работает.
Там, вроде, есть вариант (кажется, статическая компиляция, либо надо библиотеку подложить), когда и на старых тоже работает.

#422
20:52, 10 окт 2023

}:+()___ [Smile]
> > Это только в новомодных виндах работает.
> Там, вроде, есть вариант (кажется, статическая компиляция, либо надо библиотеку подложить), когда и на старых тоже работает.
IMHO, проще не заморачиваться и использовать W-функции WinAPI с явной конвертацией строк, тем более что мест с прямым вызовом системных функций обычно не очень много.

#423
8:28, 11 окт 2023

Имбирная Ведьмочка
> Например, тупо сохранить исходный код шаблона (после препроцессора) прямо в модуле
Действительно, тупо
В pch оно и хранится
> Всё, проблема решена
ламорешение

#424
8:38, 11 окт 2023

kipar
Ага, для спецификации отдельное дерево (см vector<bool>

#425
8:40, 11 окт 2023

}:+()___ [Smile]
> А как ты думаешь, во что превращается шаблон в процессе компиляции?
Сперва специфицируется и превращается в код без шаблонов, ваш КО

#426
10:59, 11 окт 2023

1Man1
> Действительно, тупо
> В pch оно и хранится
Модули цпп — это, по факту, pch и есть (а не obj и не lib), только самую малость модифицированный, чтобы можно было загружать в середине файла и по несколько одновременно.

#427
14:15, 11 окт 2023

}:+()___ [Smile]
> Несколько лет назад M$, наконец, сподобилась выкатить нормальную поддержку
> юникода: UTF8 как ANSI кодировку.
  Только создают себе лишние проблемы зачем-то. В то время как все остальные спокойно живут с UTF-16 в рантайме, эти решили в очередной раз пособирать грабли.

Имбирная Ведьмочка
> На моём примере выше, парс самого шаблона — это ClassTemplateDecl на 141 строчке:
  Обычно в AST буква S отчевает за прилагательное "синтаксический", а тут очевидно, что это уже семантическое дерево, потому что в нём присутствует та информация, которой в нормальном AST не должно быть. Например что шаблон имеет дефолтные определения конструкторов. Поэтому смысл у него резко меняется и составляется оно уже после полного семантического разбора чуть ли не в самом конце перед кодогенерацией.

#428
14:47, 11 окт 2023

1Man1
> Ага, для спецификации отдельное дерево (см vector<bool>
тогда уж дерево деревьев. Ну т.е. если мы в шаблоне не можем узнать означает ли "x < a > b" два сравнения или объявление переменной пока не подставили в него значения (которые могут получаться из других шаблонов, в которых тоже может быть неоднозначность) , то для каждого такого случая придется создавать отдельный вариант разбора.

#429
(Правка: 15:10) 15:05, 11 окт 2023

Zefick
> Обычно в AST буква S отчевает за прилагательное "синтаксический", а тут
> очевидно, что это уже семантическое дерево, потому что в нём присутствует та
> информация, которой в нормальном AST не должно быть. Например что шаблон имеет
> дефолтные определения конструкторов. Поэтому смысл у него резко меняется и
> составляется оно уже после полного семантического разбора чуть ли не в самом
> конце перед кодогенерацией.
А это уже без разницы, как компилятор хранит шаблон у себя в памяти, главное — что это именно сам шаблон, а не какой-нибудь из его инстансов.

kipar
> Ну т.е. если мы в шаблоне не можем узнать означает ли "x < a > b" два сравнения
> или объявление переменной пока не подставили в него значения (которые могут
> получаться из других шаблонов, в которых тоже может быть неоднозначность) , то
> для каждого такого случая придется создавать отдельный вариант разбора.
Если ты будешь так плодить по дереву под каждую неоднозначность, то у тебя на первом же шаблоне всё умрёт от комбинаторного взрыва. Если мы не определяемся заранее — то тогда надо вообще никак не парсить, а сохранить поток лексем как есть, как это делается в мсвц.

А в гцц и шланге — они таки определяют заранее. Если не стоит маркера typename — то это значение. Если не стоит маркера template — то последующий < означает оператор сравнения. Если затем, при инстанциации, категория обращения не совпала с категорией определения — это ошибка компиляции.

#430
(Правка: 15:34) 15:29, 11 окт 2023

Имбирная Ведьмочка
> А это уже без разницы, как компилятор хранит шаблон у себя в памяти, главное —
> что это именно сам шаблон, а не какой-нибудь из его инстансов.
  Главное это можно ли создать и хранить такой шаблон отдельно и можно ли потом по нему создать инстансы. Пока что вопрос открытый, потому что в представленном дереве инстансы хранятся совместно с шаблоном от которого они образованы.
  Я вообще что-то мне подсказывает, что пользователь модуля не должен залезать туда и парсить AST, у него должна быть какая-то публичная метаинформация в простом для понимания виде.

#431
16:09, 11 окт 2023

Zefick
> Главное это можно ли создать и хранить такой шаблон отдельно и можно ли потом
> по нему создать инстансы.
Да конечно, сериализуй @ десериализуй.

У вас с Асланом какое-то непонятное для меня восприятие. Вы так говорите, как будто прочитать хидер и сохранить его вместе с IL — это какая-то невыполнимая задача. Что тогда, по-вашему, происходит с шаблонами при обычной компиляции? Каким образом тогда работают классические PCH?

Zefick
> Я вообще что-то мне подсказывает, что пользователь модуля не должен залезать
> туда и парсить AST, у него должна быть какая-то публичная метаинформация в
> простом для понимания виде.
Ты опять путаешь цпп-модули и длл.

#432
16:18, 11 окт 2023

Имбирная Ведьмочка
> А в гцц и шланге — они таки определяют заранее.

MS это реально империя зла и как по мне так именно мы - программисты должны это лучше всего понимать.
Ессесно там ничего личного, там просто бизнес, E^3 и так далее, но это уже понято, что все их попытки влиять на стандарты должны быть обречены и нами программистами отвергнуты сразу же и без раздумий.
Все навязанные штуки от MS должны умереть и тем более в том как они относятся к шаблонам в C++.
Им надо набрасывать в службу поддержки то, что компилятор не умеет их в templates на каждый случай когда он ведёт себя отлично от GCC/Clang и делать это монотонно, постоянно и усердно. Иначе они E^3 снова поднимут на флаг.

#433
20:47, 11 окт 2023

Имбирная Ведьмочка
> Если ты будешь так плодить по дереву под каждую неоднозначность, то у тебя на
> первом же шаблоне всё умрёт от комбинаторного взрыва.
да, это было бы следующим аргументом.

#434
7:27, 12 окт 2023

Имбирная Ведьмочка
> Вы так говорите, как будто прочитать хидер и сохранить его вместе с IL
Смысл модулей - быстрая компиляция, когда на Pentium 1 Delphi 3 конпилирует со скоростью света и Code Completion мгновенно выводит (надо сказать в C# тоже самое)

Страницы: 126 27 28 29 30 31 Следующая »
ФлеймФорумПрограммирование