GRASS (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
IARBĂ
limbaj de programare
Data de origine 1974
Paradigme programare procedurală
Influențată de DE BAZĂ

IARBĂ ( acronim pentru phics GRA S ymbiosis S ystem) a fost un limbaj de programare creat de Thomas A. Defanti pentru a crea animații în grafică vectorială . GRASS avea o sintaxă foarte asemănătoare cu cea a BASIC, dar a adăugat numeroase instrucțiuni specifice pentru animație, cum ar fi cele pentru scalare, traducere, rotire și schimbarea culorii obiectelor, devenind rapid răspândită în rândul artiștilor de grafică pe computer .

Rămâne faimos pentru că a fost folosit de Larry Cuba pentru a crea secvența animată a atacului asupra Stelei Morții prezentată piloților Alianței Rebelilor în filmul Războiul stelelor .

O versiune mai recentă, adaptată pentru a susține grafica raster , a fost numită Zgrass .

Istorie

Versiunea originală a GRASS a fost dezvoltată în 1973 de Tom DeFanti ca teză pentru doctoratul său de la Universitatea de Stat din Ohio pe un PDP-11 /45 care conducea un afișaj Vector General 3DR care, după cum sugerează și numele, gestiona doar grafica vectorială . GRASS a inclus o serie de comenzi de desenare vectorială și ar putea organiza colecțiile de comenzi într-o ierarhie (stocată în vectori ), astfel încât diferite efecte animate să poată fi aplicate simultan întregului „copac” al imaginii. Aceasta a fost versiunea folosită de Larry Cuba pentru a crea celebra animație a atacului asupra Stelei Morții în filmul Star Wars [1] : observând fluxul de imagini, puteți vedea copacii obiectelor „sări” în imagine în momente diferite.

După absolvire, DeFanti s-a mutat la Universitatea din Illinois unde a format, împreună cu Dan Sandin , grupul de cercetare Circle Graphics Habitat (cunoscut acum ca Laboratorul de Vizualizare Electronică , EVL). Sandin ajunsese la universitate în 1971 și începuse să construiască echivalentul video al sintetizatorului audio Moog : proiectul său era cunoscut sub numele de Sandin Image Processor , sau IP. IP-ul a fost un computer analogic care a acceptat 2 semnale video în intrare, le-a amestecat, a colorat rezultatul și apoi a recreat semnalul TV la ieșire.

IARBA3

DeFanti a adăugat sistemul GRASS ca sursă IP, creând astfel GRASS / Image Processor , care a fost folosit până la mijlocul anilor 1970 . Pentru a face sistemul mai puternic, DeFanti și Sandin au adăugat tot felul de comenzi la sistemul GRASS, dar au făcut ca limbajul să fie idiosincratic. În 1977, Nola Donato , care s-a alăturat recent grupului, a reproiectat multe dintre structurile de control GRASS, reducându-le la forme mai generale: rezultatul a fost un limbaj mult mai clar, numit GRASS3 .

Z Box și Zgrass

În același an, DeFanti i-a fost prezentat lui Jeff Frederiksen , un designer de cipuri care a lucrat la Dave Nutting Associates . Nutting fusese contactat de Midway , divizia de jocuri video a Bally Technologies , pentru a crea un sistem grafic generalizat care să fie utilizat pe viitorele lor arcade, dar și pe o consolă nou dezvoltată, ceea ce va fi cunoscut ulterior sub numele de Astrocade . Midway a fost interesat de posibilitatea de a rula limbajul GRASS pe sistemele lor și a contactat DeFanti pentru a-l putea adapta la platforma lor. Membrii Habitat au început apoi să lucreze împreună cu inginerii Nutting la acest proiect, care a fost numit Z Box . Limbajul GRASS3 a fost revizuit pentru a-l adapta la noua platformă devenind Zgrass .

Cu toate acestea, sistemul creat nu a fost niciodată distribuit de Midway, deoarece compania-mamă Bally și-a pierdut interesul de a urmări piața jocurilor video și a decis să vândă toate activitățile din sector înainte ca Z Box să fie finalizată. DeFanti și colegii săi și-au continuat dezvoltarea în mod independent și au produs câteva mașini bazate pe această tehnologie, care au fost apoi comercializate sub numele de Datamax UV-1 .

Spre deosebire de sistemul original GRASS, Z Box a fost un dispozitiv bazat pe grafică raster : din acest motiv, Zgrass, păstrând în același timp majoritatea comenzilor GRASS3, a adăugat multe noi, dedicate în mod expres manipulării imaginilor de tip raster. Noile comenzi au inclus un set decent de comenzi pentru transferul blocurilor de biți pentru a simula sprite , pe care hardware-ul nu le-a inclus.

RT / 1

Cea mai recentă versiune a GRASS a fost RT / 1 , o versiune a limbajului fără legătură cu hardware-ul pe care a rulat, adaptată pentru a rula pe diferite platforme: versiunile au fost făcute pentru DOS , pentru Windows , pentru platforma SGI (pentru a utiliza OpenGL ), pentru HP-UX , pentru AIX , pentru Macintosh și pentru Amiga . Limbajul a rămas similar cu cel al primelor versiuni, deci nu este clar motivul schimbării numelui.

Descriere

Zgrass s-a bazat pe un set standard de comenzi BASIC, din care a folosit și o mulțime de sintaxă. Spre deosebire de BASIC, totuși, Zgrass a tratat toate comenzile ca funcții care au returnat o valoare, similară cu limbajul C. Dacă nu a existat o valoare explicită de returnat, s-a presupus că funcția va returna 1 dacă va avea succes și 0 dacă nu. De exemplu, comanda PRINT PRINT 10 , care în BASIC nu ar fi legală, în Zgrass a returnat 10 1 , cu valoarea „1” tipărită de al doilea PRINT indicând „Am imprimat cu succes șirul '10'”.

Programele din Zgrass au fost identificate ca „macrocomenzi” și stocate în șiruri. Acest mod de manipulare a codului a fost destinat, deoarece Zgrass a permis oricărui șir să devină un program. De exemplu, MYBOX="BOX 0,0,100,100,2" definit un șir (nu a fost necesar, ca în BASIC, să se utilizeze caracterul "$" din numele șirului) care conține o porțiune de cod Zgrass. Prin simpla tastare MYBOX , sistemul a executat comenzile conținute în șir la punctul de apel. Această caracteristică ar putea fi utilizată în locul comenzii BASIC GOSUB mai tradiționale, cu avantajul de a avea un nume bine definit în locul unui număr de linie generic. Un alt avantaj a fost că comanda a rămas în continuare un șir, deci ar putea fi manipulată în timpul rulării cu operațiuni normale de șir.

Mulți interpreți BASIC ai vremii au convertit textul introdus într-o versiune specială „tokenizată” în care fiecare comandă a fost înlocuită cu un singur număr, numit „token” (în general cu un octet lung). Acest lucru a permis interpretului să ruleze programul mai repede, deoarece nu a trebuit să decodeze comenzile de fiecare dată începând de la textul introdus. Modul în care Zgrass a folosit macro-urile bazate pe șiruri a făcut totuși dificilă gestionarea acestei metode, astfel încât s-a ales să nu implementeze tokenizarea. În schimb, a fost inclus un compilator care ar putea fi utilizat cu orice macro, accelerând mult execuția programului: acestea au constat adesea dintr-un amestec de macro-uri compilate și necompilate.

Numerele de linie au fost opționale și, în general, au apărut numai pe liniile care au primit un GOTO . Mulți interpreți BASIC au cerut ca fiecare linie de cod să fie numerotată, deoarece editorul lor de cod a folosit acel număr pentru a determina ce linie să se schimbe. Zgrass a folosit în schimb un editor pe ecran complet mult mai sofisticat, care a eliminat nevoia de a recurge la numerotarea liniilor (așa cum se întâmplă în True BASIC ). Zgrass a permis oricărui șir să acționeze ca un "număr de linie", astfel încât comenzile GOTO 10 și GOTO MARKER erau valabile. Zgrass a acceptat, de asemenea, omiterea cu comanda SKIP , care a mutat execuția programului înapoi sau înainte un anumit număr de linii.

Având în vedere natura sa de limbaj orientat către grafică, Zgrass a inclus câteva comenzi de bază pentru designul grafic. Sistemul de coordonate al lui Zgrass s-a bazat pe cel al cipului grafic proiectat de Nutting, compus dintr-o grilă de 320 × 204 pixeli: în schimb Astrocade, datorită cantității limitate de RAM, a suportat o rezoluție de 160 × 102 pixeli. Pentru a evita potențialele probleme de mapare, punctul zero al sistemului de coordonate a fost plasat în centrul ecranului, astfel încât intervalul de coordonate valabil a fost -160 până la 160 pentru axa X și -102 până la 102 pentru axa Y Pe Astrocade doar valori pozitive au fost folosite în timp ce pe UV-1 era disponibil tot spațiul de coordonate.

Zgrass a integrat un set destul de bogat de funcții pentru manipularea matricelor, o componentă utilizată pe scară largă în grafică. Aceste funcții le-au inclus pe cele de „captare” a porțiunilor ecranului într-o matrice sub formă de bitmap , care ar putea fi apoi manipulate ca orice alt obiect grafic. Acest lucru a permis Zgrass să simuleze caracteristicile oferite de sprite, pe care hardware-ul dezvoltat de Nutting nu le includea, folosind caracteristicile limbajului. O altă caracteristică pe care hardware-ul dezvoltat pentru Astrocade nu a implementat-o ​​a fost capacitatea de a procesa matrice la o viteză foarte mică, astfel încât unitatea UV-1 a fost echipată cu un FPU Zilog pentru performanțe sporite.

Zgrass a inclus „ niveluri ”, 3 priorități de proces diferite care au permis macro-urilor să ruleze normal, în „fundal” (cu cea mai mică prioritate) sau în „prim-plan” (cu cea mai mare prioritate). Nivelurile au adăugat o formă simplă de multitasking, care a fost extrem de utilă într-un limbaj conceput pentru animație: dezvoltatorii de jocuri puteau introduce rutine de manipulare a joystick-ului în stratul de fundal conștienți de faptul că erau executate automat în timp ce rutinele principale desenau jocul. Funcțiile inserate în stratul de prim-plan au rulat înaintea celorlalte și au fost adesea folosite pentru a gestiona cronometre și alte sarcini de „latență scăzută”. Zgrass a inclus o funcție numită TIMEOUT care a numit macrocomenzi la intervale de timp prestabilite, permițând cronometrelor să fie implementate într-un mod foarte simplu.

Zgrass a inclus o serie de comenzi împrumutate de la CP / M datorită cărora a fost posibil să accesați discul fără a reveni la promptul de comandă : utilizatorul putea salva macrocomenzile din fișiere sau le poate încărca din acestea, având astfel posibilitatea de a creați programe încărcând mai multe macrocomenzi de pe disc într-un singur program mare. La salvare, o salvare de rezervă a fost întotdeauna efectuată automat. Limbajul a acceptat și accesul la benzile magnetice , dar, curios, sintaxa a variat: comenzile pentru disc au început cu litera „D”, de exemplu DPUT , în timp ce cele pentru bandă s-au încheiat cu sufixul „TAPE”, de exemplu PUTTAPE (motivul acestei diferențe este neclar deoarece aceeași comandă ar fi putut fi denumită TPUT )

Datorită faptului că programele ar putea fi construite din orice tip de macro încărcat de pe disc, Zgrass avea nevoie de un control mai bun asupra variabilelor decât BASIC: de fapt, în ea, toate variabilele sunt „globale”, deci dacă 2 sub-rutine folosesc ambele variabile i (caz foarte obișnuit) fiecare poate seta valoarea variabilei celeilalte, făcând orice depanare foarte dificilă. Cu Zgrass, dacă un programator a încărcat 2 macro-uri care conțin ambele o buclă bazată pe o variabilă numită „i”, problemele ar putea fi foarte complicate de rezolvat. Pentru a remedia această situație dezvoltatorii au decis să indice în minusculă variabilele locale numai macro-ului.

Exemplu

 SINCURVE = [PROMPT "CE ESTE OFFSETUL?"
OFFSET DE INTRARE
x = -160
unghi = 0
POINT OFFSET + x, SIN (unghi) * 80.3
unghiul = unghiul + 2
IF (x = x + 1) <159, SKIP -2]

Acest cod creează o nouă macro numită SINCURVE care poate fi apelată pur și simplu cu SINCURVE , SINCURVE la promptul de comandă sau inserată în alte macrocomenzi sau alte programe. SINCURVE folosește 2 variabile locale, x și unghi , și 1 variabilă globală, OFFSET .

PROMPT / INPUT constructul este o modificare a BASIC original , INPUT , care nu cere utilizatorului să tastați valorile necesare în cazul în care acestea sunt introduse împreună cu numele macro atunci când este invocat de comanda prompt. În acest caz, pur și simplu tastând SINCURVE va rezulta apariția mesajului de solicitare a valorii, în timp ce scrieți SINCURVE 30 interpretul va sări peste cererea promptă, iar valoarea 30 va fi atribuită automat OFFSET. Datorită acestui fapt, o singură macro ar putea fi utilizată atât interactiv, cât și în cadrul unui program ca funcție normală.

POINT este un exemplu al uneia dintre numeroasele comenzi grafice incluse în limbajul Zgrass. POINT necesită ca valori coordonatele X și Y în care să deseneze un punct și culoarea acestuia. În exemplu, coordonata X este construită prin aplicarea la o valoare fixă ​​a deplasării transmise de utilizator prin parametrul OFFSET în timp ce coordonata Y este calculată cu o funcție trigonometrică , a cărei valoare este mărită pentru a fi vizibilă pe ecran (în de exemplu, de 80 de ori). Culoarea a trecut cu ultima valoare, în acest caz 3. UV-1 folosit se înregistrează pentru culori, astfel încât valoarea „3” nu se referea la o anumită culoare, ci a instruit sistemul să utilizeze a treia nuanță setată de utilizator.

Ultima linie este interesantă. Structura de control introdusă cu IF are un increment, (x=x+1) , înainte de testul real, o caracteristică care nu este disponibilă în mod normal în BASIC. În acest caz, dacă testul este adevărat (prin urmare, dacă x, după increment, este mai mic de 159), atunci fluxul de execuție revine cu 2 linii înapoi cu comanda SKIP -2 , care funcționează în locul comenzii GOTO .

Notă

  1. ^ Terrence Masson: CG 101: A Computer Graphics Industry Reference , New Riders, pp. 410-412 (1999) ISBN 0-7357-0046-X

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT