APL (programski jezik)

Из Википедије, слободне енциклопедије
Ed NL icon.png
Овај чланак је део пројекта семинарских радова на Математичком факултету у Београду.
Датум уноса: март—мај 2016.
Википедијанци: Ова група студената ће уређивати у ГИП-у и молимо вас да не пребацујете овај чланак у друге именске просторе Википедије.
Позивамо вас да помогнете студентима при уређивању и допринесете да њихови уноси буду што квалитетнији.
APL
Originalni naziv енгл. APL (A Programming language)
Model структурирани, Funkcionalno programiranje, Modularno programiranje
Pojavio se 1964.
Autor(i) Kenneth E. Iverson
Dizajner(i) Kenneth E. Iverson
Uticaji matematička notacija
Uticao na MATLAB, Go, J, K, Математикu, PPL, Q, S, SAC


APL (skraćenica izvedena prema knjizi engl. A Programming Language)[1] je programski jezik razvijen 1960-ih od strane Кеnet J. Ajverson-a. Glavni tip podatak sa kojim se barata u APL-u su višedimenzioni nizovi. Koristi veliki spektar grafičkih simbola za predstavljanje funkcija i operatora, što je dovelo do veoma konciznog koda. Imao je značajan uticaj na razvoj koncepta modeliranja, tabela, funkcionalnog programiranja [2] i raznih matematičkih paketa. Takođe je inspirisao razvoj nekoliko drugih programskih jezika, a i danas se koristi za razvoj određenih aplikacija.

Istorijat[уреди]

Matematička notacija za rad sa nizovima koja je narasla u APL programski jezik razvijana je od strane Кеnet Ј. Ајverson-a na Harvard univerzutetu od 1957. a objavljena u njegovoj knjizi A Programming language 1962. godine. U predgovoru te knjige piše:Primenjena matematika se uglavnom bavi dizajnom i analizom eksplicitnih postupaka za izračunavanje tačne ili približne vrednosti različitih funkcija. Takve eksplicitne procedure nazivaju se algoritmi ili programi.

Godine 1960. počeo je da radi za IBM i u saradnji sa Adinom Falkofom napravio je APL, na osnovu notacije koju je razvio. Ova notacija je korišćena u IBM-u za kratke istraživačke izveštaje o računarskim sistemima kao što su Burroughs B5000 (o njegovim stek mehanizmu).

Godine 1963. Herbert Helerman je radeći na IBM institutu za istraživanje sistema implementirao deo ove notacije na IBM-ov kompjuter IBM 1620, a to je korišćeno od strane učenika na specijalnom kursu u srednjoj školi. Učenici su testirali svoj kod u Helerman-ovoj laboratoriji. Ova implementacija dela notacije APL-a je nazvana PAT(Personalizovani array prevodilac)[3].

Iste godine Falkof, Ajverson i Edvard H. Susengut (engl. Edward H. Sussenguth) (svi radili u IBM-u) koristili su ovu notaciju za formalni opis arhitekture i funkcionalnosti IBM System/360[4] mejnfrejm računara, što je objavljeno 1964. godine. Nakon sto je ovo objavljeno, tim je usmerio svu svoju pažnju na implementaciju ove notacije na kompjuterski sistem. Jedan od motiva za ovaj pravac implementacije bio je i interes Džona L. Lorensa-a (engl. John L. Lawrence) koji je imao zaduženja u jednom udruženju koje se bavilo obrazovanjem, a koje je kupio IBM 1964. godine. Lorens je pitao Ajversona i njegovu grupu za pomoć pri korišćenju programskih jezika kao sredstva za razvoj i upotrebu računara u obrazovanju.[5]

IBM kugla (jedan OCR) sa APL karakterima, 2 евра Novčić radi upoređivanja

