לכתוב #C ולקמפל ל-JavaScript

15 בינואר 2015

תגיות: ,
2 תגובות

 

הפופולריות של JavaScript

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

  • אימוץ HTML5 מאפשר ל-JS תמיכה ביכולות מתקדמות (וידאו, גרפיקה, תקשורת, סאונד ואחרות).
  • צמיחת יישומים חדשים (כדוגמת node.js לשרתים, Cordova לאפליקציות מובייל) מדגישה את האטרקטיביות הגלומה בפיתוח לפלטטפורמות מרובות על בסיס קוד משותף.
  • שיפור מנועי הריצה (Virtual Machines) המאפשרים להריץ JS בביצועים שאינם נופלים מאלו של אפליקציות דסקטופ.
  • הרצה חלקה של קוד גרפי מתקדם בדפדפן, באמצעות כלים כ-WebGL מקלה באופן ניכר על מפתחי משחקים, שכבר אינם נדרשים לפיתוח מאומץ ואופטימיזציה ייחודית לכל פלטפורמה.

אז מה הבעיה?

חוויית הפיתוח ב-JS נחותה משמעותית מזו המוכרת למפתחים בסביבות הפיתוח של מיקרוסופט, דבר שמקשה על פיתוח פרויקטים מורכבים או מרובי משתמשים. מסיבה זו ראינו בתקופה האחרונה מספר מאמצים, בלתי מתואמים, לשיפור חוויית הפיתוח, כך שתדמה במעט לסביבה הידידותית של C#. מאמצים אלו כללו בין היתר בנייה של שפות חדשות שאמורות להתקמפל ל-JS (שהמוכרות בהן הינן CoffeeScript ו-TypeScript), וכן ספריות (כדוגמת Angular, Ember, BackBone, Knockout ואחרות) שנועדו לסייע למפתחי JS בהוספת יכולות חסרות.

ועדיין, גם אם לוקחים בחשבון את כל כלי העזר שמנסים לסייע למפתחי JS, נותרים פערים עצומים בהשוואה לפיתוח הקל והנוח בשפה כ-C# בסביבת Visual Studio:

  • מפתחי דוט נט שנדרשים לעבוד ב-JS מתקשים מאד ללא סביבת הפיתוח הידידותית והיעילה המוצעת על-ידי מיקרוסופט.
  • אין ב-JS תמיכה ביכולות שהינן טבעיות ובסיסיות בכל שפת תכנות (Ref and Out Parameters, Optional Arguments), שלא לדבר על פונקציונליות מתקדמת יותר המתבקשת בתכנות מונחה עצמים (כדוגמת Reflection, Generics ואחרות).
  • לעומת האוסף העשיר של עשרות טיפוסים שונים הנתמכים בדוט נט, JS תומכת בחמישה טיפוסים בלבד, ואפילו פעולות חישוב במספרים שלמים דורשות קוד מיוחד ב-JS.
  • ליכולות מתקדמות הנתמכות ב-C# אין מקבילות מתאימות ב-JS (כדוגמת Foreach, Yield, Linq, Lambda Expressions, Delegates, Attributes ואחרות).

להנות משני העולמות

