Програмски језик — разлика између измена

Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м uklanjanje dupliranih poziva
Autobot (разговор | доприноси)
м Разне исправке
Ред 1:
[[Датотека:C Hello World Program.png|мини|right|402px|[[Изворни код]] једноставног рачунарског програма написан програмским језиком [[C (програмски језик)|C]], чији је излаз порука -{„[[Hello World|Hello, world!]]”}- након што се програм [[Компилатор|компилира]] и изврши.<ref>{{cite journal
| author=Surana P
| title=Meta-Compilation of Language Abstractions.
| year = 2006
| url=ftp://lispnyc.org/meeting-assets/2007-02-13_pinku/SuranaThesis.pdf
| format=[[PDF]] |accessdate=17. 3. 2008.
| accessdate = 17. 3. 2008.
| deadurl=yes
| archiveurl=https://web.archive.org/web/20150217154926/http://lispnyc.org/meeting-assets/2007-02-13_pinku/SuranaThesis.pdf |archivedate=17. 2. 2015.
| archivedate = 17. 2. 2015.
}}</ref>]]
 
'''Програмски језик''' је [[формални језик]] који се може користити за контролу понашања [[машина|машине]], нарочито [[рачунар]]а.<ref name="Aaby 2004">{{harvnb|Aaby|2004|p=1}}</ref>
 
Најранија позната програмибилна машина која је претходила [[istorija računara|изуму дигиталног рачунара]] био је аутоматски флаутиста, направа коју су у 9. веку описала [[Banu Musa|браћа Муса]] из [[Багдад]]а, током [[златно доба Ислама|Исламске златне ере]].<ref>{{harvnbsfn|Koetsier|2001|pp=589–603}}</ref> Од раних 1800-тихих, „програми” су кориштени за управљање радом машина као што је [[Jacquard loom}}</ref>
 
