SPARC od Sunu. Ale je tím myšleno, že má navíc pár instrukcí, které urychlí časté operace. Těch jsou moderní procesory přecpané tak jako tak (např. "javaskriptové zaokrouhlování desetinných čísel" pro běh webových stránek).
Ale to teda asi nebol procesor ktory priamo interpretoval Java 'bytecode'. Tu sa bavime o procesore ktory priamo ako instrukcie ma Java bytecode.
O tom je jazelle v ARM procesoroch. A má ho raspberry pi 1 napríklad. Doslova je to schopné bežať bytecode.
Je to nějaké rozšíření instrukční sady, které by mělo umožnit právě přímo intepretovat java bytecode. Jestli chcete vědět více, vygooglete si to.
Pokud se něco zásadního nestane, je to do budoucna mrtvé.
ano, ty stare ARM maj Jazelle - https://en.wikipedia.org/wiki/Jazelle a je to videt treba ve flagech jako "java" takto:
cat /proc/cpuinfo Features : swp half thumb fastmult vfp edsp java tls
Prakticky to ale nema zadne vyuziti v OSS bohuzel, protoze to je dodatecna placena featura - pokud uplatite ARM, tak vam treba reknou jak se to pouziva (ale nesmite to nikomu rict). Buhvi kam tohle smerovalo a kdo byl tim pravym zakaznikem.. mozna kdyby Android zustal na standardnim JVM a neudelal google java-klon-z-temu, tak to mohlo mit nejake uziti?
https://stackoverflow.com/questions/12904635/jazelle-on-beaglebone
ThumbEE (defakto následovník Jazelle) byl už lépe dokumentovaný a stejně se neuchytil. Hlavní důvod asi je, že JIT kompilátor produkuje lepší výsledky a má lepší informace než statický bytecode. Samozřejmě za cenu pomalejšího startu, ale to už dneska nikoho tak moc netrápí (ehm, tedy serverless ano).
Proto se divím tomuto projektu a srovnání 50* rychlejší - porovnávali to s JIT nebo statickým interepretem?
AoT kompilace (Ahead of Time), do optimalizované CPU ISA:
> soubor s příponou .py se nejprve převede do formátu zvaného CPython ByteCode a pak přeloží do vlastní sady instrukcí nazývané PySM
Dnes Android používá AOT, možná trochu přicnrndává i JIT, ale nejsem si jistý. Běžně po aktualizaci dojde k překompilování všech aplikací.
>>> Hlavní důvod asi je, že JIT kompilátor produkuje lepší výsledky a má lepší informace než statický bytecode.
Anecdotal evidence zo stack oveflow hovorí, že to produkovalo lepšie výsledky, než JIT. Ale nie až o toľko lepšie, aby sa oplatilo za používanie Jazelle/ThumbEE platiť, keďže JIT bolo zadarmo.
https://stackoverflow.com/questions/704840/what-is-your-experience-with-arm-jazelle/742918#742918
2. 5. 2025, 10:10 editováno autorem komentáře
Dřív měly (tlačítkové) telefony "mobilní Javu" (nativní aplikace v C/C++ neuměly) a strašně slabý CPU. Takže možná bylo využití např. tam.
IIRC se to využívalo zejména v J2ME. Ale bytecode J2ME měl svoje specifika, tuším chyběly instrukce RET a JSR, a vyžadovalo to tzv. preverifikaci, která sloužila k rychlejší verifikaci bytecode. Něco jako preverifikace se dostalo později i do standardní edice Javy (od 7 to je vyžadováno, ale existovalo to už dříve), ale v jiné podobě.
Ano, asi by Google teoreticky mohl použít J2ME bytecode s pokročilejší standardní knihovnou.
Jak již ale bylo zmíněno vedle, je to nejspíš slepá větev, když máme AOT a JIT.
Tak když už tady jiní k Pythonu přidali i Javu a Pascal, tak nemůžu nezmínit Lispovské počítače a skutečnost, že tenhle koncept vzniknul někdy v 60. letech a prvními takto podporovanými jazyky byly Algol a COBOL.
ad "výsledek je až 50krát rychlejší než MicroPython" - nebylo by víc fér to porovnávat s kompilovanou variantou, jako nuitka, Cython apod.?
mae culpa...
Nicmene google toho moc nevraci, jak by se dal cython/nuitka pouzit na microcontroller... micropython potrebuje +- 256kB mista. Pokud to dobre chapu, nuitka slinkuje cython kod s libpython a vyrobi z toho binarku? Myslim ze libpython aktualne bude nasobne vetsi, nemluve o tom, ze tam asi nebude moc podpora pro non-posix/baremetal prostredi...
2. 5. 2025, 11:11 editováno autorem komentáře
jj ty AOT prekladace takto funguji skoro vsechny. Musi si to s sebou tahat cely runtime, vcetne GC atd. Oproti micropythonu to je samozrejme rychlejsi, ale je to bumbrlicek (spis pocitej s megabajty nez stovky kilobajtu naroku na ROM/Flash).