เบเบฒเบ™เบ›เปˆเบญเบ JPype 1.0, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™ Java เบˆเบฒเบ Python

เบกเบตเปƒเบซเป‰ เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง interlayer JPype 1.0, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Python เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบซเป‰เบญเบ‡เบฎเบฝเบ™ Java. เบ”เป‰เบงเบ JPype เบˆเบฒเบ Python, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฐเป€เบžเบฒเบฐ Java เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ›เบฐเบชเบปเบกเบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบฅเบฐเบซเบฑเบ” Java เปเบฅเบฐ Python. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš Jython, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบš Java เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเบšเปเปˆเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ› Python เบชเปเบฒเบฅเบฑเบš JVM, เปเบ•เปˆเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบ—เบฑเบ‡เบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เป‚เบ”เบเปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฎเปˆเบงเบกเบเบฑเบ™. เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบฅเบธเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบต, เปเบ•เปˆเบเบฑเบ‡เปƒเบซเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” CPython เปเบฅเบฐ Java เบ—เบฑเบ‡เบซเบกเบปเบ”. เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™ เปเบˆเบเบขเบฒเบเป‚เบ”เบ เบญเบฐเบ™เบธเบเบฒเบ”เบžเบฒเบเปƒเบ•เป‰ Apache 2.0.

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเป‰เบ™เบ•เป:

  • JChar ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั ะบะฐะบ ะฒะพะทะฒั€ะฐั‰ะฐะตะผั‹ะน ั‚ะธะฟ. ะ”ะปั ัะพะฒะผะตัั‚ะธะผะพัั‚ะธ JChar ัƒะฝะฐัะปะตะดะพะฒะฐะฝ ะพั‚ ยซstrยป ะธ ั€ะตะฐะปะธะทัƒะตั‚ ะฝะตัะฒะฝะพะต ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธะต ะฒ ยซintยป. ะŸะพัั‚ะพะผัƒ ะพะฝ ะฟั€ะพั…ะพะดะธั‚ ะฟั€ะพะฒะตั€ะบะธ ะฒ ะบะพะฝั‚ั€ะฐะบั‚ะฐั…. ะะพ ัั‚ะพ ะทะฝะฐั‡ะธั‚, ั‡ั‚ะพ ะพะฝ ะฑะพะปัŒัˆะต ะฝะต ัั‡ะธั‚ะฐะตั‚ัั ั‡ะธัะปะพะฒั‹ะผ ั‚ะธะฟะพะผ ะฒ Python ะธ ะฟะพัั‚ะพะผัƒ isinstance(c, int) ะฟั€ะธะฝะธะผะฐะตั‚ ะทะฝะฐั‡ะตะฝะธะต False, ั‡ั‚ะพ ัะพะณะปะฐััƒะตั‚ัั ั ะฟั€ะฐะฒะธะปะฐะผะธ ะฟั€ะตะพะฑั€ะฐะทะพะฒะฐะฝะธั ั‚ะธะฟะพะฒ Java.
  • ะ’ะฒะตะดั‘ะฝ ะพะฟะตั€ะฐั‚ะพั€ ะดะปั ะฟั€ะธะฒะตะดะตะฝะธั Java-ั‚ะธะฟะฐ Type@obj (@ โ€” ัั‚ะพ ะพะฟะตั€ะฐั‚ะพั€ Python ะดะปั ะฒะฝัƒั‚ั€ะตะฝะฝะตะณะพ ะฟั€ะพะธะทะฒะตะดะตะฝะธั, ะฒ Java ะตะณะพ ะฝะตั‚).
  • ะ”ะพะฑะฐะฒะปะตะฝะฐ ะฝะพั‚ะฐั†ะธั ะดะปั ัะพะทะดะฐะฝะธั ะผะฐััะธะฒะพะฒ Java. Type[s1][s2][s3] ะดะปั ะผะฐััะธะฒะพะฒ ั„ะธะบัะธั€ะพะฒะฐะฝะฝั‹ั… ั€ะฐะทะผะตั€ะพะฒ, Type[:][:][:] ะดะปั ะผะฐััะธะฒะพะฒ, ะบะพั‚ะพั€ั‹ะต ะฑัƒะดัƒั‚ ัะพะทะดะฐะฝั‹ ะฟะพะทะถะต.
  • @FunctionalInterface ะฟะพะทะฒะพะปัะตั‚ ัะพะทะดะฐะฒะฐั‚ัŒ Java-ั„ัƒะฝะบั‚ะพั€ั‹ ะธะท Python-ะพะฑัŠะตะบั‚ะพะฒ ั __call__.
  • ะฃะดะฐะปะตะฝั‹ ัƒัั‚ะฐั€ะตะฒัˆะธะต JIterator, ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต JException ะบะฐะบ ั„ะฐะฑั€ะธะบะธ, get_default_jvm_path ะธ jpype.reflect.
  • ะŸะพ-ัƒะผะพะปั‡ะฐะฝะธัŽ ะฝะต ะฟั€ะพะธัั…ะพะดะธั‚ ะบะพะฝะฒะตั€ั‚ะฐั†ะธั Java-ัั‚ั€ะพะบ ะฒ ัั‚ั€ะพะบะธ Python.
  • Python ะพะฑัŠัะฒะธะป ะฝะตั€ะตะบะพะผะตะฝะดัƒะตะผั‹ะผ ยซ__int__ยป, ะฟะพัั‚ะพะผัƒ ะฝะตัะฒะฝั‹ะต ะฟั€ะธะฒะตะดะตะฝะธั ะผะตะถะดัƒ ั†ะตะปะพั‡ะธัะปะตะฝะฝั‹ะผะธ ะธ ั ะฟะปะฐะฒะฐัŽั‰ะตะน ั‚ะพั‡ะบะพะน ั‚ะธะฟะฐะผะธ ะฑัƒะดัƒั‚ ะฟั€ะพะธะทะฒะพะดะธั‚ัŒ TypeError.
  • ะžะฑัŠัะฒะปะตะฝะพ ัƒัั‚ะฐั€ะตะฒัˆะธะผ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต JException. ะงั‚ะพะฑั‹ ะฟะพะนะผะฐั‚ัŒ ะฒัะต ะธัะบะปัŽั‡ะตะฝะธั, ะธะปะธ ะฟั€ะพะฒะตั€ะธั‚ัŒ, ั‡ั‚ะพ ะพะฑัŠะตะบั‚ ัะฒะปัะตั‚ัั ั‚ะธะฟะพะผ ะธัะบะปัŽั‡ะตะฝะธั Java, ัะปะตะดัƒะตั‚ java.lang.Throwable.
  • ะšะฐัะบะฐะดะฝั‹ะต ะฟั€ะธั‡ะธะฝั‹ Java-ะธัะบะปัŽั‡ะตะฝะธะน ั‚ะตะฟะตั€ัŒ ะพั‚ั€ะฐะถะฐัŽั‚ัั ะฒ ะบะฐะดั€ะฐั… ัั‚ะตะบะฐ Python.
  • ะžะฑัŠัะฒะปะตะฝะพ ัƒัั‚ะฐั€ะตะฒัˆะธะผ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต JString. ะงั‚ะพะฑั‹ ัะพะทะดะฐั‚ัŒ Java-ัั‚ั€ะพะบัƒ, ะธะปะธ ะฟั€ะพะฒะตั€ะธั‚ัŒ, ั‡ั‚ะพ ะพะฑัŠะตะบั‚ ะธะผะตะตั‚ ั‚ะธะฟ Java-ัั‚ั€ะพะบะธ, ะธัะฟะพะปัŒะทัƒะนั‚ะต java.lang.String.
  • ะ’ Java-ะบะปะฐััะฐั… ะพะฑะฝะพะฒะปะตะฝั‹ repr-ะผะตั‚ะพะดั‹.
  • java.util.List ะฒั‹ะฟะพะปะฝัะตั‚ ะบะพะฝั‚ั€ะฐะบั‚ั‹ ะดะปั collections.abc.Sequence ะธ collections.abc.MutableSequence.
  • java.util.Collection ะฒั‹ะฟะพะปะฝัะตั‚ ะบะพะฝั‚ั€ะฐะบั‚ for 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__ยป ะดะปั ยซobjectยป ะธ ยซtypeยป, ะฟั€ะตะดะพั‚ะฒั€ะฐั‰ะฐั ะตั‘ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต ะดะปั ะธะทะผะตะฝะตะฝะธั ะฟะพั€ะพะถะดั‘ะฝะฝั‹ั… ะบะปะฐััะพะฒ. ะ•ั‰ั‘ ะฟั€ะพะฒะตั€ะบะฐ ะฝะฐ ะพัˆะธะฑะบะธ ะฑั‹ะปะฐ ะดะตะปะตะณะธั€ะพะฒะฐะฝะฐ ะธะท ะผะตั‚ะพะดะฐ ยซ__setattr__ยป, ะฟะพัั‚ะพะผัƒ ั‚ะธะฟั‹ ะธัะบะปัŽั‡ะตะฝะธะน ะฒ ะฝะตะบะพั‚ะพั€ั‹ั… ะฟั€ะพะฒะตั€ะบะฐั… ะฝะฐ ะฐะดะตะบะฒะฐั‚ะฝะพัั‚ัŒ ะดะพะปะถะฝั‹ ะฑั‹ั‚ัŒ ะพะฑะฝะพะฒะปะตะฝั‹ ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะต.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™