Programski jezik

Iz Vikipedije, slobodne enciklopedije
Jump to navigation Jump to search
Izvorni kod jednostavnog računarskog programa napisan programskim jezikom C, čiji je izlaz poruka „Hello, world!” nakon što se program kompilira i izvrši.[1]

Programski jezik je formalni jezik koji se može koristiti za kontrolu ponašanja mašine, naročito računara.[2]

Najranija poznata programibilna mašina koja je prethodila izumu digitalnog računara bio je automatski flautista, naprava koju su u 9. veku opisala braća Musa iz Bagdada, tokom Islamske zlatne ere.[3] Od ranih 1800-tih, „programi” su korišteni za upravljanje radom mašina kao što je [[Jacquard loom}}</ref>

Programski jezici se koriste da olakšaju komunikaciju sa računarom prilikom organizovanja i manipulacije informacija, ali i da precizno izraze algoritme. Neki autori ograničavaju izraz „programski jezik“ samo na jezike kojima se mogu izraziti svi mogući algoritmi, a ponekad se koristi izraz „računarski jezik“, koji se odnosi na više ograničene veštačke jezike. Stvoreno je više hiljada programskih jezika, i novi se stvaraju svake godine. Mnogi programski jezici jezici zahtevaju da se proračun specificira u imperativnoj formi[4][5] (npr., kao sekvenca operacija koje se moraju izvršiti), dok drugi jezici koriste druge forme programskih specifikacija, kao što je deklarativna forma[6][7] (npr. željeni rezultat se specificira, a ne kako da se ostvari).

Opis programskog jezika se obično deli u dve komponente sintaksu (formu) i semantiku (značenje). Neki jezici su definisani specifikacionim dokumentom (na primer, C programski jezik je specificiran putem ISO standarda), dok drugi jezici (kao što je Perl) imaju dominantnu implementaciju koja se tretira kao referenca. Neki jezici imaju oba vida definicije, pri čemu je osnovni jezik definisan standardom, a ekstenzije se uzimaju iz dominantne implementacije.

Definicije[uredi]

Programski jezik je bilo koji od veštačkih jezika kojim je moguće dati detaljne instrukcije računaru, što su specifikacije za izračunavanje ili algoritam.[2] Te instrukcije se mogu izvršavati direktno kada su ugrađene u računar u posebnom obliku koji je odredio proizvođač, tzv. mašinski jezik, posle jednostavnog procesa zamene izražene u odgovarajućem asemblerskom jeziku, ili posle prevođenja iz nekog jezika višeg nivoa. Mašinski i asemblerski jezici su jezici niskog nivoa, koji zahtevaju od programera da se posveti upravljanju svim aspektima vezanim za čuvanje podataka i operacije nad njima. Na drugom kraju nalaze se jezici visokog nivoa, koji su bliži prirodnom jeziku i oslobađaju programera brige o tim stvarima, takođe su čitljiviji i daleko lakši za pisanje programa.

Programski jezici se, prema načinu opisivanja rada programa, dele na funkcijske (Lisp, Scheme), proceduralne (C, Paskal, Bejzik), sekvencijalne i objektno-orijentisane (Java, Ada), strukturalne (SQL) i mnoge druge. Programski jezici po ovoj podeli mogu biti i mešoviti, tj. da dozvoljavaju različite paradigme u okviru istog programa, te npr. C++} dozvoljava i objektno-orijentisani i proceduralni pristup, štaviše proceduralni pristup je neophodan pri definiciji početne tačke programa u funkciji main.

Neki, mada ne svi, autori ograničavaju termin „programski jezik” na one jezike koji mogu da izraze sve moguće algoritme.[2][8] Svojstva koja se obično smatraju važnim za kontituciju programskog jezika obuhvataju:

Funkcija i cilj
Računarski programski jezik je jezik koji se koristi za pisanje računarskih programa, čime su obuhvaćeni računar koji izvodi neku vrstu računanja[9] ili algoritam i moguće kontrolu spoljašnjih uređaja kao što su štampači, diskovi za čuvanje podataka, roboti,[10] i tako dalje. Na primer, PostScript programe frekventno prave drugi programi radi kontrole računarskog pritera ili displeja. Generalnije, programski jezik može da opiše računanje na nekoj, možda apstraktnoj, mašini. Generalno je prihvaćeno da kompletna specifikacija za programski jezik obuhvata opis, često idealizovani, mašine ili procesora za taj jezik.[11] U većini praktičnih scenarija, programski jezik je vezan za računar; konsekventno, programski jezici se obično definišu i proučavaju na taj način.[12] Programski jezici se razlikuju od prirodnih jezika po tome što se prirodni jezici jedino koriste za komunikaciju među ljudima, dok programski jezici isto tako omogućavaju ljudima da komuniciraju instrukcije mašinama.
Apstrakcije
Programski jezici obično sadrže apstrakcije za definisanje i manipulisanje strukturama podataka ili kontrolisanje izvršnog protoka. Praktična neophodnost da programski jezik podržava adekvatne apstrakcije je izražena principom apstrakcije,[13] koji se ponekad formuliše kao preporuka programeru da na odgovarajući način koristi takve apstrakcije.[14]
Izražajna moć
Teorija izračunljivosti klasifikuje jezike po proračunima koje su sposobni da izraze. U svim jezicima koji su potpuni u Tjuringovom smislu može se implementirati isti set algoritama. ANSI/ISO SQL-92 i Charity su primeri jezika koji nisu Tjuringov potpuni, mada se često nazivaju programskim jezicima.[15][16]

Jezici za obeležavanje kao što su XML, HTML, ili troff, i koji definišu struktuirane podatke, obično se ne smatraju programskim jezicima.[17][18] Programski jezici mogu, međutim, da imaju zajedničku sintaksu sa jezicima za obeležavanje, ako je računarska semantika defininsana. XSLT, na primer, je Tjuringov kompletan XML dijalekat.[19][20][21] Štaviše, LaTeX, koji se uglavnom koristi za struktuiranje dokumenata, isto tako sadrži pun Tjuringov kompletan podskup.[22][23]

Termin računarski jezik se ponekad koristi sinonimno sa programskim jezikom.[24] Međutim, upotreba ova dva termina varira među autorima, a postoje razlike i u pogledu njihovog tačnog opsega. Jedan oblik upotrebe opisuje programske jezike kao podskup računarskih jezika.[25] U tom smislu, jezici koji se koriste u računarstvu sa različitim ciljevima nego što su izražavanja računarkih programa generalno su namenski dizajnirani računarski jezici. Na primer, jezici za obeležavanje se ponekad nazivaju računarskim jezicima da bi se naglasilo da oni nisu namenjeni da se koriste za programiranje.[26]

Jedno alternativno gledište na upotrebu jezika smatra programske jezike teoretskim konstraktima za programiranje apstraktnih mašina, a računarske jezike njihovim podskupom koji se izvršava na fizičkim računarima, koji imaju konačne hardverske resurse.[27] Džon Rejnolds naglašava da su jezici sa formalnom specifikacijom u istoj meri programski jezici koliko su i jezici namenjeni izvršavanju. On isto tako smatra da su tekstualni, pa i čak grafički unosi, koji utiču na ponašanje računara programski jezici, uprkos činjenice da oni obično nisu Tjurinški kompletni, i napominje da je ignorisanje koncepata programskih jezika razlog postojanja mnogih nedostataka u ulaznim formatima.[28]

Mašinski i asemblerski jezici[uredi]

Mašinski jezik se sastoji od numeričkog koda za operacije koji određeni računar može direktno izvršiti.[29] Taj kod je alfanumerička serija 0 i 1, ili binarni kod (bajt), koji se često pretvara u heksadecimalni kod (na bazi broja 16), radi lakše čitljivosti i modifikacije. Instrukcije mašinskih jezika obično koriste jedan broj bajtova za predstavljanje operacija, sabiranje na primjer, a drugi za predstavljanje operanda (brojeva sa kojima se vrši operacija) i/ili lokacije za slijedeću instrukciju. Mašinski jezik je težak za čitanje i pisanje, pošto ne liči na konvencionalno matematičko predstavljanje niti na prirodni jezik, a njegov kod varira od računara do računara.

Asemblerski jezik je jedan nivo iznad mašinskog jezika. Koristi kratki mnemonički kod za instrukcije i omogućava programeru da unosi imena za blokove memorije koja sadrži podatke. Dizajniran je da omogući lako prevođenje u mašinski jezik. Iako se blokovi podataka u asemblerskom jeziku pozivaju preko imena, a ne preko adrese u memoriji, ipak ne postoji mogućnost sofistikovanog organizovanja složenih informacija. Kao i mašinski jezik, asemblerski jezik zahtijeva od programera detaljno poznavanje računarske arhitekture. Koristan je kada su ti detalji važni, odnosno prilikom programiranja računara za interakciju sa ulaznim i izlaznim uređajima, kao što su štampači, skeneri, uređaji za čuvanje podataka i informacija (optički i čvrsti diskovi), itd.

Algoritamski jezici[uredi]

Algoritamski jezici su dizajnirani da izraze matematička i simbolička izračunavanja. Njima se mogu izraziti algebarske operacije na sličan način kao u matematici i omogućavaju korišćenje potprograma u kojima se pakuju najčešće korišćene operacije, koje je moguće ponovo iskoristiti.

Fortran[uredi]

Prvi važniji algoritamski jezik u istoriji programiranja je Fortran (skraćenica od engleskog „formula translation“). Dizajnirao ga je tim programera američke kompanije IBM, 1957. godine, na čijem je čelu bio Džon Bakus. Dizajniran je sa idejom da služi potrebama naučnika i naučnih izračunavanja sa realnim brojevima (brojevima sa pokretnim zarezom) kao i skupovima realnih brojeva organizovanih u jedan ili više nizova.

Algol[uredi]

Algol (skraćenica od engleskog izraza algorithmic language - „algoritamski jezik“) je dizajnirao komitet američkih i evropskih naučnika računarstva za svrhu objavljivanje algoritama, ali i za računarska izračunavanja, između 1958. i 1960. godine. Algol posjeduje rekurzivne potprograme, odnosno procedure koje mogu same sebe pozivati prilikom riješavanja zadatog problema, redukujući ga na manji problem bilo koje vrste. Novost u Algolu je blokovna struktura, gdje je program komponovan od blokova i može da sadrži i podatke i instrukcije koje imaju istu strukturu kao i sam program. Blokovna struktura je vrlo brzo postala standard za konstruisanje masivnih programa od malih komponenti.

Lisp[uredi]

Lisp (skraćenica od engleskog list processing) je razvio i implementirao Džon Makarti oko 1960. godine, bazirajući ga na matematičkoj teoriji rekurzivnih funkcija. Program razvijen u Lisp-u je funkcija primijenjena na podatke, a ne sekvenca proceduralnih koraka, kao što je slučaj u Fortranu i Algolu.

C[uredi]

Programski jezik C su razvili Denis Riči i Brajan Kernigan 1972. godine, u АТ&Т korporaciji za programiranje operativnih sistema.

Razvoj programskih jezika

Vidi još[uredi]

Reference[uredi]

  1. ^ Surana P (2006). „Meta-Compilation of Language Abstractions.” (PDF). Arhivirano iz originala (PDF) na datum 17. 2. 2015. Pristupljeno 17. 3. 2008. 
  2. 2,0 2,1 2,2 Aaby (2004). str. 1.
  3. ^ Koetsier (2001). str. 589–603.
  4. ^ Michael Stevens (2011). „Programming paradigms and an overview of C - COMP3610 - Principles of Programming Languages: Object-Oriented programming” (PDF). Australian National University. str. 5. Arhivirano iz originala na datum 2011. Pristupljeno 22. 5. 2012. »Object oriented programming extends the concept of modularity by introducing objects« 
  5. ^ Eckel (2006). str. 24.
  6. ^ Lloyd, J.W., Practical Advantages of Declarative Programming 
  7. ^ Chakravarty, Manuel M. T. (1997). On the Massively Parallel Execution of Declarative Programs (Doctoral dissertation). Technische Universität Berlin. Pristupljeno 26. 2. 2015. »In this context, the criterion for calling a programming language declarative is the existence of a clear, mathematically established correspondence between the language and mathematical logic such that a declarative semantics for the language can be based on the model or the proof theory (or both) of the logic.« 
  8. ^ In mathematical terms, this means the programming language is Turing-complete MacLennan, Bruce J. (1987). Principles of Programming Languages. Oxford University Press. str. 1. ISBN 978-0-19-511306-8. 
  9. ^ ACM SIGPLAN (2003). „Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery”. Arhivirano iz originala na datum 22. 6. 2006. Pristupljeno 19. 6. 2006. , The scope of SIGPLAN is the theory, design, implementation, description, and application of computer programming languages - languages that permit the specification of a variety of different computations, thereby providing the user with significant control (immediate or delayed) over the computer's operation.
  10. ^ Dean, Tom (2002). „Programming Robots”. Building Intelligent Robots. Brown University Department of Computer Science. Arhivirano iz originala na datum 29. 10. 2006. Pristupljeno 23. 9. 2006. 
  11. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory. pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press. 1994. ISBN 978-0-12-012108-3. str. 193. : "a complete specification of a programming language must, by definition, include a specification of a processor--idealized, if you will--for that language." [the source cites many references to support this statement]
  12. ^ Ben Ari, Mordechai (1996). Understanding Programming Languages. John Wiley and Sons. »Programs and languages can be defined as purely formal mathematical objects. However, more people are interested in programs than in other mathematical objects such as groups, precisely because it is possible to use the program—the sequence of symbols—to control the execution of a computer. While we highly recommend the study of the theory of programming, this text will generally limit itself to the study of programs as they are executed on a computer.« 
  13. ^ Schmidt (1994). str. 32.
  14. ^ Pierce (2002). str. 339.
  15. ^ Digital Equipment Corporation. „Information Technology - Database Language SQL (Proposed revised text of DIS 9075)”. ISO/IEC 9075:1992, Database Language SQL. Arhivirano iz originala na datum 21. 6. 2006. Pristupljeno 29. 6. 2006. 
  16. ^ The Charity Development Group (decembar 1996). „The CHARITY Home Page”. Arhivirano iz originala na datum 18. 7. 2006. Pristupljeno 29. 6. 2006. , Charity is a categorical programming language..., All Charity computations terminate.
  17. ^ XML in 10 points Archived 6 September 2009[Date mismatch] at the Wayback Machine. W3C, 1999, XML is not a programming language.
  18. ^ Powell (2003). str. 25.
  19. ^ „What kind of language is XSLT?”. IBM.com. Arhivirano iz originala na datum 11. 5. 2011. Pristupljeno 3. 12. 2010. 
  20. ^ „XSLT is a Programming Language”. Msdn.microsoft.com. Arhivirano iz originala na datum 3. 2. 2011. Pristupljeno 3. 12. 2010. 
  21. ^ Scott (2006). str. 802.
  22. ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (2016). „The Not So Short Introduction to LATEX 2ε” (Version 5.06). tobi.oetiker.ch. str. 1—157. Arhivirano (PDF) iz originala na datum 14. 3. 2017. Pristupljeno 16. 4. 2017. 
  23. ^ Syropoulos (2003). str. 213.
  24. ^ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, (1985). pp. 91
  25. ^ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs Archived 7 July 2015[Date mismatch] at the Wayback Machine., ICSOFT 2007 Archived 27 April 2010[Date mismatch] at the Wayback Machine.. pp. 163–170
  26. ^ S.K. Bajpai, Introduction To Computers And C Programming, New Age International. 2007. ISBN 978-81-224-1379-3. str. 346.
  27. ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory. pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8, Academic Press. 1994. ISBN 978-0-12-012108-3. str. 215.: "[...] the model [...] for computer languages differs from that [...] for programming languages in only two respects. In a computer language, there are only finitely many names--or registers--which can assume only finitely many values--or states--and these states are not further distinguished in terms of any other attributes. [author's footnote:] This may sound like a truism but its implications are far reaching. For example, it would imply that any model for programming languages, by fixing certain of its parameters or features, should be reducible in a natural way to a model for computer languages."
  28. ^ John C. Reynolds, Some thoughts on teaching programming and programming languages, SIGPLAN Notices, Volume 43, Issue 11, November. (2008). pp. 109.
  29. ^ Koetsier, Teun (2001). On the prehistory of programmable machines; musical automata, looms, calculators. PERGAMON, Mechanisma and Machine Theory 36. str. 589—603. 

Literatura[uredi]

  • Koetsier, Teun (2001). On the prehistory of programmable machines; musical automata, looms, calculators. PERGAMON, Mechanisma and Machine Theory 36. str. 589—603. 
  • Syropoulos, Apostolos; Tsolomitis, Antonis; Sofroniou, Nick (2003). Digital typography using LaTeX. Springer-Verlag. str. 213. ISBN 978-0-387-95217-8. »TeX is not only an excellent typesetting engine but also a real programming language.« 
  • Scott, Michael (2006). Programming Language Pragmatics. Morgan Kaufmann. str. 802. ISBN 978-0-12-633951-2. »XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.« 

Spoljašnje veze[uredi]