#scala #metaprogramming #introspection #scalameta
#scala #метапрограммирование #самоанализ #scalameta
Вопрос:
Или это вообще актуально?
Я имею в виду использование ClassTag
TypeTag
аннотаций or, например:
scala>
import scala.reflect.runtime.universe.TypeTag
def f[T : TypeTag](ls : List[T]) : String = {
???
}
результаты в :
f: [T](ls: List[T])(implicit evidence$1: reflect.runtime.universe.TypeTag[T])String
Как вы можете видеть, компилятор TypeTag
видит, который добавляет неявный аргумент. Есть ли эквивалент в scala.meta
? Как это будет работать, и будут ли какие-либо изменения в способе обработки удаления?
Ответ №1:
На данный момент scala.meta
не обеспечивает самоанализ во время выполнения, однако это запланировано для будущих выпусков. API будут похожи на scala.reflect
(но с точки зрения scala.meta
, например, отличия Abstract Syntax Trees
, отсутствия открытых внутренних компонентов компилятора и т. Д.), И я действительно надеюсь, что конечный пользователь не увидит большой разницы.
Таким образом, функциональность ClassTag/TypeTag
вряд ли исчезнет. Скорее всего, scala.meta
будет использоваться мост ( paradise
) для получения доступа к scalac
внутренним элементам (и это включает scala.reflect
в себя ).
Также обратите внимание, что это scala.reflect
будет поддерживаться в scala 2.x
ветке, но не в dotty
.