فلفل

دیروز بعد از مدتها تصمیم گرفتم یک برنامه‌ی کوچک بنویسم که کاری بجز ساختن ترکیبات اسمی بامزه فارسی نمی‌کند. برنامه را به زبان برنامه نویسی Rust نوشتم و منتشر کردم.

این برنامه واقعا نادان است. ولی با وجود نادانی برنامه‌ی خوبی است. چرا؟ اصلا مگر می‌شود به برنامه‌ای که خروجی‌اش «میمونک جسور» یا «مورچه‌ی خوشفکر» یا «کرگدن دلسوز» باشد گفت برنامه‌ی بد؟ تصدیق می‌کنید که نمی‌شود. یعنی اصلا امکان ندارد که بشود. اصلا هم مهم نیست که این برنامه ده خط کد دارد یا ده میلیون خط. حتما برنامه‌ی خوبی است!

هربار که این صفحه را ریفرش کنید اگر همه چیز بر وفق مراد پیش رفته باشد باید یک ترکیب اسمی در پایین ببینید:

برنامه را با Rust نوشتم چرا که می‌توان آنرا تقریبا ساده به WebAssembly کامپایل کرد. کلمه‌ای در بالا دیدید (اگر کار کرده باشد) در حقیقت در یک برنامه‌ی ساده به زبان Rust نوشته شده. اما Rust که در وب اجرا نمی‌شود. در وب فقط جاوااسکریپت است که کار می‌کند. برنامه بالا به WebAssembly کامپایل شده و به همین خاطر در براوزرهای جدید کار می‌کند.

چیست این WebAssembly؟

«وسم» زبانی است شبیه به اسمبلی. دو کاربرد مهم دارد. یکی اینکه پای هر برنامه‌ای که به WebAssembly کامپایل بشود را به وب باز می‌کند. معنایش اینست که یک برنامه C/C++ می‌تواند به وسم کامپایل بشود و در مرورگر اجرا بشود، بدون اینکه کاربر چیزی نصب بکند. تکنولوژی همان تکنولوژی وب است منتها وسم هم به آن اضافه شده.

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

در ضمن وسم جاوااسکریپت نیست اما می‌توان از جاوااسکریپت توابع وسم را صدا زد و بالعکس. این هم یکی دیگر از معیارهای طراحی بوده است. دیگر اینکه زبان اسمبلی وسم طوری انتخاب شده که دستورالعمل‌های پردازنده‌های حال حاضر تا جای ممکن اشتراک داشته باشد تا از این راه مرورگر بتواند با سرعتی نزدیک به اجرا به زبان ماشین برنامه‌های وسم را روی کامپیوتر مقصد اجرا بکند.

بحث مفصلی است و من هم تازه‌کارم. بیشتر یادگرفتم دوباره می‌نویسم. جهت خالی نبودن عریضه:

اگر هوس امتحان کردن به سرتان زد…

برای نصب کافیست آنرا با «کارگو» (نصاب برنامه‌های Rust) نصب کنید:

$ cargo install felfel
$ felfel

اگر هم خواستید با وسم امتحان کنید یک پروژه ساده بسازید و به آن «فلفل» بزنید:

$ npm init wasm-app myapp && cd myapp
$ npm install felfel
$ npm run start

بعد هم کافیست تابع gen را صدا بزنید:

import * as felfel from 'felfel';
console.log(felfel.gen());

شاد و سرافراز باشید