آیا WASM تحولی در برنامهنویسی سیستمی ایجاد میکند؟

پیشرفتهای جدید در توسعه وب با WebAssembly

از تجربه‌های خرید مجازی گرفته تا پلتفرم‌های آموزشی تعاملی و حتی هنرهای دیجیتال، همه اینا با Wasm امکان‌پذیر می‌شه و به مرورگرها میاد. • نیازی به دانلود فایل های نصب نیست.• بدون نیاز به نصب برنامه ها.• نرم افزار کاملا کراس پلتفرم و قابل حمل است.• نرم افزار کاملاً ایمن است و به دلیل پروتکل امنیتی مرورگر خود هیچ خطر امنیتی عمده ای ندارد. فرض کنید میخواهید یک اپلیکیشن جدید برای سیستم عامل خود نصب کنید و از آن استفاده کنید. چه کار میکنید؟ ابتدا باید فایل نصب را دریافت کنید، آن را دانلود کنید، نصب کنید و سپس میتوانید آن را اجرا کنید. حالا دنیایی را تصور کنید که در آن مرورگر خود را باز میکنید، آدرسی را وارد میکنید و پس از باز کردن صفحه، میتوانید به همین سادگی با برنامه خود کار کنید. مثلا نمی‌تونه یه فایل روی سیستم رو بخونه یا کارای Network سطح پایین تر از Http مثلا TCP و UDP انجام بده.

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

موارد استفاده خاصی وجود دارد که Wasm برای امروز کاملاً منطقی است، از جمله برنامه‌ها و افزونه‌های مبتنی بر مرورگر. اما Wasm شروع به گسترش می کند تا بتواند چیزهایی مانند Python را در یک Wasm باینری کامپایل کند که سپس می تواند روی یک مفسر Wasm اجرا شود. اکنون می‌توانید برنامه‌های پایتون من را اجرا کنید زیرا مفسر پایتون در آن قالب کامپایل شده است، و اکنون آن مفسر پایتون می‌تواند روی هر قطعه سخت‌افزاری که مفسر Wasm دارد اجرا شود. علاوه بر این، ما شاهد تکامل Wasm به گونه‌ای هستیم که همان برنامه پایتون می‌تواند از کتابخانه‌های زبان‌های دیگری که در مفسر Wasm اجرا می‌شوند، استفاده کند. ما شاهد فشاری برای گسترش قابلیت حمل در هر دو بخش سخت افزاری و نرم افزاری به طور همزمان هستیم. چشم انداز به قابلیت حمل واقعی در طیف گسترده ای از موارد استفاده تبدیل شده است.

با محدود کردن آن، مانند اضافه کردن رابط WASI، سطح حمله را افزایش می دهید. این احتمال وجود دارد که هرچه Wasm محبوب‌تر شود، تعداد بیشتری به آن اضافه می‌شود، که منجر به مکان‌های بیشتری برای خطاهای انسانی یا اقدامات مخرب می‌شود. آیا Wasm از کانتینرها امن تر است؟ کمتر از ماشین های مجازی؟ آیا Wasm یک نقطه امنیتی شیرین بین این دو ایجاد می کند؟ حفظ این تعادل بین عملکرد و امنیت در حرکت رو به جلو حیاتی خواهد بود. توسعه دهندگانی که در نظر دارند استفاده خود از Wasm را گسترش دهند، باید در راس (و بخشی از) بحث باشند. بدون شک Wasm سریع و کارآمد است، اما اعداد معیار را باید با کمی نمک در نظر گرفت. در بخش e-digit که یک ارزیابی فشرده محاسباتی است، Wasm بسیار سریعتر از جاوا بود.

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

این سرویس انواع هتل‌ها، مکان‌های اقامتی و تجربیات سایر افراد را در یک پلتفرم واحد گردآوری کرده است. هیچ چیزی در قسمت جلویی وجود ندارد – یک برنامه جاوا اسکریپت که در مرورگر اجرا می شود – که این استراتژی ها یا هر چیزی را در مورد وضعیت جهان درک کند. وظیفه آن صرفاً صدور پرس و جوهای SQL به طور مستقیم به پایگاه داده و ارائه گرافیکی اطلاعاتی است که برگردانده می شود. پایگاه داده همه اطلاعات وضعیت را حفظ می‌کند، و چون Wasm اجازه داده است که محاسبات درست در کنار داده‌ها قرار گیرد، بسیار سریع‌تر است. WebAssembly با هدف ایجاد مزیت سرعت در کنار جاوااسکریپت طراحی شده است و قصد ندارد جایگزین جاوااسکریپت شود. به همین دلیل محدودیت‌هایی نیز دارد که مهم‌ترین آن، عدم دسترسی به DOM است.

