ИздаванС Π½Π° JPype 1.0, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Java класовС ΠΎΡ‚ Python

На Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ мСТдуслойно освобоТдаванС JPype 1.0, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ пълСн Π΄ΠΎΡΡ‚ΡŠΠΏ Π½Π° прилоТСния Π½Π° Python Π΄ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с класовС Π½Π° Java. Π‘ JPype ΠΎΡ‚ Python ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ спСцифични Π·Π° Java Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π·Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚ ΠΊΠΎΠ΄ Π½Π° Java ΠΈ Python. Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Jython, интСграцията с Java сС постига Π½Π΅ Ρ‡Ρ€Π΅Π· ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Python Π·Π° JVM, Π° Ρ‡Ρ€Π΅Π· взаимодСйствиС Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Π΄Π²Π΅Ρ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ сподСлСна ΠΏΠ°ΠΌΠ΅Ρ‚. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволява Π½Π΅ само Π΄Π° сС постигнС Π΄ΠΎΠ±Ρ€Π° производитСлност, Π½ΠΎ ΠΈ осигурява Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всички CPython ΠΈ Java Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Код Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° разпространява сС ΠΎΡ‚ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€Π°Π½ ΠΏΠΎΠ΄ Apache 2.0.

Основни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ:

  • JChar сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π²Ρ€ΡŠΡ‰Π°Π½Π΅. Π—Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ JChar сС ΠΈΠ·Π²Π»ΠΈΡ‡Π° ΠΎΡ‚ "str" ​​​​и ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π² "int". Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅. Но Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ Π½Π΅ сС счита Π·Π° числов Ρ‚ΠΈΠΏ Π² Python ΠΈ Ρ‚Π°ΠΊΠ° isinstance(c, int) сС оцСнява Π½Π° False, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° Java.
  • Π’ΡŠΠ²Π΅Π΄Π΅Π½ Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Java Ρ‚ΠΈΠΏ Type@obj (@ - Ρ‚ΠΎΠ²Π° Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° Python Π·Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π² Java).
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ нотация Π·Π° създаванС Π½Π° Java масиви. Π’ΠΈΠΏ [s1][s2][s3] Π·Π° масиви с фиксирани Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈ, Ρ‚ΠΈΠΏ [:][:][:] Π·Π° масиви, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ създадСни ΠΏΠΎ-късно.
  • @FunctionalInterface Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Java Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Python с __call__.
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ са остарСлитС JIterator, Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° JException, get_default_jvm_path ΠΈ jpype.reflect.
  • По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Java Π½Π΅ сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π² Π½ΠΈΠ·ΠΎΠ²Π΅ Π½Π° Python.
  • Python Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»ΠΈΠ» "__int__", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠ²Π΅ integer ΠΈ float Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π°Ρ‚ Π΄ΠΎ TypeError.
  • ΠžΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° JException. Π—Π° Π΄Π° ΡƒΠ»ΠΎΠ²ΠΈΡ‚Π΅ всички ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ Π΅ Ρ‚ΠΈΠΏ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Java, слСдва java.lang.Throwable.
  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° каскадно ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Java Π²Π΅Ρ‡Π΅ сС отразяват Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° стСка Π½Π° Python.
  • ΠžΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° JString. Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Java Π½ΠΈΠ· ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ Π΅ ΠΎΡ‚ Ρ‚ΠΈΠΏ Java Π½ΠΈΠ·, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ java.lang.String.
  • Repr ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ са Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Java класовСтС.
  • java.util.List изпълнява Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° collections.abc.Sequence ΠΈ collections.abc.MutableSequence.
  • java.util.Collection изпълнява Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π·Π° collections.abc.Collection.
  • Java класовСтС са частни ΠΈ Ρ‰Π΅ Ρ…Π²ΡŠΡ€Π»ΡΡ‚ TypeError, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Ρ€Π°Π·ΡˆΠΈΡ€ΡΡ‚ ΠΎΡ‚ Python.
  • Π‘ΠΎΡ€Π°Π²Π΅Ρ‚Π΅ с Control-C Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ. ΠŸΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ вСрсии сС сриват, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Java ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° сигнал Control-C, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Ρ‰Π΅ прСкратят Java ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ. JPype Π²Π΅Ρ‡Π΅ Ρ‰Π΅ Ρ…Π²ΡŠΡ€Π»ΠΈ InterruptedException, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π²ΡŠΡ€Π½Π΅ ΠΎΡ‚ Java. Control-C няма Π΄Π° ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Java ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Java няма спСциално срСдство Π·Π° Ρ‚ΠΎΠ²Π°.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° бСшС създадСна вСрсия Π½Π° корСкция 1.0.1, която Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π° заобикалянС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с вСрсията Π½Π° Python 3.8.4. Python ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° "__setattr__" Π·Π° "ΠΎΠ±Π΅ΠΊΡ‚" ΠΈ "Ρ‚ΠΈΠΏ", прСдотвратявайки ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° промяна Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈ класовС. ОсвСн Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°Π½Π° ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° "__setattr__", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² някои ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π° надСТдност трябва Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€