آشنایی با 12 مورد از پروژه های جذاب که مبتنی بر زبان WebAssembly هستند

دوشنبه 15 شهریور 1400

زبان WebAssembly زبانی برای کامپایل کدها در مرورگرهای مدرن است، در این مطلب قصد داریم درباره پروژه های مبتنی بر زبان WebAssembly صحبت کنیم.

 آشنایی با 12 مورد از پروژه های جذاب که مبتنی بر زبان WebAssembly هستند

امروزه اپلیکیشن های تحت وب به هیچ وجه به اندازه اپلیکیشن های دسکتاپ سریع و با عملکرد بهینه نیستند اما سوالی که پیش می آید این است که اگر این چنین می شد چطور؟ این وعده ای است که زبان WebAssembly به توسعه دهندگان می دهد.

زبان WebAssembly یک زبان سطح پایین است و شباهت بسیار زیادی به زبان assembly دارد که با توجه به ساختار باینری جمع و جوری که دارد می تواند با عملکردی مشابه اپلیکیشن های نیتیو و دسکتاپ در مرورگرها اجرا شود. در عین حال WebAssembly می تواند قابلیت کامپایل کردن پرتابل برای زبان های برنامه نویسی مانند C، C++، سی شارپ، Rust، Go، کاتلین، سوییفت و بسیاری از زبان های برنامه نویسی دیگر فراهم کند.

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

WebAssembly منجر به توسعه طیف وسیعی از فناوری های جدید از جمله زبان های برنامه نویسی جدید شده است که از قدرت این زبان برنامه نویسی استفاده می کنند. در ادامه قصد داریم 12 مورد از بزرگترین پروژه های مبتنی بر زبان WebAssembly طراحی شده و روی این زبان برنامه نویسی شرط بندی کرده اند را به شما معرفی کنیم.

پروژه Binaryen

Binaryen در واقع یک کتابخانه زیرساختی مجموعه ابزارهای کامپایلر برای زبان WebAssembly می باشد. این ابزار به زبان سی پلاس پلاس نوشته شده است. هدف از ساخت این ابزار این است که کامپایل کردن WebAssembly را ساده تر، بهینه تر و سریع تر کند. این ابزار دارای یک API به زبان C می باشد که دارای یک هدر منحصر به فرد است و علاوه بر این می تواند از زبان برنامه نویسی جاوا اسکریپت نیز استفاده کند. ورودی هایی که به صورت WebAssembly هستند پذیرش می شوند ولی برای کامپایلرهایی که گراف کنترلی کلی را ترجیح می دهند این گراف ها نیز قابل پذیرش هستند.

IR( نمایش میانی) داخلی ابزار Binaryen از ساختار داده های جمع و جوری استفاده می کند و از تمامی هسته های CPU استفاده می کند تا کدژن موازی و بهینه سازی را به طور کامل انجام دهد. علاوه بر این IR  همچنین به آسانی به زبان WebAssembly کامپایل می شود چرا که در اصل جز زیرمجموعه های این زبان به شمار می آید. بهینه سازی های اختصاصی WebAssembly هم ابعاد و اندازه کدها و هم سرعت آنها را بهینه سازی می کنند و باعث می شود تا Binaryen به عنوان یک کامپایلر نیز به تنهایی مفید و کاربردی باشد.

آشنایی با ابزار Blazor WebAssembly که از زبان WebAssembly استفاده می کند

Blazor WebAssembly فریم ورکی است که می توان از آن برای ساخت اپلیکیشن های تحت وب تک صفحه ای، سمت کلاینت و تعاملی استفاده کرد. این فریم ورک از .NET برای برنامه نویسی استفاده کرده و اپلیکیشن های تولید شده را در مرورگرهای مدرن( شامل مرورگرهای موبایل) در ران تام .NET مبتنی بر WebAssembly میزبانی می کند. یکی از مزایای بسیار مهم این فریم ورک این است که با استفاده از آن نیازی به هیچ افزونه و پلاگین دیگر یا کامپایل کردن دوباره کدها به زبان های برنامه نویسی دیگر وجود ندارد. ران تایم این فریم ورک کدهای .NET را قادر می سازد تا به قابلیت ها و عملکردهای مرورگر دسترسی داشته باشد که این کار از طریق API های جاوا اسکریپت زبان WebAssembly صورت می گیرد.

نکاتی مهم درباره ابزار Blazor WebAssembly

زمانی که یک اپلیکیشن Blazor WebAssembly در مرورگر اجرا می شود فایل های کد سی شارپ و همین طور فایل های Razor در داخل اسمبلی های .NET کامپایل می شوند که در زمان اجرای .NET در مرورگر دانلود می شود. از آنجایی که کد .NET در WebAssembly که در sandbox جاوا اسکریپت مرورگر قرار دارد اجرا می شود در برابر اقدامات مخرب که در دستگاه سرویس گیرنده وجود دارند محافظت می شود و همین عامل نیز باعث می شود تا امنیت آن چند برابر شود. اپلیکیشن های Blazor WebAssembly را می توان به صورت مستقل یا با استفاده از پشتیبانی سرور مستقر کرد.