Nakon što su se Lorens M. Brid i Filip S. Abrams sa Stanford univerziteta priključili timu u IBM-u, oni su nastavili svoj primarni rad na implementaciji programiranoj u Fortran-u IV za deo notacije, koji je bio urađen za IBM-ov kompjuter IBM 7090 koji je radio pod IBSYS operativnim sistemom. Ovaj posao bio je završen krajem 1965. i kasnije je bio poznat pod imenom IVSYS(engl. Iverson System). Kao Helerman-ov PAT sistem ranije, ova implmentacije nije uključivala APL skup karaktera, ali je koristila specijalne rezervisane reči na engleskom jeziku za funkcije i operatore. Sistem je kasnije adaptiran na sistem deljenja vremena (engl. Time-sharing sistem) i od novembra 1966. godine bio je reprogramiran za IBM System/360 Model 50, kompjuter koji je radio u režimu deljenja vremena i bio korišćen unutar IBM-a.[6]


Ključna stvar za efektivno korišćenje APL-a, pre široko rasprostranjene upotrebe CRT-terminala, bio je razvoj IBM Selectric pisaće mašine sa zamenljivim kuglama i svim APL karakterima na njima. Ovi karakteri mogu da se postave na tastaturu preko standardnih karaktera i da se vidi koji se karakter dobije pritiskom na koji taster. Po prvi put su programeri mogli da koriste prave APL karaktere iz Ajversonove notacije a ne nezgodne engleske ključne reči koje su ih predstavljale. Ajverson navodi Falkofa kao inspiraciju da uvede u upotrebu IBM Selectric kuglu za kucanje.[7]

Tastatura sa APL karakterima na tasterima

IBM je bio prvenstveno odgovoran za uvodjenje APL-a na tržište. APL je bio dostupan 1967. za IBM 1130 kao APL/1130. APL je dobio svoje uporište na mejnfrejm sistemima deljenja vremena od kraja 1960-ih do početka 1980-ih. Nešto kasnije, odgovarajuće rešenje hardvera je postalo dostupno na tržištu, pa su sredinom i krajem 1980-ih mnogi korisnici preselili svoje aplikacije na okruženje personalnih računara.

1973. godine IBM je objavio APL.SV koji je bio naslednik istog proizvoda, ali koji je ponudio zajedničke promenljive kao sredstvo za pristup objektima van APL sistema, kao što su datoteke operativnih sistema. Sredinom 1970-ih IBM mejnfrejm interpretator je čak prilagođen za upotrebu na IBM 5100 stonom računaru, koji je imao mali CRT i APL tastaturu, kada je većina drugih malih računara toga vremena samo obezbeđivala osnovnu.

1973—1974. godine Dr. Patrik E. Hagerti (engl. Patrick E. Hagerty) usmerava implementaciju APL interpretatora univerziteta Merilend na Sparry Univac 1100/2200series mejnfrejm kompjuter. U to vreme Sparry nije imao ništa. Godine 1974. student Alen Stebens (engl. Alan Stebbens) je dobio zadatak da implementira internu funkciju.

Nekoliko tajmšering firmi je nastalo 1960-ih i 1970-ih i one su prodavale APL usluge koristeći modifikovanu verziju IBM APL\360 interpretatora.U Severnoj Americi poznatiji su: I. P. Sharp Associates, STSC, Time Sharing Resources (TSR) i The Computer Company (TCC) i drugi.[8]

APL je bio dostupan kako komercijalnom tržištu, tako i preko informacionog centra za potrošače. Sa prvim dolaskom jeftinih mejnfrejm računara, kao što su IBM 4300 i kasnije PC, APL se razvijao.

Šarp APL (engl. Sharp APL) je napredna verzija APL implementacije sa mnogo jezičkih ekstenzija, kao i paketa (sposobnost da stavi jedan ili više objekata u jednu promenljivu, sistem datoteka, ugnježdeni nizovi, deljene promenljive itd.). APL prevodioci su bili dostupni od drugih mejnfrejm i mini računara, kako što su Burroughs, CDC, Data General, DEC, Harris, Hewlett-Packard, Siemens AG, Xerox i drugi.

Godine 1979. Ajverson je dobio Tjuringovu nagradu za svoj rad na APL-u.

Dodaci[уреди]

Mnoge implementacije APL-a, od APLX, Dyalog-a i drugih, uključuju dodatke za objektno-orjentisano programiranje, podržavaju .NET , XML, primitivne konverzije nizova, grafiku, interfejse operativnih sistema i lambda izraza.

Dizajn[уреди]

Za razliku od tradicionalno strukturiranih programskih jezika, APL kod je obično strukturiran kao niz operatora[9], unarnih i binarnih funkcija, koje se primenjuju na nizove. APL ima mnogo nestandardnih primitivnih funkcija i operatora koji su označeni jednim ili kombinacijom nekoliko simbola. Svi ovi imaju isti prioritet i desnu asocijativnost, što znači da se APL kod čita zdesna na levo.

Rane implementacije nisu imale strukturu kontrole toka, kao što su "do", "while" i "if-then-else" konstrukciju. Umesto toga one su koristile operacije nad listama, gde se cela operacija može zapisati u jednoj liniji. Novije implementacije APL-a uključuju strukture kontrole toka, tako da se podaci i kontrola toka programa mogu jasno razdvojiti.

U radnom prostoru korisnik može definisati programe i podatke, ali vrednosti podataka postoje i van programa i korisnik može da ih koristi bez da piše kod. U primerima ispod APL prvo ispiše šest belilna dok čeka unos korisnika. Izlaz počinje u prvoj kolini. Korisnik može da sačuva radni prostor sa svim vrednostima, programima i statusom izvršavanja.

      n  4 5 6 7
Dodeljuje vektor vrednosti (4, 5, 6 ,7) promenljivoj n, operacija za kreiranje nizova.
      n 
4 5 6 7
Prikazuje sadržaj n, trenutno niza ili vektora.
      n+4
8 9 10 11
4 se dodaje na sve elemente vektora n, kreirajući vektor dužine 4 (8, 9, 10, 11).
      +/n
22
APL prikazuje sumu komponenti vektora n, npr. 22=(4+5+6+7), koristeći veoma kompaktnu notaciju.
      m  +/(3+⍳4)
      m
22
Ove operacije mogu se izvesti i jednom jedinom naredbom.

APL je poznat po tome što koristi skup ne-ASCII karaktera. APL omogućava kompaktnu formulaciju algoritma. U gotovo svakoj verziji APL-a, teoretski je moguće napisati svaku funkciju jednim izrazom, tj. u jednoj liniji koda.

Zbog neobičnog skupa karaktera mnogi programeri koriste posebne tastature sa APL karakterima na tasterima za pisanje APL kodova.[10] Iako postoje različiti načini da se APL kod napiše samo korišćenjem ASCII karaktera, to se u praksi skoro nikada ne radi. Većina novijih implementacija koristi standardne rasporede na tastaturi, sa posebnim metodama za pristup ne-ASCII karakterima. APL font je karakterističan sa velikim italik karakterima, uspravnim brojevima i simbolima. Većina prevodilaca i dalje prikazuje APL skup karaktera u prilagođenom fontu.

Zagovornici APL-a tvrde da se takozvani "write-only code" (loše napisan i gotovo neshvatljiv kod) može skoro uvek pripisati lošem programiranju ili početničkoj grešci i da se može desiti u bilo kom programskom jeziku. Takođe kažu da su mnogo produktivniji sa APL-om nego sa konvencionalnim programskim jezicima, kao i da se projekti mogu realizovati sa daleko manje programera i za daleko manje vremena.

APL je pogodan i za razvijanje kompleksnog softvera, jer broj linija koda može drastično da se smanji. Mnogi ljubitelji APL-a takođe smatraju standardne jezike kao što su COBOL ili Јаvа dosadnim.

Izvršavanje[уреди]

APL je pogodan jezik za paralelizaciju.[11]

Interpretatori[уреди]

APL Next(pre APL2000) nudi napredni APL interpretator koji radi pod Linuksom, Uniksom(engl. Unix) i Vindousom. Ima napredni APL sistem i predstavlja trenutni nivo razvoja APL jezika.

Dyalog APL je napredni APL interpreter koji radi pod AIX-om, Linuksom, Mac OS-om, i Majkrosoftovim Vindousom.[12] Dyalog ima dodatke APL jeziku koji koriste nove objektno-orjentisane mogućnosti, brojna poboljšanja jezika, korišćenje prostora imena i druge. Za Vindous platformu Dyalog APL je tesno povezan sa .NET platformom, a postoji i određena interpretacija za Majkrosoft Vižual Studio (engl. Microsoft Visual Studio) razvojnom platformom.

IBM nudi svoju verziju IBM APL2 za IBM AIX, Linuks, Sun Solaris i Vindous sistem. Ovaj proizvod je naslednik APL2 ponuđenog za IBM mejnfrejm računare. IBM APL2 je najverovatnije najuticajniji APL sistem.

NARS2000 je open-source APL interpretator napisan od strane Boba Smita, poznatog APL programera. Sadrži nove tipove podataka, radi primarno pod Vindousom(32-bitna i 64-bitna verzija), a radi i pod Linuksom i Epl Mac OS-om (engl. Apple Mac OS) sa Wine-om.

Micro APL Limited nudi APLX, potpuno funkcionalan 64-bitni prevodilac za Linuks, Majkrosoft Vindous i Mac OS sistem. Jezgro jezika je po uzoru na IBM-ov APL2 sa brojnim poboljšanjima. APLX je usko povezan sa .NET , javom, R-om i drugima.

Open APL je open-source implementacija APL-a objavljena od strane Branka Bratkovića. Baziran je na kodu Kena Tompsona iz Belovih laboratorija, a i na osnovu doprinosa drugih ljudi koji su u implementaciji učestvovali. Licenciran je od strane GNU General javne licence i radi pod Uniks sistemima uključujući Linuks sa x86 SPARC i drugim procesorima.

GNU APL je implementacija ISO standarda 13751 i stoga je sličan APL2. Radi na GNU/Linuksu i Vindousu koristeći Cygwin. Interno koristi UNICODE. GNU APL je napisao Jirgen Sauerman (Jürgen Sauermann).

Kompajleri[уреди]

APL programi se obično interpretiraju, a ređe kompajliraju. Većina APL kompajlera prevodi kod na neki jezik nižeg nivoa, kao što je C. O kompilaciji APL jezika se često raspravljalo na konferencijama. Iako su neki od novijih dodataka, kao što su ugnježdeni nizovi, učinili jezik težim za kompajliranje, ideja o APL kompajlerima se i danas razvija.

U prošlosti APL kompilacija je posmatrana kao sredstvo za postizanje brzine pri izvršavanju u poređenju sa ostalim mejnfrejm jezicima, posebno na mejnfrejm računarima. Nekoliko APL kompajlera je doživelo neki uspeh iako je malo napora uloženo da APL usavrši kompilaciju u mašinski kod.

Prelazak sa jednog APL prevodioca na drugi zahtevaće određene promene u sadržaju APL programa. U zavisnosti od kompajlera može biti potrebna deklaracija promenljivih, određene funkcije treba ukloniti, tj. kod očistiti na neki način.

Komercijalni prevodilac je izbacio na tržište STSC sredinom 1980-ih kao dodatak za IBM VSAPL program. Za razliku od modernih kompajlera ovaj daje mašinski kod koji se može izvršiti samo u okruženju prevodioca.

Knjigu "APL Compiler" napisao je Timoti Bad (engl. Timothy Budd). Ova knjiga detaljno opisuje konstrukciju APL prevodioca pisanog u C-u koji obavlja i određene optimizacije. Prevođenjem se dobija C-kod koji se zatim može kompajlirati i izvršiti van APL radnog prostora.

Burroughs/Unisys APLB interpretator (1982) je bio prvi kompilator koji je koristio postepenu kompilaciju kako bi dobio kod za APL specifičnu virtuelnu mašinu. APL u C# prevodilac je dobijen od Causeway grafičkog sistema. Ovaj proizvod je bio dizajniran da dozvoli APL kodu da se prevede na ekvivalentan C# kod i da se zatim izvršava van APL okruženja. Causeway kompajler zahteva rantajm (engl. run-time) biblioteku funkcija nad nizovima.

Tehnologije[уреди]

APL pravi jasnu razliku između funkcija i operatora.[13] Funkcije koriste nizove (promenljive, konstante ili izraze) kao argumente i vraćaju nizove kao rezultat. Operatori (kao funkcije višeg reda) uzimaju funkcije ili nizove kao argumente, a vraćaju funkcije. APL takođe prepoznaje ugrađene funkcije , predstavljene jednim simbolom ili fiksnom kombinacijom simbola, kao primitivne tipove. Većina primitivnih tipova su funkcije ili operatori. Pisanje APL koda je uglavnom pisanje ne-primitivnih funkcija i (u nekim verzijama APL-a) operatora.

Neke reči koje se koriste u APL literaturi imaju različito značenje od onih koje se koriste u matematici ili informatici.

Pojam Opis
funkcija operacija ili mapiranje koje uzima nula, jedan(desni) ili dva (levi i desni) argumenta koji mogu biti skalari, nizovi ili neke kompleksnije strukture, a mogu vratiti iste te strukture.Funkcije mogu biti:
  • Primitivne: napisana i predstavljena kao jedan glif
  • Definisane: kao nazvana i uređena kolekcija linija koda
  • Izvedene: kao kombinacija operatora sa argumentima
niz objekat sa nula, jednim ili vise skalara ili dugih nizova
niladična ne uzima niti zahteva nijedan argument
monadična zahteva samo jedan argument, zdesna za funkciju, sa leva za operator, unarna
diadična zahteva i levi i desni argument, binarna
ambivalentna ili nomadička može da se koristi kao monadična ili diadična, dozvoljava da se levi argument izostavi
operator operacija ili mapiranje koje uzima jednu (levu) ili dve (levu i desnu) funkciju ili listu argumenata i vraća funkciju. Operator može biti:
  • Primitivni: napisan i predstavljen kao jedan glif
  • Definisani: kao nazvana i uređena kolekcija linija koda

Sintaksa[уреди]

APL ima eksplicitnu reprezentaciju funkcija, operatora, i sintakse, ovo obezbeđuje osnove za čiste i eksplicitne naredbe složenih objekata u jeziku, kao i alata za eksperimentisanje nad njima.[14]

Primeri[уреди]

Zdravo, svete (Hello, world)[уреди]

Ovo ispisuje "Hello, world":

'Hello, world'

Zdravo, svete je tipičan program koji se uglavnom isprogramira kao uvodni primer pri učenju nekog programskog jezika.

Sortiranje[уреди]

Sledeća linija koda sortira listu reči u matrici X po dužini reči:

X[X+.' ';]

Game of Life[уреди]

Ova funkcija life napisana u Dyalog APL uzima matricu sa "bool" vrednostima i nalazi sledeće izračunavanje za Conway's Game of Life.On predstavlja svu moć ovog jezika, da jedan ovako kompleksan algoritam bude zapisan u jednoj liniji koda:

life{1 .3 4=+/,¯1 0 1∘.¯1 0 1∘.⌽⊂}

HTML tagovi-uklanjanje[уреди]

Sledeći kod, takođe zapisan u Dyalog APL-u, u prvoj liniji dodeljuje HTML kod promenljivoj txt i onda koristi APL izraze da ukloni sve HTML tagove:

txt'<nowiki><html><body><p>This is <em>emphasized</em> text.</p></body></html></nowiki>'
{/⍨~{∨≠\}'<>'}txt

Ovo vraća tekst: This is emphasized text.

Skup karaktera[уреди]

APL je i kritikovan i hvaljen za izbor svog jedinstvenog i nestandardnog skupa karaktera. Neki koji ga uče su postali njegove vatrene pristalice, što sugeriše da postoji neka težina iza Ajversonove ideje da korišćena notacija može da napravi razliku. Na početku je postojalo veoma malo monitora koji su uopšte mogli da prikažu APL karaktere. Jedan od prvih bio je Texas Instruments TI model 745 (oko 1977) sa celim APL skupom karaktera.

Vremenom, sa sve većom upotrebom kvalitetnijih monitora, štampača i UNICODE podršci, problemi APL skupa karaktera su uglavnom bili rešeni. Međutim, korišćenje APL skupa karaktera zahteva korišćenje mapiranja tastature, virtuelnih/on-screan APL skupa simbola, a sve to može da uplaši početnike koji su navikli na druge programske jezike.[15][16]

U prilog APL zajednici ide to što APL zahteva da se kuca manje koda, a i mapiranje tastature se nauči vremenom. Takođe, specijalne APL tastature su napravljene i koriste se, a i razni fontovi su dostupni za skidanje sa interneta.

Korišćenje[уреди]

U APL-u jedan simbol/karakter može predstavljati celo sortiranje, drugi regresiju, na primer. Bio je, i još uvek je, popularan u finansijskim aplikacijama, aplikacijama osiguravajućih kuća, u simulacijama, matematičkim aplikacijama itd. APL se koristi u raznim kontekstima i u različite svrhe, uključujući veštačku inteligenciju i robotiku.

Pre dolaska full-screen sistema i do sredine 1980-ih sistemi su pisani tako što su korisnici unosili u uputstva vokabular specifičan za svoj posao. APL tajm-šering (engl. time-sharing) prodavci su isporučivali aplikacije u ovoj formi. Na I. P. Sharp tajm-šering sistemu, radni prostor pod nazivom 39 MAGIC je nudio pristup finansijskim podacima i podacima avio kompanija, plus sofisticiran(za to vreme) grafički prikaz i izveštaje. Drugi primer je GRAPHPAK radni prostor, isporučivan od strane IBM-a IBM APL, kasnije APL2.

Zbog svojih operacija sa matricama APL je bio prilično popularan za programiranje kompjuterske grafike. Jedna od prvih komercijalnih grafičkih kuća Digital Effects iz Njujorka proizvela je APL grafički proizvod poznat pod imenom Vision koji je korišćen za pravljenje televizijskih reklama i navodno animacije za film Tron iz 1982. godine.

Interesovanje za APL je opalo sredinom 1980-ih, ali uprkos ovom padu APL je nastavio da se koristi u određenim oblastima kao što su istraživanja u računovodstvu, DNK identifikacionim tehnologijama, simboličnim matematičkim izrazima i učenjima. Ostaje kao inspiracija njegovoj sadašnjoj bazi korisnika, kao i za druge jezike.

Standardizacija[уреди]

APL je standardizovan od strane ANSI radne grupeX3J10 i ISO/IEC udruženog tehničkog komiteta 1, podkomiteta 22, radne grupe 3.Core APL jezik je zaveden pod ISO8485:1989 a Eksterni APL jezik je zaveden pod ISO/IEC 13731:2001.

Reference[уреди]

  1. Ajverson, Kenet E. . A Programming language. Izdavač Wiley. 1962. ISBN 978-0-471-43014-8.
  2. "ACM Award Citation – John Backus. 1977". Awards.acm.org. 1924-12-03. Preuzeto 2010-02-03.
  3. Helerman, H., "Experimental Personalized Array Translator System", Communications of the ACM, 7, 433 (Jul, 1964).
  4. Falkof, Edin; Ajverson, Kenet E., "APL\360 Users Guide", IBM Research, Thomas J. Watson istraživački centar, Yorktown Heights, NY, Avgust 1968.
  5. Falkof, Edin D.; Ajverson, Keneth E., The evolution of APL, ACM SIGPLAN Notices 13, 1978-08.
  6. Haigh, Tomas, "Biographies: Kenneth E. Iverson", IEEE Annals of the History of Computing, 2005
  7. Edin Falkof - Muzej istorije kompjutera. "Ajverson je njemu davao zasluge za biranje imena APL i prve verzije kugle sa APL karakterima na njoj."
  8. Remembering APL. Quadibloc.com. Preuzeto 2013-06-17.
  9. MicroAPL. Operatori. http://www.microapl.co.uk. MicroAPL. Preuzeto 12 Januara 2015. External link in |website=
  10. APL Simboli. Entering APL Symbols. Preuzeto 1 Januara 2015.
  11. Ju, Dz-Ching; Ching, Wai-Mee (1991). Paralelizam u APL. Newsletter ACM SIGPLAN Notices 26 (7): 61–72. doi:10.1145/109625.109633. Preuzeto 20 Januara 2015.
  12. Dyalog APL
  13. Ajverson, Kenet E. APLDictionary. JSoftware / Iverson Estate. Preuzeto 20 Januara 2015.
  14. Ajverson, Kenet E. APLSyntaxSemantics. I.P. Sharp Assoc. Preuzeto 11 Januara 2015.
  15. Dyalog. apl font keyboard. Dyalog. Preuzeto 19 Januara 2015.
  16. Kromberg, Morten. Unicode support of APL. Vector, Journal of the British APL Association. Preuzeto 8 Januara 2015.

Literatura[уреди]

Spoljašnje veze[уреди]