GRASS(프로그래밍 언어)

GRASS (programming language)

GRAS(GRAphics Symbiosis System)는 2D 벡터 그래픽 애니메이션을 스크립팅하기 위해 만들어진 프로그래밍 언어입니다.GRASE는 BASIC과 구문이 비슷하지만 시간 경과에 따른 스케일링, 변환 및 회전 등 2D 객체 애니메이션을 지정하기 위한 수많은 명령을 추가했습니다.이러한 기능은 GRAS가 작성된 벡터 일반 3D 그래픽 터미널에서 직접 지원되었습니다.이 영화는 컴퓨터 그래픽의 새로운 매체를 실험하던 예술계에서 빠르게 인기를 끌었고, 래리 쿠바스타워즈(1977년)에서 "죽음의 별을 공격하는 것은 쉽지 않을 것"이라는 원작 애니메이션을 만들 때 사용한 것으로 가장 유명하다.

미드웨이 게임즈와의 파트너십의 일환으로, 이 언어는 미드웨이 Z80에 기반을 둔 Z 박스로 이식되었다.이 기계는 래스터 그래픽과 스프라이트의 형태를 사용했으며, 이를 지원하려면 색상의 애니메이션 변경과 함께 광범위한 변경이 필요했습니다.이 버전은 Zgrass로 알려져 있었다.

역사

잔디

GRAS의 원본 버전은 톰 드판티1974년 오하이오 주립 대학교 박사 [1]학위 논문을 위해 개발한 것입니다.Vector General 3DR 디스플레이[1]구동하는 PDP-11/45 상에서 개발되었습니다.이름에서 알 수 있듯이, 이것은 순전히 벡터 그래픽 머신이었다.GRAS에는 다수의 벡터 그리기 명령어가 포함되어 있으며, 이러한 명령어의 컬렉션을 계층 구조로 정리하여 다양한 애니메이션 효과를 이미지의 "트리" 전체에 동시에 적용할 수 있습니다([1]배열로 저장).

졸업 후, DeFanti는 시카고 서클에 있는 일리노이 대학으로 이사했다.거기서 그는 Dan Sandin과 함께 Circle Graphics Habit(오늘날 EVL)을 결성했습니다.Sandin은 1971년에 대학에 입사해, Sandin 이미지 프로세서(IP)를 구축했습니다.IP는 두 개의 비디오 입력을 가져와 혼합하고 결과를 색칠한 다음 TV 출력을 재생하는 아날로그 컴퓨터였습니다.그는 그것을 Moog [1]신시사이저의 비디오 버전이라고 묘사했다.

DeFanti는 기존 GRASS 시스템을 IP 입력으로 추가하여 1970년대 중반까지 사용된 GRASS/이미지 프로세서를 만들었습니다.시스템을 보다 유용하게 사용하기 위해 DeFanti와 Sandin은 기존의 GRASS 시스템에 모든 종류의 "일회성" 명령어를 추가했지만, 이러한 변경으로 인해 언어는 상당히 특이하게 되었습니다.1977년 Habitat의 또 다른 멤버인 Nola Donato는 GRASS의 많은 제어 구조를 보다 일반적인 형태로 재설계하여 상당히 깨끗한 GRASS3를 [1]만들었다.

Larry Cuba의 Star Wars 작업Vector General 3D 터미널에서 실행되는 GRASS 시스템의 반자동 촬영을 기반으로 합니다.VG3D에는 컴퓨터와 상호 작용하지 않고 실시간으로 기본적인 변환(스케일링, 회전 등)을 수행하는 내부 하드웨어가 있습니다.GRASS 언어와의 의사소통이 훨씬 느려지는 것은 새로운 풍경이 펼쳐지는 시기뿐입니다.영화의 첫 부분은 데스 스타의 회전과 축척이 매우 빠르게 진행되는 것을 보여주지만, 해구 아래로 비행하는 것을 시뮬레이트하는 후반 부분은 GRASS "나무"에서 새로운 풍경을 페이징해야 하기 때문에 이 장면에서 볼 수 있다.이들은 그룹으로 나타나는 것을 볼 수 있다.

Zgrass 및 UV-1

1977년 DeFanti는 Dave Nutting Associates에서 일하는 칩 디자이너인 Jeff Frederiksen을 소개받았다.Nutting은 표준화된 그래픽 드라이버 칩을 만들기 위해 Bally의 비디오 게임 부문인 Midway와 계약을 맺었다.그들은 나중에 Astrocade변할 비디오 게임기뿐만 아니라 미래의 아케이드 게임 대부분에 그것을 사용하려고 의도했다.Midway는 시스템에서 GRASS 언어가 실행되는 것에 매우 관심이 있었고 DeFanti와 계약하여 플랫폼에 이식했습니다.해비타트의 많은 사람들과 Nutting의 몇몇 사람들이 Z Box라고 불리는 이 프로젝트에 참여했다.그 위에서 달리는 GRASS3는 Zgrass[1]되었다.

Z-Box는 원래의 GRASS 시스템과 달리 래스터 그래픽 머신이었기 때문에 GRASS3 스타일은 대부분 Zgrass로 유지되었지만 래스터 이미지 전용 명령어가 다수 추가되었습니다.여기에는 하드웨어에 [1]포함되지 않은 스프라이트를 시뮬레이션하기 위한 광범위한 비트 블록 전송 명령 세트가 포함되어 있습니다.이 작품은 미드웨이에 의해 절대 공개되지 않을 것이지만, 서클은 데이터맥스 UV-1을 기반으로 한 기계를 생산할 것이다.

GRAS의 마지막 버전은 RT/1로, 언어를 디스플레이 모델에서 분리하여 다른 플랫폼으로 이식할 수 있도록 한 GRASS 포트입니다.OpenGL, HP-UX, AIX, Macintosh 및 Amiga사용하는 MS-DOS, Microsoft Windows, SGI 플랫폼용 버전이 존재했습니다.그 언어는 이전 버전과 비슷하기 때문에 이름을 바꾼 이유는 불분명하다.

묘사

이 설명은 오리지널 Bally 매뉴얼과 ACM 설명을 기반으로 합니다.[2]

Zgrass는 표준 BASIC 명령어 세트를 기반으로 대부분의 구문을 사용했습니다.Zgrass가 BASIC과 다른 점은 모든 명령어가 C 프로그래밍 언어와 유사한 함수와 반환된 값이라는 것입니다.명확한 반환값이 없는 경우 함수는 성공 시 1을 반환하고 실패 시 0을 반환할 것으로 예상되었습니다.예를 들어 명령어는PRINT PRINT 10BASIC에서는 불법이지만 Zgrass에서는 이것이 인쇄됩니다.10 1, 1은 초에 의해 반환되는 값입니다.PRINT('10' 문자열이 정상적으로 출력되었습니다.

Zgrass의 프로그램들은 "매크로스"라고 불리며 문자열로 저장되었다.Zgrass가 어떤 문자열이든 프로그램이 되도록 허용했기 때문에 이 두 가지 이상한 점들은 모두 고의적인 것이었다.예를 들어.MYBOX="BOX 0,0,100,100,2"는 Zgrass 코드의 일부를 포함하는 문자열(Microsoft BASIC과 같이 변수에 $는 필요 없음)을 정의합니다.입력만 하면MYBOX이 시점부터 내부 명령어가 실행됩니다.이 기능은 기존의 기능 대신 사용할 수 있습니다.GOSUB명령어는 BASIC에서 제공되지만 불투명한 회선번호가 아닌 알기 쉬운 이름을 사용할 수 있다는 장점이 있습니다.또한 명령어는 메모리에 문자열 형태로 남아 표준 문자열 조작을 사용하여 런타임에 조작할 수 있습니다.

시대의 대부분의 BASIC 인터프리터는 입력 텍스트를 토큰화된 버전으로 변환하여 각 명령어가 단일 숫자(일반적으로 1바이트 길이)로 대체되었습니다.매번 문자열로부터 명령어를 지속적으로 해독할 필요가 없었기 때문에, 이것은 프로그램을 더 빨리 실행할 수 있게 했다.Zgrass는 문자열 기반 매크로를 사용했기 때문에 이를 어렵게 만들었기 때문에 토큰화에 신경 쓰지 않았습니다.대신 특정 매크로에서 사용할 수 있는 컴파일러를 포함시켜 여러 번 속도를 높였습니다.프로그램은 컴파일된 매크로와 컴파일되지 않은 매크로가 혼재되어 있는 경우가 많습니다.

회선번호는 Zgrass에서는 옵션이며, 일반적으로 의 타깃이 되는 회선에만 표시됩니다.GOTO대부분의 BASIC 인터프리터는 코드의 모든 행에 행 번호를 필요로 했습니다만, 이것은 "행 에디터"에서 행 번호를 사용하고 있기 때문입니다.특정 행을 편집할 필요가 있는 경우는, 번호에 의해서만 참조할 수 있었습니다.Zgrass는 이러한 필요성을 없애주는 고급 풀스크린 에디터를 사용했습니다.Zgrass는 모든 문자열이 "줄 번호"로 동작하도록 허용했습니다.GOTO 10그리고.GOTO MARKER둘 다 유효했습니다.

Zgrass에는 이름 없는 브랜치도 포함되어 있습니다.SKIP지정된 수의 행을 전진 또는 후퇴시키는 명령입니다.이것은 Zgrass에서 중요합니다.회선번호는 옵션이며 매크로마다 같은 라벨을 사용할 수 있기 때문입니다.예를 들어, 에 대한 몇 가지 변형이 있습니다.LOOPSTART코드의 많은 부분에서 발견될 가능성이 높기 때문에GOTO LOOPSTART이름이 충돌할 수 있습니다.사용.SKIP이 가능성을 피했다.

그래픽스 언어로서의 본래 목적에 맞게 Zgrass는 간단한 그림을 위한 수많은 명령어를 포함했습니다.Zgrass의 좌표계는 Nutting의 그래픽 칩의 고해상도 모드에서 픽셀당 1개의 포인트가 있어 320×202 그리드를 제공합니다.Astrocade는 설계상 이 칩의 저해상도 모드인 160×101 디스플레이만 사용할 수 있었다.매핑 문제를 피하기 위해 좌표 공간의 영점을 화면 중앙에 배치했습니다.-160~160은 유효한 X 위치이고 -101~101은 유효한 Y 위치입니다.Astrocade에서는 양의 위치만 사용했지만 UV-1에서는 전체 공간을 사용할 수 있었습니다.

Zgrass는 어레이가 그래픽스에서 널리 사용되고 있기 때문에 어레이 기능의 완전한 세트를 추가했습니다.여기에는 디스플레이의 일부를 비트맵으로 배열에 "캡처"할 수 있는 기능이 포함되어 있어 다른 그래픽 항목으로 조작할 수 있습니다.이를 통해 Zgrass는 Nutting 하드웨어가 직접 포함하지 않은 스프라이트와 같은 기능을 언어에 포함시킬 수 있었습니다.Astrocade에 포함되지 않은 또 다른 기능은 합리적인 속도로 어레이를 처리할 수 있다는 것입니다.따라서 UV-1에는 성능을 높이기 위해 Zilog가 제공된 FPU가 포함되어 있습니다.

Zgrass에는 매크로를 정상적으로 실행하거나 "포그라운드" 또는 "백그라운드" 수준에서 실행할 수 있는 3가지 우선순위(레벨이라고 함)가 포함되어 있습니다.이것은 애니메이션 지향 언어에서 매우 유용한 간단한 형태의 멀티태스킹을 추가했다.게임 제작자는 조이스틱 읽기 루틴을 매크로 세트에 배치하여 백그라운드에서 실행할 수 있으며, 그러면 현재 그리기 매크로가 완료될 때마다 조이스틱을 자동으로 읽을 수 있습니다.포그라운드에 배치된 함수는 어느 쪽보다 먼저 실행되었으며 타이머 및 기타 "저지연" 요구에 자주 사용되었습니다.Zgrass에는TIMEOUT타임 베이스로 매크로를 호출하는 함수를 사용하면 타이머의 실장이 매우 쉬워집니다.

또한 Zgrass에는 CP/M을 "포함"하는 일련의 명령어가 포함되어 있어 명령 프롬프트를 종료하지 않고 디스크에 액세스할 수 있습니다.매크로를 이름 있는 파일에 쉽게 저장하고 동일한 방법으로 로드할 수 있으므로 디스크에서 여러 매크로를 하나의 큰 프로그램에 로드하여 프로그램을 구성할 수 있습니다.또한 명령어는 저장될 때마다 자동으로 백업 복사본을 만듭니다.콤팩트 카세트 스토리지에서도 유사한 기능이 지원되었지만 이상하게도 구문은 병렬이 아닙니다. 디스크 명령은 다음과 같은 D-something이었습니다.DPUT테이프 명령어는 T-something이 아닙니다.TPUT뭐랄까... 테이프 같은 거PUTTAPE.

무작위로 선택된 모듈로 구성된 프로그램을 사용하여 Zgrass는 BASIC보다 변수를 더 잘 제어할 수 있어야 했습니다.BASIC에서 모든 변수는 "글로벌"이므로 두 서브루틴이 모두 변수를 사용하는 경우I이것은 루프 인덱스 변수로 매우 일반적으로 사용되며, 그러면 서로의 값을 설정할 수 있으며, 이로 인해 이해하기 어려운 문제가 발생합니다.Zgrass 아래에서 두 개의 모듈을 로드하는 프로그래머는 두 개 모두 사용하는 것을 쉽게 발견할 수 있습니다.I문제가 발생할 수 있습니다.이 문제를 해결하기 위해 Zgrass는 소문자로 명명된 변수를 해당 매크로에 대해서만 로컬로 간주했습니다.I그리고.i글로벌 변수와 로컬 변수가 각각 달랐습니다.이상하게도 언어와 함께 제공되는 예에서는 이 기능이 널리 사용되지 않기 때문에 해당 기능이 존재하는지 모를 수 있는 새로운 프로그래머가 혼란스러울 수 있습니다.

 동기=[신속한 "오프셋이란?"  입력 오프셋  x=-160  =0  포인트 오프셋+x,()*80,3  =+2  한다면 (x=x+1)< >159,건너뛰다. -2] 

이 텍스트는 다음과 같은 새로운 매크로를 만듭니다.SINCURVE간단히 타이핑해서 호출할 수 있는SINCURVE명령 프롬프트 또는 다른 매크로 또는 프로그램에서 사용할 수 있습니다.SINCURVE는 두 개의 로컬 변수를 사용합니다.x그리고.angle글로벌 변수와 함께OFFSET.

PROMPT/INPUT원래 BASIC을 수정한 것입니다.INPUT사용자가 매크로를 호출할 때 명령줄에 입력을 입력해도 입력을 요구하지 않습니다.이 경우 입력SINCURVE프롬프트가 표시되고 프로그램이 입력을 대기하는 반면,SINCURVE 30프롬프트는 건너뛰고 OFFSET은 자동으로 30이 할당됩니다.이를 통해 단일 매크로를 인터랙티브 및 프로그램 내에서 함수로 사용할 수 있습니다.

POINT는 Zgrass 언어에 포함된 여러 그래픽명령어 중 하나의 예입니다. POINT에는 색상과 함께 X 및 Y 위치가 필요합니다.이 예에서는 사용자가 지정한OFFSET화면에서 곡선의 x 위치를 이동하는 동안 Y 위치는 트리거 함수에 의해 제공되며 표시하기에 적합한 크기로 확대됩니다(이 경우 80배).색상은 마지막 입력으로 제공되며, 이 경우 3입니다.UV-1은 컬러 레지스터를 사용했기 때문에 3은 특정 색상을 의미하는 것이 아니라 현재 팔레트에서 선택한 색상을 의미했습니다.

IF역시 주목할 만합니다.증분을 가합니다.(x=x+1)테스트 앞에서는 보통 BASIC에서는 사용할 수 없는 기능입니다.이 경우 IF는 콜을 하도록 지시됩니다.SKIP -2true일 경우, 2행 뒤로 이동하며 대신 사용할 수 있습니다.GOTO회선번호 타겟이 없기 때문에.

메모들

레퍼런스

인용문

참고 문헌

  • DeFanti, Thomas; Fenton, Jay; Donato, Nola (August 1978). "BASIC Zgrass—a sophisticated graphics language for the Bally Home Library Computer". Proceedings of the 5th Annual Conference on Computer Graphics and Interactive Techniques. ACM SIGGRAPH Computer Graphics. 12 (3): 33–37.
  • DeFanti, Thomas (November 1980). "Language Control Structures for Easy Electronic Visualization". BYTE.