verze vrstvy , která umožňuje plný přístup Python aplikací k Java knihovnám tříd. Pomocí JPype je možné využívat specifické Java knihovny z Pythonu a vytvářet hybridní aplikace kombinující kód v Java a Python. Na rozdíl od Jythonu, integrace s Java je dosažena nikoli vytvořením varianty Pythonu pro JVM, ale interakcí na úrovni obou virtuálních strojů s využitím sdílené paměti. Tento přístup nejenže poskytuje dobrou výkonnost, ale také umožňuje přístup ke všem knihovnám CPython a Java. Kód projektu pod licencí Apache 2.0.
Hlavní změny:
- Výjimky vyhozené v kódu C++ a Java nyní poskytují zásobník výjimek, když dojde k výjimce v kódu Python. Díky tomu již není potřeba volat stacktrace() pro získání informací o zásobníku výjimek.
- Rychlost vracení při voláních byla třikrát zvýšena.
- Rychlost přenosu byla podstatně (o řády) zvýšena v
numpy bufferech vícerozměrných polí. Vícerozměrné primitivy předávají pouze pro čtení kopie vytvořené uvnitř JVM s kontinuálním uspořádáním C. - Všechny interně vystavené komponenty byly nahrazeny implementacemi z CPython a symboly __javaclass__, __javavalue__ a __javaproxy__
byly odstraněny. Všechny typy CPython, které byly zděděny z typů třídy jpype, byly vybaveny vyhrazeným Java slotem. Všechny soukromé tabulky byly převedeny do CPython. Java typy nyní musí být zděděny z metaklasu JClass, který používá sloty typů. Mísení s základními Python třídami není povoleno. Typy Object, Proxy, Exception, Number a Array jsou zděděny přímo z interních implementací CPython. - Byla vylepšena trasování a zpracování výjimek.
- Řezání polí (Array slices) je nyní zpracováváno jako pohledy, které podporují zpětný zápis do originálu, jako je numpy pole. Pro řezy polí byla zajištěna podpora nastavování a získávání hodnoty se skokem (slice(start, stop, step)).
- Podpora '__reversed__' byla implementována v polích.
- Vzory v Java polích nyní podporují API memoryview a byla odstraněna závislost na numpy pro předání obsahu bufferu.
- Numpy již není závislostí (extra) a předání paměti do numpy je nyní dostupné bez kompilace s podporou numpy.
- JInterface je navržen jako metaklas. Pro kontrolu rozhraní použijte isinstance(cls, JInterface).
- Do výchozích importů byly přidány chybějící TLD 'mil', 'net' a 'edu'.
- Během spouštění byly vylepšeny chybové zprávy pro UnsupportedClassVersion.
- java.util.Map nyní vyvolává KeyError, pokud prvek není nalezen. Hodnoty, které jsou nulové, stále vracejí None, jak se očekává. Použijte get(), pokud je potřeba prázdné klíče zpracovávat jako None.
- java.util.Collection byl odstraněn, protože byl podivně přetížen mezi remove(Object) a remove(int) na Listech. Pro přístup k původnímu chování Java použijte metodu remove(), ale je doporučeno přetypování pro řízení přetížení.
- java.lang.IndexOutOfBoundsException nyní může být zachycena pomocí třídy pro výjimky IndexError při přístupu k prvkům java.util.List.
Zdroj: opennet.ru
