Skip to main content

Web Assembly - מה זה

מה זה?

Web Assembly היא טכנולוגיה חדשה שנמצאית עדיין בפיתוח. היא נתמכת ע"י חברות הווב הגדולות - גוגל, אפל, פיירפוקס ומיקרוסופט. טכנולוגיה זו מרחיבה את היכולות של JavaScript.

הסיכום הנ"ל מבוסס על הרצאה בשם WebAssembly: the browser VM we were waiting for של Boyan Mihaylov.

מה זה יאפשר?

הטכנולוגיה הזו הולכת להבשיל תוך שנה שנתיים. היא הולכת לעשות מיני מהפכה בעולם הווב ותאפשר להריץ בפעם הראשונה תוכנות "כבדות" שדורשות חישובים מסובכים על הדפדפן במקום שיהיה צריך להתקין תוכנה מקומית על המחשב. 

דוגמא לאפליקציות כאלה: משחקים עם גרפיקה מורכבת, תוכנות לעיבוד תמונה ווידאו, תוכנות למציאות רבודה, תוכנות סימולציה מדעיות, כלי פיתוח מורכבים ועוד.

קצת היסטוריה

כדי להבין מה זה Web Assembly כדאי להסתכל קצת על ההיסטוריה של JavaScript.

השפה JavaScript הומצאה ב 10 ימים (!) בשנת 1995 כשפה שיריץ הדפדפן הראשון הרציני שנקרא אז Netscape.

  

השפה היתה אז מיועדת כדי לעשות שינויים קטנים בתצוגה של הדף שמוצג על המסך. לדוגמא - להסתיר חלקים מהמסך, ליצור אנימציות פשוטות, שינוי צבעים וכו:



עם התחזקות המחשבים, נעשה שימוש רב יותר ב JS בדפדפן.

לקראת סוף העשור הראשון של שנות האלפיים, השימוש ב JS התגבר מאוד. אפלקיציות שלמות רצו בעיקר בצד הדפדפן וביצעו קריאות לשרת רק כדי לקבל מידע ולא כדי לקבל דפי HTML שלמים (מה שנקרא AJAX או SPA -   single page applications). דוגמא לאפליקציות כאלה הן GMAIL ו Google Maps.





בהמשך, שפת JS "פלשה" לצד השרת. גוגל שחררה את מנוע ה JavaScript שלה כתוכנה שיכולה לרוץ בשרתים ולהריץ שרת שלם שכתוב ב JS. שם התוכנה - nodejs.



JS המשיך וגלש גם לתוך מכשירי הטלפון הניידים ע"י כלי פיתוח שמאפשרים לכתוב אפליקציות מובייל בשפת JS (כלי הפיתוח המוכר ביותר הוא cאבל יש עוד לא מעט).


ועכשיו "להווה" - asm.js

JS נהייתה השפה הכי פופולרית והמשיכה להתפתח. גרסאות חדשות שלה יוצאות וגם סביבות עבודה וכלי עבודה חדשים יוצאים חדשות לבקרים.

בנוסף, נוצרו תוכנות שקימפלו שפות אחרות לשפת JavaScript! זה איפשר הרצת תוכנות שכבר כתובות בשפה אחרת, על הדפדפן!



asm.js
אז אם זה כבר המצב, למה לא שנקמפל תוכניות בשפת C ל JavaScript ואז נוכל להריץ תוכנות כבדות על הדפדפן. תוכנות כמו משחקים רציניים, תוכנות לעיבוד תמונות ועוד.



בעייה.

JS היא לא יעילה לכתיבת תוכנה עתירת חישובים. הנה רק כמה מהיכולות בשפה שגורמות לאיטיות: יש רק thread יחיד, יש כל הזמן בדיקות בזמן ריצה של סוגי הנתונים (הרי אין types ב JS), יש garbage collection, יש המרה אוטומטית של ערכים - box/unbox אוטומטיים ועוד.

הרעיון שלהם היה שימוש בחלק משפת JS שיוכל לרוץ מהר. כלומר, asm.js הוא קודם כל הוא קוד JS. ושנית כל הוא רק חלק מ JS.