WebAssembly همچنین برای ادغام با موتورهای جاوا اسکریپت موجود طراحی شده است که به این معنی است که ماژول های دو پلتفورم باید همکاری باشند. ماژول های آبشاری را می توان به کد جاوا اسکریپت وارد کرد، که می تواند از قابلیت های آن بهره مند شود. در حال حاضر WebAssembly نمی تواند مستقیما به DOM یا API های وب دسترسی پیدا کند، اما می تواند از جاوا اسکریپت برای انجام این کار استفاده کند. وب اسمبلی قرار نیست جایگزین جاوا اسکریپت شود؛ بلکه قرار است مکمل آن باشد. همه این پیشرفت‌ها که به وسیله کامپایلرهای JIT ارائه شده است، موجب گشته که جاوا اسکریپت نسبت به سال 2008 بسیار سریع‌تر شود.

برنامه دارای طرحی برای اعزام یک زن و مرد در سال‌های آینده به ماه است. برنامه‌های فضایی Apolo و Skylab نیز از مهارت‌های برنامه‌نویسی و توسعه‌دهندگی برای کاوش در فضا استفاده می‌کنند. New Tech Forum مکانی برای کاوش و بحث در مورد فناوری سازمانی نوظهور در عمق و وسعت بی سابقه ای فراهم می کند. انتخاب ذهنی است، بر اساس انتخاب ما از فناوری هایی که معتقدیم مهم هستند و برای خوانندگان InfoWorld بیشترین علاقه را دارند. InfoWorld وثیقه بازاریابی را برای انتشار نمی پذیرد و حق ویرایش تمام محتوای ارائه شده را برای خود محفوظ می دارد.

اما راز کثیف این است که استفاده از کامپایلر بومی Rust که به زبان C نوشته شده است و روی فلز خالی اجرا می‌شود، هنوز چیزی در همسایگی چهار برابر Wasm است. علاوه بر این، در برخی دیگر از زیر آزمون های Vercel، جاوا بسیار سریعتر از Wasm است. می توانید از آن برای رسیدگی به برنامه های بیشمار دیگر و موارد استفاده استفاده کنید. به عنوان مثال، می توانید از Wasm برای تجزیه و تحلیل احساسات استفاده کنید. نوع منطق پیچیده مورد نیاز برای تحلیل احساسات چیزی نیست که بتوان به راحتی در گویش SQL پایگاه داده بیان کرد. بنابراین، برای انجام این کار، معمولاً باید آن را به زبانی پیچیده‌تر پیاده‌سازی کنید و سپس با دانلود هر ردیف داده، داده‌ها را به آن بیاورید.

با سرعت و کارایی بالایی که داره، می‌تونه سنگین‌ترین اپلیکیشن‌ها رو توی مرورگرها اجرا کنه، بدون اینکه نیاز به نصب نرم‌افزارهای جانبی داشته باشیم. از بازی‌های آنلاین گرفته تا اپلیکیشن‌های پیچیده چندرسانه‌ای و حتی شبیه‌سازی‌های علمی، همه می‌تونن به لطف Wasm روی مرورگرها اجرا بشن. WebAssembly در محیط سندباکس مرورگر اجرا می‌شه که یه لایه امنیتی خوب فراهم می‌کنه. اما با این حال، چون Wasm به اجرای کدهای سطح پایین نزدیکه، همچنان ممکنه با خطراتی مثل سرریز بافر مواجه بشه. برای همین، برنامه‌نویس‌ها باید به خوبی کدهاشون رو مدیریت کنن و امنیت رو تو همه مراحل در نظر بگیرن.

به نظر می رسد Wasm یک سیستم بسیار خوب برای انجام این کار است، زیرا برای انجام کمابیش همین کار با صفحات وب طراحی شده است. امروزه مشاغل بزرگ و کوچک برای آسان‌تر کردن پروسه‌های خود به راه‌حل‌های نرم افزاری احتیاج دارند. به عنوان مثال امروزه استفاده از نرم‌افزارهایی مثل آفیس، گوگل کروم، آنتی ویروس، فتوشاپ، اسکایپ، Media Player، AnyDesk و غیره در بین مردم رایج است. نرم‌افزارها برای حل چالش‌های مختلف و بهبود نحوه‌ی عملکرد افراد، دارای مجموعه‌ای از قابلیت‌ها و مزایای خاص هستند. گوگل کروم به مردم کمک می‌کند تا وبسایت‌های موجود در اینترنت را جستجو کنند. نرم‌افزار آنتی ویروس برای محافظت کامپیوتر شما در برابر ویروس‌ها طراحی شده است.

زمانی نه چندان دور بود که اینتل به پردازنده های سخت افزاری مانند Kleenex برای بافت صورت می پرداخت. همه این معماری‌های سخت‌افزاری، به غیر از چیزهای قدیمی که هنوز در کمین هستند، باید سال‌ها در کنار هم زندگی کنند. اگر می خواهید با WebAssembly شروع کنید، Emscripten یک کامپایلر است که از کامپایل C و C ++ و تبدیل برنامه های موجود پشتیبانی می کند. شما برنامه های تولید بیش از حد زیادی را با استفاده از آن پیدا نمی کنید، اما این نشان دهنده گام دیگری برای پر کردن شکاف بین مرورگر و نرم افزار بومی است. این قطعا یکی است که نگاهی به آن داشته باشید، و اگر شما ماژول ها را نمی ساختید، به زودی می توانید آنها را مصرف کنید. در حال حاضر، Wasm با جاوااسکریپت و سایر تکنولوژی‌های وب تعامل خوبی داره، ولی آینده می‌تونه حتی تعاملات بیشتری رو به همراه داشته باشه.

وب اسمبلی سرعت(Speed)، قابل حمل بودن(Portability)، انعطاف‌پذیری(Flexibility) را به ارمغان می‌آورد. WebAssembly یک فرمت دستورالعمل باینری است که در مرورگر اجرا می شود و عملکرد تقریباً بومی را برای برنامه های کاربردی وب امکان پذیر می کند. به طور سنتی، جاوا اسکریپت زبان مورد استفاده برای توسعه وب بوده است، اما با محدودیت هایی همراه است، به خصوص زمانی که صحبت از کارهایی با عملکرد فشرده باشد. Wasm با اجازه دادن به زبان‌هایی مانند C، C++ و Rust که در کنار جاوا اسکریپت در وب اجرا شوند، این مشکل را برطرف می‌کند. در حالیکه این یک استاندارد نسبتا جدید است که در حال حاضر توجه بیشتری را به خود جلب کرده است، در حال حاضر در تمام مرورگرهای اصلی پشتیبانی می شود و دارای یک اکوسیستم تازه از ابزار است.

در حال حاضر بحث‌های زیادی در مورد پتانسیل Wasm وجود دارد، نه اینکه میلیون‌ها دلار سرمایه‌گذاری خطرپذیر در شرکت‌هایی که برای تکامل فناوری سرمایه‌گذاری می‌شوند، ذکر کنیم. امروزه، آن گردش کار به کامپایل متقابل یا شبیه سازی نیاز دارد که ناخوشایند است و/یا عملکرد پایین تری دارد. WebAssembly نوع جدیدی از کدهای قابل اجرا در مرورگرهای مدرن است که بر خلاف کدهای قدیمی جاوااسکریپت و وی‌بی‌اسکریپت، به صورت کدهای سطح بالا نیست. WebAssembly کدهایی کامپایل شده از یک زبان سطح بالا مانند C++‎ یا Rust یا Javascript است که با سرعتی بسیار بالا در مرورگرها قابل اجرا است. این نشان دهنده یک تغییر عمده برای وب است، جایی که جاوا اسکریپت (یا انتزاع آن مانند TypeScript) تنها زبان برای برنامه نویسی است.

دقیقا مثل جاوا WASM هم یه زبون میانیه که مستقل از پلتفرم/سیستم عامل و معماری پردازنده هست. یعنی شما همون فایل wasm که توی IOS با پردازنده ARM اجرا می‌کنید رو می‌تونید ببرید روی Linux با پردازنده ی X86 هم اجرا کنید. و ماشین مجازی بین wasm و سخت افزار قرار میگیره و ترجمه ها و بهینه سازی های لازم رو انجام میده. فقط فرق wasm و بایت کد Java اینه که Wasm روی مرورگر هم قابل اجرا هست و فقط مخصوص یه زبان طراحی نشده و سازگاری زیادی با انواع زبان های برنامه نویسی با انواع مدل مدیریت حافظه و... بسیاری از بسته‌های نرم‌افزاری می‌خواهند افزودن کمی قابلیت برای گسترش مجموعه ویژگی‌های پیش‌فرض را برای کاربران نهایی آسان کنند. این به معنای توسعه یک API است که کد جدید را قادر می سازد بدون ایجاد حفره های امنیتی یا از بین بردن کارایی، با کدهای قدیمی ترکیب شود.

خیر، اکثر ابزارهای بدون کد بسیار کاربرپسند طراحی شده‌اند و برای استفاده به دانش فنی پیشرفته نیازی ندارید. با کمی تمرین و آموزش، می‌توانید به راحتی از آن‌ها استفاده کنید. استارتاپ‌ها می‌توانند با استفاده از برنامه‌نویسی بدون کد، یک نمونه اولیه (Prototype) یا محصول حداقلی قابل ارائه (MVP) را در زمان و هزینه کمتری ایجاد کنند. ابزارهایی مانند Airtable و Notion به افراد و تیم‌ها امکان مدیریت داده‌ها، پروژه‌ها، و گردش کار را می‌دهند بدون آنکه نیازی به استفاده از نرم‌افزارهای پیچیده داشته باشند. پلتفرم‌هایی مانند Zapier و Integromat امکان اتصال ابزارهای مختلف و اتوماسیون وظایف تکراری در سازمان‌ها را فراهم می‌کنند، مثل ارسال ایمیل‌ها یا انتقال داده‌ها بین نرم‌افزارهای مختلف.

