Я являюсь частью команды компиляторов и этим летом работаю над взаимодействием C ++, чтобы взаимодействовать с куском кода C ++, написанного на современном C ++ 14.
C ++ очень хорошо поддерживаетсяD, на самом деле это, вероятно, один из лучших вариантов поддержки для языка такого размера.Например, вы можете выбросить любое исключение, полученное из std::exception
в C ++, и перехватить его на стороне D.Вы можете написать класс в D и использовать его из D (виртуальный метод или нет) или наоборот.Вы можете создать подкласс класса D из C ++, и вы можете создать подкласс класса C ++ из D. Вы можете вызывать созданные шаблоны функций!
Теперь есть несколько уловов:
- Есливы делаете что-то не очень идиоматическое в C ++, например, бросаете int, это будет проблемой.
- Код C ++ не должен нарушать систему типов D.Например, вы не можете представить
char* const*
(указатель на постоянный указатель на изменяемый символ), потому что const у D является транзитивным, поэтому он должен быть const char* const*
. - Поддержка кросс-версии все еще не оптимальна.В настоящее время существует сочетание C ++ 98 и C ++ 11, и нет способа контролировать, что использовать.Это не имеет значения в 95% случаев, поскольку D взаимодействует на двоичном уровне, и касается только соглашения о вызовах и искажения символов.
Что касается платформ, Windows очень хорошо поддерживается (мыесть игровые разработчики, использующие его).Поддержка POSIX для вызова шаблонных функций более поздняя, но у меня работает.
Вот и все для поддержки языка.Инструменты вокруг него (например, о чем упоминал Деян) все еще создаются, и отрасль проявляет большой интерес к их использованию, поскольку D считается гораздо более приятным в использовании, и он может предложить легкий путь перехода для разработчиков на C ++.Фактически, все 3 D-компиляторы (DMD, GDC, LDC) используют общий фронтенд, написанный на D, и подвергают C ++ свой бэкэнд (DMC, GCC, LLVM соответственно).
TL; DR:
- Если вы хотите вызвать C ++ и можете сэкономить время, чтобы написать несколько привязок в D для ваших классов / функций, да.
- Если вы не можете написать привязки, следите за обновлениями.
- Если вы хотите выставить D-код на C ++, то да!