اسمبلی اسکریپت

AssemblyScript یک زبان برنامه‌نویسی مبتنی بر TypeScript است که برای WebAssembly (در حال حاضر از asc، کامپایلر مرجع AssemblyScript استفاده می‌کند) بهینه‌سازی شده و به صورت ایستا در آن کامپایل شده است. شبیه ECMAScript و JavaScript، اما با انواع ایستا، این زبان توسط پروژه AssemblyScript[۶] با مشارکت جامعه AssemblyScript توسعه داده شده است.

اسمبلی‌اسکریپت
پارادایم برنامه نویسی تابعی، همگانی، دستوری، شیئ گرا
خانواده جاوااسکریپت، تایپ‌اسکریپت
طراحان دانیل ویرتس[۱]، مکس گری[۲]
توسعه دهنده پروژه اسمبلی‌اسکریپت[۱]
ظهوریافته در ۲۰۱۷؛ ۷ سال پیش[۳]
نسخه پایدار ۰.۲۷.۲۷[۴]/۱۱ آوریل ۲۰۲۴؛ ۲ ماه پیش
سیستم نوع ایستا
دامنه واژگانی
پروانه مجوز آپاچی 2.0[۵]
پسوند ts.
فرمت فایل تکست، یونی‌کد،(منبع)

فرمت دودیی wasm.(شیئ)

وبگاه https://www.assemblyscript.org
پیاده سازی های بزرگ:
asc(کامپایلر اسمبلی اسکریپت)
الهام گرفته شده از جاوااسکریپت،

تایپ‌اسکریپت، وب‌اسمبلی

در سال ۲۰۱۷، در دسترس بودن پشتیبانی برای WebAssembly، یک تعریف استاندارد برای بایت‌کد سطح پایین و یک ماشین مجازی مرتبط، دربین مرورگر های اصلی وب گسترش یافت و به توسعه دهندگان وب یک هدف کامپایل سطح پایین تر و بالقوه بالاتری را برای برنامه های سمت کاربر و نرم افزار هایی که در بستر مرورگر ها اجرا میشوند ارائه داد، علاوه بر زبان مفسری تحت وب (و در عمل کامپایل شده بصورت پویا) جاوااسکریپت. [۷] WebAssembly این اجازه را به برنامه ها و کدها میدهد تا بصورت استاتیک، زودتر از زمان موعود کامپایل شوند؛ تا بصورت بالقوه‌ای درسطح بومی یا بدون واسطه، در بستر مرورگر عملکرد داشته باشد، بدون سربار تفسیر یا تأخیر اولیه کامپایل پویا.[۸]

با پذیرش WebAssembly در مرورگرهای وب اصلی، Alon Zakai، خالق Emscripten، که یک کامپایلر C و C++ مبتنی بر LLVM/Clang است و زیرمجموعه ای از جاوا اسکریپت به نام asm.js را مورد هدف قرار میدهد، پشتیبانی از WebAssembly را به عنوان یک هدف کامپایل در Emscripten اضافه کرد و این امکان را فراهم کرد تا برنامه ها و کدهای C و/یا C++ که باید مستقیماً در WebAssembly کامپایل شوند.[۹]

