WebAssembly انقلابی در سرعت اجرای وباپلیکیشنها!
وب اسمبلی WebAssembly به زبان ساده فرادرس مجله
در دنیای در حال تحول و توسعه نرمافزار، تقاضا برای برنامههای دسکتاپ کارآمد، ایمن و چندسکویی بیشتر از همیشه است. Tauri یک راهحل منحصر به فرد ارائه میدهد که به محدودیتهای فریمورکهای سنتی مانند Electron پاسخ میدهد. در این پست جامع وبلاگ، به Tauri چیست؟ و ساخت برنامه دسکتاپ با استفاده از Rust و JavaScript می پردازیم. علاوه بر حجم بالای کد های نوشته شده بوسیله زبان JS، پیچیدگی و زمان مورد نیاز برای دریافت، تحلیل یا (Parse)، کامپایل و در نهایت اجرای کد JS بیشتر و بیشتر شده. و زبان JS (همونطور که اول گفتم) برای این کار های پیچیده طراحی نشده و طبیعی هست که این کار هارو با کارایی کمتری انجام بده.
زمانی که این بخش از کد اجرا میشود (در مثال فرضی ما بخش ;return x + y است) JIT تنها کافی است این بخش کامپایل شده را مجدداً اجرا کند. زمانی که کد گرم چندین بار به روش مشابه فراخوانی شود، به صورت «کد داغ» (hot code) علامتگذاری میشود. بدین ترتیب فاز آغازین سریعتر میشد، چون مفسر تنها کافی بود که خط نخست کد را بخواند تا بتواند آن را به بایتکد ترجمه کرده و به طرز صحیح اجرا کند. برای نیازهای اینترنت در دهه 1990 میلادی، جاوا اسکریپت این کار را به طرز خوبی انجام میداد. ممکن است از این که چقدر این محاسبات برای حالت بعدی متفاوت هستند و یا این که چرا این همه تابع وجود دارد شگفتزده شوید.
تمامی مقالات آکادمی آمانج با تلاش و اشتیاق توسط نویسنده های ما تولید و منتشر شده است و محتوای مقالات عاری از هرگونه مطالب زرد و بیهوده است. خوشحال خواهیم شد نظر خود را در رابطه با این مقاله در قسمت نظرات درج نمایید. در ادامه به بزرگترین تهدید ها و نفوذ های بخش فناوری می پردازیم. بعد از ccall, در result ما هرچیزی رو که تابع متناظر C اون برگشته باشه رو داریم. در آینده این فرآیند توسط فریمورک های WebAssembly و پشتیبانی ماژول بومی wasm کوتاه تر خواهد شد.
البته باید گفت که جاوااسکریپت هنوز هم در بسیاری از استفادهها کاربردی خواهد بود اما برای زمانی که بخواهید منحصرا روی یک موضوع تمرکز کنید و آن را بهتر نمایید، وب اسمبلی میتواند انتخاب خوبی باشد. قسمتهایی مانند رابط کاربری و App Logic را باید با جاوااسکریپت نوشت اما فانکشنالیتی اصلی در وب اپلیکیشنها را میتوان در وب اسمبلی همراه با کارایی بسیار بالاتری توسعه داد. WebAssembly به کد ماشین تبدیل میشه که تقریباً بهطور مستقیم روی سختافزار سیستم اجرا میشه و این یعنی عملکرد بهتر و مصرف حافظه کمتر. بهعلاوه، حتی با وجود اینکه به کدهای سطح پایین تبدیل میشه، یه فرمت متنی هم تولید میشه که دیباگ کردن رو خیلی راحتتر میکنه. با این وجود، هنوز هم هستند کسانی که به کدنویسی اسمبلی 8بیتی علاقه دارند (حتی نسخهای از کامپایلر C هم ساخته شده است که برای کمودور 64 یا کمودور Vic-20 خروجی زبان ماشین 6502 تولید میکند). چالش دیگر زبان اسمبلی برای دولوپرها، پرتابل نبودن آن است و به رَغم برخی پیشرفتهای صورت گرفته در حوزهٔ اتوماسیون، تبدیل کردن کدهای 6502 به Z80 (یا یک زبان اسمبلی دیگر)، کار سادهای نیست.
برای پاسخ به این سؤال باید با طرز کار کامپایلرهای JIT آشنا باشیم و بدانیم که چگونه این وضعیت موجب شده است که جاوا اسکریپت امروزه تا این حد سریع باشد. نه، WebAssembly برای تکمیل جاوااسکریپت طراحی شده، نه برای جایگزینی اون. جاوااسکریپت همچنان برای تعاملات و وظایف سبکتر استفاده میشه، در حالی که Wasm بهطور خاص برای پردازشهای سنگینتر و بهینه شده به کار میره. هر دو میتونن به خوبی کنار هم کار کنن و یه تجربه بهتر رو در وب ایجاد کنن. یکی دیگه از قابلیتهای جالب Wasm، سیستم WebAssembly System Interface (WASI) هست که مرزها رو جابهجا کرده و اجازه میده برنامههای سمت سرور رو هم با Wasm اجرا کنی.
اینترنت اشیا (IoT) به شبکهای از دستگاههای متصل به یکدیگر گفته میشود که بدون نیاز به مداخله مستقیم انسان، از طریق اینترنت ارتباط برقرار کرده و دادهها را تبادل میکنند. این دستگاهها شامل لوازم خانگی هوشمند، حسگرهای صنعتی، فناوریهای پوشیدنی، خودروهای هوشمند و موارد دیگر هستند. IoT نحوه تعامل ما با فناوری را متحول کرده و سیستمها را کارآمدتر، خودکارتر و هوشمندتر ساخته است. در ادامه به آشنایی با اینترنت اشیا و زبان های برنامه نویسی IoT می پردازیم. با کمک توانایی های اضافه شده بوسیله وب اسمبلی به دنیای وب، می توان منتظر انقالب هایی در سمت توسعه اپلیکیشن های Client بوده و شاهد پیش روی قلمرو دنیای وب در قلمرو دنیای اپلیکیشن های سمت دسکتاپ باشیم.
WebAssembly میتواند تجربه کاربری را بهبود بخشد زیرا به توسعه دهندگان این امکان را میدهد که عملکرد و سرعتاپلیکیشنهای وب را افزایش دهند. به عنوان مثال، بارگذاری سریعتر صفحات، تعاملات بیشتر و پاسخگویی بهتری به کاربرانارائه میدهد. این به ویژه در اپلیکیشنهای تک صفحه ای (SPA )و بازیهای آنلاین بسیار مهم است. جاوا اسکریپت در سال 1995 از سوی «برندن آیک» (Brendan Eich) طراحی شد و هدف وی ارائه زبانی بود که طراحان به کمک آن بتوانند اینترفیسهای دینامیک را با آن به سادگی پیادهسازی کنند. به بیان دیگر جاوا اسکریپت برای این ساخته نشده که سریع باشد؛ بلکه هدف اولیه این بود که لایه رفتاری را به صفحههای HTML به روشی راحت و سرراست اضافه کند. معماری زیرساختی برای این رویکرد شامل ایجاد یک بازی جدید و سپس ایجاد و ارسال حالت نخست (ماتریسی پر شده از 0 و 1) به آن است.
درواقع multithreading این امکان رو داره که فعالیتهای مختلف یک برنامه رو به بخشهای کوچیک تقسیم کنیم و بعد به صورت همزمان انجام بشن تا خیلی خیلی سریعتر اون فعالیت به اتمام برسه. وب اسمبلی سریع تره ولی دوتا ماشینه رو یادتونه؟ حالا فرض کنید اونی که سریع ترین سرعت رو داره مسیر رو بلد نیست ولی اونی که سرعتش کمتره بلده از یه راه کوتاهتر بره و مجبور نیست کل آزادراه رو طی کنه. فرض کنیم 0x6a یک دستور بایتکد در این زبان هست که معادل متنی اون میشه add (تابع جمع). حالا شما این امکان رو دارید که به زبانهای مختلف (Rust, Go, C, CPP ...) کد بنویسید و اون رو تبدیل کنید به WASM (بخونید وزم - مخفف وب اسمبلی). برای این کار، میتونی از زبانهایی مثل C، ++C، Rust یا AssemblyScript استفاده کنی. ابزارهایی مثل Emscripten برای تبدیل کدهای C و ++C به WebAssembly وجود دارن.
سی پلاس پلاس زبانی است که تقریبا در هر پلتفرمی میشود از آن استفاده کرد. حال با استفاده از وب اسمبلی، میتوان از سی پلاس پلاس در دنیای وب نیز استفاده کرد. اپلیکیشنهای Blazor را میتوان بهصورتِ client-side و با استفاده از کدهای سیشارپ و به صورت کاملاً درونی در مرورگرها اجرا کرد. درواقع با استفاده از اینکار میتوان کدهای برنامهنویسی را موردِ استفادهی مجدد قرار داده و همچنین بخشهایی از کدهای سمتِ سرور برنامه را در سمتِ کلاینت استفاده کرد. شایان ذکر است که برنامه های WebAssembly قرار نیست جایگزین برنامه های جاوا اسکریپت شوند ؛ حداقل هنوز نه.در عوض ، WebAssembly را به عنوان یک همراه جاوا اسکریپت در نظر بگیرید. جایی که جاوا اسکریپت انعطاف پذیر است ، به صورت پویا تایپ می شود و از طریق سورس کد قابل خواندن توسط انسان ارائه می شود ، و WebAssembly با سرعت بالا، تایپ قوی، و از طریق یک فرمت باینری فشرده ارائه می شود.
آخرین قدم اینه که جاوا اسکریپت و WebAssembly رو بهم متصل کنیم. یک API قدرتمند برای کار کردن با WebAssembly در مرورگر وجود داره. بخش هایی که ما نیاز داریم یکی Module interface و یکی متد ccall هست. این متد به ما اجازه میده یک تابع رو با استفاده از نام در کد C صدا بزنیم و ازش به عنوان تابع جاوا اسکریپت استفاده کنیم. وقتی ما به wasm کامپایل می کنیم و کد رو در مرورگر بارگذاری می کنیم, main بصورت خودکار اجرا میشه.
Bulk memory operations and SIMD برای برنامه هایی ضروری است که در میان انبوهی از داده ها آسیب های بهینه سازی وارد می کنند و به شتاب اصلی CPU نیاز دارند ، مانند machine learning یا برنامه های علمی. پشتیبانی نیتیو از Threading در زبان هایی مانند Rust و C++ رایج است. عدم پشتیبانی از threading در WebAssembly به این معنی است که کل کلاس های نرم افزار هدفمند WebAssembly را نمی توان به آن زبان ها نوشت. پیشنهاد اضافه کردن threading به WebAssembly از مدل ++threading C به عنوان یکی از الهامهای خود استفاده میکند. در این آموزش ما می خواهیم نشان بدیم که چطور یک فایل ساده C رو در wasm کامپایل کنیم و اون رو در یک صفحه وب شامل کنیم.
یک راه برای انجام چنین کاری استفاده از یک کامپایلر ماژولار مانند LLVM است که میتواند برای زبانهای مختلف استفاده شود. البته برای زبانهای سی و سی پلاس پلاس میتوانید از یک ابزار سادهتر به نام Emscripten استفاده کنید که خود این ابزار نیز بر پایه LLVM ساخته شده است. زبان برنامهنویسی Rust نیز دارای یک کامپایلر منحصر به فرد برای خودش است که خروجی WebAssembly تولید میکند، این کامپایلر rustc نام دارد. تا قبل از وب اسمبلی، جاوا اسکریپت تنها زبان برنامهنویسی آشنا و قابلفهم برای مرورگرها بود. اما امروزه نسخههای جدید مرورگرها با کدهای Wasm سازگارند و آنها را میشناسند و اجرا میکنند.
در حقیقت این نسخه تنها یک پیشنویس برای تاسیس کردن یک تکنولوژی جدید و به هیجان در آوردن مردم در رابطه با آن است.
در خاتمه جا دارد اشاره کنیم WebAssembly هدفی فراتر از وب در سر دارد. کارهایی صورت پذیرفته است تا این زبان بتواند بدون وجود ماشین مجازی جاوااسکریپت نیز اجرا شود. به هر حال، اگر به زبانهای برنامهنویسی قدیمیتر علاقه دارید یا صرفاً کنجکاوید بدانید که وباسمبلی چهطور با سختافزار ارتباط برقرار میکند، بهتر است دست به امتحان آن بزنید. شما کدتون رو توی یکی از زبانهایی که وب اسمبلی پشتیبانی میکنه مینویسید. بعد یک «تفسیر» از اون کد تولید میشه که کامپایلر وب اسمبلی از اون استفاده میکنه تا با دیتا تایپهای خودش تطابق بده و بایتکد تولید کنه. مثلا چیزی تحت عنوان Struct توی وب اسمبلی نیست این باید تبدیل بشه به چی؟ کار IR تفسیر همچین شرایطی هست.
ابزارهای شخص ثالث این زبان در زنجیره ابزار خود از Wasm نیتیو پشتیبانی نمیکند ، اما میتوان از ابزار بخش ثالث برای تبدیل به Wasm استفاده کرد. Java, Lua, و .زبان های Net همگی از پشتیبانی هایی مانند این برخوردار هستند. شما هنوز هم می توانید این کار را انجام دهید، اما WebAssembly به عنوان یک راه حل بلند مدت بهتر در نظر گرفته شده است. هسته Emscripten (کامپایلر مبتنی بر LLVM/Clang که سورس C و C++ را در WebAssembly کامپایل می کند) و زنجیره ابزار مورد نیاز را نصب کنید. عملیات Compile کمتری انجام میشه، چرا که خیلی از کامپایل ها قبل از اینکه Client درخواستشون کنه آمده برای serve کردن، بارگذاری شدند.
هرچند اگر، تمایل به نوشتن WAST دارین باید حتما درمورد Stack-oriented programming و Stack machine اطلاعات زیادی داشته باشید. در این مرحله profiler به رصد و گردآوری دادههای اجرای کد میپردازد. البته این توضیح بسیار مختصر بوده و تفاوتهایی در میان موتورهای مرورگر مختلف در این زمینه وجود دارد. ما در این راهنما برای این که درک بهتری از این فناوری داشته باشیم، یک الگوریتم نوشتیم که امکان مقایسه عملکرد WASM را در برابر جاوا اسکریپت محض (Vanilla JS) فراهم میسازد. به همین دلیل، برنامهنویسها باید دقت بیشتری در بررسی امنیت کدها داشته باشن و اقداماتی مثل اعتبارسنجی دادهها و تمیز کردن ورودیها رو با دقت انجام بدن. این اقدامات اضافی میتونه کدنویسی رو پیچیدهتر کنه و به منابع بیشتری نیاز داشته باشه.
ولی منظور من اینه که دقیقا مثل یک استک دستورات Push و Pop میشه پس شما «باید» بلد باشین با «کمترین» حرکت ممکن دستور یا عملیات خاصی رو پیاده سازی کنید. یه آزادراه رو در نظر بگیرید که دوتا ماشین دارن توش حرکت میکنن؛ یکی شون پول عوارضی رو آنلاین پرداخت کرده و دیگه نیاز نیست همش وایسه و پول بده اما اون یکی باید دم هر عوارضی توقف کامل کنه و پول بده ... WebAssembly به دلیل محدودیت هایی که در محیط اجرای خود ایجاد میکند، میتواند به عنوان یک لایه امنیتی اضافی دروبسایتها عمل کند. این به معنای این است که وبسایتها میتوانند از مزایای سریعترین اجرا در کنار امنیت بالاتر استفاده کنند. برخی موتورهای جاوا اسکریپت در خصوص کمّیت تلاشهای بهینهسازی محدودیتهایی دارند و زمانی که به این حد برسند دیگر برای بهینهسازی تلاش نمیکنند.
اما وقتی مشتری فندق زیاد میشه نمیتونه روی همون زمین بازم اتاق هتل بسازه باید بره زمین بیشتر اجاره کنه ... مثال بالای فیبوناچی به نظر میرسد که در حالت blocking به سر میبرد. با این حال رابط کاربری تا زمانی که متدها کامل نشوند منجمد میمانند. متد instantiateWasm در حقیقت async است و زمانی را برای بارگذاری ماژول Web Assembly نیاز دارد. زمانی که فردی متد Fibonacci ما را فراخوانی کند، خاصیت ماژول نامعین است. برای استفاده از فایل WASM در runtime نیاز است که فایل از طریق URL دریافت شده و به یک آرایه بایتی تبدیل شود.
همچنین، اگه WebAssembly بهدرستی پیادهسازی نشه و سرعت سایت رو کاهش بده، میتونه روی تجربه کاربری و رتبه سایت در نتایج جستجو تأثیر منفی بذاره. زبانهایی مثل Rust، C و ++C به صورت مستقیم کامپایلرهایی دارن که کدها رو به WebAssembly تبدیل میکنن. اگه از زبانهای دیگه مثل جاوا، Lua یا داتنت استفاده میکنی، میتونی از ابزارهای شخص ثالث برای تبدیل کدهات به Wasm استفاده کنی. حتی Wasm میتونه کدهایی که با پایتون یا روبی نوشته شده رو هم ترجمه کنه. توی این پست قراره از دید یه برنامهنویس جاوااسکریپت به WebAssembly نگاه کنیم و ببینیم چه کارهایی میشه باهاش انجام داد. یه نکتهی مهم اینه که WebAssembly یه ابزار کمکیه، نه یه جایگزین برای جاوااسکریپت.
بهتره که تمامی این زبان ها به یک نوع دیگه از کد تبدیل شن (IR) و بعد بنا به معماری مقصد، کد به اسمبلی تبدیل شه. ولی مستندات WASI اینطوری تعریف شده که، سیستم میزبان یک مسیر رو در اختیار runtime قرار میده بعد وقتی برنامه درحال اجرا درخواست میکنه که از مسیر x فایل y رو بهم بده، بهش یک file descriptor برگشت میده. یعنی برنامه دیگه فقط حق داره روی فایل y عملیات انجام بده و «اگر» نیاز شد میتونه بقیه مسیر x رو طی کنه. بعلاوه چون این کد فشرده شده دریافت کردنش هم (یعنی دانلود اون توسط مرورگر) خیلی سریعتر از جاوا اسکریپت اتفاق میافته. هرچند مثلا gzip کردن جاوا اسکریپت حجم فایل رو کاهش میده ولیکن خب gzip کردن وب اسمبلی هم حجمش رو «بیشتر» کاهش میده ...
کد اسمبلی کدی هست که کاملا رابطه یک به یک با کد باینری داره که قراره داخل یه معماری خاص از کامپیوتر، اجرا شه. مثلا فرض کنید کدی به زبان C++ نوشتید و قراره روی معماری 64 بیتی Intel تون اجراش کنید. حالا مزایا و معایب هر کدوم از این روش ها چیه؟ در روش مفسر، کد به سرعت شروع به اجرا میکنه و نیازی به صبر کردن اضافی برای اجرای اون نیست . این یکی از نیاز های اساسی زبان JS هست که به کاربر این اجازه رو میده که راحت تر و با سرعت بالاتری کد ها رو توسعه بده. ولی خوب، بدی این کار چیه؟ اگه قرار باشه این کد بار ها و بار ها اجرا شه، پس باید بار ها و بار ها هم تفسیر شده و حلقه اجرا-تفسیر تکرار شه. وب اسمبلی بایت کدی تولید میکنه که نوع دادهها توی اون استاتیک هستن بعلاوه توی وب اسمبلی هنوز Garbage Collection پیاده سازی نشده و باید خودتون مدیریت حافظه رو در دست بگیرید.
چه کار میکنید؟ ابتدا باید فایل نصب را دریافت کنید، آن را دانلود کنید، نصب کنید و سپس میتوانید آن را اجرا کنید. حالا دنیایی را تصور کنید که در آن مرورگر خود را باز میکنید، آدرسی را وارد میکنید و پس از باز کردن صفحه، میتوانید به همین سادگی با برنامه خود کار کنید. WebAssembly به گونهای توسعه یافته است که بتوان از آن در کنار جاوااسکریپت استفاده نمود. توسعهی استاندارد جدید wasm توسط کنسرسیوم وب جهانی و با همکاری شرکتهای موزیلا، اپل، گوگل و مایکروسافت در حال انجام میباشد. در سمتِ کلاینت اجزای موردِ نیاز به مرور بر روی کامپیوتر یا دستگاهِ تلفنهمراه ذخیره شده و اصطلاحا کَش میشوند. ارتباط سرور و کلاینتها از طریقِ WebAssembly و کدهای مخصوص کتابخانهای بهصورتی کاملا امن و با سرعتی مناسب برقرار شده و اپلیکیشن PWA شکل میگیرد.
معماری سطح پایین WebAssembly بهت امکان کنترل دقیق اجرای کد رو میده، اما همین موضوع نیازمند درک عمیقی از معماری کامپیوتر و برنامهنویسی سطح پایین هست. برخلاف زبانهایی مثل جاوااسکریپت یا پایتون که بسیاری از عملیاتها رو بهصورت خودکار انجام میدن، در WebAssembly باید خودت مسئولیت مدیریت دستی حافظه، عملیات پشتهای و محاسبات باینری رو بر عهده بگیری. از سال قبل تا به الان، اکثر مرورگرهای مدرن وب فرایند پشتیبانی از WebAssembly را شروع کردهاند. حتی به عنوان یک fallback، یک کتابخانه جاوااسکریپتی با نام asm.js ایجاد شده که Emscripten کد نوشته شده در C را به آن تبدیل میکند. در حال حاضر وبسایتی مانند فیسبوک برای فشردهسازی تصاویر و وبسایت Adobe Lightroom برای نسخه تحت وب خود از این تکنولوژی استفاده میکند. شما در وهله اول به ابزاری نیاز دارید که سورس کد شما را به WebAssembly تبدیل بکند.
WebAssembly همچنین کاملاً قادر به ساخت برنامه های مبتنی بر وب برای پردازش کلمه ، صفحات گسترده ، اسلایدها ، ویرایش عکس/فیلم و موارد دیگر است. و اگرچه WebAssembly ممکن است در حال حاضر پرکاربردترین فناوری نباشد ، اما روز به روز محبوبیت و کاربرد آن در حال افزایش است. از سال 2020 ، اکثریت قریب به اتفاق استفاده از WebAssembly برای استخراج و بازی رمزنگاری استفاده می شد. با این حال ، با توجه به ماهیت چگونگی تکامل برنامههای کاربردی وب و موبایل ، انتظار داریم WebAssembly به صورت تصاعدی در آینده نزدیک به کار گرفته شود. اساسی ترین کاربرد برای WebAssembly به عنوان هدفی برای نوشتن browser software است. اجزایی که در WebAssembly کامپایل می شوند را می توان به هر یک از زبان ها نوشت.
این بدان دلیل است که جاوااسکریپت به صورت مستقیم به دستورالعملات پردازنده تبدیل نمیشود، بلکه در محیط ماشین مجازی اجرا میشود. این موضوع به توسعهدهنده امکانات بسیار خوبی مانند خودکارسازیهای مقداردهی به حافظه و... پس توسعهدهنده نیازی ندارد که درگیر تخصیص دادن حافظه و موارد مربوطه به اپلیکیشن باشد. همانطور که گذشته نشان میدهد این پروسه میتواند بسیار پیچیده و وقتگیر باشد، همچنین احتمال خطا کردن در آن بسیار زیاد است. بنابراین درگیر نبودن با این بخش از برنامه حقیقتا چیز خوبی است.
همونطور که Wasm داره محبوبتر میشه، جامعهی توسعهدهندههاش هم داره قویتر میشه. این یعنی ابزارها، فریمورکها و کتابخونههای پیشرفتهتری برای کار باهاش به وجود میان و این خودش یه قدم بزرگ به سمت پذیرش گستردهتر Wasm خواهد بود. ولی تو WebAssembly معمولاً باید خیلی از چیزها رو از پایه بسازی و این موضوع میتونه زمان توسعه رو بیشتر کنه. همچنین تعداد کارشناسان و منابع موجود برای حل مشکلات WebAssembly هنوز به اندازهی جاوااسکریپت نیست، که این هم میتونه پیدا کردن راهحلها رو سختتر کنه. باینریهای WebAssembly بسیار کوچکتر از فایلهای متنی جاوااسکریپتی هستند. به دلیل وجود سایز کمتر در نتیجه زمان کمتری برای دانلود کردن نیاز داریم.
در دنیای پرشتاب کسبوکارهای امروزی، سازمانها بهطور مداوم به دنبال راههایی برای سادهسازی فرآیندها، بهبود تحویل پروژهها و همراستایی ابتکارات با اهداف استراتژیک هستند. این امر نیازمند برنامهریزی دقیق، حمایت ذینفعان و یک چشمانداز واضح برای تضمین موفقیت است. ما برای نمونه یک کد بسیار ساده C می نویسیم که یک عدد تصادفی بین 1 و 6 انتخاب می کنه. من سعی کردم جریانی که از 2017 شروع شده تا الان رو توی یک مطلب جمع کنم برای همین خیلی فشرده شد ... مثل تور بازدید از اماکن یه شهر؛ حالا اگه علاقه مند بودید بعد از خوندن این مطلب میتونید برید یه جنبه خاص از وب اسمبلی رو یاد بگیرید. چرا؟ خب اونها کلی سرور سراسر دنیا دارن که باید به صورت عادی ترافیک زیادی رو تحمل کنه؛ فایروال و لود بالانسر و بقیه چیزها هم که وجود داره.
این یک قلمرو جذاب است که در آن رباتها از مناطق دور افتاده اینترنت اطلاعات جمعآوری میکنند. بیایید به این بپردازیم که وب اسکرپینگ چیست؟ چرا مردم از آن استفاده میکنند و نقش web scraping در OSINT چه چیزی می تواند باشد. نصب Emscripten کمی طول میکشه و قطعا جالب نیست, اما این بهترین کامپایلری هست که درحال حاضر میتونیم پیشنهاد کنیم. همچنین مطمئن بشید حافظه کافی برای این کار دارید, حدود 1 گیگابایت کافی هست. درست مثل ویژگیهای فرعی که کم کم اضافه میشه؛ یک سری ماژول فرعی هم مثل asynchronous I/O یا file watching و غیره اضافه میشن و به مرور دنیای بیرون از مرورگر هم بهتر و بهتر میشه.
اما اون مجموعه از دادهها که عملیات روش انجام میشه «ممکنه» همش 64 بیتی نباشه مثلا شاید دوتا 32 بیتی داری. خب اگه یکی یکی انجامش بدی هر بار 32 بیت از حافظه اضافه میاد که الکی رزرو شده. برای همین اگه اون عملیات رو همزمان روی هردوتاشون انجام بدی اینطوری هم از حافظه به خوبی استفاده کردی و هم سرعت پردازش بالا میره. این چیه؟ چرا این شکلیه؟ -- این قطعه کد یک «بیان متنی» از بایت کدهای وب اسمبلی هست. اگه فکر میکنید شبیه Lua هست کاملا درسته چون به این شکل از نوشتن میگن S-expressions که توسط زبان Lua ابداع شده. تایپ اسکریپت «شاید» در آینده به طور رسمی به وب اسمبلی کامپایل بشه چون به نظر میرسه تایپهاش رو اضافه کردن.
برنامه نویسی خانه هوشمند