على الرغم من أنه موصوف في index.d.ts
فإن استخدامه ينتج خطأ " ERROR TS2304: Cannot find name 'call_indirect'
" أثناء الترجمة. الشيء نفسه ينطبق على call_direct
.
يبدو أنه تمت إزالتهما هنا - https://github.com/AssemblyScript/assemblyscript/pull/974. هل هناك / هل سيكون هناك بدائل؟ في حالتي ، أحتاج إلى ربط رد اتصال مقدم من جانب JS بفئة wasm. كانت خطتي هي تمرير جدول إلى وحدة wasm (باستخدام علامة --importTable
) ثم تسميتها باستخدام شيء مثل call_indirect( this.callbackId )
بعد بعض الاعتبارات توصلت إلى حلين محتملين:
1) احتفظ بجدول رد الاتصال في JS (فقط مجموعة من عمليات الاسترجاعات) وقم بتوفير طريقة invokeCallback(callbackId: i32): void
لوحدة wasm.
2) قم بإضافة خيار --tableBase
للمترجم ، حتى يتمكن المستخدم من حجز بعض المساحة في الجدول خصيصًا لعمليات الاسترجاعات. قد تنجح ، ولكن من المحتمل أن تعقد الأمور على جانب المترجم.
على أي حال ، لا تتردد في إغلاق هذه المسألة. الشيء الوحيد هو أنه يجب إزالة call_indirect
و call_direct
من index.d.ts
إذا لم تتم إضافتهم مرة أخرى إلى الميزة
نعم ، لقد تمت إزالتها بسبب المشكلات المتوقعة في تنفيذ الإغلاق. لكن لا يزال بإمكان المرء القيام بذلك:
changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);
على التوالى
var tableIndex = changetype<usize>(someFunction);
ثابت في # 1017
التعليق الأكثر فائدة
نعم ، لقد تمت إزالتها بسبب المشكلات المتوقعة في تنفيذ الإغلاق. لكن لا يزال بإمكان المرء القيام بذلك:
على التوالى