آشنایی با ابزار Cheerp که بر مبنای زبان WebAssembly ساخته شده است

ابزار Leaning Technologies’ Cheerp یکی از ابزارهای بسیار قدرتمند بر مبنای زبان WebAssembly است که به عنوان یک کامپایلر زبان های سی و سی پلاس پلاس در اپلیکیشن های تحت وب عمل می کند. این ابزار قادر است تا کدهای سی و سی پلاس پلاس که با نسخه های 17 سی پلاس پلاس و بالاتر از آن سازگاری دارند را به زبان WebAssembly ترجمه کند. Cheerp با زیرساخت LLVM/Clang ادغام شده است و بهینه سازی های سفارشی زیادی روی آن صورت گرفته است که باعث شده است تا عملکرد آنها بهینه سازی شود و اندازه خروجی کامپایل شده کاهش پیدا کند. ابزار LLVM/Clang که مبتنی بر زبان WebAssembly است عمدتا برای انتقال کتابخانه ها و برنامه های موجود در زبان های سی و سی پلاس پلاس به html 5 مورد استفاده قرار می گیرد. علاوه بر این شما می توانید از آن برای نوشتن اپلیکیشن های تحت وب و کامپوننت های WebAssembly استفاده کنید. این ابزار تحت مجوزهای متن باز و تجاری ارائه می شود.

ابزار CheerpJ

این ابزار به عنوان یک کامپایلر جاوا برای اپلیکیشن های تحت وب طراحی و ساخته شده است. این کامپایلر مبتنی بر LLVM می تواند هر اپلیکیشن سمت کلاینت جاوا را به زبان WebAssembly، جاوا اسکریپت و HTML تبدیل کند و اپلیکیشن های سمت کلاینت زبان برنامه نویسی جاوا را قادر می سازد تا بتوانند در مرورگرهای مدرن اجرا شوند. به طور این CheerpJ سه کامپوننت را توسعه می دهد که به ترتیب عبارت اند از: کامپایلر AOT، یک ران تایم در WebAssembly و جاوا اسکریپت و API های DOM interoperability جاوا اسکریپت. با استفاده از CheerpJ فایل های JAR می توانند با استفاده از کامپایلر AOT کامپایل شوند. نکته جالب درباره این ابزار مبتنی بر زبان WebAssembly این است که هیچ نیازی به پشتیبانی سمت سرور ندارد.

ابزار Emscripten را بیشتر بشناسید

این ابزار متن باز کدهای سی  و سی پلاس پلاس و همین طور بسیاری از زبان های برنامه نویسی دیگر را با استفاده از فناوری کامپایلر مبتنی بر LLVM به زبان WebAssembly کامپایل می کند تا بتوانید این کدها را در وب مستقر کنید. علاوه بر این شما می توانید این کدها را در Node.js یا یک ران تایم Wasm مانند Wasmer نیز مستقر کنید. کامپایلر Emscripten از emcc و جاوا اسکریپت پشتیبانی می کند و پشتیبانی API را برای کامپایل کردن کدها به شما ارائه می دهد. اصلی ترین کاربرد Emscripten تبدیل کردن لیستی از پایگاه های کد واقعی به زبان WebAssembly است. شما می توانید در این لیست از پایگاه کد تجاری مانند موتور بازی سازی Unreal و پلتفرم سه بعد Unity نیز استفاده کنید. Emscripten از کتابخانه های استاندارد زبان های برنامه نویسی سی و سی پلاس پلاس و همینطور exception های این زبان نیز پشتیبانی می کند و قابلیت استفاده  از دستورات گرافیکی OpenGL/WebGL را نیز برای شما فراهم می کند. شما می توانید از Emscripten SDK برای نصب کردن مجموعه ابزارهای Emscripten استفاده کنید که امکان استفاده از آن در سیستم عامل های ویندوز، لینوکس و MacOS برای شما فراهم شده است.

ابزار Forest از دیگر ابزارهای مبتنی بر زبان WebAssembly

Forest یک زبان برنامه نویسی فانکشنال است که به زبان WebAssembly کامپایل می شود. هدف از طراحی و ساخت این زبان برنامه نویسی ایجاد زبانی است که طراحی و توسعه اپلیکیشن های تحت وب پیچیده، تعاملی و فانکشنال را ساده تر کند. در حال حاضر Forest به عنوان نرم افزار تحقیقاتی و آزمایشی پیش از نسخه آلفا شناخته می شود. از جمله مهم ترین ویژگی های این زبان برنامه نویسی می توان به تایپ کردن استاتیک، تطبیق الگو، داده ساختارهای تغییر ناپذیر، چندین سینتکس مختلف و فرمت کردن خودکار کدها اشاره کرد. اولین سینتکس که برای این زبان برنامه نویسی در نظر گرفته شده است از Elm و Haskell الهام گرفته شده است.

