F sharp

, מבוטא אֵף שַׁארְפּ היא שפת תכנות כללית שנוצרה על ידי הארגון  ה-F# Software Foundation, חברת התוכנה מיקרוסופט ותורמים עצמאיים. #F  נחשפה בשנת 2005 ומשלבת תכנות פונקציונלי, תכנות אימפרטיבי ותכנות מונחה עצמים. זו שפת תכנות חוצה פלטפורמות בסביבת ה-NET Core., אך היא יכולה גם ליצור קוד של JavaScript לשימוש דפדפני אינטרנט וליצור קוד למעבדים גרפיים. ה-F# Software Foundation פיתח לשפה מהדר חוצה פלטפורמות תחת רישיון קוד פתוח. 

#F נתמכת בסביבות הפיתוח המשולבות Visual Studio של מיקרוסופט ו- JetBrains Rider של JetBrains. ישנם תוספים לסביבות פיתוח אחרות, ביניהם  lonide, ההופך את סביבת הפיתוח ה-VSCode לסביבת פיתוח מלאה עבור #F. ישנם גם תוספים לסביבות פיתוח מסורתיות כמו Vim ו- Emacs.  

#F שייכת למשפחת שפות תכנות ML.  היא החלה את דרכה כמימוש של העקרונות המרכזיים של שפת OCaml והושפעה משפות #C, פייתון, Haskell, Scala ו-Erlang.

 היסטוריה 
 היסטורית גרסאות 
גרסהספסיפקציות הגרסהתאריך פרסום הגרסהפלטפורמותסביבות הריצהF# 1.xמאי 2005Windows.NET 1.0 - 3.5F# 2.0אוגוסט 2010אפריל 2010Linux, macOS, Windows.NET 2.0 - 4.0, MonoF# 3.0נובמבר 2012אוגוסט 2012Linux, macOS, Windows;
JavaScript, GPU.NET 2.0 - 4.5, MonoF# 3.1נובמבר 2013אוקטובר 2013Linux, macOS, Windows;
JavaScript, GPU.NET 2.0 - 4.5, MonoF# 4.0ינואר 2016יולי 2015F# 4.1מרץ 2017Linux, macOS, Windows,
JavaScript, GPU.NET 3.5 - 4.6.2, .NET Core, MonoF# 4.5אוגוסט 2018Linux, macOS, Windows,
JavaScript, GPU.NET 4.5 - 4.7.2, .NET Core SDK 2.1.400F# 4.7ספטמבר 2019F# 5.0נובמבר 2020Linux, macOS, Windows,
JavaScript, GPU.NET Core SDK 5.0.100

 אבולוציית השפה 
#F משתמשת בפיתוח והנדסת תוכנה פתוחה. אבולוציית השפה מנוהלת על ידי מדען המחשב דון סיים (Don Syme) מתאגיד מיקרוסופט, יחד עם F# Software Foundation. גרסאות מוקדמות של השפה עוצבו על ידי מיקרוסופט, וחטיבת החקר של מיקרוסופט ( Microsoft Research, ) בסביבת פיתוח סגורה.

פיתוח #F החל בחטיבת החקר של מיקרוסופט, בקיימברידג', בריטניה. השפה במקורה תוכננה ומומשה על ידי דון סיים. שמה של #F, לפי צוות הפיתוח של #F, נגזר מהאות F, המייצגת את המילה Fun. בגרסה 1.0, הוספו פיצ'רים רבים בסיסיים, כגון תמיכה בתכנות פונקציונלי, אימפרטיבי ומונחה עצמים, structs, מבני נתונים מסוג tuple, מודולים ומודולים מקוננים וכו'. בגרסה 3.0 הוספה תמיכה בספריית LINQ, אשר מאפשרת לכתוב קוד דקלרטיבי דמוי SQL ב-#F. ספריה זו זמינה גם ב-#C מגרסה 3.0 וכן ב- Visual Basic.

כלי הפיתוח של #Visual F עבור ויז'ואל סטודיו, סביבת פיתוח משולבת מבית מיקרוסופט, מפותחים גם הם על ידי מיקרוסופט. בנוסף, הארגון F# Software Foundation פיתח מהדרים בעלי קוד פתוח, וכלים אשר משתלבים עם מהדרי הקוד הפתוח שיצרה מיקרוסופט.

 סקירת השפה 
 תכנות פונקציונלי 
