ቤሲክ (BASIC)

በኮምፒውተር ፍርገማ (ፕሮግራሚንግ) ዘርፍ ቤሲክ (BASIC) የሚሰኘው የከፍተኛ ደረጃ ፍርገማ ቋንቋዎችን የሚያዝል ቤተሰብ ነው። የቃሉም ትርጉም 'መሰረታዊ' ወይም 'ቀላል' ቢሆን የተሰየመው ግን ከእንግሊዝኛው Beginner's All-purpose Symbolic Instruction Code አኅጽሮተ ቃል ነበረ። ይህም ማለት "የጀማሪዎች ሙሉ-ምክንያት ምልክታዊ ትምህርታዊ ኮድ" የሚያሕል ነው።

ቤሲክ መጀመሪያ በ1963 እ.ኤ.አ. ከኮምፒውተር ዘርፍ ውጭ የሚያጥኑ ተማሪዎች ኮምፒውተሮች ይጠቀሙ ዘንድ ጆን ጆርጅ ኬሜኒና ቶማስ ዩጂን ኩርትዝ አበጅተው በዳርትመስ ከሌጅ አቀረቡት። በጊዜው እያንዳንዱ ኮምፒውተር ሌሱ የሚሆን ሶፍትዌር መጻፍ ይጠይቅ በነበረበት ሁኔታ በሳይንስና በሂሳብ የተሰማሩ ሰዎች ብቻ የመስራት ዝንባሌ ነበሯቸው። ቤሲክ በሰማኒያዎቹ (እ.ኤ.አ.) በቤት ኮምፒውተሮች የተሰራጨ ሲሆን፥ ዛሬም በአንዳንድ በጣም በተለወጡ ቋንቋዎች አማካኝነት ተጠቃሚዎች አሉት።

 ታሪክ 
ክ1960ዎቹ (እ.ኤ.አ.) አመታት መሃክል በፊት ኮምፒተሮች በጣም ውድና ለተወሰኑ አላማ ባላችው ስራሞች ላይ የተወሰኑ መሳሪያዎች ነበሩ። ቀላል የባች ሂደቶች (batch processing) አይነቶችን በመጥቀም በአንድ ጊዜ አንድ ስራ ብቻ ይሰሩ ነበር። በ1960ዎቹ ውስጥ የኮምፒውትር ዋጋ የትንንሽ ድርጅቶት የግዢ አቅም እስከሚፈቅደው ድረስ አሽቆለቆል። ፍትነታቸውም ክመጨመሩ የተነሳ የለስሯ የሚቀመጡበት ጊዜ ይበዛ ጀመር። የዘመኑ የፕሮግራም ቋንቋዎች አሰራር ልክ እንደ ማሽኖቹ ለተውሰኑ ሰራዎች የታለሙ (እንደ ሳይንስ ነቅ ፎርሙላዎች ወይም የጽሁፍ ሰሌዳዎች) ነበሩ። እነዚህ ባንድ ስራ የተወሰኑ ማሽኖች በመወደዳቸው፥ የቋንቋዎቹ የአሰራር ፍጥነት ከሁሉም ግጽታዎች የላቀ ወሳኝነት ነበረው። ባብዛኛው እነዚህን ቋንቋዎች መጠቀም አስቸጋሪና ሥርአት አገባችው (syntax) በጣም የተለያየ ነበር።

በዚህ ጊዜ ነው የጊዜ መጋራት (time sharing) ሃሳብ ተቀባይነት እያገኘ የመጣው። በዚህ ሲስተም ስር የዋና ማሽን የስራ አቅም ይከፋፈልና እያንዳንዱ ተጠቃሚ በየተራው አነስተኛ ጊዜ ይሰጠዋል። እነዚህ ማሽኖች በቂ ፍጥነት ስለነበራቸው አብዛኛው ተጠቃሚ ለራሱ አንድ ማሽን የተመደበለት ያስመስሉት ነበር። በቴዎሪ ደረጃ የጊዜ መጋሯት ለኮምፒውትር የሚወጣውን ወጪ በእጭጉ ቅንሰዋል:: በመቶ ለሚቆጠሩ ተጠቃሚዎች አንድ ማሺን ይበቃ ስለነበር።


 የመጀመሪያዎቹ አመታት 
...
 ታላቅ እድገት ። የቤት ኮምፒውትር ዘመን 
...

 ብስለት — የግል ኮምፒውተር ዘመን 
...

 ቋንቋው 
 ሥርአት አገብ (Syntax) 
የቤሲክ አረፍተ የመስመር መቀጠያ ፊደል ከሌለ መስመር መጨረሻ ላይ ያልቃሉ። በጣም አነስተኛ ቤሲክ LET, PRINT, IF and GOTO የሚሉት ትእዛዞች ይበቁታል::

