Я хочу предварительно скомпилировать предикат фильтра для использования в большом наборе данных. В частности, я буду динамически декодировать объект protobuf с помощью предоставленного пользователем имени класса String и позволять пользователям генерировать предикат на основе пути String в базовый объект. Например, "foo.bar.baz == 2" может компилироваться с небольшим количеством кода, например
class Filter {
def test(in: Array[Byte]) = {
Foo.parseFrom(in).getBar.baz == 2
}
}
. В Scala есть несколько опций для предварительной компиляции кода. Вы можете использовать макросы, вы можете использовать Scalameta, кажется, говорят о новом компиляторе Dotty для scala3, вы также можете использовать некоторые Java как раз вовремя. Мой вопрос заключается в том, какой метод предикатов фильтра кодгена наиболее перспективен в Scala? В настоящее время мы используем 2.12. Я не хочу писать сложный код генерации фильтров, который будет постепенно сокращаться в новых версиях Scala.