Програмски језици се користе да олакшају комуникацију са рачунаром приликом организовања и манипулације [[информација]], али и да прецизно изразе [[алгоритам|алгоритме]]. Неки аутори ограничавају израз „програмски језик“ само на језике којима се могу изразити сви могући алгоритми, а понекад се користи израз „рачунарски језик“, који се односи на више ограничене вештачке језике. Створено је [[списак програмских језика|више хиљада]] програмских језика, и нови се стварају сваке године. Многи програмски језици језици захтевају да се прорачун специфицира у [[Императивно програмирање|императивној]] форми<ref>{{cite web
| url = http://cs.anu.edu.au/
| title = Programming paradigms and an overview of C - COMP3610 - Principles of Programming Languages: Object-Oriented programming
| author = Michael Stevens
| year = 2011
| pages= 5| publisher = Australian National University
| archiveurl = https://cs.anu.edu.au/student/comp3610/lectures/Paradigms.pdf|archivedate=2011
| quote = Object oriented programming extends the concept of modularity by introducing objects|accessdate=22. 5. 2012.
| archivedate= 2011
}}</ref>{{sfn|Eckel|2006|p=24}} (нпр., као секвенца операција које се морају извршити), док други језици користе друге форме програмских спецификација, као што је [[Декларативно програмирање|декларативна]] форма<ref>{{citation| last = Lloyd| first = J.W.| title = Practical Advantages of Declarative Programming}}</ref><ref>{{cite thesis | first = Manuel M. T. | last = Chakravarty| year = 1997| url = http://www.cse.unsw.edu.au/~chak/papers/diss.ps.gz | title = On the Massively Parallel Execution of Declarative Programs | type = Doctoral dissertation | publisher = [[Technische Universität Berlin]] | accessdate = 26. 2. 2015. | quote = 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.}}</ref> (нпр. жељени резултат се специфицира, а не како да се оствари).
| quote = Object oriented programming extends the concept of modularity by introducing objects
| accessdate = 22. 5. 2012.
}}</ref>{{sfn|Eckel|2006|p=24}} (нпр., као секвенца операција које се морају извршити), док други језици користе друге форме програмских спецификација, као што је [[Декларативно програмирање|декларативна]] форма<ref>{{citation| last = Lloyd| first = J.W.| title = Practical Advantages of Declarative Programming}}</ref><ref>{{cite thesis | first = Manuel M. T. | last = Chakravarty| year = 1997| url = http://www.cse.unsw.edu.au/~chak/papers/diss.ps.gz | title = On the Massively Parallel Execution of Declarative Programs | type = Doctoral dissertation | publisher = [[Technische Universität Berlin]] | accessdate = 26. 2. 2015. | quote = 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.}}</ref> (нпр. жељени резултат се специфицира, а не како да се оствари).
 
Опис програмског језика се обично дели у две компоненте [[Синтакса (програмски језици)|синтаксу]] (форму) и [[семантика|семантику]] (значење). Неки језици су дефинисани спецификационим документом (на пример, [[C (програмски језик)|C]] програмски језик је специфициран путем [[International Organization for Standardization|ISO]] стандарда), док други језици (као што је [[Перл (програмски језик)|Перл]]) имају доминантну [[Programming language implementation|имплементацију]] која се третира као [[reference implementation|референца]]. Неки језици имају оба вида дефиниције, при чему је основни језик дефинисан стандардом, а екстензије се узимају из доминантне имплементације.
Линија 35 ⟶ 31:
Програмски језици се, према начину описивања рада програма, деле на функцијске ([[Lisp (programski jezik)|Лисп]], [[Scheme (programski jezik)|-{''Scheme''}-]]), процедуралне ([[C (програмски језик)|C]], [[Паскал (програмски језик)|Паскал]], [[Бејсик|Бејзик]]), секвенцијалне и објектно-оријентисане ([[Јава (програмски језик)|Јава]], [[Ада (програмски језик)|Ада]]), структуралне (-{[[SQL]]}-) и многе друге. Програмски језици по овој подели могу бити и мешовити, тј. да дозвољавају различите парадигме у оквиру истог програма, те нпр. [[C++]]} дозвољава и објектно-оријентисани и процедурални приступ, штавише процедурални приступ је неопходан при дефиницији почетне тачке програма у функцији <code>main</code>.
 
Неки, мада не сви, аутори ограничавају термин „програмски језик” на оне језике који могу да изразе ''све'' могуће алгоритме.<ref name="Aaby 2004"/><ref>In mathematical terms, this means the programming language is [[Turing completeness|Turing-complete]] {{cite book| last = MacLennan| first = Bruce J.| title = Principles of Programming Languages| publisher = Oxford University Press| year = 1987|isbn=978-0-19-511306-8| pages= 1}}</ref> Својства која се обично сматрају важним за контитуцију програмског језика обухватају:
 
; Функција и циљ
: ''Рачунарски програмски језик'' је [[формални језик|језик]] који се користи за писање [[рачунарски програм|рачунарских програма]], чиме су обухваћени [[рачунар]] који изводи неку врсту рачунања<ref name=sigplan>{{cite web| author = [[Association for Computing Machinery|ACM]] SIGPLAN| title = Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery| url = http://www.acm.org/sigs/sigplan/sigplan_bylaws.htm| accessdate = 19. 6. 2006| year = 2003| deadurl = no| archiveurl = https://web.archive.org/web/20060622110145/http://www.acm.org/sigs/sigplan/sigplan_bylaws.htm| archivedate = 22. 6. 2006.|df=dmy-all}}, ''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.''</ref> или [[алгоритам]] и могуће контролу спољашњих уређаја као што су [[штампач]]и, [[Disk storage|дискови]] за чување података, [[робот]]и,<ref name="robots">{{cite web | url = http://www.cs.brown.edu/people/tld/courses/cs148/02/programming.html | title = Programming Robots | accessdate = 23. 9. 2006. | last = Dean| first = Tom | year = 2002| work = Building Intelligent Robots | publisher = Brown University Department of Computer Science | deadurl = no | archiveurl = https://web.archive.org/web/20061029045949/http://www.cs.brown.edu/people/tld/courses/cs148/02/programming.html | archivedate = 29. 10. 2006. |df=dmy-all}}</ref> и тако даље. На пример, -{[[PostScript]]}- програме фреквентно праве други програми ради контроле рачунарског притера или дисплеја. Генералније, програмски језик може да опише рачунање на некој, можда апстрактној, машини. Генерално је прихваћено да комплетна спецификација за програмски језик обухвата опис, често идеализовани, машине или процесора за тај језик.<ref name=nara2>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. {{page| year = 1994|isbn=978-0-12-012108-3| pages= 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]</ref> У већини практичних сценарија, програмски језик је везан за рачунар; консеквентно, програмски језици се обично дефинишу и проучавају на тај начин.<ref>{{Cite book| last = Ben Ari| first = Mordechai| title = Understanding Programming Languages| publisher = John Wiley and Sons| year = 1996| quote = 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.}}</ref> Програмски језици се разликују од [[natural language|природних језика]] по томе што се природни језици једино користе за комуникацију међу људима, док програмски језици исто тако омогућавају људима да комуницирају инструкције машинама.
; Апстракције
: Програмски језици обично садрже [[abstraction (computer science)|апстракције]] за дефинисање и манипулисање [[структура података|структурама података]] или контролисање [[контрола тока|извршног протока]]. Практична неопходност да програмски језик подржава адекватне апстракције је изражена [[Abstraction principle (computer programming)|принципом апстракције]],{{sfn|Schmidt|1994|p=32}} који се понекад формулише као препорука програмеру да на одговарајући начин користи такве апстракције.{{sfn|Pierce|2002|p=339}}
; Изражајна моћ
: [[Теорија израчунљивости]] класификује језике по прорачунима које су способни да изразе. У свим језицима који су потпуни у [[Turing completeness|Тјуринговом]] смислу може се имплементирати исти сет [[алгоритам]]а. [[SQL-92|-{ANSI/ISO SQL-92}-]] и [[Charity (programming language)|-{''Charity''}-]] су примери језика који нису Тјурингов потпуни, мада се често називају програмским језицима.<ref>{{cite web| author = Digital Equipment Corporation| title = Information Technology - Database Language SQL (Proposed revised text of DIS 9075)| url = http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt| work = ISO/IEC 9075:1992, Database Language SQL| accessdate = 29. 6. 2006.| deadurl = no| archiveurl = https://web.archive.org/web/20060621035823/http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt| archivedate = 21. 6. 2006.|df=dmy-all}}</ref><ref>{{cite web| author = The Charity Development Group| title = The CHARITY Home Page| url = http://pll.cpsc.ucalgary.ca/charity1/www/home.html| date = December 1996| accessdate = 29. 6. 2006.| deadurl = no| archiveurl = https://web.archive.org/web/20060718010551/http://pll.cpsc.ucalgary.ca/charity1/www/home.html| archivedate = 18. 7. 2006.|df=dmy-all}}, ''Charity is a categorical programming language...'', ''All Charity computations terminate.''</ref>
 
[[Jezik za obeležavanje|Језици за обележавање]] као што су -{[[XML]]}-, -{[[HTML]]}-, или -{[[troff]]}-, и који дефинишу [[Data model|структуиране податке]], обично се не сматрају програмским језицима.<ref>[http://www.w3.org/XML/1999/XML-in-10-points.html XML in 10 points] {{webarchive| url = https://web.archive.org/web/20090906083110/http://www.w3.org/XML/1999/XML-in-10-points.html | date = 6. 9. 2009. }} [[W3C]], 1999, ''XML is not a programming language.''</ref>{{sfn|Powell|2003|p=25}} Програмски језици могу, међутим, да имају заједничку синтаксу са језицима за обележавање, ако је рачунарска семантика дефининсана. -{[[XSLT]]}-, на пример, је [[Turing completeness|Тјурингов комплетан]] -{XML}- дијалекат.<ref>{{cite web| url = http://www.ibm.com/developerworks/library/x-xslt/| title = What kind of language is XSLT?| publisher = IBM.com| accessdate = 3. 12. 2010.| deadurl = no| archiveurl = https://web.archive.org/web/20110511192712/http://www.ibm.com/developerworks/library/x-xslt/| archivedate = 11. 5. 2011.|df=dmy-all}}</ref><ref>{{cite web| url = http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx| title = XSLT is a Programming Language| publisher = Msdn.microsoft.com| accessdate = 3. 12. 2010.| deadurl = no| archiveurl = https://web.archive.org/web/20110203015119/http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx| archivedate = 3. 2. 2011.|df=dmy-all}}</ref>{{sfn|Scott|2006|pp=802}} Штавише, -{[[LaTeX]]}-, који се углавном користи за структуирање докумената, исто тако садржи пун Тјурингов комплетан подскуп.<ref name="Oetiker et Al., 2017">{{cite web| last1 last= Oetiker| first1first = Tobias| last2 = Partl| first2 = Hubert| last3 = Hyna| first3 = Irene| last4 = Schlegl| first4 = Elisabeth| title = The Not So Short Introduction to LATEX 2ε| url = https://tobi.oetiker.ch/lshort/lshort.pdf| website = tobi.oetiker.ch| accessdate = 16. 4. 2017.| format = Version 5.06| year = 2016| deadurl = no| archiveurl = https://web.archive.org/web/20170314015536/https://tobi.oetiker.ch/lshort/lshort.pdf| archivedate = 14. 3. 2017.|df=dmy-all| pages= 1–157}}</ref><ref>{{harvnbsfn|Syropoulos|2003|pp=213}}</ref>
 
Термин ''рачунарски језик'' се понекад користи синонимно са програмским језиком.<ref>Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, (1985). pp. 91</ref> Међутим, употреба ова два термина варира међу ауторима, а постоје разлике и у погледу њиховог тачног опсега. Један облик употребе описује програмске језике као подскуп рачунарских језика.<ref>Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, ''[http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf Towards a General Ontology of Computer Programs] {{webarchive| url = https://web.archive.org/web/20150707093557/http://home.mis.u-picardie.fr/~site-ic/site/IMG/pdf/ICSOFT2007_final.pdf | date = 7. 7. 2015. }}'', [http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html ICSOFT 2007] {{webarchive| url = https://web.archive.org/web/20100427063709/http://dblp.uni-trier.de/db/conf/icsoft/icsoft2007-1.html | date = 27. 4. 2010. }}. pp. 163–170</ref> У том смислу, језици који се користе у рачунарству са различитим циљевима него што су изражавања рачунарких програма генерално су наменски дизајнирани рачунарски језици. На пример, језици за обележавање се понекад називају рачунарским језицима да би се нагласило да они нису намењени да се користе за програмирање.<ref>S.K. Bajpai, ''Introduction To Computers And C Programming'', New Age International. {{page| year = 2007|isbn=978-81-224-1379-3| pages= 346}}</ref>
 
Једно алтернативно гледиште на употребу језика сматра програмске језике теоретским констрактима за програмирање апстрактних машина, а рачунарске језике њиховим подскупом који се извршава на физичким рачунарима, који имају коначне хардверске ресурсе.<ref>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. {{page| year = 1994|isbn=978-0-12-012108-3| pages= 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."</ref> [[John C. Reynolds|Џон Рејнолдс]] наглашава да су језици са [[formal specification|формалном спецификацијом]] у истој мери програмски језици колико су и језици намењени извршавању. Он исто тако сматра да су текстуални, па и чак графички уноси, који утичу на понашање рачунара програмски језици, упркос чињенице да они обично нису Тјуриншки комплетни, и напомиње да је игнорисање концепата програмских језика разлог постојања многих недостатака у улазним форматима.<ref>John C. Reynolds, ''Some thoughts on teaching programming and programming languages'', [[SIGPLAN]] Notices, Volume 43, Issue 11, November. (2008). pp. 109.</ref>
 
== Машински и асемблерски језици ==
 
Машински језик се састоји од нумеричког кода за операције који одређени рачунар може директно извршити.<ref>{{Cite book| last = Koetsier| first = Teun | title = On the prehistory of programmable machines; musical automata, looms, calculators | publisher = PERGAMON, Mechanisma and Machine Theory 36 | year = 2001| pages= 589–603}}</ref> Тај код је алфанумеричка серија 0 и 1, или бинарни код ([[бајт]]), који се често претвара у [[хексадецимални код]] (на бази броја 16), ради лакше читљивости и модификације. Инструкције машинских језика обично користе један број бајтова за представљање операција, сабирање на примјер, а други за представљање операнда (бројева са којима се врши операција) и/или локације за слиједећу инструкцију. Машински језик је тежак за читање и писање, пошто не личи на конвенционално математичко представљање нити на природни језик, а његов код варира од рачунара до рачунара.
 
[[Асемблер]]ски језик је један ниво изнад машинског језика. Користи кратки мнемонички код за инструкције и омогућава програмеру да уноси имена за блокове меморије која садржи податке. Дизајниран је да омогући лако превођење у машински језик. Иако се блокови података у асемблерском језику позивају преко имена, a не преко адресе у меморији, ипак не постоји могућност софистикованог организовања сложених информација. Као и машински језик, асемблерски језик захтијева од програмера детаљно познавање [[архитектура рачунара|рачунарске архитектуре]]. Користан је када су ти детаљи важни, односно приликом програмирања рачунара за интеракцију са улазним и излазним уређајима, као што су [[штампач]]и, [[скенер]]и, уређаји за чување података и информација (оптички и чврсти дискови), итд.
Линија 84 ⟶ 80:
 
== Литература ==
* {{Cite book| ref=harv|last = Koetsier| first = Teun | title = On the prehistory of programmable machines; musical automata, looms, calculators | publisher = PERGAMON, Mechanisma and Machine Theory 36 | year = 2001| pages= 589–603}}
* {{Cite book |ref=harv| last = Syropoulos| first = Apostolos| last2 = Tsolomitis| first2 = Antonis| last3 = Sofroniou| first3 = Nick| title = Digital typography using LaTeX| publisher = Springer-Verlag| year = 2003|isbn=978-0-387-95217-8| quote = ''TeX is not only an excellent typesetting engine but also a real programming language.''| pages= 213}}
* {{Cite book |ref=harv| last = Scott| first = Michael| title = Programming Language Pragmatics| publisher = [[Morgan Kaufmann]]| year = 2006|isbn=978-0-12-633951-2| quote = ''XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.''| pages= 802}}
{{refbegin|30em}}
* {{Cite book |ref=harv| last = SchmidtScott| first = David A.Michael| title = TheProgramming structureLanguage of typed programming languagesPragmatics| publisher = MIT[[Morgan PressKaufmann]]| year = 19942006|isbn=978-0-26212-19349633951-82| pagesquote = 32''XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.''|pages=802}}
* {{Cite book |ref=harv| last = EttingerSchmidt| first = JamesDavid A.| yeartitle = 2004|The titlestructure =of typed Jacquard'sprogramming Weblanguages| publisher = Oxford UniversityMIT Press| year=1994|isbn=978-0-262-19349-8|pages= 32}}
* {{Cite book |ref=harv| last=Ettinger| first = James|year=2004| title = Jacquard's Web| publisher = Oxford University Press|pages=}}
* {{Cite book|ref=harv| last=Powell| first = Thomas| title = HTML & XHTML: the complete reference| publisher = McGraw-Hill| year = 2003|isbn=978-0-07-222942-4| quote = ''HTML is not a programming language.''| pages= 25}}
* {{Cite book |ref=harv| last = Pierce| first = Benjamin| title = Types and Programming Languages| publisher = MIT Press| year = 2002|isbn=978-0-262-16209-8| pages= 339}}
* {{Cite book |ref=harv| last = Ben Ari| first = Mordechai| title = Understanding Programming Languages| publisher = John Wiley and Sons| year = 1996| quote = 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.}}
* {{Cite book |ref=harv| last = Eckel| first = Bruce| title = Thinking in Java| url = https://books.google.com/books?id=bQVvAQAAQBAJ&pg=PA24&lpg=PA24&dq=imperative&source=bl&ots=LXUh8GZ17E&sig=u2aOh64yjWEYX_nCs9NolKmKhE4&hl=en&sa=X&ei=jLv0U6i1IMKSyAS-7oKADg&ved=0CDUQ6AEwAw#v=onepage&q=imperative&f=false| publisher = [[Pearson Education]]| year = 2006|isbn=978-0-13-187248-6| pages= 24}}
* {{Cite book|ref=harv| last = Koetsier| first = Teun | title = On the prehistory of programmable machines; musical automata, looms, calculators | publisher = PERGAMON, Mechanisma and Machine Theory 36 | year = 2001| pages= 589–603}}
* {{Cite book|ref=harv| last = Aaby| first = Anthony| title = Introduction to Programming Languages| year = 2004| url = http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm| access-date accessdate= 16. 077. 2017| archive-url = https://web.archive.org/web/20121108043216/http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm| archive-date = 088. 11. 2012| dead-url = yes| df = }}
* {{cite book|ref=harv| last1 last= Abelson| first1first = Harold| authorlink1authorlink = Harold Abelson| last2 = Sussman| first2 = Gerald Jay| authorlink2 = Gerald Jay Sussman| title = Structure and Interpretation of Computer Programs| url = http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html| edition = 2nd| year = 1996| publisher = MIT Press| accessdate = 16. 077. 2017|archive-url=https://web.archive.org/web/20180309173822/https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html|archive-date = 099. 033. 2018|dead-url=yes|df=}}
* [[Raphael Finkel]]: ''[https://www.researchgate.net/profile/Raphael_Finkel/publication/220692467_Advanced_programming_language_design/links/0c96052af3e324bf31000000/Advanced-programming-language-design.pdf Advanced Programming Language Design]'', Addison Wesley 1995.
* [[Daniel P. Friedman]], [[Mitchell Wand]], [[Christopher T. Haynes]]: ''[[Essentials of Programming Languages]]'', The MIT Press 2001.