نسخه جدید interlayer که به برنامههای پایتون اجازه میدهد تا به طور کامل به کتابخانههای کلاس جاوا دسترسی داشته باشند. با استفاده از JPype، پایتون میتواند از کتابخانههای خاص جاوا بهره ببرد و برنامههای ترکیبی ایجاد کند که کد جاوا و پایتون را با هم ترکیب میکنند. برخلاف جایتون، ادغام با جاوا نه با ایجاد یک نمونه پایتون برای JVM، بلکه از طریق تعامل در سطح هر دو ماشین مجازی با استفاده از حافظه مشترک حاصل میشود. این رویکرد نه تنها به عملکرد خوب دست مییابد، بلکه دسترسی به تمام کتابخانههای CPython و جاوا را نیز فراهم میکند. کد پروژه دارای مجوز Apache 2.0.
تغییرات اصلی:
- یک حافظه پنهان (cache) به فراخوانیهای متد اضافه شده است تا از حل بیش از حد (overload resolution) جلوگیری شود و به طور قابل توجهی تأثیر عملکرد حل متد را کاهش دهد، به خصوص هنگامی که یک overload بارها فراخوانی میشود، مانند هنگام اجرای حلقه.
- انتقال لیستها، تاپلها و بافرها به آرایههای اولیه جاوا، بسته به نوع داده، ۴ تا ۱۰۰ برابر تسریع شده است. این تبدیل به جای Sequence API از مدیریت بهینه بافر در حافظه استفاده میکند. هنگامی که با یک بافر پایتون مواجه میشویم، فقط عنصر اول برای تبدیل بررسی میشود، زیرا این بافرها همگن هستند.
- مدیریت خاموش کردن (در JPype 1.0.0 پیادهسازی شده است، اما از لیست تغییرات حذف شده است). JPype اکنون روال خاموش کردن JVM را فراخوانی میکند، که سعی میکند به طور مناسب خارج شود. این منجر به چندین تغییر رفتاری میشود. نخهای غیر پسزمینه (فراخوانیهای پروکسی) اکنون میتوانند JVM را تا زمان خروج باز نگه دارند. فراخوانیهای پروکسی تا زمان اتمام فراخوانی، خاموش کردن را پردازش میکنند، اما یک پیام وقفه دریافت میکنند. اگر نخها به طور مناسب استثنا را مدیریت کنند، اکنون فایلها به درستی بسته و پاک میشوند. قلابهای پاکسازی منابع و نهاییکنندهها اجرا میشوند. قلابهای AtExit هنگام ایجاد نخها فراخوانی میشوند. اتصال خودکار نخ اکنون از طریق یک سرویس هنگام استفاده از JVM از پایتون پیادهسازی میشود. کد اشتباهی که نتواند به درستی پاکسازی نخ را مدیریت کند، احتمالاً هنگام اجرای خاموش کردن هنگ خواهد کرد. مستندات بیشتر در راهنمای استفاده موجود است.
- بستهبندی Throwable به جای نتیجه مورد انتظار، یک بستهبندی Object دریافت میکرد که منجر به تبدیلهای عجیب از کلاسهای پایتون میشد.
- غلطهای املایی در سیستم وارد کردن که میتوانست منجر به خطای «jname» پیدا نشد، برطرف شد.
- پیشروی صحیح "^C" در KeyboardInterrupt تضمین شد.
- مشکل نماد با پایتون ۳.۵.۳ برطرف شد. PySlice_Unpack در نسخه پچ بعدی (۳.۵.۴) معرفی شد و نباید استفاده میشد.
- یک اشکال از کار افتادن numpy.linalg.inv برطرف شده است. این مشکل به تعاملات رشتهای بین JVM و برخی از انواع numpy مربوط میشد. راه حل پیشنهادی، فراخوانی numpy.linalg.inv قبل از شروع JVM است.
منبع: opennet.ru
