169 похожих чатов

А кто-нибудь вызывал джулию из java? Портирую тут код с

системного языка, в котором все работает в джаву, в которой не работает, хм. Рандомно вылетает сегфолт где-то в\после jl_init. Иногда инициализация проходит, код джулия отрабатывает и возвращает результат, иногда сразу сегфолт. Кто-то где-то писал об отключении обработки сигналов в jl_options, но особо никак не влияет, менял jnr-ffi на jna и обратно, все равно сегфолтит, выносил в отдельный поток, убирал побочные вызовы, оставляя только jl_init и т.д.

Мб где-то есть пример? На гитхабе лежит несколько репов, но там либо сетевой обмен данными, что мне не подходит, либо swig с большим количеством магии, ну такое. Что-то либо кто-то явно создает побочный эффект при загрузке, который я либо не вижу, либо не помню, кгм...

4 ответов

20 просмотров

https://github.com/rssdev10/julia4j

Constantin_FV- Автор вопроса
Roman Samarev
https://github.com/rssdev10/julia4j

спасибо за ссылку, но я там пометку сделал о swig, подразумевая именно этот репозиторий. Он увеличивает количество магии во много раз. У меня же простая загрузка либы и вызов одного метода из нее и даже такая простая конструкция умудряется сегфолтить по непонятным причинам. Пробую запускать под valgrind, но он прибивает процесс, натыкаясь на неизвестную инструкцию, судя по всему какое-то расширение. Выключение jit-компилятора и sse в jvm особо ничего не меняют, мб где-то из джулии, но как в джулиевских доках написано передал туда --smc-check=all-non-file, но как-то не особо помогает.

Constantin_FV- Автор вопроса

В общем, сегфолт не ушел, но раз нужно лезть в jni или иметь платформозависимые бинарники, то тут уже очень близко и свои обертки. Отсюда отдельное простенькое приложение на Dlang, которое напрямую работает с апи джулии, поднимает сервер и отвечает за запросы джавовского GUI-клиента. Изначально я потестил на сокетах, но там где сокеты, недалеко уже и rest, что для прототипа более удобно. За счет разделения появились минусы: сложность, уменьшение надежности, платформозависимость и т.п. С другой стороны, появилась универсальность и можно использовать из разных приложений, ну и кастомить как угодно. Хотя могут быть проблемы с передачей изображений\буферов, хм... вероятно, масштабироваться этот обмен будет плохо за счет своей распределенной\сетевой природы. Странно, что с jnr\jna такой фейл, не ожидал, что такая примитивная задача потребует огромного количества времени. С другой стороны, тут срабатывает правило "каждой задаче - свой инструмент": дизайн джавовских либ и сильная отдаленность их от сишного апи, множество слоев абстракции сильно повышают энтропию, создавая неопределенность и очень много мест для ошибок.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Карта сайта