Я думаю, что D static if
- интересная особенность языка. Это подсказывает мой вопрос: существуют ли другие примеры скомпилированных языков, в которых у компилятора есть сильное представление о коде, и есть ли возможности для доступа к ним для языков?
Например, этот код предоставляет нечто похожее на repr
из Python:
char[] repr(T)(T value) {
static if (is(typeof(value.__repr__))) { // class T provides a "repr()" method
return value.__repr__();
} else static if (is(T:string)) {
return `"` ~ value ~ `"`;
// ...other cases...
} else {
return toString(value);
}
}
Я думаю, что это классно, потому что он позволяет использовать другой и более общий подход к тому, что делает перегрузка, что является своего рода наизнанку, чтобы сделать код более динамичным по сравнению с такими функциями. Например, компилятор знает, сколько полей имеет мой класс, но мой код не имеет доступа к этой информации во время компиляции на большинстве языков.
CAVEAT: Этот последний абзац содержал в нем свои мнения, но я просто хочу дать некоторые мотивы и разъяснения по моему вопросу, а не вызвать споры. Я просто хочу узнать, имеют ли какие-либо другие скомпилированные языки такие функции.