Warning: include() [function.include]: URL file-access is disabled in the server configuration in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 23

Warning: include(http://altcode.ru/include/style.php) [function.include]: failed to open stream: no suitable wrapper could be found in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 23

Warning: include() [function.include]: Failed opening 'http://altcode.ru/include/style.php' for inclusion (include_path='.:') in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 23

ALTCODE

Программирование - ALTCODE.ru   Все о языках программирования.

Assembler |  C  |  C++ |  Visual C++ |  C++ Builder |  C# |  Pascal |  Delphi |  BASIC |  Visual Basic |  Visual Basic .NET 
Java |  Perl |  Visual FoxPro |  Ruby |  PHP |  MySQL 
 Главная / BASIC

Warning: include() [function.include]: URL file-access is disabled in the server configuration in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 43

Warning: include(http://altcode.ru/include/left_menu.php) [function.include]: failed to open stream: no suitable wrapper could be found in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 43

Warning: include() [function.include]: Failed opening 'http://altcode.ru/include/left_menu.php' for inclusion (include_path='.:') in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 43

BASIC

Бейсик (BASIC — сокращение от англ. Beginner's All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих; англ. basic — основной, базовый) — семейство высокоуровневых языков программирования.
Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Куртом (Thomas E. Kurtz, 1928-) и Джоном Кемени (John G. Kemeny, 1926—1993). Язык предназначался для обучения программированию и получил широкое распространение в виде различных диалектов, прежде всего, как язык для домашних микрокомпьютеров.

Предпосылки

До середины 60-х компьютеры были слишком дорогими машинами, использовавшимися только для особых задач, и выполнявшими только одну задачу за раз (т. н. пакетная обработка).
Языки программирования этой эры, как и компьютеры, на которых они использовались, были разработаны для специфичных задач, таких как научные вычисления. Поскольку машины были дорогими и лишь одна задача выполнялась за раз, то и машинное время было дорого — поэтому скорость выполнения программы стояла на первом месте.
Однако, в течение 60-х цена на компьютеры стала падать так, что даже небольшие компании могли их себе позволить; скорость компьютеров всё увеличивалась и наступило время, когда они стали часто простаивать без задач. Чтобы этого не происходило, стали вводить системы с разделением времени (time-sharing).
В таких системах процессорное время «нарезалось», и все пользователи поочерёдно получали короткие отрезки этого времени. Машины были достаточно быстрыми для того, чтобы в результате каждый пользователь за терминалом чувствовал себя так, будто работает с системой в одиночку. Машина же, в свою очередь, простаивала меньше, поскольку выполняла не одну, а сразу много задач. Разделение времени радикально снижало стоимость машинного времени, поскольку одна машина могла совместно использоваться сотнями пользователей.
В этих условиях — когда мощность стала дёшева и доступна — создатели языков программирования все больше стали задумываться об удобстве написания программ, а не только скорости их выполнения. «Мелкие» (атомарные) операции, выполняемые непосредственно устройствами машины, объединили в более «крупные», высокоуровневые операции и целые конструкции, с которыми человеку куда проще и удобнее работать. Появились языки высокого уровня.

Рождение

Бейсик был придуман в 1963 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Куртцом, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, этот «изначальный» диалект стали называть Dartmouth BASIC.
Бейсик был спроектирован так, чтобы студенты могли писать программы, используя терминалы с разделением времени. Он создавался как решение для проблем, связанных со сложностью более старых языков. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости программ, сколько просто в возможности использовать компьютер для решения своих задач.
При проектировании языка использовались следующие восемь принципов: новый язык должен
быть простым в использовании для начинающих
быть языком программирования общего назначения
предоставлять возможность расширения функциональности, доступную опытным программистам
быть интерактивным
предоставлять ясные сообщения об ошибках
быстро работать на небольших программах
не требовать понимания работы аппаратного обеспечения
защищать пользователя от операционной системы
Язык был основан частично на Фортран II и частично на Алгол-60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык.

Взрывной рост

Несмотря на то что язык уже использовался на нескольких миникомпьютерах, его настоящее распространение началось с его появления на микрокомпьютере Altair 8800. Многие языки программирования были слишком большими чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем как бумажная лента (позднее — аудиокассета) и без подходящего текстового редактора такой небольшой язык как Бейсик был отличной находкой.
В 1975 году Майкрософт (тогда это были лишь двое — Билл Гейтс и Пол Аллен, при участии Монте Давидова) выпустила Altair BASIC. Затем его версии появились на другой платформе под лицензией и скоро в использовании были уже миллионы копий и вариантов; один из вариантов, Applesoft BASIC, стал стандартным языком на Apple II. Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.
В 1979 Майкрософт обсуждала с несколькими поставщиками компьютеров (включая IBM) лицензирование интерпретатора Бейсик на их машинах. Одна из версий (ROM BASIC) была включена в ПЗУ IBM PC — компьютер мог автоматически загружаться в Бейсик. Так как IBM не придавала тогда большого значения персональным компьютерам (основным полем её деятельности были мейнфреймы), то, вопреки своим принципам, она разрешила Microsoft продавать интерпретатор отдельно. Это сделало последнюю пионером в выпуске ПО нового поколения — не привязанного к конкретной аппаратуре и поставляемого отдельно от компьютера.

Зрелость

В этот период было создано несколько новых версий Бейсика. Майкрософт продавала несколько версий Бейсик для MS-DOS/PC-DOS, включая BASICA, GWBASIC (модификация BASICA, не требующая «прошивки» от IBM) и Quick BASIC. Borland, известная своим Turbo Pascal, в 1985 выпустила Turbo BASIC 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC). На домашних компьютерах появились различные версии Бейсика, обычно включающие расширения для работы с графикой, звуком, команды ОС, а также средства структурного программирования. Некоторые другие языки использовали хорошо известный синтаксис Бейсика в качестве основы, на которой строилась совершенно иная система (см. например, GRASS).
Однако, начиная с конца 80-х, новые компьютеры стали намного более сложными и предоставляли возможности (такие как графический интерфейс пользователя), которые делали Бейсик уже не столь удобным для программирования. Бейсик начал сдавать свои позиции, несмотря на то что огромное количество его версий ещё использовалось и продавалось.
Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft. Хотя и трудно согласиться, что этот язык — действительно Бейсик (несмотря на множество привычных ключевых слов), спустя некоторое время он стал одним из наиболее часто используемых языков на платформе Microsoft Windows. Майкрософт создала вариант под названием WordBasic и использовала его в MS Word до появления Word 97. Вариант Visual Basic for Applications (VBA) был встроен в Excel 5.0 в 1993 году, затем в Access 95 в 1995-ом, а после и во все остальные инструменты, входящие в пакет Office — в 1997-ом. Internet Explorer 3.0 и выше, а также Microsoft Outlook включали интерпретатор языка VBScript. В полный вариант пакета OpenOffice.org также включён интерпретатор Бейсика.
Бейсик используется в некоторых моделях программируемых калькуляторов. Например, он встроен в отечественный калькулятор «Электроника МК-85».

Описание языка

Синтаксис языка напоминает Fortran и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования — ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic, а также различных его модификаций (таких как VBA) в языке появились многие другие типы данных, и дополнения типичные для современных языков программирования (например, такие как объектная модель). Объявление переменных не требует специальной секции (в отличие, например, от Паскаля). Объявление переменной — это первое её использование.
Ранние версии бейсика (такие как GWBASIC, QBasic) существенно отличаются от современных диалектов и на сегодня практически не используются.

Ранние версии

В ранних версиях Бейсика была обязательная нумерация строк. Общепринятой была нумерация с шагом 10. Это было связано с тем, что тогда Бейсик не имел полноценного редактора кода. Для вставки новой строки — нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером 25. Типичная строка из программы на бейсике выглядела так:
10 PRINT "Hello, World!"
Номера строк также выполняли роль меток для оператора GOTO. Ранее в Бейсике были допустимы только числовые метки для этого оператора и наличие в каждой строке уникального номера, делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование», потому что программа с частыми переходами GOTO по мнению некоторых напоминала тарелку со спагетти.
В качестве конца оператора применяется перевод строки. Если необходимо в одной строке разместить несколько операторов, нужно разделить их двоеточием. Имена переменных в большинстве диалектов были ограничены тремя символами, что также не способствовало улучшению понимания кода. Для создания переменной со строковым типом, нужно было после имени указать знак доллара ($). Переменная без этого знака — являлась числовой. Было ещё несколько модификаторов, относящихся к числовому типу: знак проценnа (%) — целый тип, восклицательный знак (!) — обычная точность, октоторп (#) — двойная точность (для данных с плавающей точкой, то есть дробей). Числовые модификаторы были введены не во всех версиях.
Выражения сходны с большинством других языков программирования. Присутствуют все базовые управляющие структуры, такие как условный оператор (IF..THEN..ELSE) и циклы (FOR, и цикл с предусловием, WHILE). Использование функций определяемых пользователем (участков кода, для многократного использования) было возможно двумя способами: определяемые функции и подпрограммы.
Подпрограммы — не являлись аналогом функций таких языков как Cи или Паскаль, так как не имели возможности принимать и/или возвращать параметры. Это было возможно только с помощью переменных (все переменные в ранних версиях Бейсика были глобальные). Подпрограммы писались обычно в конце модуля, с нумерацией заведомо большей чем планируемое количество строк (к примеру, нумерация блока подпрограмм могла начинаться с 5000, даже если в программе было пару сотен строк). Подпрограммы не имели заголовков и имен, и ничем не отличались от любого другого участка кода. Вызов подпрограммы осуществлялся с помощью ключевого слова GOSUB <метка>. Это практически клон GOTO, за исключением одного: возврат в точку вызова происходил автоматически, при достижении в подпрограмме ключевого слова RETURN. GOSUB, как и GOTO, — только способствовали плохой структуре кода, так как отследить выполнение программы содержащей большое количество безусловных переходов и подпрограмм, было сложной задачей. Ситуация ухудшалась ещё тем, что опытные программисты писали весь код в виде подпрограмм (что является хорошим стилем и способствует лёгкому сопровождению) и в таком случае, начало программы могло выглядеть примерно так:
30 GOSUB 170: GOSUB 300
40 GOSUB 730: GOSUB 1410: GOSUB 840
50 GOSUB 950
60 IF F$=" " THEN GOSUB 860: GOSUB 380: GOSUB 840: GOTO 50
70 ON VAL(F$) GOTO 80,110,130
80 GOSUB 990: IF T=1 THEN 50
90 GOSUB 860: GOSUB 910: GOSUB 840
100 GOTO 50
110 GOSUB 1000: IF T=1 THEN GOSUB 1080: GOSUB 1120: NG=0: GOTO 40
120 GOSUB 860: GOSUB 900: GOSUB 840: GOTO 50
130 GOSUB 980: IF T=1 THEN 50
140 GOSUB 860: GOSUB 920: GOSUB 840: GOTO 50
Отсутствие возможности давать подпрограммам имена (и вызывать по ним) невозможность передачи параметров, использование только числовых меток — в больших проектах вызывало путаницу в коде и очень затрудняло отладку.
В некоторых диалектах Бейсика имелась возможность загрузить файл с кодом непосредственно при выполнении программы (текущий при этом выгружался) оператором CHAIN. Это была одна из самых полезных возможностей языка, так как она позволяла разбить большой проект на модули, вызывая их в порядке необходимости.
Редактора кода в ранних версиях как такового не было. При запуске интерпретатора Бейсика, запускался диалоговый режим ввода команд. Для работы в этом режиме были предусмотрены специальные команды, которые не являлись операторами самого языка (их нельзя было включить в код программы). Это команды по управлению средой ввода, такие как: LIST <диапазон строк> — вывод листинга программы на экран (LLIST — на принтер), SAVE <имя файла> — сохранение текста программы в файл, LOAD <имя файла> — загрузка кода в память и т. д. Запуск программы, производился вводом команды RUN. В большинстве интерпретаторов бейсика, в нижней части экрана была строка с этими (и другими) командами.
Если команда начиналась с номера строки (метки) она запоминалась в памяти как часть вводимой программы. Если строка оператора вводилась без номера — она выполнялась сразу же, после нажатия клавиши Enter. В качестве первых уроков, обучающимся на бейсике предлагалось поэкспериментировать с таким режимом, когда результат выполнения выражения был виден сразу. Например, если находясь в режиме диалога ввести строку PRINT 2+2 и нажать Enter, на экране отобразиться результат сложения.
Для редактирования уже введённой строки, в большинстве реализаций нужно было перепечатать её полностью. Удаление строк производилось командой DELETE <диапазон строк>. Команда RENUM — позволяла восстановить шаг 10 в нумерации строк. Часто возникала ситуация, что штатного шага 10 для будущих строк не хватало (так как такой шаг позволяет добавить лишь 9 строк между требуемыми) и тогда команда RENUM была необходимой (все строки перенумеровывались с шагом 10, и соответствующим образом корректировались строки с GOTO под новую нумерацию строк).
Для выполнения программы на Бейсике использовалась передача имени файла с кодом программы интерпретатору в командной строке. В этом случае, после загрузки кода команда RUN (начать выполнение программы) вызывалась автоматически.
Фрагмент типичной программы на Бейсике:
10 CLS 'Очистка экрана
20 PRINT "Добро пожаловать!" 'Заголовок в первой строке
30 'Цикл, выводящий линию под заголовком, на всю ширину экрана 
40 FOR I=1 TO 80
50 PRINT "=";
60 NEXT I
65 'Ввод символьных данных от пользователя (комментарий добалвен после ввода нижних строк)
70 INPUT "Имя:  ",N$
80 INPUT "Фамилия: ",S$
90 INPUT "Отчество: ",T$
95 'Вырезаем копию первых символов из имени и отчества
100 N2$=LEFT$(N$,1,1)
110 T2$=LEFT$(T$,1,1)
120 'Выводим результат
130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$"."
140 INPUT "Повторить программу? (Y/N) ",$U
150 IF U$="Y" THEN GOTO 10
160 END
Точка с запятой выполняет функцию подавления перехода на новую строку после оператора PRINT. Ключевое слово END, означающее завершение программы — необязательно, но оно могло бы понадобиться если бы имелась секция подпрограмм.

Поздние версии

С появлением Visual Basic ориентированного на разработку Windows-приложений с графическим интерфейсом пользователя — ситуация намного улучшилась. Бейсик был существенно расширен как язык и необходимость часто использовать GOTO отпала. Если GOTO всё же используется, то теперь нет необходимости давать метки каждой строке и в качестве меток может быть любая константа, а не только целые числа. Подпрограммы с GOSUB — теперь не используются, вызов процедур осуществляется также как и в других языках программирования: по имени функции, с возможностью передачи параметров. Признак типа в именах переменных теперь не является обязательным, но если его указывать — это не будет считаться ошибкой. Практически все недостатки присущие ранним версиям были исправлены и программирование на современных диалектах Бейсика — практически так же удобно и гибко, как и при использовании аналогов (например, таких как Delphi).
Существует множество современных реализаций компилятора Basic, в состав платформы Microsoft .NET входит компилятор Visual Basic .NET. Помимо этого, бейсик широко применяется как основа для различных скриптовых языков (например, написание макросов в пакете Microsoft Office выполняется на специализированном диалекте VBA).

Критика

Бейсик подвергается жёсткой критике за то, что его простота и бесструктурность поощряют порочные методики и привычки программирования, которые могут быть уместны при создании малых программ, но способны привести к краху крупных проектов.
Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание: «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации». Однако, это высказывание цитируется вне контекста, в котором Дейкстра подверг критике и многие другие популярные в то время языки.
Также стоит отметить, что большинство современных диалектов и реализаций Бейсика являются более структурированными и практически не уступают по возможностям таким языкам как C, Pascal и т. п. (например, в FreeBASIC запрещены неявные объявления переменных, операторы GOTO, GOSUB и другие методы, ведущие к плохой структурированности программ.)

Стандарты

ANSI X3.60-1978 «FOR MINIMAL BASIC»
ISO/IEC 6373:1984 «DATA PROCESSING — PROGRAMMING LANGUAGES — MINIMAL BASIC»
ANSI X3.113-1987 «PROGRAMMING LANGUAGES FULL BASIC»
ISO/IEC 10279:1991 «INFORMATION TECHNOLOGY — PROGRAMMING LANGUAGES — FULL BASIC»
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»


Warning: include() [function.include]: URL file-access is disabled in the server configuration in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 54

Warning: include(http://altcode.ru/include/banners.php) [function.include]: failed to open stream: no suitable wrapper could be found in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 54

Warning: include() [function.include]: Failed opening 'http://altcode.ru/include/banners.php' for inclusion (include_path='.:') in /usr/home/virtwww/w_altcode-ru_ffd5b838/http/basic/index.php on line 54