2013-07-08 35 views
17

Szukam narzędzia do manipulacji na wysokim poziomie kodu bajtowego, takiego jak Javassist, ale to rozumie niektóre osobliwości Scala. Niższe poziomy narzędzi do manipulacji kodami bajtowymi powinny być względnie agnostyczne, ale dla moich przypadków użycia coś na poziomie Javassist jest znacznie lepsze. Jednak narzędzie na tym poziomie musi wiedzieć o języku źródłowym i jego mapowaniu kodu bajtowego. Czy coś takiego istnieje w Scali? Do tej pory mogłem używać Javassist z Scala dla bardzo prostych rzeczy, ale byłem ukąszony przez kilka różnic Scala/Java dla kilku innych rzeczy.Czy istnieje Scala świadomy narzędzie do manipulowania bajtami wysokiego poziomu, takie jak Javassist?

+0

Jakie zadania próbujesz wykonać? – Antimony

+0

Jeden z napotkanych problemów opisano [tutaj] (http://stackoverflow.com/questions/17385725/how-to-add-a-serialversionuid-to-a-class-instance-in-scala) i [tutaj] (http://stackoverflow.com/questions/17384913/can-scala-2-10-reflection-emulate-this-javassist-functionality) –

Odpowiedz

1

Nie sądzę, że takie narzędzie istnieje (jeszcze). Obecna sytuacja polega na tym, że nie można mieszać jednostek kompilacji skompilowanych z różnymi wersjami Scali, tzn. Klasa skompilowana ze Scala 2.9 nie będzie współpracować z klasą skompilowaną ze Scala 2.10.

Podczas korzystania z Scala 2.10 można użyć Scala reflection i Scala macros, aby osiągnąć podobne cele jak przy modyfikacji kodu bajtowego. Dla mnie wygląda to jak najbardziej przyszłościowy sposób.

Jedno z twoich pytań ma na celu dodanie numeru seryjnego ID wersji. Z pewnością powinno to być możliwe dzięki makrom Scala. Z makrami Scala można nawet zarządzać identyfikacją wersji szeregowej w zewnętrznej bazie danych zgodnie ze zmianami API.