Език за програмиране

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене
Пример за сорс код, писан на Java, който ще изпише (print) съобщението "Hello World!" на стандартния изходен поток, когато е компилиран и после изпълнен от Виртуалната Java машина.

Език за програмиране е изкуствен език, предназначен за изразяване на изчисления, които могат да се извършат от машина, по-специално от компютър. Езиците за програмиране могат да се използват за създаване на програми, които контролират поведението на машина, да реализират алгоритми точно или във вид на човешка комуникация.

Много програмни езици имат някаква форма на писмена спецификация на синтаксиса си (форма) и семантика (значение). Някои езици са дефинирани чрез спецификация. Например, езикът за програмиране C език е специфициран чрез ISO стандарт. Други езици като Perl, имат доминираща имплементация, която се използва като препоръка.

Най-ранните програмни езици предхождат изобретяването на компютъра, и са били използвани за управление на поведението на машини като жакардов стан и механично пиано. Създадени са хиляди на различни езици за програмиране, предимно в областта на компютрите, и много повече се създават всяка година. Повечето програмни езици описват изчисляването в императивен вид, т.е. като последователност от команди, въпреки че някои езици, като например тези, които поддържат функционално програмиране или логическо програмиране, използват на алтернативни форми на описание.

Дефиниции[редактиране | edit source]

Езикът за програмиране е нотация за писане на програми, които са спецификации на изчисляване или алгоритъм.[1] Някои, но не всички автори ограничават понятието „език за програмиране“ за тези езици, които могат да изразят всички възможни алгоритми.[1][2] Отличителните белези, които често се смятат за важни за това какво представлява един език за програмиране, включват:

  • Функция и цел: Компютърен програмен език е език[3], използван за писане на компютърни програми, които са свързани с това компютър да извършва някакъв вид изчисление[4] или алгоритъм и евентуално да управлява външни устройства като принтери, дискови устройства, роботи,[5] и така нататък. Например PostScript програми са често създадени от друга програма. за управление на принтер или дисплей. По-общо казано, един език за програмиране може да опише изчисление, на някаква, вероятно абстрактна, машина. Общоприето е, че една пълна спецификация за един език за програмиране, включва описание, вероятно идеализирано, на машина или обработчик за този език.[6] В контекста на практиката, един език за програмиране, засяга компютър и следователно езиците за програмиране обикновено се дефинират и изучават по този начин.[7] Програмните езици се различават от естествените езици по това, че естествените езици се използват за взаимодействие между хора, докато езиците за програмиране позволяват хората да задават инструкции на машините.
  • Абстракции: Езиците за програмиране обикновено съдържат абстракции за дефинирането и работата със структури от данни или за управление на потока на изпълнение. Практическата необходимост, един език за програмиране да поддържа адекватни абстракции се изразява чрез принципа на абстракцията;[8] този принцип понякога е формулиран като препоръка към програмиста, да използва подобни абстракции по подходящият начин.[9]
  • Изразителна сила: Теорията на алгоритмите, класифицира езиците на базата базата на изчисленията, които са способни да изразят. Всички Тюрингови езици могат да реализират един и същ набор от алгоритми. ANSI/ISO SQL и Charity са примери за езици, които не са Тюрингови езици, но често се наричат езиците за програмиране.[10][11]

Маркиращи езици като XML, HTML или troff, които дефинират структурирани данни, не се считат за езици за програмиране.[12][13][14] Все пак, езиците за програмиране могат да имат подобен синтаксис с маркиращите езици, ако е дефинирана семантиката. XSLT например, е Тюрингов диалект на XML. [15][16][17] Освен това, LaTeX, който се използва предимно за структуриране на документи, съдържа и Тюрингово подмножество.[18][19]