የመስመር ቁጥሮች የቤት ኮምፒውተር ቤሲክን ከሚለዩ ገጽታዎች አንዱ ነው። አንዳንድ ቆይተው የመጡ የቤሲክ ተርጓሚዎች (interpreters) አምበሮ የሚመጡ RENUMBER የሚባል መስመር ቆጣሪ ትእዛዝ ነበራችው ።

አንዳንድ ዘምዝናዊ ባሲኮች የመስመር ቁጥርን ትተው አብዛኛው በሌሎች ቋንቋዎች (እንደ ሲ ና ፓስካል) የሚታወቁትን የመዝገብና (data) የመቆጣጠሪያ (control) አቀማመጥን አስገብተዋል። (አንዳንድ በመስመር ቁጥር ላይ የተመሰረቱም ቋንቋዎች እነዚህን አቀማመጦች ማስገባታችውን መመዝገብ ያሻል።)

 do - loop - while - until - exit
 on x goto / gosub (switch & case)

በቅርብ የተሰሩ እንደ ቪሱአል ቤሲክ (Visual Basic) የቤሲክ ተዛማጆች እቃ አዘል ገጽታዎችን እንደ For Each...Loop ያሉ አቀማመጦችን ሰብስቦችና ተርታዎችን በጥምዝ (loop) ለመፈተሽ ቪሱአል ቤሲክ 4 አንስቶ ሲያስገቡ ብእቃ አዘለ ፍርግምና ውርስ ተብሎ የሚታወቀውን አሰራር በመቅረብ አስገብተዋል። የማህደረ እውስታ (memory) አስተዳደር ዘዴው ካብዛኛው የተደራጁ ቋንቋዎች የቀለለ ነው። ይህም ሊሆን የቻለው ቋንቋው
garbage collection ወይም የቆሻሻ ሰብሳቢ ይዞ ስለሚመጣ ነው::


 አደረጃጀትና የፍሳሽ ቁጥጥር 
ቤሲክ እንደ ሲ የውጭ ቤተ መጻህፍት (external library) የለውም። የቋንቋው ተርጓሚ (interpreter) ሰፊ ቤተ መጻህፍትና አብረውት የተገነቡ ፕሮሲጀሮች (procedures) ይይዛል: ለነዚህ ፕሮሲጀሮች አንድ ፈርጋሚ ሙያውን ለመማርም ሆነ ቀለል ያሉ ፕሮግራሞችን ለመጻፍ የሚያስፈልጉትን አብዛኞቹን መሳሪያዎች (የሂሳብ ተግባሯትን፥ የፊደል ክር-string, የማስገቢያና የማሶጪያ መስኮት፥ የስዕልና የመዘገብ መሳሪያ) ያካትታል።
አንዳንድ የቤሲክ ቤተሰብ አባል ቋንቋዎች ፈርጋሚው የራሱን ፕሮሲጀሮች እንዲጽፍ አይፈቅዱም:: ፈርጋሚው ከአንድ ቅርንጫፍ ወደሌላ ለመዘዋወር በዛት GOTOን በመጠቀም ፕሮግራሙን ይጽፋል። የዚህ ውጤት ደግሞ ለአንባቢ እጅግ አስቸጋሪ የሆነ የፕሮግራም ምንጭ (source)፥ በተለምዶ "እንደ ፓስታ የተወሳሰበ" ወይም spagetti code፥ አይነት ይሆናል። GOSUB የቅርንጫፍ ዝውውሩን የሚያደርገው ወደ ንዑስ ክንውኖች (አነስተኛ የፕሮግራም አካሎች) ሲሆን ባብዛኛው ያለግቤት (parameters)ና ያለሰፈር ተለዋጭ (local variable) ነው። ዘመናዊ የቤሲክ ስሪቶች እንደ ሚክሮሶፍት ኪክ ቤሲክ ሙሉ ንዑስ ክንውኖችንና (subroutines) ተግባራትን (functions) አስገብተዋል። ይህ ቤሲክ ከሌሎች ቋንቋዎች የሚለይበት አንዱ ገጽታው ነው። ቤሲክ፥ እንደ ፓስካል፥ መልስ በማይጠበቅባቸው ፕሮሴጀሮችና (ንዑስ ክንውኖች የምንላቸው) መልስ በሚሰጡት (ተግባራት) መሃከል ልዩነት ያደርጋል። ሌሎች እንደ ሁሉንም በተግባራት ስያሜ (አንዳንዶቹን ባለ ባዶ መልስ በማለት) ለዩነትን አያደርጉም።

 የመዝገብ አይነቶች 
ቤሲክ ለፊደል ክሮች (strings) ስሪ የሚያገለግሉ ጥሩ ተግባራት ያለው ቋንቋ እንደሆነ ይታወቃል። የቀድሞው የዚሁ ቤተሰብ ቋንቋዎች እንደ (LEFT$, MID$, RIGHT$) የመሳሰሉት መሰረታዊ ተግባራት በማቀፍ የፊደል ክሮችን የሚመለከቱትን ስራዎች ያቃልላሉ። የፊደል ክሮች የለት ተለት ስራዎች ላይ በተደጋጋሚ ሰላሚያጋጥሙ ከሌሎች የዘመኑ ቋንቋዎች በዚህ ረገድ ብልጫ አሳይቷል።

