GRASS (язык программирования) - GRASS (programming language) - Wikipedia

ТРАВА (Система симбиоза GRAphics) это язык программирования создан по сценарию 2D векторная графика анимации. GRASS был похож на БАЗОВЫЙ в синтаксисе, но добавлены многочисленные инструкции для задания анимации 2D-объекта, включая масштабирование, перемещение и поворот во времени. Эти функции были напрямую поддержаны Вектор General 3D графический терминал GRASS был написан для. Он быстро стал хитом среди художников, которые экспериментировали с новой средой компьютерная графика, и наиболее известен своим использованием Ларри Куба для создания оригинального "атакующего Звезда Смерти будет непросто "анимация в Звездные войны (1977).

В рамках более позднего партнерства с Midway Games, язык был перенесен на Midway Z-80 на базе Z Box. Эта машина использовала растровая графика и форма спрайты, что потребовало обширных изменений для поддержки, а также анимации изменения цвета. Эта версия была известна как ZGrass.

История

ТРАВА

Первоначальная версия GRASS была разработана Том ДеФанти для его 1974 Государственный университет Огайо Кандидат наук. Тезис.[1] Он был разработан на PDP-11 / 45 за рулем Вектор General 3D Дисплей R.[1] Как следует из названия, это был чисто векторная графика машина. GRASS включал в себя ряд команд векторного рисования и мог организовывать их коллекции в иерархию, применяя различные эффекты анимации сразу ко всем «деревьям» изображения (хранящимся в массивах).[1]

После окончания школы ДеФанти перешел в Университет Иллинойса, Чикаго Серкл. Там он присоединился к Дэн Сандин и вместе они образовали Круглая Графика Среда обитания (сегодня известный как Лаборатория электронной визуализации, или EVL). Сандин поступил в университет в 1971 году и построил Обработчик изображений Sandin, или IP. IP был аналоговый компьютер который взял два видеовхода, смешал их, раскрасил результаты, а затем воссоздал ТВ-выход. Он описал это как видеоверсию Синтезатор Moog.[1]

ДеФанти добавил существующую систему GRASS в качестве входа в IP, создав GRASS / Image Processor, который использовался в середине 1970-х годов. Чтобы сделать систему более полезной, ДеФанти и Сандин добавили всевозможные «одноразовые» команды в существующую систему GRASS, но эти изменения также сделали язык значительно более своеобразным. В 1977 году другой член Habitat, Нола Донато, переработал многие структуры управления GRASS в более общие формы, в результате чего GRASS3 стал значительно чище.[1]

Ларри Куба с Звездные войны работа основана на полуавтоматической съемке системы GRASS, работающей на Вектор General 3D Терминал. VG3D имел внутреннее оборудование, которое выполняло основные преобразования - масштабирование, вращение и т. Д. - в реальном времени без взаимодействия с компьютером. Только во время представления нового пейзажа происходит гораздо более медленное общение с языком GRASS. Это видно по последовательности, так как в начальных частях фильма видны Звезда Смерти вращаются и масштабируются очень быстро, в то время как более поздние разделы, имитирующие полет по траншее, требуют, чтобы новые пейзажи были загружены из «деревьев» GRASS. Их можно увидеть группами.

ZGrass и UV-1

В 1977 году ДеФанти познакомился с Джеффом Фредериксеном, разработчиком микросхем, работавшим в Дэйв Наттинг Ассошиэйтс. Компания Nutting заключила контракт с Midway, подразделением Bally, специализирующимся на видеоиграх, на создание стандартизированного чип графического драйвера. Они намеревались использовать его в большинстве своих будущих аркад, а также в игровая приставка они работали над тем, что позже превратится в Astrocade. Midway была очень заинтересована в том, чтобы в их системе работал язык GRASS, и заключила с ДеФанти контракт на перенос его на платформу. Несколько человек в Хабитат, а также некоторые из Наттинга работали над проектом, который они назвали Z Box. Бегущая на нем GRASS3 стала Зграсс.[1]

Z-Box был растровая графика machine, в отличие от исходных систем GRASS, поэтому, хотя большая часть стиля GRASS3 была сохранена в Zgrass, он добавил ряд команд, предназначенных для растровых изображений. Это включало обширный набор передача битового блока команды для моделирования спрайты, чего-то, чего не было в оборудовании[1] Работа никогда не будет выпущена Midway, но Circle будет производить машины на ее основе. Датамакс УФ-1.

Последняя версия GRASS была RT / 1, перенос GRASS на другие платформы, который отделил язык от модели отображения и позволил переносить его на другие платформы. Версии существовали для MS-DOS, Майкрософт Виндоус, SGI платформа с использованием OpenGL, HP-UX, AIX, Macintosh и Amiga.[1] Язык остается аналогичным более ранним версиям, поэтому причина изменения названия неясна.

Описание

Это описание основано на оригинальных руководствах Bally, а также на описании ACM.[2]

Zgrass был основан на стандартном наборе команд BASIC и использовал большую часть его синтаксиса. Отличие Zgrass от BASIC заключалось в том, что все команды на самом деле функции и возвращенные значения, аналогичные Язык программирования C. Если не было очевидного возвращаемого значения, ожидалось, что функция вернет 1 в случае успеха и 0 в случае неудачи. Например, команда ПЕЧАТЬ ПЕЧАТЬ 10 было бы незаконным в BASIC, но в Zgrass это напечатало бы 10 1, где 1 - это значение, возвращаемое вторым РАСПЕЧАТАТЬ, что означает «Я успешно вывел строку '10'».

Программы в Zgrass назывались «макросами» и хранились в виде строк. Обе эти странности были преднамеренными, поскольку Зграсс позволил любой строке стать программой. Например, MYBOX = "КОРОБКА 0,0,100,100,2" определяет строку (нет необходимости в $ для переменной, как в Microsoft BASICs ), содержащий фрагмент кода Zgrass. Просто печатать MYBOX с этого момента будут запускаться команды внутри. Эту функцию можно использовать вместо более традиционных GOSUB команда из BASIC, но имеет дополнительное преимущество в виде четко определенного имени, а не непрозрачного номера строки. Кроме того, команда остается в памяти в виде строки, и ею можно управлять во время выполнения с помощью стандартных строковых операций.

Самый БАЗОВЫЙ переводчики эпохи преобразовал входной текст в токенизированный версия, в которой каждая из команд была заменена одним числом (обычно один байт длинный). Это заставляло программу работать быстрее, потому что ей не приходилось каждый раз постоянно декодировать команды из строк. Использование Zgrass макросов на основе строк затрудняло это, поэтому они не стали беспокоиться о токенизации. Вместо этого они включили компилятор который можно использовать с любым конкретным макросом, многократно ускоряя его. Программы часто состоят из скомпилированных и некомпилированных макросов.

Номера строк были необязательными в Zgrass и обычно появлялись только на строках, которые были целью ИДТИ К. Большинство интерпретаторов BASIC требовали номеров строк для каждой строки кода, но это было связано с их использованием в «редакторе строк» ​​- если вам нужно было отредактировать конкретную строку, единственный способ обратиться к ней - по номеру. Zgrass использовал более продвинутый полноэкранный редактор, который устранил эту необходимость. Zgrass позволяет любой строке выступать в качестве "номера строки", GOTO 10 и НАЙТИ МАРКЕР оба действительны. Zgrass также включил безымянные ветви, используя ПРОПУСКАТЬ инструкция, которая переместится вперед или назад на заданное количество строк.

В соответствии со своей первоначальной целью как язык графики, Zgrass включал множество команд для простого рисования. Система координат Зграсса имела по одной точке на каждый пиксель в режиме высокого разрешения графического чипа Наттинга, давая сетку 320 × 202. Astrocade, по замыслу, мог использовать только режим низкого разрешения этого чипа, дисплей 160 × 101. Чтобы избежать потенциальных проблем с отображением, нулевая точка координатного пространства была помещена в центр экрана. От −160 до 160 были действительными положениями X и от -101 до 101 действительными положениями Y. Для использования на Astrocade вы использовали только положительные местоположения, тогда как на UV-1 было доступно все пространство.

Zgrass добавил довольно полный набор функций массива, так как массивы широко используются в графике. Это включало возможность "захвата" частей дисплея в массив как битовая карта, которым затем можно было управлять как любым другим графическим элементом. Это позволило Zgrass включить в язык спрайт-подобные функции, чего не было в оборудовании Nutting. Еще одна особенность, отсутствующая в Astrocade, заключалась в возможности обработки массивов с любой разумной скоростью, поэтому UV-1 включал поставляемый Zilog FPU для дополнительной производительности.

Зграсс включал три приоритета (называемых уровни), что позволяло запускать макросы в обычном режиме или на уровне «переднего плана» или «фона». Это добавило простую форму многозадачность что было чрезвычайно полезно для языка, ориентированного на анимацию. Авторы игр могли поместить процедуры чтения с помощью джойстика в макрос, настроенный для работы в фоновом режиме, а затем джойстик будет считываться автоматически при завершении текущего макроса рисования. Функции, помещенные на передний план, выполнялись и раньше, и часто использовались для таймеров и других нужд с "низкой задержкой". Zgrass включил Тайм-аут функция, которая будет вызывать макросы на временной основе, что упрощает реализацию таймеров.

Zgrass также включал серию команд, которые «покрывали» CP / M, что позволяло получить доступ к диску без выхода из командной строки. Вы можете легко сохранить макросы в именованные файлы и загрузить их таким же образом, что позволит вам создавать программы, загружая различные макросы с диска в одну большую программу. Команды также автоматически делали резервную копию каждого сохранения. Подобные функции были поддержаны для Компактная кассета хранилище, но, как ни странно, синтаксис не был параллельным: дисковые команды были D-чем-то вроде DPUT, но ленточные команды не были т-что-то вроде TPUT, а скорее что-то-ЛЕНТА, вроде КАРТОЧКА.

С программами, построенными из случайно выбранных модулей, Zgrass должен был лучше контролировать свои переменные, чем BASIC. В BASIC все переменные являются «глобальными», поэтому, если обе подпрограммы используют переменную я (очень часто), тогда они могли устанавливать значения друг друга, что приводило к трудным для отладки проблемам. В Zgrass программист, загружающий два модуля, может легко обнаружить, что оба используют i в качестве счетчика циклов, что может вызвать проблемы. Чтобы решить эту проблему, Зграсс рассмотрел переменные с именами строчная буква буквы должны быть локальными только для этого макроса. Как ни странно, в примерах, предоставленных с языком, эта функция не используется широко, что может сбить с толку новых программистов, которые могут не знать о ее существовании.

Пример

SINCURVE = [ПОДСКАЗАТЬ «ЧТО ТАКОЕ СМЕЩЕНИЕ?» ВВОД СМЕЩЕНИЕx = -160angle = 0 СМЕЩЕНИЕ ТОЧКИ + x, SIN (угол) * 80,3угол = угол + 2IF (x = x + 1) <159, SKIP -2]

Этот текст создает новый макрос с именем SINCURVE который можно вызвать, просто набрав SINCURVE в командную строку или из других макросов или программ. SINCURVE использует две локальные переменные, Икс и угол, а также глобальная переменная, КОМПЕНСИРОВАТЬ.

В ПОДСКАЗКА/ВХОД это модификация оригинального BASIC ВХОД который не будет запрашивать ввод, если пользователь вводит его в командной строке при вызове макроса. В этом случае набрав SINCURVE приведет к появлению приглашения и программе, ожидающей ввода, при вводе SINCURVE 30 запрос пропустит, и СМЕЩЕНИЮ будет автоматически присвоено 30. Это позволяет использовать один макрос как в интерактивном режиме, так и в программе как функцию.

ТОЧКА является примером одной из многих графических команд, включенных в язык Zgrass. ТОЧКА требует расположения X и Y, а также цвета. В этом примере пользователь предоставил КОМПЕНСИРОВАТЬ перемещает положение кривой по оси x на экране, а положение Y задается функция триггера, увеличенный для отображения (в данном случае в 80 раз). Цвет предоставляется в последнем вводе, и в данном случае это 3. UV-1 использует регистры цвета, поэтому 3 подразумевает не конкретный цвет, а цвет, выбранный из текущей палитры.

В ЕСЛИ также примечателен. Он помещает приращение, (х = х + 1), перед тестом, функция, обычно недоступная в BASIC. В этом случае IF получает указание позвонить Пропустить -2 если true, это переместит на две строки назад и может использоваться вместо ИДТИ К, так как целевой номер строки отсутствует.

Примечания

Рекомендации

Цитаты

Библиография

  • ДеФанти, Томас; Фентон, Джей; Донато, Нола (август 1978 г.). «BASIC Zgrass - сложный графический язык для компьютера Bally Home Library». Материалы 5-й ежегодной конференции по компьютерной графике и интерактивным технологиям. ACM SIGGRAPH Компьютерная графика. 12 (3): 33–37.CS1 maint: ref = harv (связь)
  • ДеФанти, Томас (ноябрь 1980 г.). «Структуры языкового контроля для простой электронной визуализации». БАЙТ.CS1 maint: ref = harv (связь)