"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > مقدمة إلى واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة (مشروع بنما)

مقدمة إلى واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة (مشروع بنما)

تم النشر بتاريخ 2024-08-06
تصفح:287

Introduction to the Foreign Function & Memory API (Project Panama)

مشروع بنما هو مبادرة OpenJDK تهدف إلى تحسين الاتصال بين Java والتعليمات البرمجية الأصلية. أحد مكوناتها الرئيسية هو واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة، التي تعمل على تبسيط وتحسين الطريقة التي تتفاعل بها تطبيقات Java مع المكتبات والذاكرة الأصلية.

ما هي واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة؟

تسمح واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة لبرامج Java باستدعاء الوظائف الأصلية وإدارة الذاكرة الأصلية مباشرةً. توفر واجهة برمجة التطبيقات هذه طريقة أكثر أمانًا وفعالية لتنفيذ العمليات التي قد تتطلب واجهة Java الأصلية (JNI).

فوائد الوظيفة الخارجية وواجهة برمجة تطبيقات الذاكرة

  1. السلامة: تتضمن واجهة برمجة التطبيقات ميزات أمان لمنع الأخطاء الشائعة المرتبطة بالتعليمات البرمجية الأصلية، مثل تسرب الذاكرة وتجاوز سعة المخزن المؤقت.
  2. الأداء: من خلال السماح بالوصول المباشر إلى الوظائف والذاكرة الأصلية، يمكن لواجهة برمجة التطبيقات (API) تحسين أداء تطبيقات Java التي تحتاج إلى التفاعل مع المكتبات الأصلية بشكل كبير.
  3. البساطة: تعمل واجهة برمجة التطبيقات (API) على تبسيط عملية استدعاء التعليمات البرمجية الأصلية مقارنة بـ JNI، مما يقلل من النمط المعياري ويجعل صيانة التعليمات البرمجية أسهل.

استخدام الوظيفة الخارجية وواجهة برمجة تطبيقات الذاكرة

إليك مثال لكيفية استخدام واجهة برمجة التطبيقات للوظيفة الخارجية والذاكرة لاستدعاء وظيفة أصلية:

  1. تحديد توقيع الوظيفة الأصلية

أولاً، تحتاج إلى تحديد توقيع الوظيفة الأصلية التي تريد الاتصال بها. لنفترض أن لدينا مكتبة C بالوظيفة التالية:

// native.c
#include 

void sayHello() {
    printf("Hello from C!\n");
}
  1. تحميل المكتبة الأصلية واستدعاء الوظيفة
import jdk.incubator.foreign.*;

public class ForeignFunctionExample {
    public static void main(String[] args) {
        try (var session = MemorySession.openConfined()) {
            SymbolLookup lookup = SymbolLookup.loaderLookup();
            var sayHello = lookup.find("sayHello").orElseThrow();

            var sayHelloHandle = CLinker.getInstance().downcallHandle(
                sayHello,
                FunctionDescriptor.ofVoid()
            );

            sayHelloHandle.invokeExact();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

في هذا المثال:

  • نستخدم رمزLookup للعثور على وظيفة sayHello في المكتبة الأصلية المحملة.
  • نقوم بإنشاء مقبض للوظيفة باستخدام CLinker.
  • نستدعي الدالة الأصلية باستخدام المقبض.

إدارة الذاكرة الأصلية

تتيح لك واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة أيضًا إدارة الذاكرة الأصلية بأمان. إليك مثال:

import jdk.incubator.foreign.*;

public class MemoryManagementExample {
    public static void main(String[] args) {
        try (var session = MemorySession.openConfined()) {
            MemorySegment segment = MemorySegment.allocateNative(100, session);

            MemoryAccess.setByteAtOffset(segment, 0, (byte) 42);
            byte value = MemoryAccess.getByteAtOffset(segment, 0);

            System.out.println("Value: "   value);
        }
    }
}

في هذا المثال:

  • نحن نخصص كتلة من الذاكرة الأصلية.
  • نكتب ونقرأ بايت من الذاكرة المخصصة.
  • يتم إلغاء تخصيص الذاكرة تلقائيًا عند إغلاق الجلسة.

خاتمة

تعد واجهة برمجة التطبيقات للوظائف الخارجية والذاكرة إضافة قوية لنظام Java البيئي، مما يوفر طريقة أكثر أمانًا وكفاءة وأسهل للتفاعل مع التعليمات البرمجية والذاكرة الأصلية. سواء كنت بحاجة إلى استدعاء الوظائف الأصلية أو إدارة الذاكرة الأصلية، فإن واجهة برمجة التطبيقات هذه تفتح إمكانيات جديدة لتطبيقات Java.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/adaumircosta/introduction-to-the-foreign-function-memory-api-project-panama-20c8?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3