የቀድሞው የዳርትሙንት ቤሲክ ለቁጥርና ለፊደል ክር አይነቶችን ብቻ ድጋፍ ይሰጥ ነበር። የሙሉ ቁጥሮች (integers) አይነቶች አልነበሩም። ቁጥሮች በሙሉ ባለነጥብ (floating points) ነበሩ። የፊደል ክሮች አለ ተለዋዋጭ ርዝመት ነበሩ። ቤሲክ የፊደል ክርም ሆነ የቁጥር ተርታዎችን (arrays) እንዲሁ ባለሁለት ማአዘን ተርታዎችን የሚደግፍ ወይም የሚይዝ ቋንቋ ነበር።

ማንኛው ዘምዝናዊ የቤሲክ ቤተሰብ ቋንቋ ቢያንስ ቁጥሮችንና የፊደል ክሮችን ይይዛል። 
...

 ምሳሌ 
የመጀመሪያ የቤሲክ ፕሮግራም ወይም ፍርግም
ጀማሪ የቤሲክ ፈርጋሚዎች የቤት ኮምፒውትሯቸው ላይ የሚጀምሩት በ ከርኒጋንና ሪቺ አማካኝነት እውቅና ያገኘውን ሰላም አለም ፍርግም አይደለም። ይልቁኑ የሚቀጥለውን የማያባራ ጥምዝ የሚመስል ነው።

 10 PRINT "BOB IS AWESOME!"
 20 GOTO 10

 ክላሲክ ወይም የቀድሞው ቤሲክ 

ክላሲክ ወይም የቀድሞው ቤሲክ፤ ይህ ምሳሌ በስራአት የተደራጀ መሆኑን GOTO ን መጠቀም የግድ ወደተመሰቃቀለ የፍርግም እንደማያመሯ ያሳያል።

 10 INPUT "What is your name: "; U$
  20 PRINT "Hello "; U$
  30 REM
  40 INPUT "How many stars do you want: "; N
  50 S$ = ""
  60 FOR I = 1 TO N
  70 S$ = S$ + "*"
  80 NEXT I
  90 PRINT S$
  100 REM
  110 INPUT "Do you want more stars? "; A$
  120 IF LEN(A$) = 0 THEN GOTO 110
  130 A$ = LEFT$(A$, 1)
  140 IF (A$ = "Y") OR (A$ = "y") THEN GOTO 40
  150 PRINT "Goodbye ";
  160 FOR I = 1 TO 200
  170 PRINT U$; " ";
  180 NEXT I
  190 PRINT

 ዘምዝናዊ ቤሲክ 
"ዘምዝናዊ" የተደፘጀው ቤሲክ (ለምሳሌ፥ ኩኢክቤሲክ ና ፓወርቤሲክ), GOTO የተሰኘውን ቃል በዘመናዊ ቃላት ተክተው።

 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 I
 PRINT

 Notes 

 References 
 Dartmouth College Computation Center (1964). A Manual for BASIC, the elementary algebraic language designed for use with the Dartmouth Time Sharing System  — The original Dartmouth BASIC manual.
 Lien, David A. (1986). The Basic Handbook: Encyclopedia of the BASIC Computer Language (3rd ed.). Compusoft Publishing. ISBN 0-932760-33-3. Documents dialect variations for over 250 versions of BASIC.
 Kemeny, John G.; Kurtz, Thomas E. (1985). Back To BASIC: The History, Corruption, and Future of the Language. Addison-Wesley. 141 pp. ISBN 0-201-13433-0.
 Jean E. Sammet. Programming languages: History and fundamentals. Prentice-Hall, Englewood Cliffs, N.J. 1969.


 Standards 
 ANSI/ISO/IEC Standard for Minimal BASIC:
 ANSI X3.60-1978 "FOR MINIMAL BASIC"
 ISO/IEC 6373:1984 "DATA PROCESSING - PROGRAMMING LANGUAGES - MINIMAL BASIC"
 ANSI/ISO/IEC Standard for Full BASIC:
 ANSI X3.113-1987 "PROGRAMMING LANGUAGES FULL BASIC"
 ISO/IEC 10279:1991 "INFORMATION TECHNOLOGY - PROGRAMMING LANGUAGES - FULL BASIC"
 ANSI/ISO/IEC Addendum Defining Modules:
 ANSI X3.113 INTERPRETATIONS-1992 "BASIC TECHNICAL INFORMATION BULLETIN # 1 INTERPRETATIONS OF ANSI 03.113-1987"
 ISO/IEC 10279:1991/ Amd 1:1994 "MODULES AND SINGLE CHARACTER INPUT ENHANCEMENT"

መደብ:ኮምፒዩተር