системного языка, в котором все работает в джаву, в которой не работает, хм. Рандомно вылетает сегфолт где-то в\после jl_init. Иногда инициализация проходит, код джулия отрабатывает и возвращает результат, иногда сразу сегфолт. Кто-то где-то писал об отключении обработки сигналов в jl_options, но особо никак не влияет, менял jnr-ffi на jna и обратно, все равно сегфолтит, выносил в отдельный поток, убирал побочные вызовы, оставляя только jl_init и т.д.
Мб где-то есть пример? На гитхабе лежит несколько репов, но там либо сетевой обмен данными, что мне не подходит, либо swig с большим количеством магии, ну такое. Что-то либо кто-то явно создает побочный эффект при загрузке, который я либо не вижу, либо не помню, кгм...
https://github.com/rssdev10/julia4j
спасибо за ссылку, но я там пометку сделал о swig, подразумевая именно этот репозиторий. Он увеличивает количество магии во много раз. У меня же простая загрузка либы и вызов одного метода из нее и даже такая простая конструкция умудряется сегфолтить по непонятным причинам. Пробую запускать под valgrind, но он прибивает процесс, натыкаясь на неизвестную инструкцию, судя по всему какое-то расширение. Выключение jit-компилятора и sse в jvm особо ничего не меняют, мб где-то из джулии, но как в джулиевских доках написано передал туда --smc-check=all-non-file, но как-то не особо помогает.
там же cmake всю магию скрывает
В общем, сегфолт не ушел, но раз нужно лезть в jni или иметь платформозависимые бинарники, то тут уже очень близко и свои обертки. Отсюда отдельное простенькое приложение на Dlang, которое напрямую работает с апи джулии, поднимает сервер и отвечает за запросы джавовского GUI-клиента. Изначально я потестил на сокетах, но там где сокеты, недалеко уже и rest, что для прототипа более удобно. За счет разделения появились минусы: сложность, уменьшение надежности, платформозависимость и т.п. С другой стороны, появилась универсальность и можно использовать из разных приложений, ну и кастомить как угодно. Хотя могут быть проблемы с передачей изображений\буферов, хм... вероятно, масштабироваться этот обмен будет плохо за счет своей распределенной\сетевой природы. Странно, что с jnr\jna такой фейл, не ожидал, что такая примитивная задача потребует огромного количества времени. С другой стороны, тут срабатывает правило "каждой задаче - свой инструмент": дизайн джавовских либ и сильная отдаленность их от сишного апи, множество слоев абстракции сильно повышают энтропию, создавая неопределенность и очень много мест для ошибок.
Обсуждают сегодня