إصدار JPype 1.0 ، مكتبات للوصول إلى فئات Java من Python

متاح الافراج عن طبقة جى باي 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.
  • لقد قامت بايثون بإهمال "__int__"، لذا فإن عمليات النقل الضمنية بين أنواع الأعداد الصحيحة وأنواع الفاصلة العائمة ستنتج خطأ TypeError.
  • لقد تم إهمال استخدام JException. لالتقاط كافة الاستثناءات، أو التحقق من أن الكائن هو نوع استثناء Java، استخدم java.lang.Throwable.
  • تنعكس الآن الأسباب المتتالية لاستثناءات Java في إطارات مكدس Python.
  • لقد تم إهمال JString. لإنشاء سلسلة Java، أو للتحقق من أن الكائن من نوع سلسلة Java، استخدم java.lang.String.
  • تم تحديث أساليب Repr في فئات Java.
  • java.util.List ينفذ عقود المجموعات.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. لقد غيرت بايثون المنطق فيما يتعلق باستخدام "__setattr__" لـ "الكائن" و"النوع"، مما يمنع استخدامه لتعديل الفئات المشتقة. تم أيضًا تفويض التحقق من الأخطاء من الطريقة "__setattr__"، لذلك يجب تحديث أنواع الاستثناءات في بعض اختبارات الملاءمة وفقًا لذلك.

المصدر: opennet.ru

إضافة تعليق