BASIC 4015 224966852 2008-07-11T06:11:45Z 87.2.209.53 /* External links */ {{otheruses4|the programming language|the think tank|British American Security Information Council}} {{Infobox programming language | name = BASIC | paradigm = [[structured programming|structured]], later [[procedural programming|procedural]] | generation = [[3GL]] | year = 1964 | designer = [[John George Kemeny|John Kemeny]] and [[Thomas Eugene Kurtz|Thomas Kurtz]] | developer = | latest release version = | latest release date = | typing = [[Strongly-typed programming language|strong]] | implementations = [[Apple BASIC]], [[BBC BASIC]], [[Microsoft BASIC]] | dialects = | influenced_by = [[Algol programming language|ALGOL 60]], [[fortran programming language|FORTRAN II]], [[JOSS]] | influenced = [[COMAL]], [[Visual Basic]], [[Visual Basic .NET]], [[Realbasic]], [[REXX]], [[Perl]], [[GRASS (programming language)|GRASS]] }} [[Image:AtariBasicExample.png|right|thumb|300px|Screenshot of [[Atari BASIC]], an early BASIC language for small computers]] In [[computer programming]], '''BASIC''' (an [[acronym]] for '''Beginner's All-purpose Symbolic Instruction Code'''<ref> The acronym is tied to the name of an unpublished paper by Thomas Kurtz and is not a [[backronym]], as is sometimes suggested in older versions of [http://catb.org/~esr/jargon/html/B/BASIC.html The Jargon File]</ref>) is a family of [[high-level programming language]]s. The [[Dartmouth BASIC|original BASIC]] was designed in 1964, by [[John George Kemeny]] and [[Thomas Eugene Kurtz]] at [[Dartmouth College]], [[Hanover, New Hampshire]], [[United States|U.S.]], to provide access for non-science students to computers. At the time, nearly all use of computers required writing custom software, which was something only [[scientist]]s and [[mathematician]]s tended to do. The language (in one variant or another) became widespread on [[microcomputer]]s in the late 1970s and [[home computer]]s in the 1980s. BASIC remains popular to this day in a handful of highly modified [[Programming language dialect|dialect]]s and new languages based on BASIC such as [[Microsoft]] [[Visual Basic]]. ==History== ===Background=== Before the mid-1960s, [[computers]] were extremely expensive and used only for special-purpose tasks. A simple [[batch processing]] arrangement ran only a single "job" at a time, one after another. But during the 1960s faster and more affordable computers became available. With this extra processing power, computers would sometimes sit idle, without jobs to run. Programming languages in the batch programming era tended to be designed, like the machines on which they ran, for specific purposes (such as [[scientific formula]] calculations or business data processing or eventually for [[text editor|text editing]]). Since even the newer, less expensive machines were still major investments, there was a strong tendency to consider efficiency to be the most important feature of a language. In general, these specialized languages were difficult to use and had widely disparate [[syntax]]. As prices decreased, the possibility of sharing computer access began to move from research labs to commercial use. Newer computer systems supported [[time-sharing]], a system which allows multiple users or processes to use the [[CPU]] and memory. In such a system the [[operating system]] alternates between running processes, giving each one running time on the CPU before switching to another. The machines had become fast enough that most users could feel they had the machine all to themselves. In theory, timesharing reduced the cost of computing tremendously, as a single machine could be shared among (up to) hundreds of users. ===Early years: the mini-computer era=== The original BASIC language was designed in 1963 by [[John George Kemeny|John Kemeny]] and [[Thomas Eugene Kurtz|Thomas Kurtz]] and implemented by a team of Dartmouth students under their direction. BASIC was designed to allow students to write programs for the [[Dartmouth Time-Sharing System]]. It was intended to address the complexity issues of older languages with a new language design specifically for the new class of users that time-sharing systems allowed&mdash;that is, a less technical user who did not have the mathematical background of the more traditional users and was not interested in acquiring it. Being able to use a computer to support teaching and research was quite novel at the time. In the following years, as other dialects of BASIC appeared, Kemeny and Kurtz's original BASIC dialect became known as ''[[Dartmouth BASIC]]''. The eight design principles of BASIC were: # Be easy for beginners to use. # Be a [[general-purpose programming language]]. # Allow advanced features to be added for experts (while keeping the language simple for beginners). # Be [[interactive]]. # Provide clear and friendly [[error message]]s. # Respond quickly for small programs. # Not to require an understanding of computer hardware. # Shield the user from the operating system. The language was based partly on the [[FORTRAN programming language|FORTRAN II]] and partly on the [[Algol programming language|ALGOL 60]], with additions to make it suitable for timesharing. (The features of other time-sharing systems such as [[JOSS]] and CORC, and to a lesser extent LISP, were also considered.) It had been preceded by other teaching-language experiments at Dartmouth such as the DARSIMCO (1956) and DOPE (1962 implementations of SAP and DART (1963) which was a simplified FORTRAN II). Initially, BASIC concentrated on supporting straightforward mathematical work, with [[matrix (math)|matrix]] arithmetic support from its initial implementation as a batch language and full string functionality being added by 1965. BASIC was first implemented on the [[GE-200 series|GE-265]] [[mainframe computer|mainframe]] which supported multiple [[computer terminal|terminals]]. Contrary to popular belief{{Fact|date=June 2008}}, it was a [[compiler|compiled]] language at the time of its introduction. It was also quite efficient, beating FORTRAN II and ALGOL 60 implementations on the 265 at several fairly computationally intensive (at the time) programming problems such as numerical integration by [[Simpson's Rule]]. The designers of the language decided to make the compiler available free of charge so that the language would become widespread. They also made it available to high schools in the Dartmouth area and put a considerable amount of effort into promoting the language. As a result, knowledge of BASIC became relatively widespread (for a computer language) and BASIC was implemented by a number of manufacturers, becoming fairly popular on newer [[minicomputer]]s like the [[Digital Equipment Corporation|DEC]] [[Programmed Data Processor|PDP]] series and the [[Data General]] [[Data General Nova|Nova]]. The BASIC language was also central to the [[HP Time-Shared BASIC]] system in the late 1960s and early 1970s. In these instances the language tended to be implemented as an [[Interpreter (computing)|interpreter]], instead of (or in addition to) a [[compiler]]. Several years after its release, highly-respected computer professionals, notably [[Edsger W. Dijkstra]], expressed their opinions that the use of [[GOTO]] statements, which existed in many languages including BASIC, promoted poor programming practices.<ref>In a 1968 letter, Dutch computer scientist [[Edsger Dijkstra]] considered programming languages using GOTO statements for program structuring purposes harmful for the productivity of the programmer as well as the quality of the resulting code ([http://www.acm.org/classics/oct95/ "Go To Statement Considered Harmful"], ''Communications of the ACM'' Volume 11, 147-148. 1968). The letter, which contributed the phrase [[considered harmful]] to programming jargon, did not mention any particular programming language; instead it states that the overuse of GOTO is damaging and gives technical reasons why this should be so. In a 1975 tongue-in-cheek article, [http://www.cs.virginia.edu/~evans/cs655/readings/ewd498.html "How do We Tell Truths that Might Hurt"], ''Sigplan Notices'' Volume 17 No. 5, Dijkstra gives a list of uncomfortable "truths", including his opinion of several programming languages of the time. Although BASIC is one of his targets ("It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration"), it receives no worse treatment in the piece than [[PL/I]], [[COBOL]] or [[APL programming language|APL]].</ref> Some have also derided BASIC as too slow (most interpreted versions are slower than equivalent compiled versions) or too simple (many versions, especially for small computers left out important features and capabilities). === Explosive growth: the home computer era === [[Image:Msxbasic.png|right|thumb|250px|[[MSX BASIC]] version 3.0]] Notwithstanding the language's use on several minicomputers, it was the introduction of the [[Micro Instrumentation and Telemetry Systems|MITS]] [[Altair 8800]] "kit" [[microcomputer]] in 1975 that provided BASIC a path to universality. Most programming languages required more memory (and/or disk space) than was available on the small computers most users could afford. With the slow memory access that [[mass storage device|audio tapes]] <!-- tapes? this is the first reference to this, can we expand? -->provided and the lack of suitable text editors, a language like BASIC which could satisfy these constraints, as well as being [[interpreted computer language|interpreted]] line by line painfully input from a tape device, was attractive. The [[Commodore VIC-20]] used BASIC as its programming language. Line-by-line instructions in the user manual taught users as young as 5 years old the elements of BASIC programming, allowing them to program their VIC-20 to perform simple tasks. BASIC also had the advantage that it was fairly well known to the young designers (''i.e. enthusiastic hobbyists'') who took an interest in microcomputers, and generally worked in the electronics industries of the day. Kemeny and Kurtz's earlier proselytizing paid off in this respect and the few hobbyists journals of the era were filled with columns that made mentions of the language or focused entirely on one version compared to others. One of the first to appear for the [[Intel 8080|8080]] machines like the Altair was [[Tiny BASIC programming language|Tiny BASIC]], a simple BASIC implementation originally written by Dr. [[Li-Chen Wang]], and then ported onto the Altair by Dennis Allison at the request of [[Bob Albrecht]] (who later founded [[Dr. Dobb's Journal]]). The Tiny BASIC design and the full source code were published in 1976 in DDJ. In 1975, MITS released [[Altair BASIC]], developed by college drop-outs [[Bill Gates]] and [[Paul Allen]] as the company [[Micro-Soft]] (who started today's corporate giant, Microsoft). The first Altair version was co-written by Gates, Allen and [[Monte Davidoff]] in a burst of enthusiasm and neglect of studies. Versions of [[Microsoft BASIC]] (also known then, and most widely as '''M BASIC''' or '''[[MBASIC]]''', see sidebar) was soon bundled with the original [[floppy disk]]-based IBM-PC computers. Eventually tens-of-thousands of copies and variants were in use because of the success of the IBM-PC. Because of the portability factor, it also became one of the standard languages on the [[Apple II family|Apple II]], which was based on a different microprocessor, the [[MOS Technology 6502|6502]] MPU. By 1979, Microsoft was talking with several microcomputer vendors, including [[International Business Machines|IBM]], about licensing a BASIC interpreter for their computers. A version was included in the IBM PC [[Read-only memory|ROM]] chips and as a result, PCs without floppy disks automatically booted into BASIC just like many other small computers. Newer companies attempted to follow the successes of MITS, [[IMSAI]], [[North Star]] and [[Apple Computer|Apple]], thus creating a [[home computer]] industry. Meanwhile, BASIC became a standard feature of all but a very few home computers. Most came with a BASIC interpreter in ROM, thus avoiding the problems with not having (or being able to afford) a disk. Soon there were millions of machines running BASIC variants around the world. This was likely a far greater number than all the users of all other languages put together at that time. There are more [[programming language dialect|dialects]] of BASIC than there are of any other [[programming language]]. Most of the [[home computer]]s of the 1980s had a [[read-only memory|ROM]]-resident BASIC [[interpreter (computing)|interpreter]]. The [[BBC]] published [[BBC BASIC]], developed for them by [[Acorn Computers Ltd]], incorporating many extra structuring keywords, as well as comprehensive and versatile direct access to the operating system. It also featured a fully integrated assembler. BBC BASIC was a very well-regarded dialect, and made the transition from the original [[BBC Micro]] computer to more than 30 other platforms. During this growth time for BASIC, many magazines were published such as ''[[Creative Computing|Creative Computing Magazine]]'' that included complete source codes for games, utilities, and other programs. Given BASIC's straightforward nature, it was considered a simple matter to [[Type-in program|type in the code]] from the magazine and execute the program. Different magazines were published featuring programs for specific computers, though some BASIC programs were universal and could be input into any BASIC-using machine. A logical extension of the magazine idea was the publishing of BASIC source code in full-fledged books: probably the classic example was [[David H. Ahl|David Ahl]]'s series of Basic Computer Games.<ref>http://www.atariarchives.org/basicgames</ref><ref>http://www.atariarchives.org/morebasicgames</ref><ref>http://www.atariarchives.org/bigcomputergames</ref> ===Maturity: the personal computer era=== [[Image:GW-BASIC 3.22.png|right|thumbnail|300px|[[GW-BASIC]] 3.22, shown here with the simple [[Hello world program]]]] Many newer BASIC versions were created during this period. Microsoft sold several versions of BASIC for [[MS-DOS]]/[[PC-DOS]] including [[Microsoft BASICA interpreter|BASICA]], [[Microsoft GW-BASIC interpreter|GW-BASIC]] (a BASICA-compatible version that did not need IBM's ROM) and [[QuickBASIC]]. Turbo [[Pascal (programming language)|Pascal]]-publisher [[Borland]] published [[Turbo BASIC programming language|Turbo BASIC]] 1.0 in 1985 (successor versions are still being marketed by the original author under the name [[PowerBASIC programming language|PowerBASIC]]). These languages introduced many extensions to the original home computer BASIC, such as improved [[string manipulation]] and graphics support, access to the [[file system]] and additional [[data types]]. More important were the facilities for [[structured programming]], including additional [[control structures]] and proper [[subroutine]]s supporting [[local variable]]s. However, by the latter half of the 1980s newer computers were far more capable with more resources. At the same time, computers had progressed from a hobbyist interest to tools used primarily for applications written by others, and programming became less important for most users. BASIC started to recede in importance, though numerous versions remained available. Compiled BASIC or [[CBASIC]] is still used in many IBM 4690 OS point of sale systems. BASIC's fortunes reversed once again with the introduction of [[Visual Basic]] by Microsoft. It is somewhat difficult to consider this language to be BASIC, because of the major shift in its orientation towards an [[object-oriented programming|object-oriented]] and [[event-driven programming|event-driven]] perspective. The only significant similarity to older BASIC dialects was familiar syntax. Syntax itself no longer "fully defined" the language, since much development was done using "drag and drop" methods without exposing all code for commonly-used objects such as buttons and scrollbars to the developer. While this could be considered an evolution of the language, few of the distinctive features of early [[Dartmouth BASIC]], such as [[line number]]s and the <code>INPUT</code> keyword, remain (although Visual Basic still uses <code>INPUT</code> to read data from files, and <code>INPUTBOX</code> is available for direct user input; line numbers can also optionally be used in all VB versions, even VB.NET, albeit they cannot be used in certain places, for instance before <code>SUB</code>). Ironically given the origin of BASIC as a "beginner's" language, and apparently even to the surprise of many at Microsoft who still initially marketed Visual Basic or "VB" as a language for hobbyists, the language had come into widespread use for small custom business applications shortly after the release of VB version 3.0, which is widely considered the first relatively stable version. While many advanced programmers still scoffed at its use, VB met the needs of small businesses efficiently wherever processing speed was less of a concern than easy development. (By that time, computers running Windows 3.1 had become fast enough that many business-related processes could be completed "in the blink of an eye" even using a "slow" language, as long as massive amounts of data were not involved.) Many small business owners found they could create their own small yet useful applications in a few evenings to meet their own specialized needs. Eventually, during the lengthy lifetime of VB3, knowledge of Visual Basic had become a marketable job skill. Many BASIC dialects have also sprung up in the last few years, including [[Bywater BASIC]] and [[True BASIC]] (the direct successor to Dartmouth BASIC from a company controlled by Kurtz). Many other BASIC variants and adaptations have been written by hobbyists, equipment developers, and others, as it is a relatively simple language to develop translators for. An example of an open source interpreter, written in C, is [http://www.personal.leeds.ac.uk/~bgy1mm/MiniBasic/MiniBasicHome.html MiniBasic]. The ubiquity of BASIC interpreters on personal computers was such that textbooks once included simple "Try It In BASIC" exercises that encouraged students to experiment with mathematical and computational concepts on classroom or home computers. Futurist and sci-fi writer [[David Brin]] mourns the loss of ubiquitous BASIC in a recent ''Salon'' article.<ref>http://www.salon.com/tech/feature/2006/09/14/basic/index_np.html Why Johnny Can't Code</ref> == Examples == <!-- needs an example of darthmouth basic --> === Unstructured BASIC === <!-- this is not first-generation basis, that would be (the more powerful) darthmouth basic --> New BASIC programmers on a home computer might start with a simple program similar to the [[Hello world program]] made famous by [[Kernighan and Ritchie]]. This generally involves a simple use of the language's PRINT statement to display the message (such as the programmer's name) to the screen. Often an [[infinite loop]] was used to fill the display with the message. Most first generation BASIC languages such as [[MSX BASIC]] and [[GW-BASIC]] supported simple data types, loop cycles and arrays. The following example is written for GW-BASIC, but will work in most versions of BASIC with minimal changes: <source lang="QBasic"> 10 INPUT "What is your name: ", U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars do you want: ", N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars? ", A$ 100 IF LEN(A$) = 0 THEN 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN 30 130 PRINT "Goodbye ";U$ 140 END </source> === Structured BASIC === <!-- arguably 3rd generation, the main feature is that it has support for structured (but not always procedural) programming --> Second generation BASICs (for example [[QuickBASIC]] and [[PowerBASIC]]<!-- please do not extend this list, 2 examples are more than enough-->) introduced a number of features into the language, primarily related to structured and procedure-oriented programming. Usually, [[line number]]ing is omitted from the language and replaced with [[Label (programming language)|label]]s (for [[GOTO]]) and [[Subroutine|procedure]]s to encourage easier and more flexible design.<ref name="GBvsQB">{{cite web|url=http://support.microsoft.com/kb/73084|title=Differences Between GW-BASIC and QBasic|date=2003-05-12|accessdate=2008-06-28|author=}}</ref> <source lang="QBasic"> INPUT "What is your name: ", UserName$ PRINT "Hello "; UserName$ DO INPUT "How many stars do you want: ", NumStars Stars$ = STRING$(NumStars, "*") PRINT Stars$ DO INPUT "Do you want more stars? ", Answer$ LOOP UNTIL Answer$ <> "" Answer$ = LEFT$(Answer$, 1) LOOP WHILE UCASE$(Answer$) = "Y" PRINT "Goodbye "; UserName$ </source> === "Modern" BASIC === <!-- mordern might not be the approriate name (e.g. unstructured basic is still used in micro-controllers), characteristics are various and incude event-driven programming (pseudo object-oriented programming and some domain specific support --> Third generation BASIC dialects such as [[Visual Basic]] and [[StarOffice Basic]] introduced features to support object-oriented and event-driven programming paradigm. Most built-in procedures and functions now represented as ''methods'' of standard objects rather than ''operators''. The previous example in [[Visual Basic .NET]]: <!-- needs a better (event-driven?) example --> <source lang="vbnet"> Public Class stars Public Sub Main() Dim UserName, Answer, stars As String Dim NumStars, I As Integer Console.Write("What is your name: ") UserName = Console.ReadLine() Console.WriteLine("Hello {0}", UserName) Do Console.Write("How many stars do you want: ") NumStars = CInt(Console.ReadLine()) stars = New String("*", NumStars) Console.WriteLine(stars) Do Console.Write("Do you want more stars? ") Answer = Console.ReadLine() Loop Until Answer <> "" Answer = Answer.Substring(0, 1) Loop While Answer.ToUpper() = "Y" Console.WriteLine("Goodbye {0}", UserName) End Sub End Class </source> == See also == {{Wikibooks|Programming:BASIC}} * [[List of BASIC dialects]] * [[List of BASIC dialects by platform]] == Notes == {{reflist}} ==References== * {{cite book | publisher = Dartmouth College Computation Center | year = 1964 | url = http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf | title = A Manual for BASIC, the elementary algebraic language designed for use with the Dartmouth Time Sharing System }} — The original Dartmouth BASIC manual. * {{cite book | last = Lien | first = David A. | year = 1986 | title = The Basic Handbook: Encyclopedia of the BASIC Computer Language | edition = 3rd ed. | publisher = Compusoft Publishing | isbn = 0-932760-33-3 }} — Documents dialect variations for over 250 versions of BASIC. * {{cite book | last = Kemeny | first = John G. | coauthors = Kurtz, Thomas E. | year = 1985 | title = Back To BASIC: The History, Corruption, and Future of the Language | publisher = Addison-Wesley | pages = 141&nbsp;pp | isbn = 0-201-13433-0 }} * {{cite book | last = Sammet | first = Jean E. | title = Programming languages: History and fundamentals | publisher = Prentice-Hall | location = Englewood Cliffs, N.J. | year = 1969 }} * {{HOPL-lang|176|BASIC - Beginners All-purpose Symbolic Instruction Code}} === 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" ==External links== <!-- Please do not add any links for specific implementations of BASIC here. Add them to ''[[List of BASIC dialects]]'' and ''[[List of BASIC dialects by platform]]'' instead --> *{{dmoz|Computers/Programming/Languages/BASIC/}} * [http://www.atariarchives.org/morebasicgames More Basic Computer Games] by David Ahl * [http://www.atariarchives.org/bigcomputergames Big Computer Games] by David Ahl * [http://www.scriptbasic.org ScriptBasic] - Open source Basic interpreter (utility, CGI and multi-threaded HTTP application server) * [http://cellbasic.sourceforge.net/ CellularBASIC] On-phone Open Source Mobile BASIC Interpreter for J2ME * [http://www.thinbasic.com thinBasic] - Free Basic interpreter full of features (more than 1300 native commands covering many different programming areas) {{BASIC}} [[Category:Articles with example BASIC code]] [[Category:BASIC programming language family]] [[Category:1960s software]] [[af:BASIC]] [[am:ቤሲክ (BASIC)]] [[ar:بيسيك]] [[az:Basic]] [[bn:বেসিক (প্রোগ্রামিং ভাষা)]] [[zh-min-nan:BASIC]] [[bs:BASIC (programski jezik)]] [[bg:BASIC]] [[ca:BASIC]] [[cs:BASIC]] [[da:BASIC]] [[de:BASIC]] [[et:BASIC]] [[el:BASIC]] [[es:BASIC]] [[eo:BASIC (programlingvo)]] [[eu:BASIC]] [[fa:بیسیک]] [[fr:BASIC]] [[gl:BASIC]] [[ko:베이직]] [[hr:BASIC]] [[id:BASIC]] [[is:BASIC (forritunarmál)]] [[it:BASIC]] [[he:BASIC]] [[la:Basic]] [[lv:BASIC programmēšanas valoda]] [[lt:BASIC]] [[hu:BASIC]] [[ms:BASIC]] [[nl:BASIC]] [[ja:BASIC]] [[no:BASIC]] [[nn:BASIC]] [[pl:BASIC]] [[pt:BASIC]] [[ro:BASIC]] [[ru:BASIC]] [[sq:BASIC]] [[simple:BASIC (programming language)]] [[sk:BASIC (programovací jazyk)]] [[sl:BASIC (programski jezik)]] [[sr:Бејсик]] [[fi:BASIC]] [[sv:BASIC]] [[kab:BASIC]] [[th:ภาษาเบสิก]] [[vi:BASIC]] [[tg:BASIC]] [[tr:BASIC]] [[uk:BASIC]] [[bat-smg:BASIC]] [[zh:BASIC]]