Генерировать динамические предкомпилированные предикаты фильтра в Scala - PullRequest
2 голосов
/ 06 ноября 2019

Я хочу предварительно скомпилировать предикат фильтра для использования в большом наборе данных. В частности, я буду динамически декодировать объект 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.

...