اصول طراحی زبان برنامه نویسی Forest شامل مواردی مانند سهولت در همکاری با توسعه دهندگان، قابلیت تست کردن painless-as-possible و ارائه ساختارهای مناسب می باشد. به گفته سازندگان این زبان برنامه نویسی، Forest می تواند سرعت بالایی را در ساخت اپلیکیشن های پیچیده به شما ارائه دهد به طوری که حتی می توانید بازی های پیشرفته را نیز به راحتی در فضای وب پیاده سازی کرده و اجرا کنید.

آشنایی با ابزار Grain

بر اساس اطلاعاتی که سایت این پروژه ارائه داده است زبان Grain شامل ویژگی های از هر دو نوع زبان فانکشنال و زبان های برنامه نویسی آکادمیک می باشد. کدهای این زبان با استفاده از مجموعه ابزارهای Binaryen و کامپایلرهای قوی به زبان WebAssembly کامپایل شده و می توانند در مرورگرها، سمت سرور و تقریبا در هر جایی اجرا شوند. یکی از مهم ترین مزایای این زبان این است که در آن شما نیازی به ارورها و خطاهای نوع runtime و همین طور type annotation ها نخواهید داشت. مجموعه ابزارهای Grain دارای CLI، کامپایلر، ران تایم و کتابخانه استاندارد است که به صورت یک فایل باینری در اختیار شما قرار می گیرد. توسعه دهندگان برای ساخت این ابزار از منبع آن نیاز به Node.js و Yarn دارند و همین طور باید بدانید که باینری های آن نیز برای سیستم عامل های لینوکس، ویندوز و MacOS در دسترس است.

ابزار JWebAssembly برای کامپایل بایت کدهای جاوا به زبان WebAssembly

JWebAssembly که توسط I-Net Software ساخته شده است یک کامپایلر زبان برنامه نویسی جاوا برای تبدیل بایت کد به زبانWebAssembly می باشد که فایل های کلاس جاوا را به عنوان ورودی دریافت کرده و فرمت باینری WebAssembly به عنوان فایل .WASM و فرمت متنی را به عنوان فایل های .WAT به عنوان خروچی برای شما تولید می کند. هدف از ساخت و ایجاد این ابزار اجرای کدها به صورت نیتیو در مرورگرها است. از نظر تئوری JWebAssembly می تواند هر کدی که بایت کدهای جاوا قابل کامپایل است را کامپایل کند که از جمله آنها می توان به Clojure، Groovy، JRuby، کاتلین و اسکالا اشاره کرد.

نکاتی مهم درباره JWebAssembly

نکته بسیار مهمی که بدانید این است که ابزار JWebAssembly در حال حاضر آماده تولید نیست. اگرچه تمامی موارد مورد نیاز برای انتشار JWebAssembly 1.0 آماده است اما آزمایش های نهایی مورد نیاز که بر مبنای زبان WebAssembly است هنوز روی آن انجام نشده است. در نقشه راه نسخه اولیه این ابزار قابلیت هایی مانند تجزیه بایت کدهای جاوا، فریم ورک های آزمایشی و همینطور افزونه Gradle نیز در نظر گرفته شده است. I-Net Software انتظار دارد که امسال نسخه اولین این ابزار را منتشر کند.

Pyodide از دیگر ابزارهای مبتنی بر زبان WebAssembly

پروژه Pyodide که اخیرا از زیرمجموعه های مرورگر موزیلا خارج شده است تا بتواند به یک پروژه مستقل تبدیل شود می تواند کدهای پایتون و ابزارهای علمی پایتون را به زبان WebAssembly کامپایل کند. از جمله کدهایی که این ابزار می تواند کامپایل کند می توان به کدهای Python 3.8 runtime، NumPy، SciPy، Matplotlib، Scikit-learn  و بسیاری از پکیج های علمی دیگر پایتون اشاره کرد که می توانید تمامی این کدها را به راحتی در مرورگر اجرا کنید. Pyodide می تواند یک روند تبدیلی شفاف را بین زبان های برنامه نویسی جاوا اسکریپت و پایتون به شما ارائه دهد و به زبان برنامه نویسی پایتون دسترسی به API های وب را ارائه دهد. Pyodide کار خود را در سال 2018 به عنوان یکی از زیر مجموعه های پروژه Iodide برای انجام عملیات های علم داده در مرورگر آغاز کرد. Pyodide را می توان از طریق REPL در مرورگرها اجرا و امتحان کرد.

