BASIC

מבוא

BASIC נוצרה בשנת 1963 במכללת דרטמות', כשפת תכנות פשוטה וקלה ללמידה, שתוכל לשמש כשפת תכנות ראשונה לצורכי לימוד, בעיקר בלימודי תואר ראשון ולתכנים מתמטיים. מטרה זו באה לידי ביטוי בשמה של השפה, BASIC, שהוא ראשי תיבות של Beginners All-purpose Symbolic Instruction Code.‎
בסוף שנות ה־70 ובתחילת שנות ה־80, עם תחילת התפוצה הנרחבת של המחשבים הביתיים ועוד לפני הופעת המחשב האישי (PC) של יבמ בשנת 1981, זכתה BASIC להצלחה רבה על מחשבים ביתיים כגון אטארי, קומודור, סינקלייר ועוד. ראשיתה של חברת מיקרוסופט הייתה בפיתוח מפרשי BASIC. למרות קיומו של תקן ANSI לשפה נוצרו בתקופה זו ניבים שונים מאוד של BASIC, שלחלקם אף לא היו כמעט פקודות משותפות. 
חברת מיקרוסופט צירפה למערכת ההפעלה שלה DOS מפרש של BASIC (עד גרסה 5 של DOS נעשה שימוש בניב GW-BASIC/BASICA, ולאחר מכן QBASIC) ולכן שפת התכנות נשארה בשימוש. כאשר הופיעה מערכת ההפעלה חלונות, פיתחה חברת מיקרוסופט את שפת Visual Basic, בהתבסס על התחביר המקובל של שפת BASIC. שפת ה־Visual Basic היא, כנראה, הניב הנפוץ ביותר של BASIC כיום. זמן קצר לאחר מכן הוציאה מיקרוסופט גרסה של Visual Basic גם עבור DOS.
כיום, שפת בייסיק בהגדרתה המקורית לא נמצאת בשימוש נרחב, ובעיקר משמשת את הרגילים להשתמש בה מהעבר. שפות יותר חדשות המתבססות על התחביר המקורי נמצאות בשימוש רחב של כלל משתמשי המחשב ומתכנתים בתעשייה: למשל Visual Basic, שפת תסריט Visual Basic for Applications (VBA) המשולבת בתוכנות חבילת היישומים Microsoft Office, או שפת תסריט Visual Basic Script המשולבת בדפדפן האינטרנט של מיקרוסופט.
בגרסאותיה המקוריות (ובמידה פחותה גם כיום), היו שורות הקוד ממוספרות ונעשה שימוש רב בפקודות GOTO, המורות למפרש לעבור לביצוע שורת קוד אחרת מהשורה העוקבת. שימוש זה גורם לחוסר מבניות בקוד ומקשה על מעקב אחר השתלשלותה והרצתה של התוכנה. עם זאת, שפות ה־Visual Basic המודרניות הן שפות תכנות מונחה עצמים המאפשרות פיתוח תוכנה בהיקפים גדולים לפי כל כללי הנדסת תוכנה, ויצירת קוד איכותי אשר ניתן לתחזוקה ושינוי מהירים וקלים, כמו בכל שפות התכנות המודרניות האחרות.]

היסטוריה

עד אמצע שנות ה־60, מחשבים היו כלים יקרים ביותר שנעשה בהם שימוש רק למטרות מיוחדות כחישובים מדעיים או צבאיים. מחשבים אלו הפעילו אצווֹת (Batch) של משימות להרצה בזו אחר זו, והיה לעיתים צורך להמתין זמן רב עד להתפנותו של המחשב. מסוף שנות ה־60 ואילך הוזילו התפתחויות בתחום האלקטרוניקה את מחירי המחשבים באופן משמעותי, עד כדי כך שכוח החישוב עלה לרוב על הנדרש.
שפות התכנות בעידן הרצת האצווֹת, כמו גם המחשבים שעליהם רצו, תוכננו לרוב עבור מטרה מסוימת כחישובי נוסחאות, עיבוד מידע עסקי או עיבוד תמלילים. לאור העלות הרבה של כוח מחשוב, נחשבה היעילות (כלומר, זמן ביצוע הקוד) כתכונה החשובה ביותר של שפת תכנות. לכן, השפות ה"מתמחות" הללו היו לרוב קשות לשימוש ובעלות תחביר ייחודי להן.
עם הוזלת מחירי המחשבים, הופיעה גישת "חלוקת הזמן" (time sharing) מול מחשב מרכזי גדול. בגישה זו "נפרסה" יכולת העיבוד של המחשב על ציר הזמן ולכל משתמש ניתנו "חלונות" של זמן עיבוד לסירוגין עם משתמשים אחרים. כיוון שהמחשבים נעשו מהירים מספיק, קיבלו המשתמשים את הרושם כאילו המחשב עומד כולו לרשותם בלעדית. חלוקת הזמן הוזילה את מחיר השימוש במחשב באופן ניכר, משום שמכונה יחידה יכלה לתמוך בחישוביהם של מאות משתמשים.

גידול מהיר - עידן המחשבים הביתיים

הצגת המחשב הביתי אלטאיר 8800 ב־1975 הזניקה את הפופולריות של בייסיק. רוב שפות התכנות האחרות דרשו יותר זיכרון (או יותר נפח בכונן הקשיח) ממה שהיה זמין במחשבים הביתיים, ואילו בייסיק יכלה להתמודד עם המגבלות האלו ואף התחשבה באכסון האיטי על טייפ נייר (או יותר מאוחר טייפ של קלטות אודיו, באותה תקופה לא היו כוננים קשיחים למחשבים ביתיים) ובהיעדר עורכי טקסט מתאימים. לבייסיק היה גם היתרון של פופולריות בקרב המתכנתים הצעירים שגילו עניין במיקרו־מחשבים. אחד המימושים הראשונים של השפה שהופיעו למכונות ה־8080 כמו האלטאיר היה Tiny BASIC, מימוש פשוט שנכתב במקור על ידי ד"ר לי־צ'ן ואנג, ושהוסב לאלטאיר על ידי דניס אליסון בעקבות בקשתו של בוב אלברכט (שמאוחר יותר הקים את Dr. Dobb's Journal). התכן של Tiny BASIC וקוד המקור המלא פורסמו ב־1976 בכתב עת זה.
חברות חדשות ניסו ללכת בעקבות ההצלחות של "Micro Instrumentation and Telemtry Systems", "IMSAI", "North Star" ואפל מחשבים, ובכך יצרו תעשיית מחשבים ביתיים; בינתיים בייסיק נהפכה לתכונה מובנית בכמעט כל המחשבים הביתיים. מרביתם שווקו עם מפרש בייסיק ב־ROM (זיכרון לקריאה בלבד) ובכך התגברו על בעיית הכוננים שהיו לא זמינים או יקרים מדי. מהר מאוד היו מיליוני מחשבים שהריצו ניבים של בייסיק ברחבי העולם.
ה־BBC פרסם את BBC BASIC, שפותח עבורם על ידי חברת מחשבי Acorn וכללה מילות מפתח מבניות רבות נוספות וגישה ישירה, מקיפה וגמישה למערכת ההפעלה. כמו כן היא כללה אסמבלר משולב. BBC BASIC היה דיאלקט מאוד מוערך, ועבר הסבה ממחשב ה־BBC Micro המקורי ללמעלה מ־30 פלטמורמות אחרות.
בזמן זה שבו חל גידול בשימוש בבייסיק, התפרסמו מגזינים רבים כמו Creative Magazine שכללו בסיסי קוד מקור שלמים למשחקים, כלי־עזר ותוכניות אחרות. הודות לפשטותה של בייסיק, היה זה קל להקליד את הקוד מהמגזין לתוך המחשב ולהריץ את התוכנה. מגזינים שונים התפרסמו עם תוכניות למחשבים מסוימים, אך מספר תוכניות בייסיק היו אוניברסליות וניתן היה להשתמש בהם כקלט לכל מחשב שעשה שימוש בבייסיק.

בגרות - עידן המחשבים הביתיים

גרסאות בייסיק חדשות רבות נוצרו בתקופה הזאת. מיקרוסופט מכרה מספר גרסאות של בייסיק עבור MS-DOS או PC-DOS כולל BASICA, GW-BASIC (גרסה תואמת BASICA שלא דרשה את ה־ROM של IBM), ו־QuickBASIC. בורלנד, החברה שמכרה את טורבו־פסקל, הוציאה את Turbo BASIC 1.0 ב־1985 (גרסאות חדשות שלה עדיין משווקות על ידי הכותב המקורי תחת השם PowerBASIC).
שפות אלה הכניסו הרחבות רבות לבייסיק המקורי של המחשבים הביתיים, כמו טיפול משופר במחרוזות, תמיכה בגרפיקה, גישה למערכת הקבצים וטיפוסי נתונים נוספים. חשובים עוד יותר היו האמצעים לתכנות מובנה, כולל מבני בקרה נוספים ושגרות שכללו משתנים מקומיים.
אולם, עד למחצית השנייה של שנות ה־80, מחשבים חדשים היו בעלי יכולת גבוהה בהרבה עם יותר משאבים שעמדו לרשותם. באותו הזמן, מחשבים הפכו ממכשירים שהיוו תחביב, לכלים ששימשו בעיקר ליישומים שנכתבו על ידי אנשים אחרים, ותכנות נעשה פחות חשוב למרבית המשתמשים. בייסיק התחילה להיות פחות חשובה, אף שמספר רב של גרסאות עדיין היו זמינות. בייסיק מהודרת או CBASIC עדיין נמצאת בשימוש במערכות נקודת מכירה רבות המבוססות על מערכת־ההפעלה IBM 4690.
מזלה של בייסיק התהפך שוב עם כניסתה לשוק של Visual Basic של מיקרוסופט. קשה למדי להחשיב שפה זו כבייסיק, בעיקר בגלל המעבר הבולט בנטייה שלה לכיוון תכנות מונחה עצמים ו־תכנות מונחה אירועים. בעוד שזה עשוי להחשב כאבולוציה של השפה, מספר קטן מאוד מהתכונות הייחודיות של בייסיק דארטמות' המוקדם, כמו מספרי שורות ומילית המפתח INPUT, עדיין נשאר שם.
ניבים רבים של בייסיק צצו בשנים האחרונות, כולל Bywater BASIC ו־True BASIC (היורש הישיר של בייסיק דארטמות' מחברה שנשלטת על ידי קורטז). לאחרונה, שארית הקהיליה שהשתמשה במוצרי הבייסיק של מיקרוסופט שלפני ויז'ואל בייסיק החלה לעבור באופן מלא ל־FreeBASIC, מהדר תחת רישיון GPL, שמהדר את בייסיק באמצעות GCC. ואריאנטים רבים אחרים של בייסיק והסבות נכתבו על ידי חובבנים, מפתחי ציוד ואחרים, מכיוון שהיא שפה פשוטה יחסית לפתח מתרגמים עבורה. דוגמה של מפרש קוד פתוח שלה, הכתוב ב־C, היאMiniBasic.
התפוצה של מפרשי בייסיק במחשבים ביתיים הייתה כזו שספרי לימוד פעם כללו תרגילים פשוטים של נסה זאת בבייסיק שעודדו תלמידים להתנסות עם מושגים מתמטיים וחישוביים במחשבי הכיתה או הבית. העתידן וסופר המדע הבדיוני דייוויד ברין מבכה את האובדן של הבייסיק הנפוץ במאמר בעיתון "סלון" -מדוע ג'וני לא יכול לתכנת.

פרוצדרות ובקרת זרימה

מרבית מימושי הבייסיק אינם עושים שימוש בספריה חיצונית לפעולות נפוצות כמו שפות אחרות כגון C. במקום זאת, המפרש (או המהדר) מכיל ספריה מובנית מקיפה של פרוצדרות פנימיות, באופן דומה למרבית מימושי השפה פסקל. פרוצדרות אלה כוללות את מרבית הכלים שהמתכנת צריך כדי ללמוד תכנות ולכתוב יישומים פשוטים, כולל פונקציות למתמטיקה, טיפול במחרוזות, קלט ופלט למסוף, גרפיקה וטיפול בקבצים.
מספר דיאלקטים של בייסיק אינם מספקים יכולות הבנייה מובנות, כמו למשל מבנה Procedure. כשהם מתכנתים באלה, מתכנתים צריכים לכתוב את התוכניות שלהם על ידי שימוש בהצהרות GOTO (בעברית "לך ל") כדי לדמות את המבנים האלה. זה עלול להוביל לתוכניות מבלבלות למדי, שנהוג לקרוא להן קוד ספגטי. הצהרות GOSUB (בעברית "לך לשגרה") פונות לסוגים פשוטים של שגרות אשר על־פי רוב אינן מקבלות פרמטרים או משתנים מקומיים. מרבית הגרסאות המודרניות של בייסיק, כמו Quick BASIC, הוסיפו תמיכה בשגרות ופונקציות מלאות. זהו עוד תחום בו בייסיק שונה משפות תכנות רבות אחרות. מרבית מימושי הבייסיק, בדומה לפסקל, מבחינים בין פרוצדורה שאינה מחזירה ערך (שגרה) לבין פרוצדורה שמחזירה ערך (פונקציה). שפות רבות אחרות (בייחוד C) אינן עושות הבחנה זאת ומחשיבות את כל אלו כפונקציות המחזירות ערך, שערכו יכול להיות ריק מתוכן (void).
בעוד שפונקציות, במובן הרחב של שגרות המחזירות ערכים, נוספו לבייסיק רק מאוחר, מערכות מוקדמות רבות תמכו בהגדרה של פונקציות מתמטיות של שורה אחת באמצעות DEF FN ‏("DEFine FunctioN") או "הגדר פונקציה" בעברית. בייסיק דארטמות' המקורי תמך גם בפונקציות ושגרות דמויות־אלגול החל מזמן מוקדם, וכך גם הוואריאנט BASIC09 מסביבות שנת 1979.

טיפוסי נתונים

בייסיק ידועה בפונקציות הטובות שלה לטיפול במחרוזות. דיאלקטים מוקדמים כבר כללו מספר פונקציות יסודיות (LEFT$, MID$, RIGHT$) לפעולות על מחרוזות. מכיוון שנעשה שימוש רב במחרוזות ביישומים של יום־יום, זה היה יתרון משמעותי של נוחות, על פני שפות רבות אחרות בזמן שבייסיק הוצגה.
בייסיק דארטמות' המקורי תמך רק בטיפוסי נתונים מספריים ומחרוזתיים. לא היה טיפוס של מספר שלם, מה שהשאיר את כל המשתנים המספריים כמשתני נקודה צפה. מחרוזות היו דינמיות ויכלו לשנות את אורכן. מערכים של גם מספרים וגם מחרוזות נתמכו, כמו גם מטריצות פשוטות (כלומר, מערכים דו־ממדיים).
לכל דיאלקט בייסיק מודרני קיימים טיפוסי מספר ומחרוזת. טיפוסי נתונים של סימני משתנים בדרך־כלל מובחנים על ידי תו־מבחין ("sigil") שנוסף בסוף הסימן; באופן טיפוסי, משתני מחרוזת מסתיימים עם '$', בעוד שמשתני ספרים שלמים בדרך־כלל מסתיימים עם '%'. במספר דיאלקטים, משתנים חייבים להיות מוצהרים לפני השימוש הראשון בהם (באמצעות הצהרת ה־DIM); דיאלקטים אחרים אינם דורשים זאת, אבל יש להם אפשרות לחייב זאת - בדרך כלל בשימוש בהוראה כמו Option Explicit (בעברית "אפשרות מפורשת"). לדוגמה, ב־Visual Basic הצהרת משתנים מפורשת איננה בגדר חובה, אך ניתן לתת הנחיה למפרש/מהדר לבדוק שכל המשתנים הוגדרו - באמצעות ההוראה Option Explicit לפני התחלת הקוד. אפשרות זו מסייעת למצוא משתנים ש"אבדו" בסבך הקוד ושמם השתנה בטעות.
ניבים רבים גם תומכים בטיפוסים נוספים כמו מספרים שלמים בני 16 או 32 סיביות, ומספרי נקודה צפה. לחלק יש טיפוסים של "polynomial" ("פולינומים"), "complex" ("מרוכב"), "list" ("רשימה"), וטיפוסים ממוקצעים שתוכננו לתמוך בצרכים של משתמשים מסוימים. בנוסף, חלק מהניבים מרשים הצהרת טיפוסים שהוגדרו על ידי המשתמש באופן דומה לרשומות ("record") של פסקל או למבני ה־"struct" של C. רוב הניבים של בייסיק, מעבר לבסיסיים ביותר, תומכים גם במערכים של מספרים או טיפוסים אחרים. בחלק מהם, חייבים להצהיר על המערכים מראש (כלומר להקצות אותם עם הוראת ה־"DIM") לפני שניתן יהיה להשתמש בהם. תמיכה במערכים של שני ממדים או יותר, כמו גם מערכים של טיפוסים שאינם מספרים, היא נפוצה בגרסאות מתקדמות של בייסיק.

דוגמה להצהרת מערכים

DIM myIntArray(100) AS INTEGERDIM myStringArray(50) AS STRING
חלק מהגרסאות יאפשרו רק את:
DIM myIntArray%(100)DIM myStringArray$(50)
כתלות בניב של בייסיק, המערכים מתחילים מ־0, בעוד שאחרים מתחילים מ־1. באופן זה, בחלק מהם, הפקודות כמו הראשונה בדוגמה יגדירו מערך של 101 איברים של שלמים עם איברים מ־0 עד 100, אחרים יגדירו מערך של 100 איברים של שלמים עם איברים מ־1 ל־100, או באופן יותר נדיר מ־0 ל־99. קיימת אפשרות שניתן גם להגדיר את מספר האיבר הראשון לאחר מאשר 0 או 1, עם פקודה נוספת כמו Option Base. הדוגמה לעיל בבייסיק של מיקרוסופט תיצור מערך עם איברים ממוספרים מ־0 עד 100.
בעבודה עם מחרוזות, פקודות כמו השנייה עשויות להקצות מערך של 50 איברים של מחרוזות באורך משתנה, או שהן עשויות להקצות מחרוזת יחידה של 50 תווים. ראוי לציין שהבדלי המספור שהוזכרו לעיל תקפים גם לגביהן. 

דוגמאות לא סטנדרטיות, ולחלק מהאנשים, לא אינטואיטיביות ליצירת מערכים מבלבלים את המתכנתים המתחילים (ולעיתים גם המתקדמים). דיאלקטים חדשים מציעים מספור פרטני, כמו 
DIM myIntArray (10 TO 20) AS INTEGER
 שיהיה מערך בן 11 איברים עם איברים שממוספרים מ־10 עד 20.

תוכנית ראשונה

מתכנתי בייסיק חדשים שעובדים על מחשב ביתי עשויים להתחיל עם תוכנית פשוטה הדומה לתוכנית Hello world ("שלום עולם") שנעשתה מפורסמת על ידי קרנינגהן וריצ'י. מה שבדרך כלל כרוך בכך הוא שימוש פשוט של פקודת ה־"PRINT" של השפה כדי להציג את ההודעה (כמו שמו של המתכנת) על המסך. פעמים רבות, נעשה שימוש בלולאה אינסופית כדי למלא את התצוגה בהודעה.

בייסיק קלאסי

ראוי לציין שדוגמה זו היא מובנית היטב - מה שמדגים שהשימוש בפקודת GOTO אינו בהכרח מביא לתוכנית לא מובנית. דוגמה זו נכתבה בדיאלקט של BASIC הנקרא GW-BASIC.
10 INPUT "What is your name: "; U$20 PRINT "Hello "; U$30 INPUT "How many stars do you want: "; N40 S$ = ""50 FOR I = 1 TO N60 S$ = S$ + "*"70 NEXT I80 PRINT S$90 INPUT "Do you want more stars? "; A$100 IF LEN(A$) = 0 THEN GOTO 110110 A$ = LEFT$(A$, 1)120 IF (A$ = "Y") OR (A$ = "y") THEN GOTO 40130 PRINT "Goodbye ";140 FOR I = 1 TO 200150 PRINT U$; " ";160 NEXT I

בייסיק מודרני

דיאלקטים מובנים "מודרניים" של בייסיק (לדוגמה QuickBASIC, FreeBasic, PureBasic, Blitz BASIC, PowerBASIC ו-TrueBASIC, תומכים בפקודות קלאסיות כמו הצהרות ה־GOTO במידות שונות, כשהן מוסיפות עוד מילות מפתח מודרניות רבות אחרות. 
הדוגמה הקודמת ב־QuickBASIC:
INPUT "What is your name"; UserName$PRINT "Hello "; UserName$DO INPUT "How many stars do you want"; NumStars Stars$ = "" Stars$ = REPEAT$("*", NumStars) ' <- ANSI BASIC ''--or--'' Stars$ = STRING$(NumStars, "*") ' <- MS BASIC PRINT Stars$ DO INPUT "Do you want more stars"; Answer$ LOOP UNTIL Answer$ <> "" Answer$ = LEFT$(Answer$, 1)LOOP WHILE UCASE$(Answer$) = "Y"PRINT "Goodbye ";FOR I = 1 TO 200 PRINT UserName$; " ";NEXT IPRINT
לשם השוואה, אותה התוכנית במימוש PureBasic המודרני יותר:
OpenConsole()Print("What is your name ")UserName$ = Input()PrintN("Hello " + UserName$)Repeat Print("How many stars do you want ") NumStars = Val(Input()) Stars$ = RSet("", NumStars, "*") PrintN(Stars$) Repeat Print("Do you want more stars ") Answer$ = Input() Until Answer$ <> "" Answer$ = Left(Answer$, 1)Until UCase(Answer$) <> "Y"Print("Goodbye ")For I = 1 To 200 Print(UserName$ + " ")Next IPrintN("")CloseConsole()

ההיבט הישראלי

בייסיק הייתה פופולרית בישראל בתחילת עידן המחשבים הביתיים ואנשים רבים התחילו לתכנת בה. סדרת החוברות "מחשבת" הייתה סדרה פופולרית ללימוד בייסיק עבור מחשבים תואמי PC. בבייסיק נכתבו תוכנות רבות שהופצו או אף נמכרו.
בישראל פותח דיאלקט מעוברת של BASIC בשם "בסיסית", שבו הקוד נכתב באמצעות אותיות עבריות.