BLISS
פרדיגמות | מובנית, אימפרטיבית, פרוצדרלית |
---|---|
תאריך השקה | 1970 ליד |
מתכנן | ויליאם אלן וולף, ד.ב ראסל, א.נ הברמן |
מפתח | אוניברסיטת קרנגי מלון |
גרסה אחרונה | BLISS-64 |
טיפוסיות | typeless |
ניבים | Common BLISS |
הושפעה על ידי | ALGOL |
http://pdp-10.trailing-edge.com/bb-m836d-bm | |
BLISS היא שפת תכנות אשר פותחה על ידי ויליאם אלן וולף, ד.ב ראסל ו-א.נ הברמן מאוניברסיטת קרנגי מלון בשנת 1970. היא הייתה אחת משפות התכנות הידועות ביותר (ישנם הטוענים שהייתה הכי ידועה) עד להופעתה של שפת C כמה שנים לאחר מכן. כאשר C הייתה בחיתוליה, מספר פרויקטים במעבדות בל דנו ביתרונות ובחסרונות של BLISS לעומת C.
BLISS היא שפת תכנות עם טיפוסיות typeless, כלומר, יש רק סוג נתונים יחיד, ולפיכך משתנה יכול להכיל כל סוג נתונים. זאת בניגוד למרבית שפות התכונות, בהן ישנה חלוקה לטיפוסים (סוגי משתנים). שפות כאלו לדוגמה הן פייתון, C, java ועוד רבות. לשפות שונות ישנם טיפוסים שונים במקצת, אם כי ישנם כאלה החוזרים על עצמם ברוב השפות, כגון integer – מספר שלם, string – מחרוזת, ו-float – מספר עשרוני. שפות נוספות עם טיפוסיות typeless הן Rexx ו-TCL.
תיאור השפה
[עריכת קוד מקור | עריכה]ל-BLISS יש פיצ'רים רבים של שפות תכנות עיליות אחרות (אם כי ניתן לטעון ש-BLISS היא שפת low level ביחס לשפות עיליות כגון פייתון ו-#C). יש לה מבנה של בלוקים של קוד, מחסנית (מבנה נתונים שבו הנתון האחרון שנכנס אליו יוצא ראשון) אוטומטית ומנגנונים להגדרה ולקריאה למתודות רקורסיביות (מתודות שמזמנות את עצמן). בנוסף, BLISS מספקת מגוון מבני נתונים מוגדרים מראש ושירותים לבדיקות תוכנה ואיטרציות. עם זאת, ל-BLISS חסרים פיצ'רים מסוימים של שפות תכנות עיליות אחרות, למשל, אין לה שירותים מוגדרים מראש לקלט ופלט. בנוסף לכך, BLISS היא יותר "שפת מונחים" מאשר "שפת הצהרות", קרי, כל מבנה נתונים בשפה שאינו הצהרה, הוא ביטוי. ביטויים מפיקים ערך וגם יכולים לגרום לשינוי באחסון הזיכרון, העברת שליטה (מעבר לשורה אחרת בקוד, שמתבצע בשפת אסמבלי בפקודת JMP ובשפות עיליות יותר כגון C בפקודת goto למשל), והרצה של לולאות (לולאות גם הן סוג של העברת שליטה – כזו אשר פונה חזרה לשורה שבה החלה הלולאה או ל-label).[1]
מאפייני השפה
[עריכת קוד מקור | עריכה]- כל הקבועים ב-BLISS (משתנים שערכם נשאר קבוע) הם בגודל מבנה הנתונים word, בהתאם לארכיטקטורה בה הם נמצאים, לדוגמה, במחשבים רבים כגון PDP-11, גודל word הוא 16 סיביות (16 ספרות בינאריות) ולכן גם הקבועים יהיו בגודל 16 סיביות. במחשב VAX, קבועים הם בגודל 32 סיביות ואילו במחשב PDP-10, קבוע הוא בגודל 36 סיביות.
- מצביע למשתנה הוא תמיד הפניה לכתובת בה המשתנה נמצא בזיכרון. לדוגמה, אם הכתובת בזיכרון של משתנה N היא 100H (בבסיס הקסדצימלי), וערכו 3, אזי N הוא הפניה לכתובת 100H שמכילה 3. דוגמה נוספת היא ההוראה
M+3
, אשר מוסיפה 3 לערך של משתנהM
– זאת אומרת, לכתובת בזיכרון של משתנה M, יוסף 3. ב-BLISS, על מנת לבצע פעולה שכזו, יש להוסיף לפני שם המשתנה נקודה (' . ') :M+3.
. - הצהרות לפתיחה ולסגירת בלוקים (קטעי קוד) נעשות בדומה לשפת התכנות ALGOL : קטע קוד מתחיל בהצהרת
BEGIN
, ונגמר ב-END
. כמו ב-ALGOL, הצהרות מסתיימות בנקודה פסיק;
. - תנאים מבוצעים, כמו בשפות רבות אחרות, בביטויי IF, אשר מבצע פעולה אם הערך הבוליאני (משתנה אשר מכיל TRUE או FALSE) שניתן לו מתברר כאמת (TRUE), ויכול לבצע פעולה אם הערך מתברר כשגוי (FALSE) באמצעות ביטוי ה ELSE.
- השוואה בין ערכים נעשית באמצעות מילות שמורות (מילים בעלות ערך מיוחד בשפה) כגון
EQL
אשר בודקת האם שני ערכים שווים,GTR
, אשר בודקת האם ערך אחד גדול מהשני ו-NEQ
, אשר בודקת אם שני ערכים לא שווים. ניתן לראות פעולות בשמות דומים בשפות תכנות אחרות, כגון בתכנות קובצי אצווה. למשל, קטע קוד זה יכניס את הערך המוחלט של משתנה Z במשתנה Q:Q = (IF .Z GTR 0 THEN .Z ELSE -.Z)
- מתודות ב-BLISS נקראות שגרות (rutines) ומוגדרים על ידי המילה השמורה
RUTINE
. - פקודות מאקרו (Macros) מוגדרות באמצעות המילה השמורה
MACRO
. - השפה תומכת במערכים (מערך הוא מבנה נתונים) ומוגדרים באמצעות המילה השמורה
VECTOR
. - לשפה מספר תכונות של שפות תכנות עיליות:
דוגמה
[עריכת קוד מקור | עריכה]דוגמה זו נלקחה במדויק מה-Bliss Language Manual:[2]
MODULE E1 (MAIN = CTRL) =
BEGIN
FORWARD ROUTINE
CTRL,
STEP;
ROUTINE CTRL =
!+
! This routine inputs a value, operates on it, and
! then outputs the result.
!-
BEGIN
EXTERNAL ROUTINE
GETNUM, ! Input a number from terminal
PUTNUM; ! Output a number to terminal
LOCAL
X, ! Storage for input value
Y; ! Storage for output value
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) =
!+
! This routine adds 1 to the given value.
!-
(.A+1);
END
ELUDOM
[excessive quote]
גרסאות
[עריכת קוד מקור | עריכה]- BLISS-10
- BLISS-11
- BLISS-16
- BLISS-11
- BLISS-32
- BLISS-36
- BLISS-64
- Common BLISS
לקריאה נוספת
[עריכת קוד מקור | עריכה]- Wulf, W. A.; Russell, D. B.; Habermann, A. N. (1971). BLISS: A Language for Systems Programming. CACM 14(12):780-790, Dec 1971
- Wulf, W. A.; Johnson, R. K.; Weinstock, C. B.; Hobbs, S. O.; Geschke, C. M. (1975). The Design of an Optimizing Compiler. New York: Elsevier, ISBN 0-444-00158-1.
- Brender, Ronald F. (2002). "The BLISS programming language: a history" (PDF). Software: Practice and Experience. 32 (10): 955–981. doi:10.1002/spe.470.
- BLISS Manual at DECUS
- Alan Lehotsky posting about BLISS at DEC
- "BLISS: A Language for Systems Programming" by W.A. Wulf, D.B. Russell, and A.N. Habermann. (PostScript)
- Session notes for "Introduction to BLISS" by Matthew D. Madison. (PostScript)