Я ищу инструмент управления байт-кодом высокого уровня, такой как Javassist, но который понимает некоторые особенности Scala. Инструменты управления байт-кодом нижнего уровня должны быть относительно агностическими, но для моих случаев использования что-то на уровне Javassist намного лучше. Однако инструмент на этом уровне должен знать об исходном языке и его байткоде. Что-то вроде этого существует для Scala? До сих пор я мог использовать Javassist с Scala для очень простых вещей, но я был укушен некоторыми различиями Scala/Java для нескольких других вещей.
Существует ли Scala средство управления байт-кодом с высоким уровнем, например Javassist?
Ответ 1
Я не думаю, что такой инструмент существует (пока). Текущая ситуация заключается в том, что вы не можете смешивать единицы компиляции, скомпилированные с различными версиями Scala, то есть класс, скомпилированный с Scala 2.9, не будет взаимодействовать с классом, скомпилированным с помощью Scala 2.10.
Когда вы используете Scala 2.10, вы можете использовать Scala отражение и Scala, чтобы достичь аналогичных целей, как при модификации байт-кода. Для меня это выглядит как самый лучший способ доказательства.
Один из вопросов, связанных с добавлением идентификатора серийной версии. Это должно быть возможно с помощью макросов Scala. С макросами Scala он может даже управлять идентификаторами серийной версии во внешней базе данных в соответствии с изменениями API.