פרדיגמות | מובנית, אימפרטיבית, פרוצדרלית |
---|---|
תאריך השקה | 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]
M+3
, אשר מוסיפה 3 לערך של משתנה M
– זאת אומרת, לכתובת בזיכרון של משתנה M, יוסף 3. ב-BLISS, על מנת לבצע פעולה שכזו, יש להוסיף לפני שם המשתנה נקודה (' . ') : M+3.
.BEGIN
, ונגמר ב-END
. כמו ב-ALGOL, הצהרות מסתיימות בנקודה פסיק ;
.EQL
אשר בודקת האם שני ערכים שווים, GTR
, אשר בודקת האם ערך אחד גדול מהשני ו-NEQ
, אשר בודקת אם שני ערכים לא שווים. ניתן לראות פעולות בשמות דומים בשפות תכנות אחרות, כגון בתכנות קובצי אצווה. למשל, קטע קוד זה יכניס את הערך המוחלט של משתנה Z במשתנה Q:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z)
RUTINE
.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]