ИзданиС Π½Π° 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.
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, Јава Π½ΠΈΠ·ΠΈΡ‚Π΅ Π½Π΅ сС ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€Π°Π°Ρ‚ Π²ΠΎ Π½ΠΈΠ·ΠΈ Π½Π° ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½.
  • ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½ Π³ΠΎ ΠΎΡ‚Ρ„Ρ€Π»ΠΈ β€ž__int__β€œ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½ΠΈΡ‚Π΅ Ρ„Ρ€Π»Π°ΡšΠ° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ со Ρ†Π΅Π» Π±Ρ€ΠΎΡ˜ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ со ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Π° Π·Π°ΠΏΠΈΡ€ΠΊΠ° ќС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π°Ρ‚ Type Error.
  • Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° JException Π΅ застарСна. Π—Π° Π΄Π° Π³ΠΈ Ρ„Π°Ρ‚ΠΈΡ‚Π΅ ситС исклучоци ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚ Π΅ Ρ‚ΠΈΠΏ Π½Π° исклучок Π½Π° Java, користСтС java.lang.Throwable.
  • ΠšΠ°ΡΠΊΠ°Π΄Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° исклучоцитС Π½Π° Јава сСга сС Ρ€Π΅Ρ„Π»Π΅ΠΊΡ‚ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈ Π½Π° ΠΌΠ°Π³Π°Ρ†ΠΈΠ½ΠΎΡ‚ Π½Π° ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½.
  • JString Π΅ застарСн. Π—Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ Java стринг ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ нСкој ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ Π΅ ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ Java string, користСтС java.lang.String.
  • Repr ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ класитС Java.
  • java.util.List ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π·Π° ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ.abc.Sequence ΠΈ collections.abc.MutableSequence.
  • java.util.Collection Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π·Π° Π½Π°ΠΏΠ»Π°Ρ‚Π°.abc.Collection.
  • Јава класитС сС ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ ΠΈ ќС исфрлат TypeError ΠΊΠΎΠ³Π° ќС сС ΠΏΡ€ΠΎΡˆΠΈΡ€Π°Ρ‚ ΠΎΠ΄ Python.
  • Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Ρ€Π°ΠΊΡƒΠ²Π°Ρ˜Ρ‚Π΅ со Control-C. ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ ΠΏΠ°Ρ“Π°Π°Ρ‚ ΠΊΠΎΠ³Π° Java ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π° сигнал Control-C бидСјќи Ρ‚ΠΈΠ΅ ќС ја ΠΏΡ€Π΅ΠΊΠΈΠ½Π°Ρ‚ Java Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚. JPype сСга ќС Ρ„Ρ€Π»ΠΈ InterruptedException ΠΊΠΎΠ³Π° сС Π²Ρ€Π°ΡœΠ° ΠΎΠ΄ Java. Control-C Π½Π΅ΠΌΠ° Π΄Π° исфрли Π³ΠΎΠ»Π΅ΠΌΠΈ Java ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ, бидСјќи Java Π½Π΅ΠΌΠ° посСбна Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΠΎΠ²Π°.

Π‘Π»Π΅Π΄Π½ΠΎ, бСшС ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΎ ΠΊΠΎΡ€Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 1.0.1, ΠΊΠΎΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ со ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Python 3.8.4. ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½ ја ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π²ΠΎ врска со ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° β€ž__setattr__β€œ Π·Π° β€žΠΎΠ±Ρ˜Π΅ΠΊΡ‚β€œ ΠΈ β€žΡ‚ΠΈΠΏβ€œ, ΡΠΏΡ€Π΅Ρ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ ја Π΄Π° сС користи Π·Π° ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈ класи. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ исто Ρ‚Π°ΠΊΠ° Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°Π½Π° ΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΡ‚ β€ž__setattr__β€œ, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ исклучоци Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° соодвСтност Ρ‚Ρ€Π΅Π±Π° соодвСтно Π΄Π° сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π°Ρ‚.

Π˜Π·Π²ΠΎΡ€: opennet.ru

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€