כעת, משהבנו את הקשיים המשמעותיים הקיימים בפיתוח בסביבת JS, נשאלת השאלה – מה יכול לעשות מפתח דוט נט שנדרש לכתוב פרויקט ב-JS? התשובה בגוף השאלה: יכתוב פרויקט ב-C#, ויקמפל אותו ל-JS. פשוט כך. ישנן מספר טכנולוגיות קיימות בשוק, כמו JSIL, Saltarelle ו-SharpKit, אך לכולן חסרונות: התמיכה שלהן ב-C# חלקית בלבד, האינטראופרביליות עם ספריות קיימות ב-JS לוקה בחסר, חלקן מייצרות קוד מסורבל שמזכיר במראהו קוד אסמבלי ואינו קריא, חלקן אינן מאפשרות דיבוג ב-C#. כל הטכנולוגיות הקיימות נסמכות על קומפיילרים ישנים ואינן מותאמות לחידושים ב-Visual Studio 2015. אנחנו בחרנו לסקור היום את DuoCode, כלי חדש למפתחים, המאפשר לקמפל קוד C# ל-JS תוך התגברות על כל הקשיים הכרוכים בטכנולוגיות האחרות. תודות לטכנולוגיה של Cross-Compiling המיושמת ב-DuoCode, יכולים כעת מתכנתים להנות מכל היכולות המתקדמות המוכרות של כתיבת קוד C# ולקמפל את הקוד ל-JS. בתהליך נתמכת רשימה נרחבת של יכולות: Classes, Generics, Overloading, Properties, Events, Interfaces, Reflection, Attributes, Enumeration, Yield, Linq ואחרות – ואפילו מספר יכולות של C# 6.0, שעדיין לא שוחררה על-ידי מיקרוסופט. בתהליך מיוצר באופן אוטומטי קוד JS קריא ויעיל, שנראה כאילו נכתב ממש על-ידי מתכנת (כולל רווחים והערות). טכנולוגיה חדשנית זו מתבססת בין היתר על פרויקט Roslyn, במסגרתו שכתבה מיקרוסופט את הקומפיילר הרשמי של C# והנגישה אותו כשירות (Compiler-as-a-service). DuoCode מפענח בעזרת Roslyn קוד C#, ולאחר מכן מייצר קוד JS תוך השלמה אוטומטית של פיצ'רים החסרים ב-JS. השימוש המתוחכם בקומפיילר הרשמי והחדש של מיקרוסופט מקנה ל-DuoCode תאימות חזקה ל-C#. על מנת להוסיף ולהקל על הפיתוח, גם ספריות בסיס של דוט נט הומרו ב-DuoCode, ומפתחים יכולים להמשיך ולהשתמש במחלקות ספריה מוכרות (StringBuilder ,Generic Collections ואחרות).

ומה לגבי דיבוג? ב-Visual Studio הקשת F5 להרצת קוד ב-C# תפעיל את הקומפיילר של DuoCode במקום הקומפיילר הרגיל של C#, והקומפילר ייצר קבצי JS ויפתח את הדפדפן. אבל זה לא הכל: באמצעות שימוש במנגנון Source Maps בדפדפנים, ניתן לדבג קוד C# ישירות בתוך הדפדפן. פתיחת כלי הפיתוח בדפדפנים המוכרים (אינטרנט אקספלורר, כרום, פיירפוקס) תציג את קבצי ה-C# המקוריים ותאפשר לשים Breakpoints, להגדיר Watch, ולעשות Stepping ישירות בקוד ה-C#.

למידע נוסף ולהורדה:  www.duoco.de

image

1

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

2 תגובות

  1. שלומי18 בינואר 2015 ב 11:58

    הטכנולוגיות האלו מאוד מעניינות אבל הן מנוונות.

    מתאמצים קצת בהתחלה אבל אחרי זה מבינים את הטכנולוגיה… במקום לעקוף אותה עם איזה קומפיילר ביניים.

    מתכנת צריך להבין את הסביבה שלו, תכנות ב C# גורם לחשיבה ב C#…

    הגב
    1. ארז לרנר28 בינואר 2015 ב 17:52

      בחנתי את דוגמאות הקוד שמוצגות באתר של duoco.de.
      1. אני לא היתי רוצה שהקוד שלי ב- JS ייראה ככה. הוא בלתי קריא ולא נקי ויפה עם אובייקטים ופונקציות כמו שכותבים ב- JS נקי.
      2. למעשה צריך ללמוד שפה חדשה, שהיא שפת האובייקטים של duoco שמהווים את שכבת המעבר בין ה- C# לבין ה- JS.
      3. המפתח מתחיל לפתח תלות בשפת האובייקטים של duoco – במיוחד אם האפליקציה הופכת למורכבת מאוד, והוא לא לומד להשתמש בשיטות הנקיות של JS.
      4. זה נכון שאין את כל הכלים הטובים והיפים של VS, אבל הפתרון הנכון הוא א. לבנות IDE טוב שייתן את הכלים האלה. ב. להשתמש ב- frameworks של JS. ג. לשדרג את התקן של השפה JS כך שהיא תכיל את כל אותם כלים מתקדמים כמו generics וכו'.

      הגב