Contributing to F# Compiler

11 במאי 2016

התקבלתי לתוכנית מנטורינג (Mentorship Program) בחסות F# Software Foundation התוכנית בת 8 שבועות קובעים מטרה שקשורה ל F# ו/או תכנות פונקציונלי ונפגשים(וירטואלית) פעם בשבוע למשך חצי שעה. המנטור שקיבלתי עבד על הקומפיילר של F# וקבענו שהוא יעזור לי לתרום לקומפיילר, המשימה הראשונה הייתה לשפר את הביצועים של 8 פונקציות של List. רשימה ב C# מוכרת וסטנדרטית אבל רשימה ב F# שונה כי הוא ממומשת בסגנון פונקציונלי לדוגמא היא בלתי ניתנת לשינוי (Immutable) אבל ניתן לבנות רשימה חדשה שבנויה בחלקה מהרשימה הקיימת לדוגמא: let list1 = let list2 = 0 :: list1 בשורה הראשונה מוגדרת רשימה שמכילה את המספרים...
תגיות: , , , ,
אין תגובות

Introduction to “Roslyn” .NET Compiler Platform

22 בנובמבר 2014

מבוא Roslyn הוא פרויקט קוד פתוח מבית מיקרוסופט אשר מממש את הקומפיילר של C# ב C# (ואת הקומפיילר של VB ב VB). פרויקט זה פותח משתי סיבות עיקריות. הראשונה הקומפיילר הישן כתוב ב C++ והיה קשה לפתח פיצ'רים חדשים לשפה. השנייה היא שהקומפיילר היה "קופסה שחורה" מקבל קוד C#(או VB) ומוציא קובץ בינארי וכל המידע שיש לקומפיילר על הקוד אבד בסיום תהליך הקומפילציה ולא היה נגיש לכלים חיצוניים לדוגמא Visual Studio ופיצ'ר כמו Syntax Highlighting ב Visual Studio מימש מחדש חלק מהקומפיילר ולא היה שימוש חוזר בקוד. לכן המימוש של הקומפיילר ב Roslyn חושף בעזרת API ברור את כל המידע...
תגיות: , , ,
אין תגובות

ניתוח שפה טבעית ב FSharp – חלק 3

30 באפריל 2014

בפוסט הקודם הוגדרו הטיפוסים הבסיסיים Category Conj ו Lexicon והפונקציה merge. בפוסט הנוכחי מימוש CYK Algorithm ובדיקת משפט לדוגמא. בעזרת CYK Algorithm ניתן להחיל את הכללים על הקטגוריות כדי לבדוק אם המשפט תקין בשלב ראשון הגדרת הגרף שעליו האלגוריתם יעבוד: בשלב שני הגדרת בפונקציה שתחשב כל תא בגרף ע"י הפונקציה merge: בשלב שלישי הגדרת האלגוריתם כפי שמתואר בקישור: הגדרת פונקציית עזר להדפסת גרף על המסך: כל מה שנותר זה לבדוק את האלגוריתם הגדרת מילון לדוגמא: הפעלת האלגוריתם על משפט מתוך המילון: בשלב ראשון מפרקים את המשפט למילים בשלב שני מריצים את האלגוריתם והדפסת הגרף ובשלב שלישי בודקים אם האיבר האחרון בגרף הוא S משמע שהמשפט תקין. לסיכום...
אין תגובות

ניתוח שפה טבעית ב FSharp – חלק 2

28 באפריל 2014

בפוסט הקודם הוסברה תאוריית CG בקצרה, בפוסט הנוכחי יוגדרו הטיפוסים והפונקציונליות הבסיסיים. דבר ראשון הגדרת הטיפוס קטגוריה תראה כך: טיפוס כזה נקרא Abstract Data Type בקיצור ADT וב FSharp הוא נקרא Discriminated Union, זהו אחד הכלים הבסיסיים של תכנות פונקציונלי אשר מגדיר רשימה של אפשרויות לבחירה ובעזרתו ניתן לבנות מבני נתונים מורכבים כמו רשימות מקושרות ועצים בעזרת הגדרות פשוטות. מכאן שהטיפוס קטגוריה יכול להיות כל אחד מהאפשרויות שמוצגות מה שמעניין זה שהאפשרויות Over ו Under מכילות זוג קטגוריות שגם הוא יכול להיות כל אחד מהאפשרויות טיפוס כזה נקרא טיפוס רקורסיבי מימוש מקביל בשפה מונחית עצמים ימומש ע"י Composite Design Pattern ויראה כך:   לאחר הגדרת האפשרויות...
אין תגובות

ניתוח שפה טבעית ב FSharp – חלק 1

27 באפריל 2014

בסדרת הפוסטים תוצג בקצרה אחת מהתיאוריות של ניתוח שפה טבעית ואת המימוש שלה בעזרת FSharp. בעזרת התאוריה נכתוב תכנית שתקבל משפט באנגלית, תנתח אותו, ותחזיר לנו אם המשפט חוקי בשפה. התאוריה שעליה נתבסס נקראת Categorial Grammar ובקיצור CG. התאוריה מגדירה ששפה מורכבת ממילון (Lexicon) ובו מילים, כל מילה שייכת לקטגוריה אחת או יותר, וכללים שמגדירים פעולות על קטגוריות. הקטגוריות ב CG יכולות להיות פשוטות לדוגמא: Noun (N) Noun phrase (NP) Sentence (S) או קטגוריה מורכבת לדוגמא: (S\NP)/NP סימון זה אומר שאם מימין למילה שזאת הקטגוריה שלה יהיה NP ומשמאלה יהיה NP אז נקבל משפט תקין. היתרון בקטגוריות מורכבות הוא שזה מפחית את כמות סוגי הקטגוריות, וכמות הקטגוריות הפשוטות הוי...
אין תגובות