BLISS

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). פרק זה לוקה בחסר. אנא תרמו לוויקיפדיה והשלימו אותו. ייתכן שתמצאו פירוט בדף השיחה. כל הקבועים ב-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. לשפה מספר תכונות של שפות תכנות עיליות: המרות אוטומטיות מסוימות מסוג נתונים אחד לאחר (למשל ממספר למחרוזת). לולאות באמצעות ביטוי ה-INCR, שדוגמה ללולאת FOR ב-ALGOL. פעולות מובנות בשפה על מחרוזות. דוגמה זו נלקחה במדויק מה-Bliss Language Manual: 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) מדיה וקבצים בנושא BLISS בוויקישיתוף (Digital Equipment Corporation (1987) Bliss Language Manual, ‏1987