LINUX.ORG.RU
ФорумTalks

Java с ассемблерными и C++ вставками - взлетит?

 , , ,


0

3

Идея: джава с ассемблерными вставками. Прямо inline рядом с джавакодом.

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

Соответственно, при компиляции «джава-кода с ассемблерными вставками», будет каждый раз генериться (или браться из кэша) специальная модифицированная версия OpenJDK.

(Либо подключаться через грааль-интерфейс как SOшка. Но пока его не смотрел, там скорей всего нужно будет вначале этот грааль напротив выпилить, и подменить на что-то свое с таким же интерфейсом, то есть все равно нужна кастомная сборка JDK, но скорость пересборки выше - можно больше положить в файловый кэш)

Почти то же про c++ вставки: c++ вырезается и заменяется на вызов метода, дизасмится (потому что напрямую использовать c++ в этом месте нельзя), на основе асма генерится интринсика и дальше по тексту.

Вот собстенно это то, зачем программисту на Java нужно знать C++ и ассемблер.

Перемещено tailgunner из development

★★★★☆

«Из буханки черного хлеба можно сделать троллейбус с рожками. Можно. Но зачем?»

И смысл такой химеры, если Java затачивалась под безопасный и переносимый код, а ассемблер - на железозависимый и небезопасный, но быстрый?

aido ★★
()

По моему, это треш. Java создана для того, чтобы быть переносимой. Если не подходит - не пиши да Java, пиши на C++, D, Rust, Swift, C, etc.

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

Java и так тормозит. А там где не тормозит ее не применяют.

Fixed

Kroz ★★★★★
()

с ассемблерными взлетит. Но полетит низэнько, к дождю видать. А в с++ вставки не верю.

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

можно попробовать замутить лютое мясо, и разрешить мешать C++ код с джавой прям в одном файле без разграничения. Например в Java классе разрешить написать named inner class на C++ с блекджеком и факториалом на шаблонах. Потом соответственно куски крестов автоматически детектим (как-то, не знаю), собираем их в c++ вставку, как-то прокидываем контекст (unsafe? jni+shared memory?), из вставки генерим асм и дальше по тексту

stevejobs ★★★★☆
() автор топика

Я бы не стал использовать такую фичу. Надо писать на ассемблере — пиши функцию на ассемблере, пиши обвязку через JNI на C и вызывай её из джавы. Всё чётко разделено, понятно и удобно. А твой подход мне не нравится. Каша-малаша какая-то.

Legioner ★★★★★
()

Угу, так и вижу счастливые лица индусов, которым на сопровождение подкинули код стиви со вставками на асме и C++.

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

там есть помойка в виде hpp файлика, куда можно нафигачить перехват чего-нибудь, проще всего метода. Там уже такого говна понаписано больше байта штук, так что ЭТО НОРМА. Соответственно в рантайме твой жабакод выбросят, и запустят вместо него ассемблер.

вот, просветил тебя в самой главной фиче Джавы, социальный долг выполнен!

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

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

можно попробовать замутить лютое мясо, и разрешить мешать C++ код с джавой прям в одном файле

Давай уж сразу впилим жабу в С++, штоб вот захотел жабскую либу заюзать - херак и конпелятор всё сжевал и бинарник выплюнул (со встроенной внутрях жвм).

anonymous
()

Тогда просто перестанут писать на Java, и будут писать на C++/ассемблерных вставках. Ибо тупо быстрее работает. Появятся библиотеки классов C++, созданные специально для Java, которые будут вытеснять стандартные медленные Java-методы.

И таким образом получится что-то напоминающее пятые культи, только с JVM сбоку.

Вопрос, зачем?

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

Ужасная идея. Полностью поддерживаю Легионера.

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

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

erzenteded
()
Ответ на: комментарий от tailgunner

Правильный ответ - оставить где лежало (т.е. в Development), ибо в talks куда меньше программистов, а тему нужно хорошенько обкатать на тех кто хачит JDK прежде чем начинать имплементить. Видишь - я даже отвечаю почти на каждый комментарий

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

а тему нужно хорошенько обкатать на тех кто хачит JDK прежде чем начинать имплементить

А «имплементить» будешь... ТЫ, СТИВИ? АХАХХАХАХАА!!!!111

tailgunner ★★★★★
()

Пожалуйста, перестань дышать

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

Зачем? Java и так не тормозит. А там где тормозит ее не применяют.