آشنایی با ابزار TeaVM

TeaVM یک کامپایلر بسیار قدرتمند برای تبدیل بایت کدهای زبان برنامه نویسی جاوا به زبان WebAssembly و جاوا اسکریپت است که باعث می شود تا بتوانید این بایت کدها را در مرورگر اجرا کنید. البته باید توجه داشته باشید که پشتیبانی از زبان WebAssembly در حال حاضر به صورت آزمایشی است. دقیقا مانند ابزار close cousin GWT که در واقع همان مجموعه ابزارهای وب گوگل است TeaVM نیز به توسعه دهندگان اجازه می دهد تا اپلیکیشن های مختلف را با استفاده از زبان برنامه نویسی جاوا نوشته و آنها را با زبان برنامه نویسی جاوا اسکریپت مستقر کنند. برخلاف GWT، این ابزار با فایل کلاس های کامپایل شده کار می کند نه با سورس کدهای مربوط به اپلیکیشن های مختلف. علاوه بر این باید دقت داشته باشید که TeaVM اساسا یک ابزار توسعه وب به شمار می آید. این ابزار برای گرفتن پایگاه کدهای بزرگ به زبان های جاوا و کاتلین و تولید کدهای جاوا اسکریپت طراحی و ساخته نشده است. یکی از زیر مجموعه های پروژه TeaVM با نام Flavour فریم ورکی است که به شما اجازه نوشتن اپلیکیشن های تک صفحه ای مبتنی بر وب را می دهد.

پلتفرم Uno مبتنی بر زبان WebAssembly

این پلتفرم در واقع یک جایگزین بسیار جذاب برای پلتفرم طراحی اپلیکیشن موبایل زامارین است که برای طراحی رابط کاربری برای تیم های دات نت مورد استفاده قرار می گیرد و این تیم ها می توانند از آن برای ساخت اپلیکیشن هایی که یک پایگاه کد در زبان WebAssembly دارند استفاده کنند. شما می توانید از این زبان برای طراحی اپلیکیشن هایی برای وب، ویندوز، MacOS، لینوکس، iOS و اندروید استفاده کنید که در آن از زبان برنامه نویسی سی شارپ و XAML استفاده می شود. یکی از ویژگی های پلتفرم Uno این است که ران تایم Mono-WASM در نسخه 5 دات نت را توسعه می دهد و تا بتواند تمامی کدهای زبان برنامه نویسی سی شارپ را در مرورگرهای مدرن اجرا کرده و به عنوان پلی بین اپلیکیشن های WinUI و UWP( پلتفرم جهانی ویندوز) کرده و به صورت نیتیو در زبان WebAssembly اجرا شود. برای ساخت اپلیکیشن های تحت وب با استفاده از پلتفرم Uno توسعه دهندگان می توانند از ویژال استودیو یا ویژوال استودیو کد استفاده کنند.

Wasmcloud آخرین مورد از ابزارهای مبتنی بر زبان WebAssembly

ابزار Wasmcloud که توسط Cosmonic طراحی و ساخته شده است در واقع یک ران تایم اپلیکیشن می باشد که زبان WebAssembly را در توسعه اپلیکیشن های پرتابل و قابل حمل که به محیط های مبتنی بر کلود، edge و مرورگرها متصل می شوند توسعه می دهد. این پلتفرم به شکلی طراحی شده است که عملکردی مشابه با عملکرد اپلیکیشن های نیتیو را ارائه دهد و علاوه بر این امنیت آن نیز توسط sandbox زبان WebAssembly تامین می شود.از جمله ویژگی های این پلتفرم می توان به ارائه یک مدل برای جدا کردن منطق تجاری اپلیکیشن ها از سایر قابلیت ها و امکانات آنها اشاره کرد. توسعه دهندگان می توانند میکروسرویس هایی را به زبان دلخواه خود طراحی کرده و با استفاده از این پلتفرم آن را در هر محیطی مستقر کنند. از جمله زبان هایی که در حال حاضر در این پلتفرم پشتیبانی می شوند می توان به زبان هایی مانند Rust، TinyGo و AssemblyScript اشاره کرد. Wasmcloud در حال حاضر به عنوان یک پروژه Cloud Native Computing Foundation (CNCF) شناخته شده است.

صحبت پایانی

زبان WebAssembly امروزه می تواند قابلیت های متنوعی را به توسعه دهندگان ارائه دهد تا کدهای خود را در مرورگرهای مدرن اجرا کنند. امیدواریم آشنایی با 12 مورد از پروژه هایی که مبتنی بر این زبان هستند برای شما مفید و کاربردی بوده باشد. 

برنامه نویسان

نویسنده 3277 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید