Programski jezik
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] Početkom 1800-ih, „programi” su korišteni za upravljanje radom mašina kao što su Žakarov razboj, muzička kutija ili svirač klavira.[4]
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[5][6] (npr., kao sekvenca operacija koje se moraju izvršiti), dok drugi jezici koriste druge forme programskih specifikacija, kao što je deklarativna forma[7][8] (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 | uredi izvor]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][9] Svojstva koja se obično smatraju važnim za konstituciju 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[10] ili algoritam i moguće kontrolu spoljašnjih uređaja kao što su štampači, diskovi za čuvanje podataka, roboti,[11] 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.[12] 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.[13] 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,[14] koji se ponekad formuliše kao preporuka programeru da na odgovarajući način koristi takve apstrakcije.[15]
- 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.[16][17]
Jezici za obeležavanje kao što su XML, HTML, ili troff, i koji definišu struktuirane podatke, obično se ne smatraju programskim jezicima.[18][19] 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.[20][21][22] Štaviše, LaTeX, koji se uglavnom koristi za struktuiranje dokumenata, isto tako sadrži pun Tjuringov kompletan podskup.[23][24]
Termin računarski jezik se ponekad koristi sinonimno sa programskim jezikom.[25] 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.[26]:163–170 U tom smislu, jezici koji se koriste u računarstvu sa različitim ciljevima nego što su izražavanja računarskih 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.[27]
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.[28] 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.[29]
Mašinski i asemblerski jezici
[uredi | uredi izvor]Mašinski jezik se sastoji od numeričkog koda za operacije koji određeni računar može direktno izvršiti.[30] 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 | uredi izvor]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 | uredi izvor]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 | uredi izvor]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 rješ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 | uredi izvor]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 | uredi izvor]Programski jezik C su razvili Denis Riči i Brajan Kernigan 1972. godine, u АТ&Т korporaciji za programiranje operativnih sistema.
Vidi još
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ Surana P (2006). „Meta-Compilation of Language Abstractions.” (PDF). Arhivirano iz originala (PDF) 17. 2. 2015. g. Pristupljeno 17. 3. 2008.
- ^ a b v Aaby 2004, str. 1
- ^ Koetsier 2001, str. 589–603. sfn greška: više ciljeva (2×): CITEREFKoetsier2001 (help)
- ^ Ettinger, James (2004). Jacquard's Web. Oxford University Press.
- ^ Michael Stevens (2011). „Programming paradigms and an overview of C - COMP3610 - Principles of Programming Languages: Object-Oriented programming”. Australian National University. str. 5. Arhivirano iz originala 21. 05. 2012. g. Pristupljeno 22. 5. 2012. „Object oriented programming extends the concept of modularity by introducing objects”
- ^ Eckel 2006, str. 24.
- ^ Lloyd, J.W., Practical Advantages of Declarative Programming
- ^ 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.”
- ^ 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.
- ^ ACM SIGPLAN (2003). „Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery”. Arhivirano iz originala 22. 06. 2006. g. 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.
- ^ Dean, Tom (2002). „Programming Robots”. Building Intelligent Robots. Brown University Department of Computer Science. Arhivirano iz originala 29. 10. 2006. g. Pristupljeno 23. 9. 2006.
- ^ R. Narasimahan, Programming Languages and Computers: A Unified Metatheory. pp. 189--247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8. Advances in Computers. Academic Press. 1994. str. 193. ISBN 978-0-12-012108-3.. : "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]
- ^ 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.”
- ^ Schmidt 1994, str. 32.
- ^ Pierce 2002, str. 339. sfn greška: više ciljeva (2×): CITEREFPierce2002 (help)
- ^ Digital Equipment Corporation. „Information Technology - Database Language SQL (Proposed revised text of DIS 9075)”. ISO/IEC 9075:1992, Database Language SQL. Arhivirano iz originala 21. 06. 2006. g. Pristupljeno 29. 6. 2006.
- ^ The Charity Development Group (decembar 1996). „The CHARITY Home Page”. Arhivirano iz originala 18. 07. 2006. g. Pristupljeno 29. 6. 2006., Charity is a categorical programming language..., All Charity computations terminate.
- ^ „XML in 10 points”. Arhivirano iz originala 06. 09. 2009. g. W3C, 1999, XML is not a programming language.
- ^ Powell 2003, str. 25.
- ^ „What kind of language is XSLT?”. IBM.com. Arhivirano iz originala 11. 5. 2011. g. Pristupljeno 3. 12. 2010.
- ^ „XSLT is a Programming Language”. Msdn.microsoft.com. 27. 10. 2016. Arhivirano iz originala 3. 2. 2011. g. Pristupljeno 3. 12. 2010.
- ^ Scott 2006, str. 802.
- ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (2016). „The Not So Short Introduction to LATEX 2ε” (PDF). tobi.oetiker.ch. str. 1—157. Arhivirano iz originala (Version 5.06) 14. 03. 2017. g. Pristupljeno 16. 4. 2017.
- ^ Syropoulos, Tsolomitis & Sofroniou 2003, str. 213.
- ^ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall. 1985. str. 91.
- ^ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, „Towards a General Ontology of Computer Programs” (PDF). Arhivirano iz originala (PDF) 07. 07. 2015. g., „ICSOFT 2007”. Arhivirano iz originala 27. 04. 2010. g.
- ^ Bajpai, S. K. (2007). Introduction to Computers and C Programming. New Age International. str. 346. ISBN 978-81-224-1379-3.
- ^ R. Narasimahan. Programming Languages and Computers: A Unified Metatheory. pp. 189-247 in Franz Alt, Morris Rubinoff (eds.) Advances in computers, Volume 8. Advances in Computers. Academic Press. 1994. str. 215. ISBN 978-0-12-012108-3.: "[...] 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."
- ^ John C. Reynolds. „Some thoughts on teaching programming and programming languages”. SIGPLAN Notices. 43 (11)., November. (2008). pp. 109.
- ^ Koetsier 2001, str. 589–603 harvnb greška: više ciljeva (2×): CITEREFKoetsier2001 (help)
Literatura
[uredi | uredi izvor]- MacLennan, Bruce J. (1987). Principles of Programming Languages. Oxford University Press. str. 1. ISBN 978-0-19-511306-8.
- 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.
- Ettinger, James (2004). Jacquard's Web. Oxford University Press.
- Powell, Thomas (2003). HTML & XHTML: the complete reference. McGraw-Hill. str. 25. ISBN 978-0-07-222942-4.
- Scott, Michael (2006). Programming Language Pragmatics. Morgan Kaufmann. str. 802. ISBN 978-0-12-633951-2.
- Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. str. 339. ISBN 978-0-262-16209-8.
- Schmidt, David A. (1994). The structure of typed programming languages. MIT Press. str. 32. ISBN 978-0-262-19349-8.
- 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.”
- Aaby, Anthony (2004). Introduction to Programming Languages. Arhivirano iz originala 8. 11. 2012. g. Pristupljeno 16. 7. 2017.
- Eckel, Bruce (2006). Thinking in Java. Pearson Education. str. 24. ISBN 978-0-13-187248-6.
- Abelson, Harold; Sussman, Gerald Jay (1996). Structure and Interpretation of Computer Programs (2nd izd.). MIT Press. Arhivirano iz originala 9. 3. 2018. g. Pristupljeno 16. 7. 2017.
- Koetsier, Teun (2001). On the prehistory of programmable machines; musical automata, looms, calculators. PERGAMON, Mechanisma and Machine Theory 36. str. 589—603.
- Raphael Finkel: Advanced Programming Language Design, Addison Wesley 1995.
- Friedman, Daniel P.; Mitchell Wand; Christopher T. Haynes (2001). Essentials of Programming Languages. The MIT Press.
- Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
- David Gelernter, Suresh Jagannathan: Programming Linguistics, The MIT Press 1990.
- Ellis Horowitz (ed.): Programming Languages, a Grand Tour (3rd ed.), 1987.
- Ellis Horowitz (1989). Fundamentals of Programming Languages..
- Shriram Krishnamurthi: Programming Languages: Application and Interpretation, online publication.
- Bruce J. MacLennan: Principles of Programming Languages: Design, Evaluation, and Implementation, Oxford University Press 1999.
- John C. Mitchell: Concepts in Programming Languages, Cambridge University Press 2002.
- Pierce, Benjamin C. (2002). Types and Programming Languages. The MIT Press..
- Terrence W. Pratt and Marvin V. Zelkowitz: Programming Languages: Design and Implementation (4th ed.), Prentice Hall 2000.
- Peter H. Salus. Handbook of Programming Languages (4 vols.). Macmillan 1998.
- Ravi Sethi: Programming Languages: Concepts and Constructs, 2nd ed., Addison-Wesley 1996.
- Michael L. Scott: Programming Language Pragmatics, Morgan Kaufmann Publishers 2005.
- Robert W. Sebesta: Concepts of Programming Languages, 9th ed., Addison Wesley 2009.
- Turbak, Franklyn; David Gifford with Mark Sheldon (2009). Design Concepts in Programming Languages. The MIT Press..
- Peter Van Roy; Seif Haridi (2004). Concepts, Techniques, and Models of Computer Programming. The MIT Press..
- David A. Watt. Programming Language Concepts and Paradigms. Prentice Hall 1990.
- David A. Watt and Muffy Thomas. Programming Language Syntax and Semantics. Prentice Hall 1991.
- David A. Watt. Programming Language Processors. Prentice Hall 1993.
- David A. Watt. Programming Language Design Concepts. John Wiley & Sons 2004.
Spoljašnje veze
[uredi | uredi izvor]- „Uvod u programske jezike”. Arhivirano iz originala 07. 11. 2017. g.