הפתרון לבעית הביצועים בנוי משני חלקים - הכנסת types לשפת JS בצורה שלא פוגעת בתחביר של השפה (בעיקר integer ו float) ושימוש רק בחלקים מהשפה שאפשר לקמפל אותם להרצה מהירה: הורדת garbage collection, הורדת המרה אוטומטית של ערכים וכו.

בנוסף, כאשר הדפדפן טוען קוד JS שעובד במוד של asm.js אז הוא מבצע קומפילציה ראשונית אופטימלית של הקוד.

ואכן, כאשר מימשו את כל הרעיונות פה, הצליחו להריץ משחקים "כבדים" על הדפדפן ! הגיעו לביצועים מרשימים. אומנם יותר איטיים מהתוכה המקורית אבל עדיין ברמה מאוד מאוד מרשימה. שם הקומפיילר שמקמפל C++ ל asm.js הוא Emscripten (קישור נוסף עליו)



הבעיה הקטנה היתה שהרעיון כולו היה בעיקר של פיירפוקס ולא אומץ ע"י שאר החברות.

Web Assembly


בקיצור - WASM.

ווב אסמבלי הוא נסיון לעשות את אותה משימה (הרצת תוכנות כבדות על הדפדפן) כמו "שצריך" והפעם בגיבוי כל החברות הגדולות - גוגל, מיקרוסופט, אפל, פיירפוקס ועוד.


זו שפה חדשה שרצה על הדפדפן. היא לא JS. אבל זו לא שפה שמפתחים כותבים בה אלא שפה שהיא תוצר קומפילציה בלבד. לתוכנית שכתובת ב WASM יש שני ייצוגים - או ייצוג טקסטואלי או ייצוג בינרי. זה מאוד דומה ל bytecode חדש.

 בייצוג הטקסטואלי, הקוד כבר מסודר בצורה שהיא קלה לפרסר לקרוא אותו. הנה דוגמא לקוד ב WASM לעומת קוד ב asm.js:



בייצוג הבינרי, יש המרה של הייצוג הטקסטואלי לפורמט בינרי דבר שחוסך מקום וזמן ל parsing.




מה עוד יש ב wasm?


ב WASM יש דברים שחסרים ב JS כמו multithreaded ו garbage collection.

Comments

Popular posts from this blog

Jenkins error: groovy.lang.MissingPropertyException

I tried to run groovy build step and got below error. This post will describe how I solved the problem.

Caught: groovy.lang.MissingPropertyException: No such property: hudson for class: script


טיפים לטסט על אמבולנס במד"א

אורך הטסט הוא בערך 20-30 דקות בהם הטסטר נותן הוראות ימינה ושמאלה ולפעמים קצת יותר. נראה שהטסטר מחפש להבין שאתה לא נהג חסר אחריות.
הרכב עצמו הוא אוטומט. מוט ההילוכים הוא בהגה ודרכו אפשר לעבור בין המצבים (Drive, Reverse etc).
ההמברקס הוא דוושת הרגל השמאלית.
טיפיםהעצות בלשון זכר רק לצורך פשטות.
בתחילת הנסיעה:
אם אתה הראשון, תדליק אורות דרך.

בדוק איך מעבירים את ההילוך ל 3 בלי להסתכל בידית ההילוכים כי הטסטר עלול לבקש במהלך הנסיעה שתעביר להילוך שלישי.

בדוק איך להשתמש בדוושת בלם היד (שמאלית) כי ייתכן שהטסטר ישלוף לך את המפתח באמצע הנסיעה ויבקש ממך לבלום את האמבולנס באמצעות "פימפום" על דוושת הבלם יד תוך כדי שידית השחרור שלו משוכה אחורה כדי שלא ינעל הבלם
בנסיעה: סע לאט, אבל בטוח. 
ציית לתמרורים,

לא לשכוח לאותת,
שמור מרחק, 
אל תקפוץ על פסי האטה, 
אל תעלה על מדרכה ואם זה קורה בפנייה אז קח אחורה ורד מהמדרכה (המדרכה היא רק להולכי הרגל),
סע בצד ימין ולא באמצע הכביש,
תדע להגיד כמה מותר לנסוע בכל כביש שאתה נמצא בו,
כאשר נמצאים ברחוב שנכנס לרחוב חד סטרי אז צריך לדעת לאיזה צד לפנות בתוך הרחוב …