Програмски језик
Програмски језик је формални језик који се може користити за контролу понашања машине, нарочито рачунара.[2]
Најранија позната програмибилна машина која је претходила изуму дигиталног рачунара био је аутоматски флаутиста, направа коју су у 9. веку описала браћа Муса из Багдада, током Исламске златне ере.[3] Почетком 1800-их, „програми” су кориштени за управљање радом машина као што су Жакаров разбој, музичка кутија или свирач клавира.[4]
Програмски језици се користе да олакшају комуникацију са рачунаром приликом организовања и манипулације информација, али и да прецизно изразе алгоритме. Неки аутори ограничавају израз „програмски језик“ само на језике којима се могу изразити сви могући алгоритми, а понекад се користи израз „рачунарски језик“, који се односи на више ограничене вештачке језике. Створено је више хиљада програмских језика, и нови се стварају сваке године. Многи програмски језици језици захтевају да се прорачун специфицира у императивној форми[5][6] (нпр., као секвенца операција које се морају извршити), док други језици користе друге форме програмских спецификација, као што је декларативна форма[7][8] (нпр. жељени резултат се специфицира, а не како да се оствари).
Опис програмског језика се обично дели у две компоненте синтаксу (форму) и семантику (значење). Неки језици су дефинисани спецификационим документом (на пример, C програмски језик је специфициран путем ISO стандарда), док други језици (као што је Перл) имају доминантну имплементацију која се третира као референца. Неки језици имају оба вида дефиниције, при чему је основни језик дефинисан стандардом, а екстензије се узимају из доминантне имплементације.
Дефиниције
[уреди | уреди извор]Програмски језик је било који од вештачких језика којим је могуће дати детаљне инструкције рачунару, што су спецификације за израчунавање или алгоритам.[2] Те инструкције се могу извршавати директно када су уграђене у рачунар у посебном облику који је одредио произвођач, тзв. машински језик, после једноставног процеса замене изражене у одговарајућем асемблерском језику, или после превођења из неког језика вишег нивоа. Машински и асемблерски језици су језици ниског нивоа, који захтевају од програмера да се посвети управљању свим аспектима везаним за чување података и операције над њима. На другом крају налазе се језици високог нивоа, који су ближи природном језику и ослобађају програмера бриге о тим стварима, такође су читљивији и далеко лакши за писање програма.
Програмски језици се, према начину описивања рада програма, деле на функцијске (Лисп, Scheme), процедуралне (C, Паскал, Бејзик), секвенцијалне и објектно-оријентисане (Јава, Ада), структуралне (SQL) и многе друге. Програмски језици по овој подели могу бити и мешовити, тј. да дозвољавају различите парадигме у оквиру истог програма, те нпр. C++} дозвољава и објектно-оријентисани и процедурални приступ, штавише процедурални приступ је неопходан при дефиницији почетне тачке програма у функцији main
.
Неки, мада не сви, аутори ограничавају термин „програмски језик” на оне језике који могу да изразе све могуће алгоритме.[2][9] Својства која се обично сматрају важним за конституцију програмског језика обухватају:
- Функција и циљ
- Рачунарски програмски језик је језик који се користи за писање рачунарских програма, чиме су обухваћени рачунар који изводи неку врсту рачунања[10] или алгоритам и могуће контролу спољашњих уређаја као што су штампачи, дискови за чување података, роботи,[11] и тако даље. На пример, PostScript програме фреквентно праве други програми ради контроле рачунарског притера или дисплеја. Генералније, програмски језик може да опише рачунање на некој, можда апстрактној, машини. Генерално је прихваћено да комплетна спецификација за програмски језик обухвата опис, често идеализовани, машине или процесора за тај језик.[12] У већини практичних сценарија, програмски језик је везан за рачунар; консеквентно, програмски језици се обично дефинишу и проучавају на тај начин.[13] Програмски језици се разликују од природних језика по томе што се природни језици једино користе за комуникацију међу људима, док програмски језици исто тако омогућавају људима да комуницирају инструкције машинама.
- Апстракције
- Програмски језици обично садрже апстракције за дефинисање и манипулисање структурама података или контролисање извршног протока. Практична неопходност да програмски језик подржава адекватне апстракције је изражена принципом апстракције,[14] који се понекад формулише као препорука програмеру да на одговарајући начин користи такве апстракције.[15]
- Изражајна моћ
- Теорија израчунљивости класификује језике по прорачунима које су способни да изразе. У свим језицима који су потпуни у Тјуринговом смислу може се имплементирати исти сет алгоритама. ANSI/ISO SQL-92 и Charity су примери језика који нису Тјурингов потпуни, мада се често називају програмским језицима.[16][17]
Језици за обележавање као што су XML, HTML, или troff, и који дефинишу структуиране податке, обично се не сматрају програмским језицима.[18][19] Програмски језици могу, међутим, да имају заједничку синтаксу са језицима за обележавање, ако је рачунарска семантика дефининсана. XSLT, на пример, је Тјурингов комплетан XML дијалекат.[20][21][22] Штавише, LaTeX, који се углавном користи за структуирање докумената, исто тако садржи пун Тјурингов комплетан подскуп.[23][24]
Термин рачунарски језик се понекад користи синонимно са програмским језиком.[25] Међутим, употреба ова два термина варира међу ауторима, а постоје разлике и у погледу њиховог тачног опсега. Један облик употребе описује програмске језике као подскуп рачунарских језика.[26]:163–170 У том смислу, језици који се користе у рачунарству са различитим циљевима него што су изражавања рачунарских програма генерално су наменски дизајнирани рачунарски језици. На пример, језици за обележавање се понекад називају рачунарским језицима да би се нагласило да они нису намењени да се користе за програмирање.[27]
Једно алтернативно гледиште на употребу језика сматра програмске језике теоретским констрактима за програмирање апстрактних машина, а рачунарске језике њиховим подскупом који се извршава на физичким рачунарима, који имају коначне хардверске ресурсе.[28] Џон Рејнолдс наглашава да су језици са формалном спецификацијом у истој мери програмски језици колико су и језици намењени извршавању. Он исто тако сматра да су текстуални, па и чак графички уноси, који утичу на понашање рачунара програмски језици, упркос чињенице да они обично нису Тјуриншки комплетни, и напомиње да је игнорисање концепата програмских језика разлог постојања многих недостатака у улазним форматима.[29]
Машински и асемблерски језици
[уреди | уреди извор]Машински језик се састоји од нумеричког кода за операције који одређени рачунар може директно извршити.[30] Тај код је алфанумеричка серија 0 и 1, или бинарни код (бајт), који се често претвара у хексадецимални код (на бази броја 16), ради лакше читљивости и модификације. Инструкције машинских језика обично користе један број бајтова за представљање операција, сабирање на примјер, а други за представљање операнда (бројева са којима се врши операција) и/или локације за слиједећу инструкцију. Машински језик је тежак за читање и писање, пошто не личи на конвенционално математичко представљање нити на природни језик, а његов код варира од рачунара до рачунара.
Асемблерски језик је један ниво изнад машинског језика. Користи кратки мнемонички код за инструкције и омогућава програмеру да уноси имена за блокове меморије која садржи податке. Дизајниран је да омогући лако превођење у машински језик. Иако се блокови података у асемблерском језику позивају преко имена, a не преко адресе у меморији, ипак не постоји могућност софистикованог организовања сложених информација. Као и машински језик, асемблерски језик захтијева од програмера детаљно познавање рачунарске архитектуре. Користан је када су ти детаљи важни, односно приликом програмирања рачунара за интеракцију са улазним и излазним уређајима, као што су штампачи, скенери, уређаји за чување података и информација (оптички и чврсти дискови), итд.
Алгоритамски језици
[уреди | уреди извор]Алгоритамски језици су дизајнирани да изразе математичка и симболичка израчунавања. Њима се могу изразити алгебарске операције на сличан начин као у математици и омогућавају коришћење потпрограма у којима се пакују најчешће коришћене операције, које је могуће поново искористити.
Фортран
[уреди | уреди извор]Први важнији алгоритамски језик у историји програмирања је Фортран (скраћеница од енглеског „formula translation“). Дизајнирао га је тим програмера америчке компаније IBM, 1957. године, на чијем је челу био Џон Бакус. Дизајниран је са идејом да служи потребама научника и научних израчунавања са реалним бројевима (бројевима са покретним зарезом) као и скуповима реалних бројева организованих у један или више низова.
Алгол
[уреди | уреди извор]Алгол (скраћеница од енглеског израза algorithmic language - „алгоритамски језик“) је дизајнирао комитет америчких и европских научника рачунарства за сврху објављивање алгоритама, али и за рачунарска израчунавања, између 1958. и 1960. године. Алгол посједује рекурзивне потпрограме, односно процедуре које могу саме себе позивати приликом рјешавања задатог проблема, редукујући га на мањи проблем било које врсте. Новост у Алголу је блоковна структура, гдје је програм компонован од блокова и може да садржи и податке и инструкције које имају исту структуру као и сам програм. Блоковна структура је врло брзо постала стандард за конструисање масивних програма од малих компоненти.
Лисп
[уреди | уреди извор]Лисп (скраћеница од енглеског list processing) је развио и имплементирао Џон Макарти око 1960. године, базирајући га на математичкој теорији рекурзивних функција. Програм развијен у Lisp-у је функција примијењена на податке, а не секвенца процедуралних корака, као што је случај у Фортрану и Алголу.
C
[уреди | уреди извор]Програмски језик C су развили Денис Ричи и Брајан Керниган 1972. године, у АТ&Т корпорацији за програмирање оперативних система.
Види још
[уреди | уреди извор]Референце
[уреди | уреди извор]- ^ Surana P (2006). „Meta-Compilation of Language Abstractions.” (PDF). Архивирано из оригинала (PDF) 17. 2. 2015. г. Приступљено 17. 3. 2008.
- ^ а б в Aaby 2004, стр. 1
- ^ Koetsier 2001, стр. 589–603. sfn грешка: више циљева (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. стр. 5. Архивирано из оригинала 21. 05. 2012. г. Приступљено 22. 5. 2012. „Object oriented programming extends the concept of modularity by introducing objects”
- ^ Eckel 2006, стр. 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. Приступљено 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. стр. 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”. Архивирано из оригинала 22. 06. 2006. г. Приступљено 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. Архивирано из оригинала 29. 10. 2006. г. Приступљено 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. стр. 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, стр. 32.
- ^ Pierce 2002, стр. 339. sfn грешка: више циљева (2×): CITEREFPierce2002 (help)
- ^ Digital Equipment Corporation. „Information Technology - Database Language SQL (Proposed revised text of DIS 9075)”. ISO/IEC 9075:1992, Database Language SQL. Архивирано из оригинала 21. 06. 2006. г. Приступљено 29. 6. 2006.
- ^ The Charity Development Group (децембар 1996). „The CHARITY Home Page”. Архивирано из оригинала 18. 07. 2006. г. Приступљено 29. 6. 2006., Charity is a categorical programming language..., All Charity computations terminate.
- ^ „XML in 10 points”. Архивирано из оригинала 06. 09. 2009. г. W3C, 1999, XML is not a programming language.
- ^ Powell 2003, стр. 25.
- ^ „What kind of language is XSLT?”. IBM.com. Архивирано из оригинала 11. 5. 2011. г. Приступљено 3. 12. 2010.
- ^ „XSLT is a Programming Language”. Msdn.microsoft.com. 27. 10. 2016. Архивирано из оригинала 3. 2. 2011. г. Приступљено 3. 12. 2010.
- ^ Scott 2006, стр. 802.
- ^ Oetiker, Tobias; Partl, Hubert; Hyna, Irene; Schlegl, Elisabeth (2016). „The Not So Short Introduction to LATEX 2ε” (PDF). tobi.oetiker.ch. стр. 1—157. Архивирано из оригинала (Version 5.06) 14. 03. 2017. г. Приступљено 16. 4. 2017.
- ^ Syropoulos, Tsolomitis & Sofroniou 2003, стр. 213.
- ^ Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall. 1985. стр. 91.
- ^ Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, „Towards a General Ontology of Computer Programs” (PDF). Архивирано из оригинала (PDF) 07. 07. 2015. г., „ICSOFT 2007”. Архивирано из оригинала 27. 04. 2010. г.
- ^ Bajpai, S. K. (2007). Introduction to Computers and C Programming. New Age International. стр. 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. стр. 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, стр. 589–603 harvnb грешка: више циљева (2×): CITEREFKoetsier2001 (help)
Литература
[уреди | уреди извор]- MacLennan, Bruce J. (1987). Principles of Programming Languages. Oxford University Press. стр. 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. стр. 589—603.
- Syropoulos, Apostolos; Tsolomitis, Antonis; Sofroniou, Nick (2003). Digital typography using LaTeX. Springer-Verlag. стр. 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. стр. 25. ISBN 978-0-07-222942-4.
- Scott, Michael (2006). Programming Language Pragmatics. Morgan Kaufmann. стр. 802. ISBN 978-0-12-633951-2.
- Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. стр. 339. ISBN 978-0-262-16209-8.
- Schmidt, David A. (1994). The structure of typed programming languages. MIT Press. стр. 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. Архивирано из оригинала 8. 11. 2012. г. Приступљено 16. 7. 2017.
- Eckel, Bruce (2006). Thinking in Java. Pearson Education. стр. 24. ISBN 978-0-13-187248-6.
- Abelson, Harold; Sussman, Gerald Jay (1996). Structure and Interpretation of Computer Programs (2nd изд.). MIT Press. Архивирано из оригинала 9. 3. 2018. г. Приступљено 16. 7. 2017.
- Koetsier, Teun (2001). On the prehistory of programmable machines; musical automata, looms, calculators. PERGAMON, Mechanisma and Machine Theory 36. стр. 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.
Спољашње везе
[уреди | уреди извор]- „Увод у програмске језике”. Архивирано из оригинала 07. 11. 2017. г.