Comments 32
Программирование сопроцессора на C#? Да!
.NET
Странно, что здесь не упоминается ни JNR, ни тем более JNR-x86asm, а ведь это неплохое решение, которое уже работает. А ещё стоит покопать в проект Panama, Володю Иванова потыкать. Они там тоже ассемблер прямо в джаве пишут, причём почти без накладных расходов на переход туда и обратно.
Panama, Amber, Valhalla — тысяча и одно очевидное название эксперементальных проектов. Смотришь такой на названия, и всё сразу понятно становится.
И кто на этот раз первый придумал? :)
С Roslyn сложнее, в исходниках дат не нашёл, но первый релиз был в конце 2011.
Выводы делайте сами, но я таки склоняюсь, что graal был первее.
Вот тут можно посмотреть некоторые другие оптимизации:
github.com/android-art-intel/Nougat/tree/master/art-extension/compiler/optimizing/extensions
А здесь github.com/android-art-intel/Fuzzer — мощный тул от нашего QA, который на раз валит любой java компилятор, путем генерации рандомного кода :)
Круто!
Кстати. Наверное, я становлюсь как дедушка Столлман ("не Linux, а GNU/Linux!"), но… На Android нет Java, совсем нет. Есть нечто с джаваподобным синтаксисом. Можете спросить у Гугла, они обязаны подтвердить :-)
Сам компилятор, конечно, работает с байткодом и ему не важно — из Java он получен или из C++.
Проблема в том, что сам dalvik/art — очень плохи по сравнению с HotSpot и Graal :( Помню как на Google IO лид дальвика рассказывал, что типа вы с ООП не перебарщивайте, а то классов наплодите и приложуха будет тормозить Т_Т
И проходят ли они все соответствия на гордое звание Java?
Вот сейчас вышла Java 9, а скоро будет 10, 11, 12, и как Google собираются поддерживать совместимость? Непонятно. Будут люди продолжать жить в каменном веке.
Короче, на основании всего этого проще говорить, что на Андроиде — не Java. Как сделают по-нормальному, тогда и поговорим :)
Жду, когда на Android выкатят полноценный OpenJDK. Они же вроде обещали. Вот тогда можно будет разгуляться!
Код хака из статьи администратора не требует. Это обычная схема, так все JIT работают.
Штуки типа GrayStorm и GrayFrost тоже не требуют админа, но работают поверх DLL-инжектора, и это уже платформоспецифично.
Про кроссплатформенность в смысле операционной системы — без тестирования я бы не загадывал. Попробуйте! Говорят, сейчас Ubuntu можно прямо из винды запустить. Расскажите о результатах здесь в комментариях!
Аппаратно код, конечно, не кроссплатформенный. Я запускал это на x86-64 (i7 6700k, skylake). На ARM будет другой машкод. Нужно рисовать матрицу совместимости, и поддерживать все программно-аппаратные платформы по отдельности.
только на win-платформ
Если на той платформе, что Вы имеете ввиду, есть возможность обеспечить доступ к куску памяти на выполнение, помимо записи и чтения, то можно и на ней. В статье пример с виндовым VirtualAlloc(Ex), в который можно передать MemoryProtection.Execute*. Если будете работать под .NET Core в Linux/macOS, то выделить кусок памяти можете через Marshal, а потом запротектить этот кусок самописной на С простой либой, которая просто вызывает mprotect, ну а вызвать этот метод либы можно стандартным для .NET DllImport.
У Java очень большое будущее. Сейчас есть тренд на развитие по всем направлениям, которые позволяют утилизировать современные облака и хитрые архитектуры. Постараюсь про это писать больше.
А JEE… Точнее, Jakarta… Может быть и хорошо, что они JEE слили в опенсорц. Вот гляди — Spring в опенсорце, и там творятся реальные вещии. А лиды JEE как-то так всё повернули, что сами же себя сделали ненужными в современном мире, имхо. Может быть, сейчас туда придут молодые люди с горящими глазами, и сделают всё как надо?
Java с ассемблерными вставками