שפת מחשב אני מגדיר ככל שפה המשמשת למתן הנחיות חישוב למחשב.
הרצת קלט בשפת מחשב יגרום לתוצאת חישוב (פלט) כפעולה מרחבית ו\או על מסך מחשב.
את כל שפות המחשב ניתן לקבץ לקבוצות או סוגים לפי מטרתן הבלעדית או העיקרית.
בחלוקה צרה ניתן לחלקן לשפות מכונה (תואמות ארכיטקטורת מעבד), שפות סף ושפות על-סף.
שפות מחשב נפוצות ביותר הן שפות המשמשות להגדרת המבנה של התוכנה על מסך מחשב או שפות מחשב המשמשות רק או בעיקר לפיתוח התנהגות תוכנה, כלומר איך תוכנה תפעל במצבים (כולל איוונטים) שונים. אני ממליץ להתחיל ללמוד על שפות מחשב דווקא מ"גבוהות לנמוכות", כלומר משפות על-סף ← לשפות סף ← לשפות מכונה, במקום מ"נמוכות לגבוהות":
- שפות על-סף (שפות מחשב גבוהות)
- שפות סף (שפות מחשב בינוניות)
- שפות מכונה (שפות מחשב נמוכות)
סוגי שפות מחשב
שפת מכונה
שפת מכונה היא סוג שפת המחשב הבסיסית ביותר (הכי "פשוטה" או הכי "נמוכה") אבל גם הכי קשה לעבוד בה כי היא מורכבת רק משני אותיות שהם 0 ו-1 ולכן מילים בה הן ארוכות ביותר ובאופן כללי בני אדם לא נותנים הוראות למחשב דרכה (אם כי כאשר פיתחו את המחשבים הראשונים זו הייתה השפה היחידה או הכמעט יחידה).
יש כמה סוגים של שפות מכונה אבל במינימום זה זאתי שהאותיות שלה הן הספרות 0 ו-1.
שפת סף
שפת סף היא כל שפת מחשב שהכי קרובה לשפת מכונה אבל יותר "מופשטת" ויותר קלה לבני אדם להבנה.
יש כמה סוגים של שפות סף.
שפת על-סף
שפת על-סף היא כל שפת מחשב שהיא יותר "מופשטת" או יותר "גבוהה" מכל שפה שמוגדרת "שפת מכונה" או "שפת סף".
למעשה, כל שאר שפות המחשב (כלומר כל השפות שאינן שפת מכונה או שפת סף) שאתאר להלן, הן "שפות על-סף" במובן מסוים.
שפת מבנה
שפת מבנה (באנגלית: Structure language או Markup language) היא כל שפת מחשב המשמשת להגדרת מבנים כמו מבנה של חלקים במסמך מודפס או מבנים בתוכנה (כמו תפריטים בתוכנה).
זוהי אם כך כל שפת מחשב המשמשת ליצירת מבנה סדור למידע בכלל ולמידע המופיע כפלט מחשב בפרט.
דוגמה טובה היא שפות לבניית מסמכי מסמך היפרטקסט כגון שפת HTML המשמשת בעיקר למסמכים מסוג דף באתר ווב.
שפת המבנה מאפשרת ארגון יעיל וניווט נוח בין רכיביי התוכנה השונים שמרכיבים או מהווים אותו והוא יכול להיות גם למשל תפריט בממשק משתמש של תוכנה או משחק מחשב; אין הכרח ליצור מבנה רק לדפי ווב. כל מסמך שניתן להריץ במחשב, כל תפריט בתוכנה (ובכלל זה תפריט במשחק מחשב וכדומה) הם מבנים המכילים מבנים פנימיים. לעתים, בכדי להפוך מבנים על מסך מחשב לאינטואיטיביים יותר מעצבים אותם דרך שפת עיצוב. שפות מבנה נפוצות מאד הן שפת XML ושפת HTML וכן שפת עיצוב נפוצה מאד היא שפת CSS.
- שפות מבנה רבות (כמו גם שפות עיצוב) מסייעות גם להנגיש מסמכים לכמה שיותר אוכלוסיות.
דוגמה לקוד בשפת מבנה
מבנה יכול להיות למעשה "תת-מבנה" של מבנה רחב יותר וניתן ליצור שארים אין סופיים בהגדרה כאלה וליצור להם שארים משל עצמם (כמו עץ עם ענפים רבים המצמחים ענפים).
להלן דוגמה משפט HTML בה מוגדר מבנה יסודי של דף ווב פשוט שגם התווספו אליו שני מבנים:
<div> <h1>Hello</h1> <p>Welcome to this web page</p> </div>
- בשפת HTML לכל מבנה יש תג פתיחה ותג סגירה שיכול להיות באותה שורה או שורה מתחת (תג סגירה כוללת
/
בתחילה, כלומר סלש ימינה (למי שלא ידע; כתבתי "ימינה" כי נהוג לקרוא קוד משמאל לימין). - המבנה הראשון הוא תג מסוג
div
. - המבנה השני הוא תג הכותרת מסוג
h1
← כותרת ראשית או לחלופין כותרת ראשית ביותר. - המבנה השלישי הוא תג p (תג פסקה) המכיל מילה
- שני המבנים האחרונים (
h1
ו-p
) מקוננים בתוך תג הdiv
. להרחבה על פרקטיקה זו העוזרת לארגון מסמכים באופן נוח למפתחי תוכנה רבים ראו הערך קינון.
דוגמאות נוספות
שפת מדיה ויקי במובן מסוים גם שפות שמשמשות לסימון מסמכים שאינם דף ווב (כגון שפת Markdown) גם הן שפות מבנה; מאמר זה ממש, למשל, מקבל את מבנהו הבסיסי מן השפות HTML ומדיה ויקי.
שפת עיצוב
שפת עיצוב (באנגלית: Stylesheet language ; "שפת גיליון סגנון") היא כל שפת מחשב המשמשת למתן עיצוב גרפי למבני ממשק באפליקציה, כגון תפריט ראשי או חלון, בתוכנה.
שפת עיצוב נפוצה בעולם המחשוב בכללותו היא שפת CSS ומשמשת לעיצוב כלל אתרי האינטרנט.
שפות עיצוב שונות נותנות דרכים שונות לייחס קוד עיצוב למבנים שונים.
כאן הדגמתי שלוש דרכים בהן ניתן לכתוב קוד CSS ביחס לשפת HTML.
שפת HTML ושפת CSS הן שתי שפות פיתוח הווב העיקריות במובן זה שהן מפותחות על ידי ארגוני אינטרנט בין לאומיים כגון W3C.
מבנה מעוצב
מבנה הוא למשל תפריט באפליקציה (ובזה גם באתר ווב). מבנה נהוג להגדיר במסמך ממוחשב בעזרת שפת מבנה.
בדרך כלל נרצה לעצב מבנה מסוים (כגון תפריט); למשל, לתת לו צבע מסגרת או צבע רקע מסוימים או מידת רוחב או אף להגדיר לו תמונת רקע וכדומה; לצורך מטרה זו ומטרות דומות, נשתמש בדרך כלל בשפת עיצוב.
גם אם נשתמש בתוכנה לפיתוח העיצוב דוגמת אלמנטור המשמשת לפיתוח מבנה ועיצוב לאפליקציות (אוטומציית פיתוח קוד מבנה-התנהגות-עיצוב) ככלל, עדיין נקודד קוד המכיל הגדרות עיצוב בזיכרון "מאחורי הקלעים".
שפת התנהגות
שפת התנהגות היא כל שפת מחשב שאיתה מגדירים התנהגות של מבנים בתוכנה.
מפאת אריכות הנושא הסברתי עליו במאמר עצמאי.
שפת תכנות
שפת תכנות זה מונח מאד כללי ולא מוגדר היטב לכל שפת מחשב מסוג "שפת מכונה" או מסוג "שפת סף" וכן גם לשפות התנהגות.
בקרב מפתחי תוכנה מסוימים נפוץ להשתמש גם בביטוי "שפת תכנות עילית" לתיאור שפות מחשב עם אבסטרקציה גבוהה יותר משפת סף המשמשת רק או בעיקר לשפת פיתוח התנהגות תוכנה, אך לפי דעתי זו טעות כי לא כל שפת מחשב ש"מעל" שתי שכבות אלה של שפות מחשב היא "שפת תכנות" במובן זה שמטרתה העיקרית היא פיתוח התנהגות, שלזה בפועל מתכוונים במקרים רבים עם "שפת תכנות".
מניסיוני, כאשר מפתחי תוכנה אומרים "שפת תכנות" מה שהם מתכוונים אליו בפועל זה שפת התנהגות (מסוג כל שהוא, כגון שפת PHP).
מונחים פחות פורמליים
שפת תשאול
שפת תשאול (באנגלית: Querying language) היא שפת מחשב המשמשת להגיש שאילתאות (בקשות מידע) מבסיס נתונים או בקשות להכנסת מידע אל בסיס נתונים ולפיתוח התנהגות המבוססת על מידע כזה.
אם לבסיס נתונים נתון מידע ש"תושאל" עם שפת תשאול ← ככלל הוא ישיב למשתמש את המידע כ"תשובה חיובית" לשאלה ("שאילתא"). פעולות נפוצות ביותר עם שפות תשאול הן פעולות CRUD.
במובן מסוים, לכל מנוע חיפוש יש שפה פשוטה כזו (למשל, בגוגל ניתן להוסיף סימן מינוס -
לפני ביטוי מסוים כדי לדאוג שכל תוצאת חיפוש שנקבל לא תכלול את הביטוי שהצמדנו לו מינוס ובכך נקבל תוצאות חיפוש ממוקדות יותר).
- שתיים או יותר אפליקציות יכולות לתשאל בסיס נתונים אחד במקביל ובכך להגיש מידע למשתמש במגוון צורות אוטומטיות שונות
שפת תיבנות
שפת תיבנות (באנגלית: Theming language) אני מגדיר ככל שפת מחשב המהווה שילוב בין שפת מבנה ושפת התנהגות.
שפות תיבנות משמשות ליצירת תבניות כלליות הכוללות אזורים מוגדרים היטב (כגון סוגי עמודים או סוגים של דפי ווב באתר ווב).
דוגמה לשפה נפוצה כזאת היא Twig המשמשת ליצירת תבניות דפים כלליות בהקשר אתרי ווב ומהווה חלק ממערכת ניהול התוכן דרופל.
שפת סידור מידע (שפת סיריאליזציה)
שפת סידור מידע (באנגלית: Serialization language ; שפת סיריאליזציה) היא כל שפה המשמשת רק או בעיקר לייצג מידע "גולמי" בסדרות (למשל בזוגות של תכונה-ערך).
דוגמה לסדרות מידע (סריות מידע) היא זוגות מידע כגון "מספר תעודת זהות ← שם מלא" (כתכולה של קובץ המכיל מידע זה); סדרות מידע יכולות להיות כמובן בנות 2 יחידות, 3 יחידות ויותר.
מידע מאוחזר לעיתים בשפות אלה לאחר שנוצר אוטומטית בהתאם לשאילתא שהוגשה אל בסיס נתונים של תוכנה מסוימת (כפקודה בשפת התנהגות בכלל וכתשאול בשפת תשאול בפרט.
שפת התנהגות אחורית
שפת התנהגות אחורית (באנגלית: Backend behavior language) היא כל שפת התנהגות אשר בדרך כלל למשתמש קצה אין כל דרך לשלוט על קוד מקור הכתוב בה אלא בשיטות של האקינג (ניתן לנסות לפתח התנהגות דומה מקומית עם הנדסה הפוכה).
מונח נוסף לתאר שפות כאלה הינו "שפות צד שרת" אך מונח זה מטעה כי שפות שונות יכולות לשמש לפיתוח תוכנה הן ב"צד שרת" והן ב"צד לקוח" יחדיו (כך למשל עם שפת JavaScript עם ה"ניב" שלה Node.JS).
שפת התנהגות קדמית
שפת התנהגות קדמית (באנגלית: Frontend behavior language) היא כל שפת התנהגות אשר בדרך כלל למשתמש יש לפחות דרך אחרת לשלוט על קוד מקור הכתוב בה בעודו משתמש בתוכנה הכתובה בה, כמו עם קונסולה.
דוגמאות לשפות כאלו הן שפות הווב שפת HTML, שפת JavaScript ושפת CSS אשר על קוד מקור שלהן בדף ווב (כמסמך היפרטקסט המוצג בדפדפן ווב) ניתן לשלוט דרך כלי פיתוח מובנה דפדפן-ווב; עוד דוגמה תהיה הרצת פקודות בשפת התנהגות שפותחה במיוחד עבור משחק מחשב מסוים כמו דרך הרצת פקודות בשפה כזו בקונסולה של משחק המחשב (למשל, לאחר לחיצה על מקש טילדה (~
).
הערות כלליות
- כל שפת מחשב היא תוכנה בפני עצמה; במקרים רבים שפת מחשב נתונה לא תגיע עם מערכת הפעלה ונצטרך להתקין אותה על מערכת ההפעלה שלנו כדי לפתח תוכנה איתה (אם כי רבות "בסיסיות" מגיעות עם מערכת ההפעלה; בעיקר שפת תפעול-התנהגות אחת או יותר).
- כאשר רבים אומרים "שפות תכנות" הם למעשה מתכוונים ל"שפות התנהגות" שהרי "שפת תכנות" היא שפת מחשב המאפשרת פיתוח תוכנה מלא (כגון שפת מכונה) ולא רק או בעיקר מאפיין אחד של תוכנה כגון התנהגות אם כי מאז שנת 1975 בערך רוב המתכנתים לא מפתחים תוכנה עם שפת מכונה אלא עם אחת או יותר שפות מחשב אחרות.