Да да, мы помним Tommy. Он тоже не тормозил.

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

По моему, это треш. Java создана для того, чтобы быть переносимой. Если не подходит - не пиши да Java, пиши на C++, D, Rust, Swift, C, etc.

А что если для 99% кода проекта Java подходит идеально, а 1% нужно оптимизировать (по результатам профилирования)? Писать все на C++, D, Rust, Swift, C, etc?

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

Напишите горячий блок на Си, прикрутите к Java через JNI.

Си-код вы уже вольны заоптимизировать настолько, насколько хочется.

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

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

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

1) чтобы «прикрутить через JNI» нужно как раз прикручивать. Прикручивать лень. Если же есть специальный синтаксис, позволяющий в одном месте писать всё подряд, то фактор лени исчезает, эта фича всегда под рукой. Поэтому даже если внизу реализации лежит JNI, синтаксис городить всё равно нужно.

2) у JNI есть оверхед: http://stackoverflow.com/questions/13973035/what-is-the-quantitative-overhead...

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

на асме freertos с безопасными друг от друга процессами сможешь написать? =) Если да, то я поклонюсь перед тобой, гуру))

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

Какая безграмотность. Будет время - напиши потокобезопасное lock-free иммутабельное персистентное дерево с O(1) snapshots на Java, амортизируя сложность сборкой мусора. Ну а потом на C++. Когда будешь писать второе, то возьми отпуск на месяц и психологически готовься к разочарованиям тому как оно будет тормозить. Ну конечно если ты переизобретешь Java с ее сборщиком мусора на C++, то не будет и все будет быстро

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

И получится труднопереносимый говнокод с усложнением алгоритмов сборки мусора для JVM.

Оверхед есть в большинстве случаев совместного использования компилируемого и интерпретируемого языков. Даже между двумя компилируемыми может быть. И удобный синтаксис лишь сделает неявными тормоза по оверхеду.

Зерна отдельно, плевла отдельно.

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

а в способе из топика, нет никакого рантайм-оверхеда относительно обычного кода, скорей наоборот, так что ты сам сейчас доказал, что твой JNI никуда не годится xD

stevejobs ★★★★☆
() автор топика

Оличный способ закопать 1-2 недоязыка.

Napilnik ★★★★★
()

Сколько ненужно в одном посте. Браво! Классы завернутые в классы и ручное перекладывание байтиков одновременно.
В 80е человечество свернуло куда-то не туда.

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от aido

если Java затачивалась под безопасный и переносимый код, а ассемблер - на железозависимый и небезопасный, но быстрый?

Вот только ни переносимостью ни безопасностью на жабе не пахнет (да блин проги на qt гораздо более платформонезаивисмы), а ручная оптимизация ассемблерными вставками наоборот становится причиной тормозов.

DNA_Seq ★★☆☆☆
()

Идея: джава с ассемблерными вставками. Прямо inline рядом с джавакодом.

Можешь успокоиться, твоя идея уже запиливается в 10-ую джаву, только сишный код поставляется отдельными сырцами, а не инлайнами. А ассемблер инлайнится машинными кодами.

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

я бы сказал, что ты упорот, но ты и так стиви.

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

Вот только ни переносимостью ни безопасностью на жабе не пахнет

для профессиональных быдлкдеров нет преград!

der_looser ★★
()

Какие именно места требуют подобных «оптимизаций»?

ya-betmen ★★★★★
()
Ответ на: комментарий от aido

на асме freertos с безопасными друг от друга процессами сможешь написать? =) Если да, то я поклонюсь перед тобой, гуру))

безопасность процессов друг от друга обеспечивается аппаратно, язык тут ни при чём

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

ткни ссылкой на то, что ты имеешь в виду?

моя идея в основном про инлайнинг. То есть, если ты имеел сейчас в виду грааль, то она она на нем реализуется точно так же. Можно даже сделать такую ручку, выбор движка (with syntax X via Y):


class Asd {
    public static final Script s = new Script(LANGUAGE.CPP, ENGINE.JNI);

    public static void main() {
        script(s) {
            cout << "Hello World!";  
        }
        with syntax cpp via intrinsic {
            cout << "Hello World!";  
        }
    }
}
stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)

Еще пару правок в эту идею и получится JNI.

segfault ★★★★★
()

Интересно, что Java была придумана как С++ для «индусов», но постепенно превращается в этот самый C++.

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