שפת התנהגות, נקראת גם שפת תכנות עילי (אם כי לדעתי בטעות כפי שאנסה להסביר בערך) היא כל שפת מחשב המשמשת רק או בעיקר להגדרת התנהגות של תוכנה בצורה מופשטת מאד ← איך תוכנה "תתנהג" או תפעל במצבים שונים.
נכון לעשור השלישי של שנות ה-2000 קיימות מאות (למעלה מ-600) שפות התנהגות, אם כי המנייה תלויה בשאלה איך מגדירים שפת כזו, כך שייתכן שהמספר גבוה יותר.
מאפיינים נפוצים של שפת התנהגות
אין הגדרה נוקשה בתחום מדעי המחשב למונח "שפת התנהגות" אך בפועל שפת התנהגות כוללת בדרך כלל את המאפיינים שאתאר להלן אשר הכרות עימם תאפשר להגדיר, לפחות מבחינה פרקטית, האם שפת מחשב מסוימת היא שפת התנהגות או לאו; בין מאפיינים אלה:
- יכולת להגדרה ועיבוד אופרטורים לוגיים ואופרנדים לוגיים
- יכולת להגדרה ועיבוד משתנים וערכים
- טיפוסי מידע מוגדרים היטב
- בקרת זרימה
מניסיוני, שפות ההתנהגות השונות כוללות לרוב גם ביטויי מפתח או פרוצדורות פנימיות של השפה, וכן מנגנון טיפול בשגיאות בעת הרצת קוד מקור; לדעתי מאפיינים אלה ממחישים היטב כי כל שפת התנהגות היא למעשה תוכנה בעצמה.
שלמות טיורינג כמאפיין בסיסי אפשרי של שפות התנהגות
ישנה דעה לפיה בכדי להגדיר שפת מחשב כשפת "שפת תכנות" (במובן שפת התנהגות) עליה להיות יכולה, בעיקרון, לממש מכונת טיורינג ("מושלמת טיורינג") אך בפועל לא כל השפות שהוגדרו כך הן כאלה.
שפה המוגדרת כ"שפת תכנות" Brainfuck יכולה, בעיקרון, לממש מכונת טיורינג דרך שמונה פקודות קצרות בלבד (כל אחת באורך תו אחד, אשר אולי אין בעיה להתייחס לפחות לחלקן כאל "אופרטור לוגי"), אך אין בה מימוש של הרעיונות משתנה וטיפוס מידע.
שפת התנהגות המממשת חלקית מכונת טיורינג מכונה לעתים "מושלמת טיורינג" (Turing complete); בכדי למממש חלקית מכונת טיורינג נדרשת יכולת לקרוא מידע שהוקלט אל תוך מזיכרון מידע במערכת מחשב ולהקליט מידע לזכרון כזה וכן ללכת קדימה ואחורה במצביע עליו (ומכאן גם יכולת ללכת קדימה ואחורה במצביע על קוד תוכנה) ולקבל פלט לאחר הרצה.
לעתים רק השילוב של שתיים או יותר שפות מחשב יניב את אפשרות המימוש של מכונת טיורינג (כך למשל, HTML ו-CSS יחדיו נחשבות לעתים ל"שפת תכנות" מבחינת יכולתיהן), אם כי זו הגדרה תאורטית שייתכן שאין לה כל יישום פרקטי.
שימושי שפות התנהגות בשונה משפות מחשב אחרות כגון שפות מבנה (דוגמת HTML), שפות עיצוב (דוגמת CSS) ועוד, שפות התנהגות משמשות לפיתוח כללי של תוכנה בדגש על פיתוח התנהגות.
יש שפות התנהגות המשמשות בעיקר לפיתוח התנהגות בהקשר מסוים כגון פיתוח אפליקציות אינטרנט (דוגמת שפת JavaScript), פיתוח משחקי מחשב עם התקנה מקומית (לדוגמה C++), פיתוח רובוטיקה (לדוגמה, Java) ועוד. באופן כללי לכל אחת מהשפות שהזכרתי יש עוד שימושים בולטים ואלו רק דוגמאות מהירות.
קיימות גם שפות תפעול-התנהגות (דוגמת שפת Bash) המשמשות לשליטה על מערכות הפעלה ופיתוח סקריפטים בהן.
פרדיגמות פיתוח תוכנה
ניתן לפתח התנהגות בפרדיגמות שונות ושפות התנהגות שונות מיועדות לפיתוח התנהגות בפרדיגמה מסוימת; כלומר כתיבת הקוד לפי הרעיונות והעקרונות של הפרדיגמה.
פרדיגמות פיתוח התנהגות נפוצות לדוגמה הן:
- אימפרטיבית: פרדיגמה זו כוללת למשל את תת-הפרדיגמות "פרוצדוראלית" ו"מונחה-עצמים"
- דקלרטיבית: פרדיגמה זו כוללת למשל את תת-הפרדיגמה "פונקציונאלית"
בשפות התנהגות מיועדות תכנות מכוון אובייקטים למשל, עצמים (אובייקטים) הם ככלל "סוג מידע" מובנה עימו ניתן לפתח התנהגות מורכבת.
תאורטית ניתן לשוח על פיתוח תוכנה כללי, בקוד מכונה, אוטומטית, עם למידת מכונה (machine learning) דרך פרדיגמת פיתוח תוכנה מסוימת שהמכונה עובדת בה אך האנושות עדיין רחוקה ממימוש כזה ובכל הקשור לבני אדם העבודה עם פרדיגמת פיתוח תוכנה בדרך כלל תהיה נכונה רק לגבי שפות התנהגות.
הערות כלליות
- שפת תכנות דינאמית היא שפת על-סף ("שפת תכנות עילית") המתאפיינת בכך שקוד מקור הכתוב בה, מקומפל בעת הרצתו.
אף מפתח תוכנה לא יודע בעל פה את כל מאות השפות האלה אך הוא בעל בקיאות משמעותית בלפחות אחת מהן וכן במאפיינים הנפוצים ברבות מהן אם לא ברובן.
בכל הנוגע לשפות מחשב מסוג שפות התנהגות (או תפעול-התנהגות), אני למשל בקיא במידת מה רק בשתיים שאני עובד עימן תכוף והשתיים האלו הן שפת Bash ושפת JavaScript.
עם Bash אני בעיקר מתפעל ומפתח סביבות אחסון לינוקס.