این فقط یک روش جدید برای توزیع همان نوع اسنادی بود که ممکن است روی میز قهوه‌خوری بیابید، مانند مجلات یا کتاب‌ها. واضح است که Wasm اولین فناوری نیست که مردم برای کنار هم قرار دادن چیزها به روشی ایمن تر و ساده تر استفاده کرده اند. با این حال، Wasm بسیار سریعتر از برخی از آن فناوری‌های دیگر است. داخل کامپوننت environment.js همچنان مسئله را به تابع‌های تخصصی کوچک‌تر افراز می‌کنیم. بدین ترتیب به روشی آسان‌تر می‌توانیم بهینه‌سازی کامپایلر JIT را تحریک کنیم. این تابع‌ها به محاسبه حالت کنونی همسایه‌های فوقانی، تحتانی و کناری پرداخته و همه حالت‌های گوشه‌ای را پوشش می‌دهند.

در اینجا بهبررسی پیشرفت های جدید در توسعه وب با استفاده از WebAssembly میپردازیم. وب‌ اسمبلی WebAssembly یا به اختصار (WASM) یک فناوری جدید در دنیای وب است که برای افزایش سرعت و کارایی وب‌ سایت‌ها و اپلیکیشن‌ های تحت وب طراحی شده است. برخلاف زبان‌هایی مانند JavaScript که برای توسعه‌ی وب استفاده می‌شوند،  WebAssembly یک زبان سطح پایین است که بسیار نزدیک به زبان ماشین کار می‌کند. این یعنی برنامه‌ های نوشته شده با WebAssembly می‌توانند بسیار سریع و بهینه باشند، با این مقاله از کدیتی همراه باشید. کنسرسیوم جهانی وب (W3C) اولین بار Wasm، یعنی WebAssembly را در سال ۲۰۱۵ معرفی کرد و آن را در سال ۲۰۱۸ منتشر کرد. Wasm in-the-weeds که در ابتدا صرفاً برای استفاده در مرورگر طراحی شده بود، به عنوان یک بالقوه مورد توجه قرار گرفته است.

تصور کن بتونی یه برنامه رو یه بار بنویسی و بعد اون رو تو هر جایی اجرا کنی؛ از مرورگرها و سرورها گرفته تا دستگاه‌های لبه (edge devices) و حتی سیستم‌های تعبیه‌شده. برای اینکه محتوای سایتت توسط موتورهای جستجو قابل ایندکس بشه، باید از تکنیک‌هایی مثل رندر سمت سرور یا تولید متادیتای پویا با جاوااسکریپت استفاده کنی. این اقدامات می‌تونن پروسه بهینه‌سازی برای موتورهای جستجو رو پیچیده‌تر کنن. همچنین، اگه WebAssembly به‌درستی پیاده‌سازی نشه و سرعت سایت رو کاهش بده، می‌تونه روی تجربه کاربری و رتبه سایت در نتایج جستجو تأثیر منفی بذاره. یکی از مشکلات اصلی Wasm اینه که مثل زبان‌هایی مثل جاوااسکریپت، جاوا یا پایتون، سیستم جمع‌آوری خودکار حافظه نداره. تو این زبان‌ها، حافظه‌ای که دیگه بهش نیازی نیست به‌صورت خودکار آزاد می‌شه، ولی تو Wasm این اتفاق نمی‌افته.

برنامه‌نویسی از همان ابتدا نقش بسزایی در فعالیت‌های فضایی داشته است. امروزه ناسا از زبان‌هایی مثل پایتون برای کاوش، کشف و آشنایی بیشتر با زمین و جهان استفاده می‌کند. توسعه‌دهندگان در سازمان‌های فضایی از برنامه‌نویسی برای ساخت برنامه‌هایی استفاده می‌کنند که می‌تواند نوع مواد موجود در فضا را در مکان‌های مختلف پیدا کند یا تابش‌های ماه را برای حفظ امنیت فضانوردان پیش‌بینی کند. آن‌ها با کمک این برنامه‌ها، پتابایت‌ها داده‌ی مهم را برای فهم مسائل مهم مربوط به زمین جمع‌آوری می‌کنند. ناسا در حال حاضر روی برنامه‌ی Artemis مشغول به کار است؛ این برنامه با ایده‌ی درک بهتر ماه از زبان پایتون استفاده می‌کند.


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