در حالی که Emscripten و کامپایلرهای مشابه به توسعه دهندگان وب اجازه می دهند تا کد جدید بنویسند یا کدهای موجود را که به زبان های سطح بالا نوشته شده است مانند C، C++، Go، و Rust به WebAssembly منتقل کنند تا به عملکرد اجرایی بالقوه بالاتر و بومی در مرورگرهای وب دست یابند، این امر توسعه دهندگان وب را که عادت به توسعه اسکریپت ها و برنامه های کاربردی وب سمت کلاینت در ECMAScript/JavaScript (زبان برنامه نویسی سمت کلاینت در مرورگرهای وب) دارند مجبور می کند تا از زبانی متفاوت برای هدف قرار دادن WebAssembly نسبت به جاوا اسکریپت استفاده کنند. AssemblyScript که شکل دیگری از TypeScript است و از نظر نوشتاری (سینتکسی) مشابه به جاوااسکریپت است، به برنامه‌نویسان امکان انس گرفتن با جاوااسکریپت را میدهد تا از زبانی مشابه برای هدف قرار دادن WebAssembly استفاده کنند؛ تا پیچیدگی یادگیری زبانی مجزا برای کامپایل کردن WebAssembly را بطور بالقوه‌ای کاهش دهد. از سوی دیگر، از آنجایی که AssemblyScript بعنوان زبان مرجع بهینه برای WebAssembly طراحی شده بود، سیستم نگاشت این زبان بطور نزدیکی متناسب با نگاشت زبان WebAssembly است.[۱۰] همچنین این زبان توابع استاندارد سطح پایینی(معمولا بکار گرفته شده بصورت ماکرو) را ارائه میدهد که بطور مستقیم به WebAssembly نگاشت میکند. دستورالعمل‌های آینه‌ای موجود در پردازنده‌های مدرن مانند SIMD و دستورالعمل‌های برداری و دستورالعمل‌های تخصصی‌تر مانند clz (شمارش صفر بیت‌های پیشرو)، ctz (شمارش بیت‌های پس از صفر)، و popcnt (شمارش جمعیت)، که در برنامه‌هایی مانند رمزگذاری و کتابخانه‌های رمزنگاری استفاده می‌شوند.[۱۱]

asc، کامپایلر مرجع AssemblyScript، برپایه Binaryen است، یک کامپایلر سمت سرور (بک-اند) که توسط آلن زاکای ساخته شده که بصورت WebAssembly کامپایل میکند و کامپوننتی از Emscripten (ساخته شده توسط آلن زاکای) است. کامپایلر asc و سایر ابزار ها از طریق npm قابل دسترس هستند.

در حالی که WebAssembly در ابتدا برای اجرا در مرورگرهای وب طراحی شده بود، توسعه WASI (WebAssembly System Interface)، یک مشخصه عام برای یک API استاندارد، که به برنامه های WebAssembly اجازه دسترسی به تماس های سیستم و سایر عملکردهای سیستم عامل را می دهد،[۱۲] منجر به توسعه محیط اجرایی WebAssembly از پروژه هایی بمانند Wasmtime[wikidata][۱۳] و Wasmer[wkidata][۱۴]شده بود که به WebAssembly و کد هایی که به زبان هایی بمانند اسمبلی اسکریپت نوشته شده‌اند که میتوانند به آن کامپایل شوند اجازه میدهد تا در محیط های غیر وب نیز اجرا شوند.

سازگاری با جاوااسکریپت

ویرایش

AssemblyScript بصورت ماژول های WebAssembly کامپایل میشود، که بعد میتواند بصورت صفحه وب سمت-کلاینت با استفاده از متد های استاندارد جاوااسکریپت نمونه سازی شود. متد هایی بمانند WebAssembly.compileStreaming و WebAssembly.instantiateStreaming که درست بمانند فایل های استاندارد قابل اجرای WebAssembly هستند.[۱۵] داده های ارسال شده بین جاوا اسکریپت و ماژول های WebAssembly کامپایل شده و همچنین فراخوانی تابع بین جاوا اسکریپت و WebAssembly مانند هر ماژول WebAssembly است.[۱۶]

از آنجایی که زبان AssemblyScript تا حد زیادی زیرمجموعه TypeScript است، از نظر تئوری امکان پذیر است که یک برنامه به زبان AssemblyScript نوشت و آن را با جاوااسکریپت و WebAssembly خام، به ترتیب با استفاده از کامپایلر TypeScript و کامپایلر AssemblyScript، کامپایل کرد. این امر اجازه میدهد که کد های پرتابل در دو محیط اجرایی جاوااسکریپت یا WebAssembly قابل اجرا باشند.

استفاده

ویرایش

تا جولای ۲۰۲۲، بیش از ۱۲۰۰۰ پروژه قرار داده شده در گیتهاب، به طور کامل یا جزئی، به زبان AssemblyScript نوشته شده است[۱۷]، با تقریباً ۱۸۰۰۰ بارگیری کامپایلر AssemblyScript در هفته از طریق npm.[۱۸][۱۹]

در سال ۲۰۲۱، وب‌پک شروع به استفاده از AssemblyScript برای سرعت بخشیدن به محاسبه توابع هش مانند منابع xxhash و md۴ کرد. این همچنین خلاص شدن از ماژول های از پیش نصب شده را امکان پذیر کرد.

تاییدیه

ویرایش

Alon Zakai، توسعه‌دهنده اصلی Emscripten، اسمبلی اسکریپت را اینگونه توصیف کرده است که "با توجه به WebAssembly و حجم کد طراحی شده است. این زبانی نیست که ما از آن برای یک هدف جدید استفاده کنیم، اما زبانیست که برای WebAssembly طراحی شده است. دارای یکپارچگی warmp-opt عالی - و در واقع، ساخته شده با آن - و به آسانی میتوان حجم کد خوبی بدست آورد.[۲۰]

نوازنده نروژی پیتر سالامونسن (Peter Salomonsen) در سخنرانی اجلاس WebAssembly سال ۲۰۲۰ با عنوان "WebAssembly Music" استفاده از AssemblyScript را برای کامپایل در-لحظه و بیدرنگ به WebAssembly در صداسازی موسیقی الکترونیک بصورت زنده نشان داد و گفت: "من اسمبلی اسکریپت را انتخاب میکنم زیرا خوانایی بالایی دارد و در عین نیازمند به کنترل سطح بالایی نیست؛ شبیه به یک زبان پیشرفته‌است اما همچنان میشود از آن حس سادگی گرفت و حتی درصورت تمایل میتوان کدهای سمت WebAssembly نیز نگاشت کرد."[۲۱]

آرون ترنر (Aaron Turner) یک مهندس ارشد در فستلی - که یک ارائه دهنده خدمات ابری کامپیوتریست که از WebAssembly در زمینه معماری بدون سرور محیط Compute@Edge استفاده میکند - در زمینه ارزیابی اسمبلی اسکریپت نوشته بود که:[۲۲]

با اینکه اسمبلی اسکریپت نوع نگاشت سخت گیرانه تری نسبت به تایپ اسکریپت دارد، اما تا حد امکان به سینتکس و مفهوم تایپ اسکریپت نزدیک است. به این معنا که توسعه دهندگان جاوااسکریپت استفاده از اسمبلی اسکریت راحت میبینند و این موضوع پشتیبانی جامع از اکوسیستم جاوااسکریپت مدرن را فراهم میسازد. برای مثال، کامپایلر اسمبلی اسکریپت در npm موجود است، همچنین ابزار ها و کتابخانه های معمول اسمبلی اسکریپت بمانند as-pect موجود هستند.

همچنین فایل های اسمبلی اسکریپت از پسوند فایل های Typescript که همان ts. است استفاده میکنند، و این موضوع نوشتار صحیحی را برای اسمبلی اسکریپت شامل میشود تا ابزار های Typescript را در بر داشته باشد، بمانند ابزار linter موجود در TypeScript. حتی میتوان با کمی دستکاری در کد اسمبلی اسکریپت، میتوان آنرا با کامپایلر Typescript نیز اجرا کرد.

این خیلی هیجان انگیز است، زیرا اسمبلی اسکریپت یک نقطه ورود کم هزینه را برای توسعه دهندگان جاوااسکریپت ارائه میدهد تا یک زبان برای خروجی گرفتن WebAssembly انتخاب کنند - هم از نظر یادگیری خواندن و نوشتن AssemblyScript و هم از نظر استفاده از ابزارهای از قبل موجودی که ممکن است در روند کاری توسعه گر جاوااسکریپت از قبل استفاده شده‌اند. اسمبلی اسکریپت اغلب در انجمن WebAssembly به عنوان یک دروازه عالی برای انتخاب WebAssembly نامیده می شود. به گروه بزرگی از توسعه دهندگانی که قبلاً برنامه هایی را برای وب می نویسند، مسیری برای انتخاب و یادگیری WebAssembly ارائه می دهد. حتی اگر از ابتدا شروع می کنید و با جاوا اسکریپت یا تایپ اسکریپت آشنایی خاصی ندارید، اسمبلی اسکریپت برای انتخاب زبان برای شروع خروجی دهی WebAssembly یک انتخاب خوب است.

با این حال، ترنر در ادامه بدلیل تازگی نسبی این زبان و در نتیجه نداشتن برخی ویژگی‌هایی که موجود در زبان‌های برنامه‌نویسی بزرگ‌تر، پیچیده‌تر و جاافتاده‌تر هستند، به عنوان کاستی‌های بالقوه اما موقتی زبان اشاره کرد.

همچنین مشاهده شود

ویرایش

لینک های خارجی

ویرایش

منابع

ویرایش
  1. ۱٫۰ ۱٫۱ الف ب پروژه اسمبلی‌اسکریپت (۲۴ آوریل ۲۰۲۰).
  2. آرون ترنر (۲۸ مارس ۲۰۱۹). «وب‌اسمبلی برای توسعه دهندگان جاوا اسکریپت». youtube.com. WebAssembly SF. در ۱۰ فوریه ۲۰۲۱ بازیابی شد. @dcodeio [دانیل ویرتس] و @maxgraey [مکس گری]—آنها دو توسعه دهنده اصلی اسمبلی اسکریپت هستند.
  3. پروژه AssemblyScript (۲۰۱۷). «AssemblyScript ۰.۱.۰». npmjs.com. پروژه AssemblyScript. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  4. «انتشار ۰.۲۷.۲۷». ۱۱ آوریل ۲۰۲۴. بازبینی شده در ۲۵ آوریل ۲۰۲۴.
  5. پروژه AssemblyScript (۲۹ سپتامبر ۲۰۱۷). «مجوز». GitHub.com. پروژه AssemblyScript. بازیابی شده در ۱۰ فوریه ۲۰۲۱. AssemblyScript/assemblyscript تحت مجوز Apache ۲.۰ مجوز دارد.
  6. پروژه AssemblyScript. «پروژه AssemblyScript». پروژه AssemblyScript. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  7. گروه جامعه WebAssembly (نوامبر ۲۰۱۷). «نقشه راه». WebAssembly.org. گروه انجمن WebAssembly. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  8. گروه کاری WebAssembly. وب‌اسمبلی. گروه کاری WebAssembly. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  9. Alon Zakai و همکاران Emscripten (امسکریپتن). Emscripten. پروژه Emscripten. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  10. پروژه AssemblyScript. «انواع». پروژه AssemblyScript. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  11. پروژه AssemblyScript .«محیط[Environment]». پروژه AssemblyScript بازبینی شده در ۱۰ فوریه ۲۰۱۲.
  12. پروژه Wasmtime؛ «WASI: رابط سیستم WebAssembly». پروژه Wasmtime. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  13. پروژه Wasmtime؛ «Wasmtime: یک زمان-اجرا کوچک و کارآمد برای WebAssembly & WASI». پروژه Wasmtime. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  14. Wasmer, Inc. «Wasmer: The Universal WebAssembly Runtime».Wasmer, Inc؛ بازیابی شده در ۱۰ فوریه ۲۰۲۱.
  15. شبکه توسعه دهندگان موزیلا «بارگیری و اجرای کد WebAssembly». شبکه توسعه دهندگان موزیلا(Mozilla). بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  16. شبکه توسعه دهندگان موزیلا «استفاده از WebAssembly JavaScript API». شبکه توسعه دهندگان موزیلا(Mozilla). بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  17. گیتهاب. «گراف وابستگی AssemblyScript/assemblyscript». گیتهاب. بازبینی شده در ۲۴ ژوئن ۲۰۲۲.
  18. ان‌پی‌ام‌جی‌اس. دانلود های هفتگی AssemblyScript. سایت npmjs.com. بازبینی شده در ۲۴ ژوئن ۲۰۲۲.
  19. «رفع خطا در تایپ اسکریپت». ۳ ژوئن ۲۰۲۲. شنبه ۷ مه ۲۰۲۲.
  20. آلون زکایی (۱۹ فوریه ۲۰۲۰). «ارسال سازه های کوچک WebAssembly». سایت WebAssembly-Summit.org. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  21. پیتر سالومونسن (۱۹ فوریه ۲۰۲۰). «WebAssembly Music». سایت YouTube.com .سایت WebAssembly-Summit.org. بازبینی شده در ۱۰ فوریه ۲۰۲۱.
  22. آرون ترنر (۲۹ اکتبر ۲۰۲۰). «با AssemblyScript آشنا شوید: زبان محاسباتی بعدی شما». Fastly.com. فستلی. بازبینی شده در ۱۰ فوریه ۲۰۲۱.