انتقل إلى المحتوى

Browser WASM

صرّف Java أو Kotlin إلى WasmGC باستخدام Elide: ابنِ وحدة WebAssembly ومحمّل JavaScript، وحمّلها من صفحة ويب، وتحقق من دعم المتصفحات.

في هذه الصفحة

يصرّف مُخرَج WebImage ذو backend = "wasm-gc" شيفرة Java أو Kotlin إلى ⁦WasmGC:⁩ وحدة WebAssembly تعيش كائناتها في كومة المتصفح المُدارة بجامع المهملات، ومعها محمّل JavaScript يجلبها ويشغّلها. لتشغيل ملف .wasm موجود باستخدام Elide، راجع WebAssembly.

المتطلبات المسبقة

  • Binaryen الإصدار 119 أو أحدث، مع وجود wasm-as في PATH وقت البناء.
  • شيفرة تستوفي متطلبات Native Image: بيانات وصفية لقابلية الوصول من أجل الانعكاس والموارد والكائنات الوكيلة (proxies)؛ ودون تبعيات أصلية.

البناء

hello-wasm/
  elide.pkl
  src/main/java/Hello.java
public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello from WasmGC");
  }
}
amends "elide:project.pkl"
import "elide:Jvm.pkl" as jvm
import "elide:NativeImage.pkl" as nativeImage

name = "hello-wasm"

artifacts {
  ["app-jar"] = new jvm.Jar {
    sources { "main" }
  }
  ["web"] = new nativeImage.WebImage {
    from { "app-jar" }
    name = "hello"
    entrypoint = "Hello"
    backend = "wasm-gc"
    runtime = "browser"
  }
}
elide build

تذهب المخرجات إلى .dev/artifacts/native-image/:

الملفيُنشرالحجم لبرنامج hello world
hello.jsنعم: المحمّل.110 KB
hello.js.wasmنعم: الوحدة.1.3 MB (480 KB بعد ضغط gzip)
hello.js.watلا: الصيغة النصية، للفحص.32 MB
hello.js.mapاختياري: يُنتج مع sourceMap = true.
الخاصيةالقيمة للمتصفح
backend"wasm-gc" (الافتراضي).
runtime"browser"، أو "generic" للإبقاء على دعم Node في المحمّل نفسه.
autoRunتشغّل القيمة true (الافتراضية) الدالة main عند تحميل hello.js.

خصائص أخرى وخيارات المُصرّف: WebImage.

التحميل في صفحة

ضع index.html بجانب الحزمة:

<!doctype html>
<html lang="en">
  <meta charset="utf-8" />
  <title>Hello WasmGC</title>
  <body>
    <script src="./hello.js"></script>
  </body>
</html>
elide dev --no-tui --port 8000 .dev/artifacts/native-image

افتح http://localhost:8000/؛ فتظهر Hello from WasmGC في وحدة تحكم المتصفح.

  • يطلب المحمّل الوحدة من عنوان URL الخاص به مضافًا إليه .wasm، لذا أبقِ hello.js و hello.js.wasm في المجلد نفسه.
  • حمّله بوسم <script> تقليدي. فمع type="module" يطلب المحمّل بدلًا من ذلك عنوان URL الصفحة مضافًا إليه .wasm.
  • قدّم الملفات عبر HTTP أو HTTPS؛ فعناوين file:// لا تعمل.
  • تكتب System.out إلى وحدة تحكم المتصفح.

للنشر، انسخ hello.js و hello.js.wasm والصفحة إلى أي استضافة ثابتة.

دعم المتصفحات

تحتاج حزم WasmGC إلى جمع المهملات في WebAssembly ومعالجة الاستثناءات مع exnref:

المتصفحأدنى إصدار
Chrome، Edge137
Firefox131
Safari18.4

يرفض المتصفح الأقدم الوحدة بخطأ CompileError عند تحميل الصفحة. لخدمة بيئات لا تدعم WasmGC، راجع Edge WASM.

هل كانت هذه الصفحة مفيدة؟