Phát hành JPype 0.7.2, các thư viện để truy cập các lớp Java từ Python

Có sẵn phát hành lớp JPype 0.7.2, cho phép các ứng dụng Python có toàn quyền truy cập vào các thư viện lớp bằng ngôn ngữ Java. Với JPype từ Python, bạn có thể sử dụng các thư viện dành riêng cho Java để tạo các ứng dụng lai kết hợp mã Java và Python. Không giống như Jython, việc tích hợp với Java đạt được không phải thông qua việc tạo một biến thể Python cho JVM mà thông qua sự tương tác ở cấp độ của cả hai máy ảo sử dụng bộ nhớ dùng chung. Cách tiếp cận được đề xuất không chỉ cho phép đạt được hiệu suất tốt mà còn cung cấp quyền truy cập vào tất cả các thư viện CPython và Java. Mã số dự án phân phối bởi được cấp phép theo Apache 2.0.

Sự thay đổi chính:

  • Các ngoại lệ được đưa vào mã C++ và Java hiện cung cấp một ngăn xếp ngoại lệ khi ngoại lệ xảy ra trong mã Python. Do đó, để có được thông tin về ngăn xếp ngoại lệ, bạn không cần gọi stacktrace() nữa.
  • Tốc độ quay lại cuộc gọi đã tăng gấp ba lần.
  • Tốc độ truyền tăng lên đáng kể (theo bậc độ lớn) trong
    bộ đệm gọn gàng của mảng đa chiều. Các nguyên hàm đa chiều chuyển các bản sao chỉ đọc được tạo bên trong JVM với bố cục C liền kề.

  • Tất cả các phần bên trong được hiển thị đã được thay thế bằng triển khai CPython và các ký hiệu __javaclass__, __javavalue__ và __javaproxy__
    đã xóa. Một khe Java chuyên dụng đã được thêm vào tất cả các loại CPython kế thừa từ các loại lớp jpype. Tất cả các bảng riêng tư đã được chuyển sang CPython. Các kiểu Java bây giờ phải kế thừa từ siêu dữ liệu JClass, siêu dữ liệu này sử dụng các khe kiểu. Mixins cho các lớp cơ sở Python không được phép. Các loại là Đối tượng, Proxy, Ngoại lệ, Số và Mảng và kế thừa trực tiếp từ quá trình triển khai nội bộ của CPython.

  • Cải thiện việc theo dõi và xử lý ngoại lệ.
  • Các lát mảng hiện được xử lý dưới dạng các dạng xem hỗ trợ ghi lại bản gốc, chẳng hạn như một mảng có nhiều mảng. Đối với việc cắt mảng, hỗ trợ được cung cấp để thiết lập và truy xuất các giá trị theo các bước (lát(bắt đầu, dừng, bước)).
  • Mảng hiện hỗ trợ "__reversed__".
  • Các mảng Java hiện hỗ trợ API xem bộ nhớ và loại bỏ sự phụ thuộc vào numpy để truyền nội dung bộ đệm.
  • Numpy không còn là một phần phụ thuộc (bổ sung) và việc chuyển bộ nhớ sang numpy có sẵn mà không cần biên dịch với sự hỗ trợ numpy.
  • JInterface được thiết kế dưới dạng một lớp meta. Sử dụng isinstance(cls, JInterface) để kiểm tra giao diện.
  • Đã thêm các TLD bị thiếu "mil", "net" và "edu" vào các mục nhập mặc định.
  • Cải thiện thông báo lỗi cho UnsupportedClassVersion trong quá trình khởi động.
  • java.util.Map hiện đưa ra KeyError nếu không tìm thấy phần tử. Các giá trị null vẫn trả về None như mong đợi. Sử dụng get() nếu bạn muốn coi các khóa trống là Không có.
  • Đã xóa java.util.Collection vì nó quá tải một cách kỳ lạ giữa loại bỏ (Đối tượng) và loại bỏ (int) trên Danh sách. Sử dụng phương thức Java Remove() để truy cập hành vi Java gốc, nhưng việc truyền kiểu được đặc biệt khuyến khích để kiểm soát quá tải.
  • Giờ đây, java.lang.IndexOutOfBoundsException có thể bị phát hiện bằng cách sử dụng lớp ngoại lệ IndexError khi truy cập các phần tử java.util.List.

Nguồn: opennet.ru

Thêm một lời nhận xét