Любой высокоуровневый редактор байт-кода? - PullRequest
2 голосов
/ 15 октября 2011

Предположим, у меня есть следующее в Scala

object Foo {
  var functions: List[String => String] = Nil // can be any type to any type.
  def addFunc(f:String => String) = functions = f :: functions
}

Во время выполнения мне дают Foo с некоторыми добавленными функциями.Теперь я хочу создать новый файл .class, реализующий что-то вроде следующего в Scala:

object MyObject { 
  def process1(s:String) = // call Foo.functions(1)
}

Затем я хочу сохранить MyObject в байт-код, который может быть выполнен позже, даже если Foo там нет,

Выше приведен пример того, что я хочу сделать.Мне даны имена MyObject, process1, и я должен сгенерировать исполняемый файл MyObject.class.Источник MyObject не нужен (это вполне мог быть источник Java).

Итак, на высоком уровне нам нужно взять «снимок» памяти в Foo.function(1), преобразовать этот снимок в байт-код для хранения и с помощью этого сгенерировать байт-код MyObject.

Все инженерные библиотеки байт-кода, которые я нашел, являются слишком низкоуровневыми, поэтому мне было интересно, есть ли библиотека более высокого уровня, которая позволяет мне иметь дело с абстрактными объектами, такими как функции и т. Д.

Ответы [ 2 ]

6 голосов
/ 15 октября 2011

Вы смотрели на модель Tree ASM ?Ранее я использовал только модель Event, но дерево звучит как то, что вы ищете.Вы найдете обзор в разделе 1.2.2 руководства пользователя *1003* (PDF - я не думаю, что есть HTML-версия, или я бы связал ее).

0 голосов
/ 16 октября 2011

Я также порекомендую ASM framework. Есть статья из AOSD'07 о реализации общих шаблонов преобразования байт-кода с ASM. Разделы «Объединение двух классов в один» и «Встроенный метод» описывают преобразования байт-кода, очень близкие к вашим.

...