В настоящее время я изучаю D, и одна из вещей, которые меня интересуют, заключается в том, может ли D дублировать возможности генерации кода языков JVM.
Вот сценарий:
У меня есть объект, и я хочу сгенерировать строку на основе этого объекта, которая дает его имя и все его поля. В Java / Scala я мог бы просто использовать отражение, но предположим, что скорость - это проблема. Я мог бы использовать библиотеку генерации байт-кода, чтобы динамически генерировать и компилировать класс, который делает это без отражения. Реализация будет разбита на итерацию по полям объекта и получение его имени через рекурсию и использование этой информации для динамической генерации Java (или байт-кода), который напрямую обращается к полям.
Если вам не нравится этот сценарий, потому что он слабый и / или нереалистичный, еще один, который может быть более реалистичным, - это оптимизированная сериализация объектов.
Я видел примеры, когда оценка D во время компиляции и / или шаблонное метапрограммирование используются для таких вещей, как предварительный расчет последовательности Фибоначчи во время компиляции и других рекурсивных алгоритмов, но есть ли способ сделать такие вещи, используя только язык и компилятор, или вам нужно разработать отдельный генератор кода и запустить его перед компилятором, чтобы получить такую функциональность?