פורטל:תוכנה/שפת תכנות
שפת תכנות היא אוסף של חוקים תחביריים (Syntax) וסמנטיים (Semantic) שבאמצעותם ניתן להגדיר למחשב באופן מפורט פקודות ופעולות שעליו לבצע בתחומים שונים ומגוונים. המושג שפת מחשב (Computer Language), הוא מושג רחב מאשר שפת תכנות (Programming Language), וכולל גם שפות למתן הנחיות למחשב שאין בהן לוגיקה.
שפת התכנות במהותה נועדה לגשר בין המחשב, ששפתו, הקרויה שפת מכונה, מורכבת מרצפי סיביות, לבין המתכנת שמעדיף לתקשר בצורה מילולית יותר. כמו גם לאפשר תקשורת טובה בין המתכנתים. השימוש בשפת תכנות לשם כתיבת תוכנית מחשב קרוי תכנות. שפות התכנות מציעות מבחר כלים המשמשים להפשטה, ארגון וביאור הקוד, כגון מבני בקרה (לולאות, תנאים, מתגים וכדומה), פרוצדורות, עצמים, וכו'. זאת במטרה להקל ככל הניתן על עיצוב הקוד, התכנון, הכתיבה, הקריאה, התחזוקה, ההרחבה והשימוש העתידי שלו.
לכל שפת תכנות, בדומה לשפה טבעית, יש אוצר מילים משלה וכללי תחביר ייחודים, אך המרחק בין השתיים רב, בעיקר בגלל הצורך החיוני של שפת תכנות להיות חד-משמעית. אוצר המילים של שפת תכנות מצומצם ביותר, והוא נע בין עשרות בודדות למאות אחדות של מילים. לכל שפה ישנם כללי תחביר נוקשים שכל חריגה מהם עשויה להתפרש כשגיאה, או לגרום בעיות בהפעלת המערכת כולה. מאפייניה של שפת תכנות כוללים את הרכיבים הבאים:
- נתונים ומבני נתונים, כגון סוגי המספרים שהשפה יודעת לטפל בהם, ומבנים מורכבים יותר המוכרים על ידי השפה, כגון מערכים, רשימות, מבנים, אובייקטים ופונקציות.
- פקודות ומבני בקרה שהשפה יודעת לבצע – הצהרה על משתנים, פעולות אריתמטיות, לולאות וכדומה.
- עקרונות העיצוב של השפה ותפישת העולם שמאחוריה, בין אלה ניתן למנות פרדיגמות כגון תכנות אימפרטיבי (הכולל תכנות מבני ורוב הגרסאות של תכנות מונחה עצמים) לעומת תכנות הצהרתי (כולל תכנות פונקציונלי, תכנות לוגי ותכנות אילוצים), תכנות ג'נרי ועוד. שפות רבות הינן מרובות-פרדיגמות, כמו למשל פייתון ו-#C.
- מערכת הטיפוסים. שפות עשויות להיות בעלות טיפוסיות חזקה, חלשה, או לא קיימת (למשל ב-Pawn ו-Forth). בנוסף ניתן לשאול מתי מתבצעת הבדיקה של תקינות הטיפוסים – דינמית (בזמן ריצה) או סטטית (בזמן הידור). במקרה של טיפוסיות דינמית ניתן לשאול מי אחראי להגדיר את הטיפוס: המתכנת או המהדר (Duck Typing).
שפות תכנות נוצרו על-מנת להגדיר פעולות של מחשבים, אבל הן יכולות לשמש גם על-מנת לתאר אלגוריתמים, בדומה לתרשימי זרימה, או להגדיר מבני נתונים (data structures) מורכבים. בכך מהוות שפות אלו גם צורת תקשורת. מתכנתים שואפים לשמור על הקוד שלהם קריא, כלומר פשוט להבנה על ידי אדם, כדי שיהיה קל לנפות ולתחזק אותו.
שפת תכנות נקראת שלמה טיורינג אם ניתן להשתמש בה לדימוי מכונת טיורינג. שפה שלמה-טיורינג מאפשרת לבצע כל חישוב שניתן לבצע באמצעות מחשב. מרבית שפות התכנות הן שלמות טיורינג, ולכן שקולות זו לזו מבחינת האלגוריתמים שביכולתן לממש, אם כי ישנם הבדלים במידת היעילות האפשרית למימוש.
שפת התכנות הבסיסית ביותר, והקרובה ביותר לשפת מכונה, קרויה שפת סף או אסמבלי (Assembly). בשפת הסף, בצורתה הבסיסית, קיימת התאמה חד-חד ערכית בין ההוראות שכותב המתכנת ובין ההוראות המופקות מהן בשפת מכונה, כלומר, כל הוראת אסמבלי יחידה מתורגמת להוראה אחת בשפת מכונה. לכן, כמו שפת המכונה, גם שפת הסף פועלת באופן ישיר על תאי הזיכרון של המחשב, האוגרים הפנימיים של המעבד ויציאות הקלט/פלט של המחשב, ובפרטנות רבה. כתוצאה מכך, שפת הסף תלויה הרבה מאוד במעבד ולכל סדרת מעבדים יש שפת סף משלה (כאשר לכל מעבד יש ניב משלו).
מרבית שפות התכנות הן שפות עיליות, שסגנונן קרוב לשפתו של המתכנת המשתמש בהן, ופוטר את המתכנת מהתייחסות למעבד הספציפי שעליו תתבצע התוכנית.