Некоторое время назад я работал над алгоритмом, который обрабатывал код и требовал API отражений. Нас интересовала его реализация для нескольких языков, но API отражений для одного языка не работал бы с любым другим языком. Так есть ли что-нибудь вроде «универсального API отражений», который работал бы для всех языков или, может быть, для нескольких основных языков (.NET, Java, Ruby, Python)?
Если нет, можно ли построить такую штуку, которая может обрабатывать классы с разных языков.
Как бы вы разработали единый способ обработки объектно-ориентированного кода на нескольких языках?
Например: многоязычный обозреватель объектов. Вы загружаете классы .NET / Java / Python, и он показывает все члены. И возможности безграничны





Я не верю, что существует универсальный API Reflection. Любой API Reflection зависит от метаданных, которые компилятор генерирует для языковых конструкций, и они могут сильно различаться от языка к языку, даже если существует общее подмножество для нескольких языков.
В .NET есть CodeDOM, который предоставляет способ сгенерировать универсальное синтаксическое дерево, а затем сериализовать его как код (C#, VB .NET и т. д.) И / или скомпилировать его. Конечно, это зеркальное отображение Reflection, но если кто-нибудь когда-нибудь напишет инструмент для генерации AST непосредственно из IL, функциональность может начать перекрываться.
В любом случае это самое близкое, что я могу придумать.
API отражения зависит от метаданных, сгенерированных для кода, поэтому у вас может быть универсальный API для всех языков на JVM или всех языков в CLR ... но на самом деле было бы невозможно создать тот, который использует Python, Java, VB и т. д.
Если вам нужен универсальный API, вам нужно выйти за рамки языка. См. Наш Мета-инструмент DMS для обработки произвольных языков и ответов на произвольные вопросы, включая те, которые вы считаете отражением. (Op запросил поддержку различных языков: в DMS есть полные парсеры для C#, VB.net, Java и Python. Ruby еще нет в списке; мы над этим работаем).
Я не понимаю, чего вы хотите. API всегда нацелен на один язык. Что ты хочешь с этим делать? Можете добавить образец.