LINUX.ORG.RU

Как писать ассемблер рядом с Java?

 


0

2

Привет! Вопрос спецам по Java. Я хочу писать x86 ассемблерный код прямо внутри кода проекта. Но не хочу оборачивать это в JNI (даже в виде JNA). Ну или по крайней мере, не хочу делать это руками. И хочу сделать это в юзерспейсе, а не компиляторными интринсиками (пересобирать JDK - плохо). Есть ли какая-то библиотека, которая уже так делает? Кое-что гуглится, но там какой-то полный ад.

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 1)

Скажи что конкретно тебе надо на асме считать. Если паралелизируемую математику, то например OpenCL через lwjgl будет работать приблизительно так. Там есть JNI, но ты не собираешь библиотеки сам. А так да, ты будешь давать строку, не на ассемблере, а на GLSL, который в рантайме превратится в машинный код твоей видеокарты и улетит на ней исполняться.

vertexua ★★★★★
()

Еще можешь LLVM один раз подключить или через JNI или вообще генерировать исходник в виде текста и скармливать по pipe в какой-то CLI компилятор из LLVM стека. Потом загружать. Естественно все это за анотацией запрятать если хочешь.

vertexua ★★★★★
()
Ответ на: комментарий от stevejobs

на жабе пишу не из-за WORA, а потому что это удобно - хороший язык, отличный тулинг, супер поддержка в редакторах

бугага. привет из альтернативной реальности.

waker ★★★★★
()

Есть ли какая-то библиотека, которая уже так делает?

node.js хватит всем.

anonymous
()
Ответ на: комментарий от iZEN

ой да что ты. для начала ответь себе на эти два вопроса:

1. могут ли фунцкии, которые написаны как пример выше, быть вызваны жава вм непосредсвенно? (конечно же если подставить правильные аргумены и написать жава файл с native методами, ты понял о чём я).

2. на каком языке программирования они написаны?

anonymous
()
Ответ на: комментарий от anonymous
extern "C" {
SomeJavaJNIShitTypedef some_c_function(struct SomeJavaJNI *p) {
  cout << "привет" << std::endl;
}

SomeJavaJNIShitTypedef some_c_function(struct SomeJavaJNI *p, int overloaded) {
  cout << "ой, но ведь это же C++!" << std::endl;
}
}

:-)

anonymous
()
Ответ на: комментарий от ox55ff

Язык C# делал тот, кто делал Borland Turbo Pascal и Delphi. А там asm-вставки в системной библиотеке в порядке вещей. И никакой C/C++ не нужен.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

По резульататам брейншторминга было принято решенеи всё-таки заимплементить JVMCICompiler - избранные методы отправляются на подмену ручным машкодом, остальное отправляется в C2 opto. Собственно, так работает Truffle, почему бы и самому это не сделать. Если окажется слишком сложно, можно взять готовый Graal и поменять там (можно даже заэкспозить методы типа emitByte прямо в клиентский код на java).

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от anonymous

А вот native method перегрузи и натрави javah. Ну как? Видишь перегрузку? :-)

anonymous
()

Java

Я хочу писать x86 ассемблерный код прямо внутри кода проекта

Я не специалист, но мне кажется, что ты делаешь что-то неправильно.

BceM_IIpuBeT ★★☆☆☆
()
Последнее исправление: BceM_IIpuBeT (всего исправлений: 1)

Да, умеешь удивить своими темами.

dave ★★★★★
()

Я хочу писать x86 ассемблерный код

лучше байткод java-машины

anonymous
()

Я так понял, Стиви себе просто скор накручивает этой темой.

Это любому «ежу», который долго работает на Java, понятно как сделать себе простую универсальную обёртку JNI для вызова функций на Си с ассемблерными вставками.

Serg_HIS
()
Ответ на: комментарий от anonymous

Прости, анончик, разгребать горы тупака было лень; а Ctrl+F сделать не догадался.

EXL ★★★★★
()

запилите что ли новость про 25ый ioccc

anonymous
()
Ответ на: комментарий от Deleted

Ограничение с именами здесь единственное

одинаковых имен не будет, т.к. хидеры для нативных методов генерит javah. для перегруженых native методов javah генерит разные имена. Но анонимчик выше настолько туп (или косит под дурачка, Лол :-), что никак не может этого понять.

anonymous
()
Ответ на: комментарий от stevejobs

хороший язык

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

Deleted
()
Ответ на: комментарий от stevejobs

ОК, почитаю потом. С джавой я не очень, а вот ассемблер внезапно стал нужен.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.