Введение

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

История

В некотором смысле, история теории языков программирования предшествует даже развитию самих языков программирования. Ламбда-исчисление, разработанное Алонзо Черчем и Стивеном Коулом Клине в 1930-х годах, некоторыми считается первым в мире языком программирования, хотя оно было предназначено для моделирования вычислений, а не как средство для программистов описывать алгоритмы компьютерной системе. Многие современные функциональные языки программирования описываются как предоставляющие «тонкую обертку» над ламбда-исчислением, и многие из них легко описываются в терминах этого исчисления. Первым изобретенным языком программирования был Plankalkül, разработанный Конрадом Цузе в 1940-х годах, но ставший общеизвестным лишь в 1972 году (и реализованным только в 1998 году). Первым широко известным и успешным языком программирования высокого уровня был Fortran, разработанный с 1954 по 1957 год командой исследователей IBM под руководством Джона Бэкуса. Успех FORTRAN привел к формированию комитета ученых для разработки «универсального» компьютерного языка; результатом их работы стал ALGOL 58. Независимо от этого, Джон Маккарти из MIT разработал Lisp, первый язык, имеющий академическое происхождение и добившийся успеха. С успехом этих первых попыток языки программирования стали активно изучаться в 1960-х годах и позднее.

Поддисциплины и смежные области

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

Формальная семантика

Формальная семантика — это формальное описание поведения компьютерных программ и языков программирования. Три основных подхода к описанию семантики, или "значения" компьютерной программы, — это денотационная семантика, операциональная семантика и аксиоматическая семантика.

Теория типов

Теория типов – это изучение систем типов, которые представляют собой "управляемый синтаксический метод доказательства отсутствия определенных видов поведения программы путем классификации выражений в соответствии с типами вычисляемых ими значений". Многие языки программирования различаются характеристиками своих систем типов.

Анализ и трансформация программ

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

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

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

Общее и метапрограммирование

Метапрограммирование — это создание программ более высокого порядка, которые при выполнении генерируют другие программы (возможно, на другом языке или являющиеся подмножеством исходного).

Языки, специфичные для конкретной области

Специализированные языки предметной области — это языки, разработанные для эффективного решения задач в конкретной области применения.

Конструкция компилятора

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

Системы времени выполнения

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

Журналы, публикации и конференции

Конференции являются основным местом для представления исследований в области языков программирования. Наиболее известные конференции включают Симпозиум по принципам языков программирования (POPL), конференцию по проектированию и реализации языков программирования (PLDI), Международную конференцию по функциональному программированию (ICFP), Международную конференцию по объектно-ориентированному программированию, системам, языкам и приложениям (OOPSLA) и Международную конференцию по архитектурной поддержке языков программирования и операционных систем (ASPLOS). Заслуживающие внимания журналы, публикующие исследования в области языков программирования, включают ACM Transactions on Programming Languages and Systems (TOPLAS), Journal of Functional Programming (JFP), Journal of Functional and Logic Programming, и Higher Order and Symbolic Computation.