Разрешает ли D отделять интерфейс от реализации в шаблонах? - PullRequest
4 голосов
/ 27 ноября 2011

Я еще не пробовал D, но мне кажется, что это очень интересный язык, который нашел некоторые изящные решения проблем в C ++.Мне интересно, это также позволило отделить интерфейс от реализации в шаблонах?Если да, то как?

Ответы [ 2 ]

7 голосов
/ 27 ноября 2011

никакие используемые шаблоны не раскрываются полностью во время компиляции

это означает, что компилятор должен знать полный код шаблона, что делает невозможным его исключение из .di файлов

2 голосов
/ 27 ноября 2011

В какой-то момент обработки использования шаблона, D требуется all информация о шаблона.Тем не менее, нет причины, по которой эта информация должна быть закодирована как исходный исходный код (OTOH, как подробности реализации, все современные компиляторы D требуют этого).Это фундаментальная проблема любого языка, который имеет шаблоны сильнее, чем шаблоны.Последствия этого зависят от того, что вы пытаетесь сделать.

Если вы заинтересованы в разделении интерфейса и реализации, чтобы скрыть реализацию (например, доставку двоичных библиотек и заголовочных файлов в C), то это не можетбыть сделаноСамое близкое, что вы можете получить, - это какая-то система запутывания кода.

Если, с другой стороны, вы заинтересованы в том, чтобы избежать затрат на повторную обработку шаблонов для каждой перекомпиляции, что-то более общее, например, двоичный предварительно скомпилированный заголовокФормат может позволить повторное использование результатов лексического, синтаксического и некоторых проходов при компиляции нескольких других модулей.Фактически, это было бы проще сделать с D, чем с C.

Третий вариант - генерация временного кода связи, но это мало чем отличается от обычного связывания с агрессивным использованием анолога для предварительно скомпилированных заголовков..

...