Терминът компютърен език понякога е взаимозаменяем с език за програмиране.[20] Въпреки това, употребата на двата термина е варира при различните автори, включително обхвата на всеки един от тях. При едната употреба, езиците за програмиране се описват като подмножествто на компютърните езици.[21] В този ред на мисли, езици, използвани в компютинга, които имат различна цел от това да се създават компютърни програми са обикновено целеви компютърни езици. Така например, езиците за маркиране, понякога биват наричани компютърни езици, с цел да се подчертае, че не се използват за програмиране.[22] При другата употреба на термина, езиците за програмиране се разглеждат като теоретични конструкции за програмиране на абстрактни машини, и компютърните езици като тяхно подмножество, които работят на физически компютри, които имат ограничени хардуерни ресурси.[23] Джон Рейнолдс подчертава, че формалните езици, са точно толкова, колкото езици за програмиране, колкото и езиците, предназначени за изпълнение. Той също така твърди, че текстови и дори графични входни формати, които влияят на поведението на компютъра са програмни езици, независимо от факта, те често не са Тюрингови, и отбелязва, че това непознаване на концепциите на програмните езици е причина за много недостатъци във входните формати.[24]

Вижте също[редактиране | edit source]

Бележки[редактиране | edit source]

  1. а б Aaby, Anthony. Introduction to Programming Languages. 2004.
  2. In mathematical terms, this means the programming language is Turing-complete MacLennan, Bruce J.. Principles of Programming Languages. Oxford University Press, 1987. ISBN 0-19-511306-3. с. 1.
  3. Steven R. Fischer, A history of language, Reaktion Books, 2003, ISBN 186189080X, p. 205
  4. ACM SIGPLAN. Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery. // 2003. Посетен на 2006-06-19., 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.
  5. Dean, Tom. Programming Robots. // Building Intelligent Robots. Brown University Department of Computer Science. Посетен на 2006-09-23.
  6. 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 012012108, p.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]
  7. Ben Ari, Mordechai. Understanding Programming Languages". John Wiley and Sons, 1996. 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.
  8. David A. Schmidt, The structure of typed programming languages, MIT Press, 1994, ISBN 0262193493, p. 32
  9. Pierce, Benjamin. Types and Programming Languages. MIT Press, 2002. ISBN 0-262-16209-1. с. 339.
  10. Digital Equipment Corporation. Information Technology - Database Language SQL (Proposed revised text of DIS 9075). // ISO/IEC 9075:1992, Database Language SQL. Посетен на June 29, 2006.
  11. The Charity Development Group. The CHARITY Home Page. // December 1996. Посетен на 2006-06-29., Charity is a categorical programming language..., All Charity computations terminate.
  12. XML in 10 points W3C, 1999, XML is not a programming language.
  13. Powell, Thomas. HTML & XHTML: the complete reference. McGraw-Hill, 2003. ISBN 0-07-222-942-X. с. 25. 'HTML is not a programming language.'
  14. XML For Dummies, 4th Edition. Wiley, 2005. ISBN 0-7645-8845-1. с. 20. '...it's a markup language, not a programming language.'
  15. http://www.ibm.com/developerworks/library/x-xslt/
  16. http://msdn.microsoft.com/en-us/library/ms767587(VS.85).aspx
  17. Scott, Michael. Programming Language Pragmatics. Morgan Kaufmann, 2006. ISBN 0-12-633951-1. с. 802. 'XSLT, though highly specialized to the transformation of XML, is a Turing-complete programming language.'
  18. http://tobi.oetiker.ch/lshort/lshort.pdf
  19. Syropoulos, Apostolos и др. Digital typography using LaTeX. Springer-Verlag, 2003. ISBN 0-387-95217-9. с. 213. 'TeX is not only an excellent typesetting engine but also a real programming language.'
  20. Robert A. Edmunds, The Prentice-Hall standard glossary of computer terminology, Prentice-Hall, 1985, p. 91
  21. Pascal Lando, Anne Lapujade, Gilles Kassel, and Frédéric Fürst, Towards a General Ontology of Computer Programs, ICSOFT 2007, pp. 163-170
  22. S.K. Bajpai, Introduction To Computers And C Programming, New Age International, 2007, ISBN 812241379X, p. 346
  23. 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 012012108, p.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."
  24. John C. Reynolds, Some thoughts on teaching programming and programming languages, SIGPLAN Notices, Volume 43, Issue 11, November 2008, p.109