Языки программирования Матросов Александр Васильевич Санкт-Петербургский государственный университет

реклама
Языки программирования
Матросов Александр Васильевич
Санкт-Петербургский государственный
университет
Цели курса
•
•
•
•
Рассмотреть основные языковые концепции, общие для
большинства языков программирования (ЯП).
Познакомить с основами теории формальных языков и
конечных автоматов как математическим аппаратом,
лежащим в основе разработки ЯП.
Показать реализацию некоторых понятий и концепций ЯП,
что позволит программисту понять связь между исходным
текстом программы и ее поведением во время
выполнения (подобный подход отличается от другой
достаточно распространенной точки зрения, что не надо
знать реализацию понятий и конструкций ЯП, а
достаточно хорошо владеть его синтаксисом).
Изучить несколько новых языков программирования, в
которых реализованы присущие многим современным
языкам программирования свойства: Java и Perl.
2
Литература
•
Основная:
–
–
–
•
Пратт Т., Зелковиц М., Языки программирования: разработка и
реализация. : Пер. с англ. / Под общей ред. А. Матросова. — СПб.:
Питер, 2002. — 688 с.
Себеста Роберт У., Основные концепции языков программирования,
5-е изд. : Пер. с англ. — М.: Издательский дом «Вильямс», 2001. —
672 с.
Карпов Ю.Г., Теория и технология программирования. Основы
построения трансляторов. — СПб.: БХВ-Петербург, 2005. — 272 с.
Дополнительная:
–
–
–
–
–
–
Эккель Б., Философия Java. Библиотека программиста. 3-е изд. —
СПб.: Питер, 2003. — 971 с.
Хантер Р., Основные концепции компиляторов. : Пер. с англ. — М.:
Издательский дом «Вильямс», 2002. — 256 с.
Ахо А.В., Сети Р., Ульман Д.Д., Компиляторы: принципы,
технологии и инструменты. — М.: Издательский дом «Вильямс»,
2003. — 768 с.
Хопкрофт Дж.Э., Мотвани Р., Ульман Д.Д., Введение в теорию
автоматов, языков и вычислений, 2-е изд. — М.: Издательский дом
«Вильямс», 2002. — 528 с.
Карпов Ю.Г., Теория автоматов: Учебник для вузов. — СПб.: Питер,
2003. — 206 с.
Матросов А.В., Чаунин М.П., Perl. Программирование на языке
высокого уровня.: Учебник для вузов. — СПб.: Питер, 2003. — 608 с.
3
Что такое язык
•
Язык — система знаков (звуков, сигналов) для передачи и
обработки информации.
Синтаксис — система языковых категорий, относящихся к
соединениям слов и строению предложений (по существу
множество правил, согласно которым основные символы
— слова — языка организуются в предложения).
•
–
–
•
Глокая куздра штеко будланула бока и кудрячит бокренка.
(акад. Щерба)
Он вернулся из командировки в Москву.
Семантика — относится к значению, смыслу языковой
единицы и часто определяется как множество правил
истолкования (интерпретации) значения предложения
(зависит от контекста).
Маша
покрывала
мыла
крышкой.
вар.1 (подлежащее) (сказуемое) (прямое дополнение) (косвенное дополнение)
вар.2 (подлежащее) (прямое дополнение) (сказуемое)
(косвенное дополнение)
•
Контекст — относительно законченная в смысловом
отношении часть текста, высказывания.
4
Что такое язык программирования
•
Языки можно разделить на естественные и
искусственные (формальные).
Язык программирования — формальный язык,
предназначенный для связи человека с
вычислительной машиной. На этом языке
задаются информация (данные) для ЭВМ и
алгоритм обработки данных (программа).
•
–
–
–
ЯП можно рассматривать как любую систему записи
алгоритмов и структур данных (математическая
нотация).
Мы рассматриваем те, которые реализуются на
компьютере.
Информация в ЯП — данные + алгоритмы.
5
Зачем изучать языки программирования
•
•
•
•
•
•
Увеличивает возможности программиста при разработке более
эффективных алгоритмов (реализовать алгоритм можно разными
средствами языка, понимание их существа и как они реализованы
способствует созданию более эффективных программ). Пример —
рекурсия.
Позволяет эффективнее использовать известный программисту ЯП
(реализация структур, понимание концепций: рекурсия, классы в
ООП).
Увеличивает «словарный» запас полезных программистских
конструкций. Язык — это инструмент мышления, но и ограничитель
его. Понимание конструкций других языков способствует их
реализации в используемом программистом ЯП.
Позволяет правильно выбрать язык для реализации задачи:
численные — С, FORTRAN, Ada; искусственный интеллект и
принятие решений — LISP, Prolog, ML; приложения Интернета —
Perl или Java, языки среды .NET.
Способствует более легкому изучению других ЯП.
Способствует более легкой разработке нового ЯП. Мало
программистов разрабатывает новый язык, но интерфейс
пользователя можно рассматривать как некий ЯП. Реализация
похожа на реализацию ЯП. => Знание аспектов реализации ЯП
ускоряет разработку.
6
Первые языки (1)
Языки численных расчетов
•
Первые компьютеры 30-е – 40-е годы прошлого века. Ориентированы на
численные задачи (определение баллистических траекторий) —
электронные калькуляторы.
Начало 50-х — первые символьные нотации (компиляция арифметических
выражений в выполняемый код). Язык А-0 (Grace Hopper) для Univac.
Быстрое кодирование (Speedcoding) John Backus для IBM 701.
Поворотная точка — 1955-1957 — разработка первого компилятора
FORmula TRANslation (FORTRAN). Ориентирован на вычисления, но цель —
полноценный язык со структурами управления, вводом и выводом. Особое
внимание на эффективность вычислений, чтобы конкурировать с ручным
кодированием. Некоторые конструкции разработаны специально для IBM
704. Он имел успех. Стандарт FORTRAN 66. Далее FORTRAN 77,
FORTRAN 90.
В Европе (Германия — Peter Naur) комитет по разработке алгоритмического
языка. Появился под названием International Algorithmic Language (IAL), но
стал называться ALGorithmic Language (ALGOL) (1958). Стандарт ALGOL 60.
Академический язык. Цели:
•
•
•
–
–
–
–
•
Система записи близка к стандартной математической.
Способен описывать алгоритмы.
Программы компилируются в машинный код.
Не привязан к конкретной архитектуре компьютера.
Цели достаточно амбициозны для тех времен. (Чтобы был близок к "чистой"
математике, подпрограмма реализовалась как макро подстановка => вызов
параметров по имени).
7
Первые языки (2)
Языки численных расчетов
•
•
•
•
•
•
•
ALGOL не был столь популярен в США, как в Европе, но под его влиянием появился
JOVIAL (Jules' Own Version of IAL — Jule Schwartz), ставший стандартом разработки
программ для военно-воздушных сил США.
Backus при редактировании отчета по описанию языка ALGOL под влиянием концепции
контекстно-свободных языков (Chomsky, 1959) использовал синтаксическую нотацию,
ставшую началом теории формальных грамматик. Она известна как НФБ-нотация
(Backus-Naur Form).
Производитель компьютеров компания Burroughs использовала при реализации нового
компьютера стек для вычисления арифметических выражений. Толчком послужила
работа польского математика Лукашевича о бесскобочной записи выражений.
Компилятор ALGOL стал быстрее компилятора FORTRAN.
В 60-х разработана концепция определяемых пользователем типов. Simula-67
(норвежцы Nygaard и Dahl) ввел классы, которые Страуструп в 80-х ввел в С и получил
С++. Вирт пытался ввести определяемые пользователем типы в ALGOL-W, но язык не
имел успеха. Его же Pascal (1968-1970) де-факто стал стандартом при изучении
информатики в 70-х.
Новые концепции пытались реализовать в ALGOL 68, но он так и остался всего лишь
теоретическим языком из-за своей сложности, хотя компиляторы и были созданы.
Ввод новой серии компьютеров IBM 360 в 1963 — исходная точка для нового языка NPL
(New Programming Language), затем MPPL (Multi-Purpose Programming Language) в
связи с недовольством сотрудников English National Physical Laboratory, и в конце
концов PL/I. Он сочетал вычислительные возможности FORTRAN и возможности
разработки деловых приложений (для бизнеса) языка COBOL. Скромный успех.
BASIC (Beginners All-purposed Symbolic Instruction Code) — для вычислений не
учеными, но дальнейшее его развитие далеко вышло за первоначальные цели (Visual
Basic, Visual Basic for Application, VBScript).
8
Первые языки (3)
•
•
•
Языки обработки деловой информации
Обработка деловых данных (разнообразный
анализ биржевых данных, информации по
клиентам и т. п.) — следующая, после численных
расчетов, область приложения программных
продуктов и разработчиков языков
программирования.
FLOWMATIC (Grace Hopper, 1955). Цель —
разработка приложений для бизнеса в форме
англо-подобного текста.
В 1959 Министерство обороны США создало
комитет по разработке языка обработки данных,
который как можно ближе был бы к английскому. В
1960 появился COBOL (COmmon Business Oriented
Language). Пересматривался в 1974 и 1984 годах.
Он и сейчас используется.
9
Первые языки (4)
Языки искусственного интелекта
•
•
•
Интерес к подобного рода языкам возникает с появлением в 50-х IPL
(Information Processing Language). Имел большой успех (IPL-V), но уступил LISP
(LIst PRocessing) (John McCarthy). Функциональный язык обработки списков. Его
область — реализация игр: выстроить дерево возможных ходов (связанный
список), а потом найти оптимальную стратегию.
Другой естественной областью применения этого языка стал автоматический
машинный перевод текста, где одна цепочка символов заменятся на другую.
Первой разработкой был язык COMIT (MIT), но его код был запатентован,
поэтому AT&T Bell Labs разработала SNOBOL.
Prolog — основан на концепциях математической логики, в отличие от LISP —
языка общего назначения обработки списков.
Системные языки
• Язык ассемблера преобладал многие годы.
• Были CPL и BCPL
• Но только С (70-е годы) имел успех. На нем была написана
операционная система UNIX, и он показал эффективность
языка высокого уровня в системной области, да и в других.
10
Выводы
11
Скачать