#F היא שפת תכנות פונקציונלית אשר משתמשת בטכניקת הסקת טיפוסים (type inference), כלומר, מתכנת בשפה לא צריך להגדיר את טיפוסי הנתונים ( int, string וכדומה) - המהדר יסיק זאת לבד במהלך ההידור. #F מאפשרת גם הגדרת טיפוסים באופן ישיר על ידי המתכנת, ואף דורשת שימוש בכך במצבים מסוימים.

#F היא שפה מבוססת ביטויים אשר משתמשת בעיקר בטכניקת פישוט הביטויים הנפוצה eager evaluation, שלפיה ביטוי יפושט כאשר ברגע שהוא מקושר למשתנה, וכן בטכניקת- lazy evaulation במקרים מסוימים, שלפיה ביטוי יפושט רק כאשר נעשה בו שימוש.

על מנת ליצור משתנה ב- #F ולבצע לו השמה לערך, ניתן להשתמש במילה השמורה let. לדוגמה, הביטוי let y = 6 + 3מבצע השמה לביטוי 6+3, אשר מפושט ל- , למשתנה y .

בנוסף, #F מאפשר שימוש ב- sequence expressions, אשר מגדירים sequence, בתחביר seq { ... }, רשימה, בתחביר [ ... ], ומערך, בתחביר [| ... |], בתוך קוד אשר מייצר ערכים. לדוגמה:  seq { for b in 0 .. 25 do
 if b < 15 then
 yield b*b }קטע קוד זה מצרף ל-sequence מספרים בין 0 ל-15, בתוך התחום 0 עד 25 . שימוש ב-sequence expressions הוא מקרה פרטי של עקרון הנקרא computation expressions.

 תכנות אימפרטיבי 
#F תומכת גם ברכיבים רבים אשר מאפיינים תכנות אימפרטיבי (פקודתי - imperative programming), שביניהם:
 לולאות for
 לולאות while
 מערכים, אשר נוצרים באמצעות התחביר [| ... |].
 מבנה נתונים מסוג מילון, ( Hash Table ), באמצעות התחביר dict [ ... ] או באמצעות הטיפוס System.Collections.Generic.Dictionary<_,_> .

יתר על כן, ניתן לסמן ערכים ושדות מסוג record ככאלו אשר יכולים להשתנות, ולא רק קבועים, באמצעות המילה השמורה mutable.לדוגמה:// Define 'x' with initial value '1'
let mutable x = 1
// Change the value of 'x' to '3'
x <- 3

 תכנות מונחה עצמים 
 סימון של נקודה, על מנת למשל לגשת לתכונות ופעולות מתוך אובייקט או מתוך מחלקה, או לגשת למחלקה או אוסף מחלקות מתוך ספרייה מיובאת. לדוגמה: x.Name
 ביטויי אובייקטים, לדוגמה: { new obj() with member x.ToString() = "hello" }
 בניית אובייקטים באמצעות המילה השמורה new. לדוגמה: ()new Form
 בחינת טיפוסים, לדוגמה: x :? string בוחן האם x הוא מהטיפוס מחרוזת (string) .
 המרה בין סוגי נתונים (type coercions) . לדוגמה: x :?> string
 קבלת פרמטרים בעלי שמות: (Named Arguments), לדוגמה: ., (x.Method(someArgument=1
 אתחול תכונות בשמותיהן בפעולה בונה: ("new Form(Text="Hello
 פרמטרים אופציונליים: לדוגמה, (x.Method(OptionalArgument=1

הגדרות סוג אובייקט ב- #F יכולות להיות מחלקה, struct, interface, enum, ו- delegate . דוגמה להגדרה של סוג אובייקט פשוט המייצג אדם ( Person ) :/// A simple object type definition
type Person(name : string, age : int) =
 member x.Name = name
 member x.Age = age

 קהילת קוד פתוח 

קהילת הקוד הפתוח של #F כוללת את הארגון F# Software Foundation, ואת Open Source Group ב-GitHub. פרויקטים בעלי קוד פתוח פופולריים ב-#F:

 Fable, an F# to Javascript transpiler based on Babel.
 Paket, an alternative package manager for .NET that can still use NuGet repositories, but has centralised version-management.
 FAKE, an F# friendly build-system.
 Giraffe, a functionally oriented middleware for ASP.NET Core.
 Suave, a lightweight web-server and web-development library.

 ראו גם 
 מיקרוסופט
 #C
 LINQ

 קישורים חיצוניים 


 ספריית LINQ, באתר הרשמי של מיקרוסופט.

קטגוריה:תוכנה חוצת פלטפורמות
קטגוריה:שפות תכנות פונקציונליות
קטגוריה:.NET