Π Π΅Π»ΠΈΠ· JPype 0.7.2, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для доступа ΠΊ Java-классам ΠΈΠ· Python

ДоступСн Ρ€Π΅Π»ΠΈΠ· прослойки JPype 0.7.2, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ классов Π½Π° языкС Java. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ JPype ΠΈΠ· Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичныС для Java Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, создавая Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Π΅ прилоТСния, ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄ Π½Π° Java ΠΈ Python. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Jython, интСграция с Java достигаСтся Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· созданиС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Python для JVM, Π° Ρ‡Π΅Ρ€Π΅Π· взаимодСйствиС Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±Π΅ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΈ прСдоставляСт доступ ΠΊΠΎ всСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ CPython ΠΈ Java. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния:

  • Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ Π² C++ ΠΈ Java ΠΊΠΎΠ΄Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ стСк ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Π½Π° Python. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ стСкС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π½Ρ‹Π½Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ большС Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ stacktrace().
  • Π’ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ….
  • БущСствСнно (Π½Π° порядки) ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π²
    numpy Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΊΠΎΠΏΠΈΠΈ, созданныС Π²Π½ΡƒΡ‚Ρ€ΠΈ JVM с Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ раскладкой C.

  • ВсС выставляСмыС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ· CPython, Π° символы __javaclass__, __javavalue__ ΠΈ __javaproxy__
    ΡƒΠ΄Π°Π»Π΅Π½Ρ‹. Ко всСм Ρ‚ΠΈΠΏΠ°ΠΌ CPython, унаслСдованным ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² класса jpype, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Java-слот. ВсС ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ пСрСнСсСны Π² CPython. Java-Ρ‚ΠΈΠΏΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ мСтакласса JClass, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ слоты Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅ΡΠΈ для Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Python Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ. Π’ΠΈΠΏΡ‹ Object, Proxy, Exception, Number ΠΈ Array ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ CPython.

  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° трассировка ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.
  • Π‘Ρ€Π΅Π·Ρ‹ массивов (Array slices) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ прСдставлСний, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ запись Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ массив numpy. Для срСзов массивов обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° установки ΠΈ получСния значСния с шагом (slice(start, stop, step)).
  • Π’ массивах Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° «__reversed__».
  • Π’ Java-массивах обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° API memoryview ΠΈ ΡƒΠ±Ρ€Π°Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ numpy для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ содСрТимого Π±ΡƒΡ„Π΅Ρ€Π°.
  • Numpy Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ являСтся Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ (extra) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° памяти Π² numpy доступна Π±Π΅Π· компиляции с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ numpy.
  • JInterface ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅Ρ‚Π°-класса. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ isinstance(cls, JInterface) для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° интСрфСйсы.
  • Π’ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ TLD «mil», «net» ΠΈ «edu».
  • Π’ΠΎ врСмя запуска ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Ρ‹ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… для UnsupportedClassVersion.
  • java.util.Map Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π΄Π°Ρ‘Ρ‚ KeyError, Ссли элСмСнт Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. ЗначСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ null, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ None ΠΊΠ°ΠΊ ΠΈ оТидаСтся. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ get(), Ссли пустыС ΠΊΠ»ΡŽΡ‡ΠΈ трСбуСтся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ None.
  • Π£Π΄Π°Π»Ρ‘Π½ java.util.Collection, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ странно пСрСгруТаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ remove(Object) ΠΈ remove(int) Π½Π° List-Π°Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Java-ΠΌΠ΅Ρ‚ΠΎΠ΄ remove() для доступа ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Java-повСдСнию, Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° строго рСкомСндуСтся для управлСния ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.
  • java.lang.IndexOutOfBoundsException Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΉΠΌΠ°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ IndexError ΠΏΡ€ΠΈ доступС ΠΊ элСмСнтам java.util.List.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru