APL (programski jezik)
From Wikipedia, the free encyclopedia
Remove ads
(skraćenica izvedena prema knjizi engl. )[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.
Remove ads
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 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 (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 prevodilac).[3]
Iste godine Falkof, Ajverson i Edvard H. Susengut (engl. ) (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. ) 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]

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. ). 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. ) 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 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 kuglu za kucanje.[7]

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.
Godine 1973. 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. ) usmerava implementaciju APL interpretatora univerziteta Merilend na mejnfrejm kompjuter. U to vreme nije imao ništa. Godine 1974. student Alen Stebens (engl. ) 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 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. ) 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-orijentisano programiranje, podržavaju .NET , XML, primitivne konverzije nizova, grafiku, interfejse operativnih sistema i lambda izraza.
Remove ads
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 "", "" i "" 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 pisanja koda. 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 , operacija za kreiranje nizova. |
n
4 5 6 7
|
Prikazuje sadržaj , trenutno niza ili vektora. |
n+4
8 9 10 11
|
4 se dodaje na sve elemente vektora , kreirajući vektor dužine 4 (8, 9, 10, 11). |
+/n
22
|
APL prikazuje sumu komponenti vektora , 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- 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 karaktera, to se u praksi skoro nikada ne radi. Većina novijih implementacija koristi standardne rasporede na tastaturi, sa posebnim metodama za pristup ne- 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 "" (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 ili Јаvа dosadnim.
Remove ads
Izvršavanje
APL je pogodan jezik za paralelizaciju.[11]
Interpretatori
(pre APL2000) nudi napredni APL interpretator koji radi pod Linuksom, Uniksom(engl. ) i Windows-om. 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 Windows-om.[12] Dyalog ima dodatke APL jeziku koji koriste nove objektno-orijentisane mogućnosti, brojna poboljšanja jezika, korišćenje prostora imena i druge. Za Windows platformu Dyalog APL je tesno povezan sa .NET platformom, a postoji i određena interpretacija za Majkrosoft Vižual Studio (engl. ) razvojnom platformom.
IBM nudi svoju verziju IBM APL2 za IBM AIX, Linuks, Sun Solaris i Windows sistem. Ovaj proizvod je naslednik APL2 ponuđenog za IBM mejnfrejm računare. IBM APL2 je najverovatnije najuticajniji APL sistem.
NARS2000 je APL interpretator napisan od strane Boba Smita, poznatog APL programera. Sadrži nove tipove podataka, radi primarno pod Windows-om(32-bitna i 64-bitna verzija), a radi i pod Linuksom i Epl Mac OS-om (engl. ) sa -om.
nudi APLX, potpuno funkcionalan 64-bitni prevodilac za Linuks, Microsoft Windows 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 i drugim procesorima.
GNU APL je implementacija ISO standarda 13751 i stoga je sličan APL2. Radi na GNU/Linuksu i Windows-u koristeći . 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 program. Za razliku od modernih kompajlera ovaj daje mašinski kod koji se može izvršiti samo u okruženju prevodioca.
Knjigu napisao je Timoti Bad (engl. ). 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.
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 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. kompajler zahteva rantajm (engl. ) biblioteku funkcija nad nizovima.
Remove ads
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.
Remove ads
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 ()
Ovo ispisuje "":
'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 napisana u Dyalog APL uzima matricu sa "" vrednostima i nalazi sledeće izračunavanje za .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 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:
Remove ads
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 (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/ 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.
Remove ads
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 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. ) prodavci su isporučivali aplikacije u ovoj formi. Na I. P. tajm-šering sistemu, radni prostor pod nazivom 39 je nudio pristup finansijskim podacima i podacima avio kompanija, plus sofisticiran(za to vreme) grafički prikaz i izveštaje. Drugi primer je 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 iz Njujorka proizvela je APL grafički proizvod poznat pod imenom 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.
Remove ads
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
Literatura
Spoljašnje veze
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads