Комментарии 8
НЛО прилетело и опубликовало эту надпись здесь
Как я понял, в Java придется переписывать все структуры и сигнатуры методов из .h. Нет ли для этого какого-нибудь полуавтоматического конвертора?
Не думаю, что есть конвертер для сигнатур методов из хедеров, из-за директив препроцессора и макросов довольно сложно будет все правильно разобрать, но для констант вполне, в jnr-constants так и сделали, там парсер на ruby.
Статья интересная. Сам пробовал на JNA писать. Понравился своей простотой.
А в плане использования не могли бы вы объяснить, как это выглядит? Вот в JNA я описал интерфейс и вызываю метод, который загружает dll (возьмём Windows) и делает инстанс интерфейса для этой dll. И всё. Больше ничего не нужно прописывать, главное, чтобы JNA был в classpath и приложение могло найти dll. А здесь как? Вы говорили, что генерируется byte code. А на каком этапе это происходит? При сборке? Т.е. есть ли какой нибудь gradle задача (для примера), которая при сборке обрабатывает исходники и генерирует byte code? Например, как в AspectJ CTW. Я build.gradle вашего проекта посмотрел, но ничего такого не нашёл (возможно, плохо искал) и pdf презентации тоже посмотрел.
Вообще если это так же просто как JNA, но так же быстро как JNI, то потрясающе! :)
P.S. Странно, что reflection такой медленный, его же вроде от версии к версии ускоряют.
А в плане использования не могли бы вы объяснить, как это выглядит? Вот в JNA я описал интерфейс и вызываю метод, который загружает dll (возьмём Windows) и делает инстанс интерфейса для этой dll. И всё. Больше ничего не нужно прописывать, главное, чтобы JNA был в classpath и приложение могло найти dll. А здесь как? Вы говорили, что генерируется byte code. А на каком этапе это происходит? При сборке? Т.е. есть ли какой нибудь gradle задача (для примера), которая при сборке обрабатывает исходники и генерирует byte code? Например, как в AspectJ CTW. Я build.gradle вашего проекта посмотрел, но ничего такого не нашёл (возможно, плохо искал) и pdf презентации тоже посмотрел.
Вообще если это так же просто как JNA, но так же быстро как JNI, то потрясающе! :)
P.S. Странно, что reflection такой медленный, его же вроде от версии к версии ускоряют.
Байткод генерируется в рантайме, через ASM, пример: AsmStructByReferenceFromNativeConverter.java
Зависимость на ASM, кстати, может быть проблемой из-за конфликта версий, поэтому в jnr-fuse я создал отдельную таску, которая делает uber-jar.
Зависимость на ASM, кстати, может быть проблемой из-за конфликта версий, поэтому в jnr-fuse я создал отдельную таску, которая делает uber-jar.
О, так вообще всё шикарно получается — всё в runtime работает и не требует предварительной компиляции! Но при таком раскладе возможно увеличение времени старта — на генерация byte code. Не замечали такого? Или оно совсем мало?
Прошу прощения, что не в тему вопрос, но нет ли аналога FUSE для Windows платформы.
Смотрел на FUSE порт для Win32 и честно говоря как-то очень сложно там все, а нет
ли попроще реализации от самого Microsoft?
Смотрел на FUSE порт для Win32 и честно говоря как-то очень сложно там все, а нет
ли попроще реализации от самого Microsoft?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем обертку для FUSE на Java Native Runtime