Есть ли инструмент для работы с байтовым кодом высокого уровня, поддерживающий Scala, такой как Javassist?

Я ищу инструмент для работы с байт-кодом высокого уровня, такой как Javassist, но он понимает некоторые особенности Scala. Инструменты манипулирования байт-кодом нижнего уровня должны быть относительно агностическими, но для моих случаев использования что-то на уровне Javassist намного лучше. Однако инструмент на этом уровне должен знать об исходном языке и его отображении байт-кода. Есть ли что-то подобное для Scala? До сих пор мне удавалось использовать Javassist со Scala для очень простых вещей, но меня укусили некоторые различия Scala / Java в некоторых других вещах.


person Daniel Mahler    schedule 08.07.2013    source источник
comment
Какие задачи вы пытаетесь выполнить?   -  person Antimony    schedule 09.07.2013
comment
Одна проблема, с которой я столкнулся, описана здесь и здесь   -  person Daniel Mahler    schedule 09.07.2013


Ответы (1)


Я не думаю, что такой инструмент существует (пока). Текущая ситуация такова, что вы не можете смешивать единицы компиляции, скомпилированные с разными версиями Scala, т.е. класс, скомпилированный с помощью Scala 2.9, не будет взаимодействовать с классом, скомпилированным с помощью Scala 2.10.

Когда вы используете Scala 2.10, вы можете использовать отражение Scala и Макросы Scala для достижения тех же целей, что и при изменении байт-кода. На мой взгляд, это наиболее перспективный способ.

Один из ваших вопросов касался добавления идентификатора серийной версии. Это определенно должно быть возможно с макросами Scala. С помощью макросов Scala можно даже управлять идентификаторами серийных версий во внешней базе данных в соответствии с изменениями API.

person stefan.schwetschke    schedule 16.09.2013