שפות פונקציונליות: מה הן לאן הן הולכות

גם כאשר יש הטוענים בדיוק במה מדובר, תכנות פונקציונאלי ממשיך למשוך מפתחים. ושלוש מהשפות הפונקציונליות הפופולריות ביותר - Clojure, F # ו- Scala - עומדות ברשות לשיפורים.

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

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

מהי שפה פונקציונלית, בדיוק?

במונחים הבסיסיים ביותר, תכנות פונקציונלי עוסק בהתייחסות לחישוב כאל פונקציות מתמטיות. בנוסף לשפות המחויבות כפונקציונליות מההתחלה, כמו Java ו- C # הפכו פונקציונליים יותר על ידי הוספת תמיכה לביטויי למבדה.

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

אולם ההגדרה המועדפת על הבלוג Clojure אינה בהכרח נכונה, אומרים אחרים. "המחבר בוחר אחד, שאגב הכי מתאים לקלוז'ור - לא פלא, זה בלוג של קלוז'ור", אומר אודרסקי של סקאלה. "יש לי פרשנות שקרובה שלו, אבל לא זהה."

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

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

מפתח ה- Clojure Rich Hickey, שהוא גם CTO במפתח מערכות Cognitect, מסכים עם הטענה העיקרית של הבלוג Clojure. "המאמר מציין נכון כי פונקציות ממדרגה ראשונה או ממעלה גבוהה אינן מה שמכנות פונקציונליות. תכנות פונקציונלי נועד להפוך את התכנות ליותר כמו מתמטיקה", הוא אומר. עם זאת, עדיין נותר ספקטרום של הגדרות לתכנות פונקציונלי, אומר היקי.

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

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

סטפנס מציין נתונים בלתי ניתנים לשינוי כקריטיים לתכנות פונקציונלי. במקביל - תוכניות עם מספר שרשורים הפועלים על נתונים בו זמנית - נהנות גם מנתונים בלתי ניתנים לשינוי, הוא מציין. "אנו מכנים [F #] שפה פונקציונאלית ראשונה משום שהיא באה ממורשת של שפות אחרות." הוא תומך גם בתכנות מונחה עצמים ופועל עם C # ו- Visual Basic, הוא אומר.

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

מה הלאה לשלוש השפות הפונקציונליות המובילות

סקאלה בן ה -13 הוא שפה ראשונית במדע הנתונים, אומר מייסד סקאלה אודרסקי. נתמך ב- JVM, יש לו הערכה של 400,000 עד 500,000 משתמשים. תוכניות לטווח הקצר קוראות למיטובו עבור Java 8, בהן הוראות קוד הקוד של שדרוג Java הסטנדרטי האחרון יאפשרו לסקאלה ליצור קוד יעיל יותר.

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

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

ה- F # בן ה -11 הוקם על ידי חברת Microsoft Research על ידי דון סיים ומופקד על ידי קרן F #. הוא משמש במגוון רחב של יישומים ופועל ב- Linux, OS X, Android, iOS, Windows ודפדפנים. "מה שאנחנו עובדים עליו עכשיו הוא לגרום לזה לעבוד עם .Net Core", גרסה מודולרית קוד פתוח ורב-פלטפורמות של .Net Framework, אומר סטפנס. אינטרפולציית מיתרים, המקלת על כתיבת מיתרים, נמצאת על לוח השרטוט.