BASIC
BASIC (Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих), или Бейсик[1] — семейство высокоуровневых языков программирования. Был распространён на персональных микрокомпьютерах, таких как Commodore 64 и Sinclair ZX81, и часто запускался вместе со средой. Например, клавиши Sinclair ZX Spectrum были подписаны командами Бейсика для облегчения ввода. Бейсик позволял домашним пользователям и другим не-специалистам самим писать программы для микрокомпьютеров, в отличие от использовавшихся ранее языков программирования, предназначенных для математиков и учёных.
На Бейсике того времени было написано много видеоигр, работавших в текстовом режиме. В компьютерных журналах публиковался исходный код игр (и просто полезных программ), который читатели могли вбить в свой компьютер и запустить игру. Программа такого формата занимала обычно до 150 строчек, так как должна была уместиться в ограниченную оперативную память (в некоторых конфигурациях — всего килобайт). Каждая марка компьютеров имела свой диалект Бейсика и свои особенности (отличия были даже между такими моделями как ZX80 и ZX81), поэтому при вводе программ для других моделей от пользователя требовалась некоторая адаптация — портирование. Различные рекомендации по портированию программ распространялись в журналах и внутри сообщества. Само изложение программ в журналах также рекомендовало различные модификации, например, для увеличения или уменьшения сложности — как с конкретными инструкциями, так и в виде идей, реализацию которых пользователь волен проработать сам. Таким образом многие видеоигр на Бейсике ходили в различных версиях как подлинно народное творчество. В ту эпоху обзоры компьютерных игр часто указывали язык программирования, на котором создавалась игра, что обычно было «Бейсик» или «машинный код». Некоторые игры, такие как «3D Monster Maze», пополам состояли из того и другого.
Множество популярных видеоигр на Бейсике было собрано Дэвидом Алем и издано в книге «BASIC Computer Games». Одной из самых популярных игр на Бейсике была «Star Trekсм.», известности которой способствовала популярность «Звёздного пути» среди компьютерщиков. Из-за этого игра ходила во многих модифицированных версиях, самая распространённая из которых называлась «Super Star Trek».
Содержание
Пример игры: Animal
Классическая игра «Угадай животное» вошла в сборник «BASIC Computer Games» и была распространена как в США и Великобритании, так и в СССР, и в постсоветской России. В той или иной реализации эта игра приводится как пример во многих учебниках по Бейсику. Это реализация из «BASIC Computer Games».
Строчка | Объяснение |
---|---|
10[2] PRINT TAB(32);"ANIMAL" | Первая строчка программы. Печатает название игры после отступа. |
20 TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" | Печатает название и адрес автора (по крайней мере данной версии) после меньшего отступа. |
30 PRINT: PRINT: PRINT | Три раза печатает перенос строки. |
40 PRINT "PLAY `GUESS THE ANIMAL`" | Печатает «Сыграем в „Угадай животное“». |
50 PRINT "THINK OF AN ANIMAL AND THE COMPUTER WILL TRY TO GUESS IT" | Печатает «Задумайте животное, а компьютер постарается угадать». |
60 PRINT | Печатает перенос строки. |
70 DIM A$(200) | Создаёт пустой массив данных A$ для 201 строк (поскольку нумерация элементов начинается с нуля). |
80 FOR I=0 TO 3 | Следующий после этой строчки блок команд будет повторён четыре раза. |
90 READ A$(I) | Считывает начальные данные для массива A$ (данные расположены в строчке 530). |
100 NEXT I | Закрывает блок, нуждающийся в повторении. |
110 N=VAL(A$(0)) | В переменную N записывается числовое значение первого элемента массива — номер следующего пустого элемента масива. |
120 REM MAIN CONTROL SECTION | Примечание для программиста «Основная часть программы». |
130 INPUT "ARE YOU THINKING OF AN ANIMAL";A$ | Спрашивает «Вы задумали животное?» и записывает ответ в переменную A$ (не следует путать с массивом A$). |
140 IF A$="LIST" THEN 600 | Если пользователь ответил «перечень», перейти на строчку 600, где начинается подпрограмма, перечисляющая известных компьютеру животных. |
150 IF LEFT$(A$,1)<>"Y" THEN 120 | Если пользователь ответил не «перечень» и не «да» (точнее, любое слово на Д), тогда вернуться на строчку 120, чтобы спросить снова. |
160 K=1 | В переменной K хранится рассматриваемый индекс массива данных. Догадки начинаются индекса № 1. |
170 GOSUB 390 | Перейти к подпрограмме догадок на строчке 290. Поскольку используется GOSUB, подпрограмма, закончив, сможет вернуться в то самое место, которое её вызвала. |
180 IF LEN(A$(K))=0 THEN 999 | Когда подпрограмма закончила, если последний рассматриваемый элемент массива пуст, то перейти к 999 (где расположен конец программы). |
190 IF LEFT$(A$(K),2)="\Q" THEN 170 | Если рассматриваемый элемент массива начинается на «\Q», то это вопрос, и нужно продолжить догадки — перейти к строчке 170, которая запускает подпрограмму догадок. |
200 PRINT "IS IT A ";RIGHT$(A$(K),LEN(A$(K))-2); | Печатает «Это (предполагаемое животное)?». Название животного берётся как рассматриваемый элемент массива, минус первые два символа («\A»). |
210 INPUT A$ 220 A$=LEFT$(A$,1) 230 IF LEFT$(A$,1)="Y" THEN PRINT "WHY NOT TRY ANOTHER ANIMAL?": GOTO 120 240 INPUT "THE ANIMAL YOU WERE THINKING OF WAS A ";V$ 250 PRINT "PLEASE TYPE IN A QUESTION THAT WOULD DISTINGUISH A" 260 PRINT V$;" FROM A ";RIGHT$(A$(K),LEN(A$(K))-2) 270 INPUT X$ 280 PRINT "FOR A ";V$;" THE ANSWER WOULD BE "; 290 INPUT A$ 300 A$=LEFT$(A$,1): IF A$<>"Y" AND A$<>"N" THEN 280 310 IF A$="Y" THEN B$="N" 320 IF A$="N" THEN B$="Y" 330 Z1=VAL(A$(0)) 340 A$(0)=STR$(Z1+2) 350 A$(Z1)=A$(K) 360 A$(Z1+1)="\A"+V$ 370 A$(K)="\Q"+X$+"\"+A$+STR$(Z1+1)+"\"+B$+STR$(Z1)+"\" 380 GOTO 120 390 REM SUBROUTINE TO PRINT QUESTIONS 400 Q$=A$(K) 410 FOR Z=3 TO LEN(Q$) 415 IF MID$(Q$,Z,1)<>"\" THEN PRINT MID$(Q$,Z,1);: NEXT Z 420 INPUT C$ 430 C$=LEFT$(C$,1) 440 IF C$<>"Y" AND C$<>"N" THEN 410 450 T$="\"+C$ 455 FOR X=3 TO LEN(Q$)-1 460 IF MID$(Q$,X,2)=T$ THEN 480 470 NEXT X 475 STOP 480 FOR Y=X+1 TO LEN(Q$) 490 IF MID$(Q$,Y,1)="\" THEN 510 500 NEXT Y 505 STOP 510 K=VAL(MID$(Q$,X+2,Y-X-2)) 520 RETURN 530 DATA "4","\QDOES IT SWIM\Y2\N3\","\AFISH","\ABIRD" 600 PRINT:PRINT "ANIMALS I ALREADY KNOW ARE:" 605 X=0 610 FOR I=1 TO 200 620 IF LEFT$(A$(I),2)<>"\A" THEN 650 624 PRINT TAB(15*X); 630 FOR Z=3 TO LEN(A$(I)) 640 IF MID$(A$(I),Z,1)<>"\" THEN PRINT MID$(A$(I),Z,1);: NEXT Z 645 X=X+1: IF X=4 THEN X=0: PRINT 650 NEXT I 660 PRINT 670 PRINT 680 GOTO 120 999 END
История
Бейсик был придуман в 1964 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем, и под их руководством был реализован командой студентов колледжа. Язык был основан частично на Фортране II и частично на Алголе 60. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.
Бейсик был спроектирован так, чтобы студенты могли без затруднений писать программы, используя терминалы с разделением времени. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач, не имея специальной подготовки.
При проектировании языка использовались следующие восемь принципов. Новый язык должен был:
- быть простым в использовании для начинающих;
- быть языком программирования общего назначения;
- предоставлять возможность расширения функциональности, доступную опытным программистам;
- быть интерактивным;
- предоставлять ясные сообщения об ошибках;
- быстро работать на небольших программах;
- не требовать понимания работы аппаратного обеспечения;
- защищать пользователя от операционной системы.
Критика
В пору своего расцвета (1970—1980 годы) Бейсик подвергся жёсткой критике. Помимо констатации очевидных недостатков языка, связанных с синтаксической бедностью ранних вариантов и отсутствием многих признанных и удобных конструкций и механизмов, Бейсик критиковали за то, что его простота и бесструктурность поощряют применение порочных методик разработки и способствуют выработке опасных привычек программирования, которые иногда могут быть уместны при быстром создании малых программ для текущих нужд, но способны привести к краху крупных проектов.
Резко критиковалось повсеместно распространённое начальное обучение программированию, базирующееся на Бейсике. Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание: «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». («Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они умственно изувечены без надежды на восстановление».)[3]
В ответ на критику адепты Бейсика замечают, что критики приписывают языку те негативные стороны, которые следовало бы отнести к его неправильному применению. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного их этих применений данный язык не предназначался; его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Этой задаче язык вполне соответствует.
Примечания
- ↑ Русскоязычное название, использовавшееся ещё в советских компьютерах.
- ↑ Команды Бейсика начинались с номера строки, который определял порядок выполнения, давал возможность перейти к строке по её номеру или заменить её в командной строке, введя новую строчку с тем же номером. Обычно строчки нумеровались кратными десяти, чтобы можно было вставлять новые строчки между ними, не меняя нумерацию остальной программы.
- ↑ How do we tell truths that might hurt?, The threats to computing science
Ссылки
- Бейсик в Википедии
- BASIC Computer Games в библиотеке Atari Archives