שפת תכנות

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

בניסוח אחר, שפת תכנות הינה אוסף של חוקים תחביריים (Syntax) וסמנטיים (Semantic) המגדירים שפה פורמלית. תוכנית הנכתבת בשפת תכנות מגדירה ביצוע תהליך חישובי. שפת התכנות קובעת את הכלים העומדים לרשות מחבר התוכנית כדי לבצע הגדרות כאלו.

מאפייני שפות התכנות

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

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

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

  • נתונים ומבני נתונים, כגון סוגי המספרים שהשפה יודעת לטפל בהם, ומבנים מורכבים יותר המוכרים על ידי השפה, כגון מערכים, רשימות, מבנים, אובייקטים ופונקציות.
  • פקודות ומבני בקרה שהשפה יודעת לבצע - הצהרה על משתנים, פעולות אריתמטיות, לולאות וכדומה.
  • עקרונות העיצוב של השפה ותפישת העולם שמאחוריה, בין אלה ניתן למנות פרדיגמות כגון תכנות אימפרטיבי (הכולל תכנות מבני ורוב הגרסאות של תכנות מונחה עצמים) לעומת תכנות הצהרתי (כולל תכנות פונקציונלי, תכנות לוגי ו תכנות אילוצים), תכנות גנרי ועוד. שפות רבות הן מרובות-פרדיגמות, כמו למשל פייתון ו-#C.
  • מערכת הטיפוסים. שפות עשויות להיות בעלות טיפוסיות חזקה, חלשה, או לא קיימת (למשל ב-Pawn ו- Forth). בנוסף ניתן לשאול מתי מתבצעת הבדיקה של תקינות הטיפוסים - דינמית (בזמן ריצה) או סטטית (בזמן הידור). כן ניתן לשאול מי אחראי להצהיר על הטיפוס: המתכנת או המהדר.

שפות תכנות נוצרו על-מנת להגדיר פעולות של מחשבים, אבל הן יכולות לשמש גם על-מנת לתאר אלגוריתמים, בדומה לתרשימי זרימה, או להגדיר מבני נתונים (data structures) מורכבים. בכך מהוות שפות אלו גם צורת תקשורת. מתכנתים שואפים לשמור על הקוד שלהם קריא, כלומר פשוט להבנה על ידי אדם, כדי שיהיה קל לנפות ולתחזק אותו.

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

שפת התכנות הבסיסית ביותר, והקרובה ביותר לשפת מכונה, קרויה שפת סף או אסמבלי (Assembly). הוראות שפת הסף פועלות באופן ישיר על תאי הזיכרון של המחשב, האוגרים הפנימיים של המעבד והתקני הקלט/פלט של המחשב, ובפרטנות רבה. בצורתה הבסיסית של שפת הסף, כל הוראת אסמבלי יחידה שכותב המתכנת, מתורגמת להוראה אחת בשפת מכונה. מכאן, ששפת הסף נקבעת על פי המעבד עליו התוכנה אמורה להיות מופעלת, כאשר שפת הסף עשויה להיות שונה מאוד בין משפחת מעבדים אחת למשנתה, וניתן אף למצוא גם שינויים קלים בשפה בין מעבדים המשתייכים לאותה המשפחה.

מרבית שפות התכנות הן שפות עיליות, אשר מעניקות רמה גבוהה יחסית של הפשטת מאפייני פלטפורמת המטרה של התוכנה הנכתבת, ובכך פוטרות את המתכנת במידה רבה מהתייחסות לתשתית החומרה (ובפרט, המעבד) ותשתיות התוכנה שעל בסיסן תפעל התוכנה.