Язык программирования

Материал из Letopisi.Ru — «Время вернуться домой»
(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «'''Язы́к программи́рования''' — формальная знаковая система, предна…»)
 
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
'''Язы́к программи́рования''' — [[формальный язык|формальная]] [[знаковая система]], предназначенная для записи [[Компьютерная программа|компьютерных программ]]. Язык программирования определяет набор [[лексика|лексических]], [[синтаксис (программирование)|синтаксических]] и [[семантика (программирование)|семантических]] правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
 
'''Язы́к программи́рования''' — [[формальный язык|формальная]] [[знаковая система]], предназначенная для записи [[Компьютерная программа|компьютерных программ]]. Язык программирования определяет набор [[лексика|лексических]], [[синтаксис (программирование)|синтаксических]] и [[семантика (программирование)|семантических]] правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.
  
Со времени создания [[История вычислительной техники#1835—1900-е: первые программируемые машины|первых программируемых машин]] человечество придумало более двух с половиной тысяч языков программирования.<ref>{{cite web|url=http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm|title=Список языков программирования|publisher=???|date=???|accessdate=???|lang=en|archiveurl=http://www.webcitation.org/6171oHmhT|archivedate=2011-08-22}}</ref> Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
+
Со времени создания [[История вычислительной техники#1835—1900-е: первые программируемые машины|первых программируемых машин]] человечество придумало более двух с половиной тысяч языков программирования. Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
  
Создатели языков по-разному толкуют понятие ''язык программирования''. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:{{нет АИ|17|07|2009}}
+
Создатели языков по-разному толкуют понятие ''язык программирования''. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:
  
 
* ''Функция:'' язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру [[Оператор (программирование)|инструкций]] по выполнению того или иного [[Вычислительный процесс|вычислительного процесса]] и организации управления отдельными [[Устройство|устройствами]].
 
* ''Функция:'' язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру [[Оператор (программирование)|инструкций]] по выполнению того или иного [[Вычислительный процесс|вычислительного процесса]] и организации управления отдельными [[Устройство|устройствами]].
Строка 69: Строка 69:
 
Современные языки программирования рассчитаны на использование [[ASCII]], то есть доступность всех ''графических'' символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. ''Управляющие'' символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).
 
Современные языки программирования рассчитаны на использование [[ASCII]], то есть доступность всех ''графических'' символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. ''Управляющие'' символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).
  
{{details|Переносимый набор символов}}
+
 
  
 
Ранние языки, возникшие в эпоху [[Шестибитная кодировка|6-битных символов]], использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): <nowiki>A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :</nowiki>
 
Ранние языки, возникшие в эпоху [[Шестибитная кодировка|6-битных символов]], использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): <nowiki>A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :</nowiki>
Строка 77: Строка 77:
 
Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В [[СССР]] существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет [[Встроенный язык программирования 1С:Предприятие]]).
 
Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В [[СССР]] существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет [[Встроенный язык программирования 1С:Предприятие]]).
  
{{details|Языки программирования с ключевыми словами не на английском}}
 
  
 
Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения ([[Delphi (язык программирования)|Delphi 2006]], [[C Sharp|C#]], [[Java]]) поддерживают [[Unicode]].
 
Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения ([[Delphi (язык программирования)|Delphi 2006]], [[C Sharp|C#]], [[Java]]) поддерживают [[Unicode]].
  
 
== Классы языков программирования ==
 
== Классы языков программирования ==
{{Кол|3}}
 
 
* [[Функциональный язык программирования|Функциональные]]
 
* [[Функциональный язык программирования|Функциональные]]
 
* [[Процедурный язык программирования|Процедурные]] (императивные)
 
* [[Процедурный язык программирования|Процедурные]] (императивные)
Строка 97: Строка 95:
 
* [[Скриптовый язык|Скриптовые]] (сценарные)
 
* [[Скриптовый язык|Скриптовые]] (сценарные)
 
* [[Эзотерические языки программирования|Эзотерические]]
 
* [[Эзотерические языки программирования|Эзотерические]]
{{Конец кол}}
+
 
  
 
== См. также ==
 
== См. также ==
{{Кол|3}}
+
 
 
* [[Сравнение языков программирования]]
 
* [[Сравнение языков программирования]]
 
* [[Компьютерный язык]]
 
* [[Компьютерный язык]]
Строка 109: Строка 107:
 
* [[Программирование]]
 
* [[Программирование]]
 
* [[Hello, world!]]
 
* [[Hello, world!]]
{{Конец кол}}
 
 
== Примечания ==
 
{{примечания}}
 
 
== Литература ==
 
* Hal Abelson, Gerald Jay Sussman. [[Структура и интерпретация компьютерных программ|Structure and Interpretation of Computer Programs]]
 
* {{Книга|автор=Роберт У. Себеста.|заглавие=Основные концепции языков программирования|оригинал=Concepts of Programming Languages|ответственный=Пер. с англ|издание=5-е изд|место=М.|издательство=[[Вильямс (издательство)|Вильямс]]|год=2001|страниц=672|isbn=5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)|тираж=5000}}
 
* {{Книга|автор=Вольфенгаген В. Э.|заглавие=Конструкции языков программирования. Приёмы описания|место=М.|издательство=Центр ЮрИнфоР|год=2001|страниц=276|isbn=5-89158-079-9}}
 
* {{Книга|автор=Паронджанов В. Д.|заглавие=Как улучшить работу ума. Алгоритмы без программистов — это очень просто! |nodot=1|место=М.|издательство=Дело|год=2001|страниц=360|isbn=5-7749-0211-0}}
 
* {{Книга|автор=Ф. Бьянкуцци, Ш. Уорден.|заглавие=[http://www.symbol.ru/alphabet/792588.html Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования]|место=СПб.|издательство=[[Символ-Плюс]]|год=2010|страниц=608|isbn=978-5-93286-170-7}}
 
 
== Ссылки ==
 
* [http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm The Language List]{{ref-en}} — более 2500 языков с кратким описанием
 
* [http://www.levenez.com/lang/ Computer Languages History]{{ref-en}} — история языков программирования (с 1954 по май 2004) (содержит регулярно обновляемую диаграмму)
 
 
* [http://www.ntecs.de/old-hp/uu9r/lang/html/lang.en.html Examples]{{ref-en}} — примеры программирования на 162 языках
 
* [http://www.dedasys.com/articles/language_popularity.html Programming Language Popularity]{{ref-en}} — исследование популярности языков программирования за 2004 год
 
* [http://www.realcoding.net/articles/10-yazykov-programmirovanie-kotorye-stoit-izuchat.html 10 языков программирования, которые стоит изучать (2006 г.)]
 
* [http://www.tiobe.com/tpci.htm Programming Community Index]{{ref-en}} — регулярно обновляемый рейтинг популярности языков программирования
 
* [http://shootout.alioth.debian.org/ Computer Language Shootout Benchmarks]{{ref-en}} — сравнение языков программирования по эффективности
 
* [http://bluebones.net/2004/04/programming-languages-that-are-loved/ Programming Languages that are Loved]{{ref-en}} — сравнение языков программирования по «любви» и «ненависти» к ним
 
 
{{Языки программирования}}
 
 
[[Категория:Языки программирования| ]]
 
  
{{Link FA|it}}
 
{{Link FA|vi}}
 
  
[[af:Programmeertaal]]
+
[[Категория:Программирование]]
[[als:Programmiersprache]]
+
[[am:የፕሮግራም ቋንቋ]]
+
[[an:Luengache de programación]]
+
[[ar:لغة برمجة]]
+
[[arz:لغة برمجه]]
+
[[ast:Llinguaxe de programación]]
+
[[az:Proqramlaşdırma dilləri]]
+
[[bat-smg:Pruogramavėma kalba]]
+
[[be:Мова праграмавання]]
+
[[be-x-old:Мова праграмаваньня]]
+
[[bg:Език за програмиране]]
+
[[bn:প্রোগ্রামিং ভাষা]]
+
[[br:Yezh programmiñ]]
+
[[bs:Programski jezik]]
+
[[bug:ᨅᨔ ᨀᨚᨇᨘᨈᨛᨑᨛ]]
+
[[ca:Llenguatge de programació]]
+
[[ckb:زمانی بەرنامەسازی]]
+
[[cs:Programovací jazyk]]
+
[[cv:Компьютер чĕлхи]]
+
[[cy:Iaith rhaglennu]]
+
[[da:Programmeringssprog]]
+
[[de:Programmiersprache]]
+
[[el:Γλώσσα προγραμματισμού]]
+
[[en:Programming language]]
+
[[eo:Programlingvo]]
+
[[es:Lenguaje de programación]]
+
[[et:Programmeerimiskeel]]
+
[[eu:Programazio-lengoaia]]
+
[[fa:زبان‌های برنامه‌نویسی]]
+
[[fi:Ohjelmointikieli]]
+
[[fr:Langage de programmation]]
+
[[gl:Linguaxe de programación]]
+
[[he:שפת תכנות]]
+
[[hi:प्रोग्रामिंग भाषा]]
+
[[hr:Programski jezik]]
+
[[hsb:Programěrowanske rěče]]
+
[[hu:Programozási nyelv]]
+
[[hy:Ծրագրավորման լեզու]]
+
[[ia:Linguage de programmation]]
+
[[id:Bahasa pemrograman]]
+
[[ilo:Lengguahe ti panangprograma]]
+
[[io:Programifo-lingui]]
+
[[is:Forritunarmál]]
+
[[it:Linguaggio di programmazione]]
+
[[ja:プログラミング言語]]
+
[[jbo:samplabau]]
+
[[ka:პროგრამირების ენა]]
+
[[kab:Timeslayin n usihel]]
+
[[kk:Бағдарламалау тілі]]
+
[[ko:프로그래밍 언어]]
+
[[ky:Программалоо тили]]
+
[[la:Lingua programmandi]]
+
[[lb:Programméiersprooch]]
+
[[lt:Programavimo kalba]]
+
[[lv:Programmēšanas valoda]]
+
[[mhr:Программлымаш йылме]]
+
[[mk:Програмски јазик]]
+
[[ml:പ്രോഗ്രാമിംഗ് ഭാഷ]]
+
[[mn:Програмчлалын хэл]]
+
[[mr:प्रोग्रॅमिंग भाषा]]
+
[[ms:Bahasa pengaturcaraan]]
+
[[ne:कम्प्युटर भाषा]]
+
[[nl:Programmeertaal]]
+
[[nn:Programmeringsspråk]]
+
[[no:Programmeringsspråk]]
+
[[oc:Lengatge de programacion]]
+
[[pl:Język programowania]]
+
[[pnb:کمپیوٹر بولی]]
+
[[pt:Linguagem de programação]]
+
[[ro:Limbaj de programare]]
+
[[rue:Язык проґрамованя]]
+
[[sah:Программалааhын тыла]]
+
[[sh:Programski jezik]]
+
[[si:ක්‍රමලේඛන භාෂාව]]
+
[[simple:Programming language]]
+
[[sk:Programovací jazyk]]
+
[[sl:Programski jezik]]
+
[[sq:Gjuhë programimi]]
+
[[sr:Програмски језик]]
+
[[su:Basa program]]
+
[[sv:Programspråk]]
+
[[ta:நிரல் மொழி]]
+
[[te:ప్రోగ్రామింగు భాష]]
+
[[tg:Забони барномасозӣ]]
+
[[th:ภาษาโปรแกรม]]
+
[[tl:Wikang pamprograma]]
+
[[tr:Programlama dili]]
+
[[tt:Программалау теле]]
+
[[uk:Мова програмування]]
+
[[ur:برمجہ زبان]]
+
[[vi:Ngôn ngữ lập trình]]
+
[[war:Pinulongan hin programa]]
+
[[yi:פראגראמירן שפראך]]
+
[[yo:Èdè Ìṣèlànà Kọ̀mpútà]]
+
[[zh:编程语言]]
+
[[zh-min-nan:Thêng-sek gí-giân]]
+
[[zh-yue:程式語言]]
+

Текущая версия на 12:32, 1 июля 2019

Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

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

Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:

  • Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами.
  • Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией.
  • Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.

Содержание

[править] Стандартизация языков программирования

Язык программирования может быть представлен в виде набора спецификаций, определяющих его синтаксис и семантику.

Для многих широко распространённых языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.

[править] Типы данных

Современные цифровые компьютеры обычно являются двоичными и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные как правило отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции.

Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией.

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

[править] Структуры данных

Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов.

Основные структуры данных (списки, очереди, хеш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня. Такие данные структурируются автоматически.

[править] Семантика языков программирования

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).

  • При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
  • Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.
  • Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

[править] Парадигма программирования

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Форт, Factor, PostScript и др.), а также функциональное (Лисп, Haskell, ML, F# и др.) и логическое программирование (Пролог) и язык РЕФАЛ, основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим.

В настоящее время также активно развиваются проблемно-ориентированные, декларативные и визуальные языки программирования.

[править] Способы реализации языков

Языки программирования могут быть реализованы как компилируемые и интерпретируемые.

Программа на компилируемом языке при помощи компилятора (особой программы) преобразуется (компилируется) в машинный код (набор инструкций) для данного типа процессора и далее собирается в исполнимый модуль, который может быть запущен на исполнение как отдельная программа. Другими словами, компилятор переводит исходный текст программы с языка программирования высокого уровня в двоичные коды инструкций процессора.

Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Процессор компьютера, в этой связи, можно назвать интерпретатором для машинного кода.

Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

Для любого интерпретируемого языка можно создать компилятор — например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения.

Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем, при каждом изменении текста программы требуется её перекомпиляция, что замедляет процесс разработки. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция.

Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см. выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий.

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без программы-интерпретатора.

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть, что есть языки, имеющие и интерпретатор, и компилятор (Форт).

[править] Используемые символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).


Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).


Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

[править] Классы языков программирования


[править] См. также

Персональные инструменты
Инструменты