Электронная библиотека диссертаций и авторефератов России
dslib.net
Библиотека диссертаций
Навигация
Каталог диссертаций России
Англоязычные диссертации
Диссертации бесплатно
Предстоящие защиты
Рецензии на автореферат
Отчисления авторам
Мой кабинет
Заказы: забрать, оплатить
Мой личный счет
Мой профиль
Мой авторский профиль
Подписки на рассылки



расширенный поиск

Методологические основания развития языков программирования Казакова Анастасия Евгеньевна

Методологические основания развития языков программирования
<
Методологические основания развития языков программирования Методологические основания развития языков программирования Методологические основания развития языков программирования Методологические основания развития языков программирования Методологические основания развития языков программирования
>

Диссертация - 480 руб., доставка 10 минут, круглосуточно, без выходных и праздников

Автореферат - бесплатно, доставка 10 минут, круглосуточно, без выходных и праздников

Казакова Анастасия Евгеньевна. Методологические основания развития языков программирования : диссертация ... кандидата философских наук : 09.00.08 / Казакова Анастасия Евгеньевна; [Место защиты: Моск. гос. ун-т им. М.В. Ломоносова. Филос. фак.]. - Москва, 2008. - 146 с. РГБ ОД, 61:08-9/25

Содержание к диссертации

Введение

Глава 1. Развитие концепций языков программирования 16

1.1. Определение понятия «язык программирования» 18

1.1.1. Программирование первых вычислительных машин... 19

1.1.2. Программирование как рассуждение 27

1.1.3. Программирование как создание алгоритма 31

1.1.4. Программирование как моделирование программ 37

1.2. Практические основания развития языков программирования... 44

1.2.1. Зависимость языков программирования от архитектурных особенностей конкретного вычислителя 44

1.2.2. Создание «предметно-ориентированных» языков программирования 54

1.2.3. Разработка «универсальных» языков 57

Глава 2. Практические реализации языков программирования 62

2.1. Методы реализации языков программирования 63

2.1.1. Практические решения 63

2.1.2. Проблемы реализации языков программирования 67

2.2. Исследования в области языков программирования, направленные на преодоление проблем реализации 74

2.2.1. Становление дисциплины программирования 75

2.2.2. Теория абстрактной машины А. Тьюринга 77

2.2.3. Теория порождающей грамматики Н. Хомского 86

Глава 3. Методологические основания для выделения парадигм программирования 94

3.1. Исследования синтаксиса и семантики языков программирования 94

3.1.1. Метод описания синтаксиса языков программирования - «форма Бэкуса-Наура» 95

3.1.2. Основные подходы к описанию семантик языков программирования 107

3.2. Парадигмы программирования 118

3.2.1. Понятие «парадигма» Т.С. Куна и «парадигмы» программирования 119

3.2.2. Теория языков программирования как становящаяся техническая теория 124

Заключение 127

Библиография 138

Введение к работе

Актуальность темы исследования.

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

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

Для аналитической традиции характерно рассмотрение языка как метода Основную интуицию этой традиции ЕД Смирнова1 относит к Э В де Кондильяку « искусство рассуждать сводится к хорошо построенному языку Это соображение относительно абстрактных и общих

' Смирнова Е Д, Логика и философия М РОССПЭН, 1996 Стр 31

идей доказывает, что их ясность и точность зависят исключительно от порядка, в котором мы создали наименования классов, и что, следовательно, для определения этого вида идей есть только одно средство — хорошо построить язык2» Тот факт, что искусственные языки можно рассматривать как модели фрагментов естественного языка3, дополняется специфическими управленческими и информационными задачами, которые также стимулировали появление языков программирования Данное методологическое исследование может показать как осуществляется эта программа не столько по отношению к рассуждениям, потому что это было бы в компетенции логики, сколько по отношению к специальному языку вычислений, позволяющему решать задачи, которые в результате определенной интерпретации могут быть не только вычислительными

Программирование — деятельность по созданию программ для вычислительных устройств посредством специальных языков или систем программирования Теоретические основы этой деятельности в полной мере соответствуют характерным чертам технических дисциплин «Фундаментальные исследования в технических науках часто отождествляются с теоретическими исследованиями в технике, которые находятся между математическими, естественнонаучными теориями, с одной стороны, и инженерной практикой — с другой, и даже включают в себя элементы дедуктивно-аксиоматических теорий4» Появление неклассических научно-технических дисциплин отмечается как новая тенденция в развитии технических наук Такие дисциплины появляются «в результате широкого научного движения (в частности, системного), конкретизации и доработки общих методологических, например, системных понятий и представлений, а также обобщения практики

2 Об искусстве рассуждать // Кондильяк Э В де Сочинения в трех томах —М Мысль, 1983 T3 стр
224

3 Смирнова Е Д, Логика и философия М РОССПЭН, 19% Стр 29

4 Философия техники и технических наук // Современные философские проблемы естественных,
технических и гуманитарных наук учебник для аспирантов и соискателей ученой степени кандидата
наук / под общ ред д-ра филос наук, проф В В Миронова — М Гардарики, 2006 Стр 407

решения определенного класса научно-технических задач5» Эти
дисциплины не могут быть отнесены ни к естественным, ни к
техническим, ни к общественным наукам, они носят комплексный,
междисциплинарный характер Теоретические основания

программирования вычислительных устройств можно причислить к такого рода дисциплинам

Данное исследование черпает материал из области, которая в современной научной литературе называется «Computer Science» (иногда «Computer Sciences») — «компьютерная наука» (науки) или «наука о компьютерах» В рамках компьютерных наук возникли новые прикладные направления научных исследований, такие как вычислительная математика, вычислительная физика, вычислительная химия Компьютерные науки явились результатом синтеза логических, математических, физических, лингвистических, психологических и других дисциплин Уточнение смысла некоторых из этих вопросов развивается в направлении проблем, которые мы назвали бы философскими Например, проблема соотношения материального и идеального в компьютерной науке принимает вид вопроса о физических границах реализации идеальных процессов с помощью материальных устройств В современном научном языке это направление называют проблемой создания искусственного интеллекта (Artificial Intelligence) Эта проблема тесно связана с проблемой соотношения языка и мышления Она выражается в вопросах о влиянии языка на сознательные структуры, о том, как возможно познание мышления с помощью языка, о границах формализации языков, о соотношении естественных и искусственных языков Ряд других проблем относятся к области философских оснований математики и логики, и связаны с вопросами о категоризации мыслительных абстракций путем упорядочивания, сравнения, вычисления и других операций над абстрактными объектами В компьютерной науке эти вопросы

5 Там же Стр 418

приобретают вид рассуждений о соотношении дискретности и непрерывности, парадоксах теории множеств, пределов вычислимости и алгоритмизации

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

По мнению Герберта Саймона, изучение систем в науке и технике определено потребностью в анализе сложности На наш взгляд некоторые особенности сложности таких организованных систем, как вычислительные машины, запечатлены в структуре языков программирования «Благодаря абстрактному характеру и общности языка вычислительных машин как устройств для манипуляции символами, цифровые вычислительные машины существенно расширили диапазон систем, поведение которых поддается имитации Такую имитацию мы теперь обычно называем «моделированием» и стараемся разобраться в имитируемой системе, изучая поведение модели в разнообразных модельных и имитационных средах6»

Языки программирования являются средством представления знания для компьютерных систем Они предлагают концептуальные средства представления и возможности моделирования, приспособленные к решению конкретных задач Многообразие конструкций этих языков, сложившееся за довольно короткий по историческим меркам период — около шестидесяти лет — является благотворной почвой для размышлений о вопросах логико-философского и методологического характера, связанных с формализованными языками Дело в том, что одна и та же задача может быть решена различными программными средствами Основанием этого различия может быть не только выбор алгоритма

6 Саймон Г, Науки об искусственном пер с англ Изд 2-е — М , Едиториал УРСС, 2004 Стр 23

решения конкретной задачи, или модели вычислительного устройства, на котором этот алгоритм будет выполнен, но также и языком, средствами которого этот алгоритм описан «Эффективность машинных алгоритмов во многом зависит от используемых языков и систем программирования7»

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

Степень разработанности темы исследования.

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

Теоретические исследования в области языков программирования представляют собой работы по упорядочению и систематизации множества этих языков Примерами таких исследований могут служить работы профессора, академика РАН В Э Вольфенгагена8 (МИФИ, ЮрИнфо), профессора Н Н Непейводы9 (УдГУ, НГУ), С С Лаврова10 Эти ученые отмечают, что работу по типизации языков программирования приходится осуществлять чуть ли не каждому преподавателю

7 Теслер Г С Место и роль алгоритмического базиса в решении проблемы производительности //
Математические машины и системы 1997 № 1 стр 25-33

8 Вольфенгаген В Э, Конструкции языков программирования Приемы описания — М АО «Центр
ЮрИнфоР»,2001

Вольфенгаген В Э, Методы и средства вычислений с объектами Аппликативные вычислительные системы — М АО "Центр ЮрИнфоР", 2004

9 Непейвода Н Н , Стили и методы программирования М «Интернет-Ун-т Инферм Технологий», 2005
'"Лавров С С, Основные понятия и конструкции языков программирования — М Финансы и
статистика, 1982

подготавливающему вводную лекцию к курсу программирования Это позволяет говорить о программировании как становящейся, развивающейся области науки и техники Подобные исследования ведутся во многих университетах и научно-исследовательских организациях мира, так или иначе связанных с областью компьютерных наук

Фундаментальными работами в области языков программирования принято считать «Искусство программирования» Д Кнута", «Дисциплина программирования» Э Дейкстры12, «Алгоритмы + структуры данных = программы» Н Вирта^3 Эти ученые являются лауреатами премии Тьюринга14 и разработчиками наиболее широко известных языков программирования Эти работы послужили основными источниками для данного исследования

Основные работы, посвященные анализу эволюции языков программирования — это работы М Бен-Ари15, Т Пратта16 и Р У Себесты17 К этому же типу относятся «Методы программирования» Б Мейера и К Бодуэна18, «Эволюция языков программирования» Г Грогоно19 Они также послужили материалом для данной работы20

" Русский перевод КнутД Искусство программирования М 2000 (Англ Donald Е Knuth, The Art of

Computer Programming, Volumes 1-4, Addison-Wesley Professional 1997 (1-st ed - 1968))

12 Русский перевод Дейкстра Э Дисциплина программирования 1-е изд — М Мир, 1978 — с 275

(Англ A Discipline of Programming, Prentice-Hall Series in Automatic Computation, 1976)

11 Русский перевод H Вирт Алгоритмы + структуры данных = программы М , "Мир", 1985 (Англ

Algorithms + Data Structures = Programs Prentice-Hall, Inc , Englewood Cliffs (Nov 1975))

14 Самая престижная премия в области информатики, ежегодно вручаемая Ассоциацией вычислительной
техники за выдающийся научно-технический вклад в этой области

15 Бен-Ари М Языки программирования Практический сравнительный анализ — М Мир, 2000
(оригинал - Principles of Concurrent Programming Prentice-Hall, Englewood Cliffs, NJ 1982)

16 Пратт T, Языки программирования разработка и реализация — Пер с англ Под ред

ЮМ Баяковского М Мир 1989 (оригинал — Prentice-Hall Inc, Englewood Cliffs New Jersey, USA

1975)

" "Concepts of Programming Languages" by Robert W Sebesta, The Benjamin/Cummmgs Publishing

Company, Inc, 1993 (Русский перевод Себеста P У, «Основные концепции языков программирования»

М,Спб,Киев «Вильяме» 2001)

18 Мейер Б, Бодуэн К, Методы программирования в 2-х томах Т 1 , пер с франц Ю А Первина М
Мир 1982 (оригинал Direction des Etudes et Recherches d'Electncite de France 1978)

19 Grogono G, The Evolution of Programming Languages Department of Computer Science Concordia
University Montreal, Quebec 1999

20 Материалом послужили также работы Ellis Horowitz, Fundamentals of Programming Languages
(Rockville, Maryland Computer Science Press, 1983) и Bruce MacLennan, Principles of Programming
Languages Design, Evaluation, and Implementation (London Oxford University Press, 1987)

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

Все эти исследования имеют точки пересечения, поскольку преследуют цель — систематизировать множество знаний о языках программирования, что определяет становление теории программирования как научной дисциплины

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

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

Цель данного исследования — выявить методологические основания развития языков программирования и определить этапы становления теории языков программирования как технической теории

Для достижения этой цели требуется решить следующие задачи:

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

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

  3. Определить направление развития теоретических исследований в области языков программирования и выявить специфические характеристики становления теории языков программирования как научно-технической теории

В качестве общетеоретических методов исследования использован системный подход, а также методы структурного и функционального анализа, определенные спецификой искусственных языков Методологической основой исследования является концепция развития технической теории, разработанная А Г Гороховым и представленная в работе «Философия науки и техники21»

Положения, выносимые на защиту:

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

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

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

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

21 Степин В С , Горохов В Г, Розов М А , Философия науки и техники М Гардарики, 1999

метод по отношению к языку заданной предметной области, задачи которой предполагается решить посредством вычислительной машины 5 Развитие теоретических исследований в области языков программирования определено стремлением повысить выразительные возможности языковых конструкций посредством реализации средств создания предельно абстрактных математических объектов

Новизна предложенного исследования может быть суммирована в следующих положениях

  1. Теория языков программирования развивается согласно особенностям, определенным концепцией развития технических теорий В Г Горохова, выбранной в качестве методологии для данного исследования

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

  3. Междисциплинарный характер исследований, который определяется в ходе становления теории языков программирования, можно объяснить поиском решений, обеспечивающих возможность моделирования «поведения» любых искусственных и даже некоторых естественных систем.

Теоретическое и практическое значение диссертации

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

Апробация диссертации происходила в рамках курса «Телекоммуникации и компьютерные технологии», читаемого автором начиная с 2005 г на философском факультете МГУ им М В Ломоносова, а также при разработке мультимедийного методического пособия для обязательной общеобразовательной дисциплины «Математика и информатика» (2006 г) Кроме этого, в 2007 г автором была разработана программа и учебно-методический комплекс для курса «Информатика», входящего в федеральный компонент программ инновационного типа по философии Основные результаты исследования были изложены на научных конференциях «Философия искусственного интеллекта» (МИЭМ, 2005 г), «Ломоносов-2005» (МГУ), на IV Российском философском конгрессе «Философия и будущее цивилизации» (МГУ, 2005 г), «Философия математики» (МГУ, 2007)

Структура диссертации.

Диссертация состоит из введения, трех глав, каждая из которых включает 2 параграфа, заключения и библиографии Логика построения работы соответствует логике решаемых в ней задач

Программирование первых вычислительных машин...

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

Первые машины, сконструированные для произведения вычислений — математический калькулятор Вильгельма Шикарда (1623 г.), «Паскалина» Блеза Паскаля (1642 г.), механический калькулятор Готфрида Лейбница (1673 г.) — были сконструированы для исполнения только одной задачи, или, в лучшем случае, для решения некоторого подмножества задач, сводящихся к сложению, умножению и делению. Определенные их конструкцией операции не требовали программного описания.

В большинстве исторических работ первым трудом по программированию принято считать комментарии (а точнее примечания переводчика) к статье Чарльза Бэббиджа, написанные Адой Лавлейс в 1843 г.29

В этих комментариях появились некоторые фундаментальные понятия, наметившие дальнейшее направление усовершенствования вычислительных машин. Так, например, из комментариев становится понятно, что в число операций, выполняемых Аналитической Машиной Ч. Бэббиджа, помимо четырех арифметических, были включены операция условного перехода и операции с кодами команд, а программа вычислений задавалась с помощью устройства управления. Понятие «условного перехода», лежащее в основе автоматизации вычислений, содержит в себе операцию сравнения. Именно сравнение, сравнение как различение внутри жестко заданной условной системы, которой является алгоритм, возможно, и не синтезирует новое знание, но исключает «неподходящее» из «предложенного».

В своих комментариях Ада Лавлейс приводит программу для решения системы двух линейных уравнений с двумя неизвестными и программу для вычисления чисел Бернулли, где демонстрирует возможность использования рекурсивных вложенных циклов. В ее терминологии вложенный цикл может быть обеспечен за счет использования вспомогательных (supplying) переменных, которые организуют дополнительный алгоритм.

В комментариях вводятся и объясняются понятия «операция», «рабочая переменная», «цикл операций» и «цикл циклов». «Под словом операция, мы понимаем любой процесс, который изменяет взаимное отношение двух или более вещей, какого рода эти отношения ни были бы. ... Операционный механизм может быть приведён в действие независимо от объекта, над которым производится операция. ... Этот механизм может действовать не только над числами, но и над другими объектами, основные соотношения между которыми могут быть выражены с помощью абстрактной науки об операциях и которые могут быть приспособлены к действию операционных обозначений и механизма машины. ... Предположим, например, что соотношения между высотами звуков в гармонии и музыкальной композиции поддаются такой обработке; тогда машина сможет сочинять искусно составленные музыкальные произведения любой сложности или длительности30». Кроме того, в работе рассмотрено запоминающее устройство и предложена система для символического обозначения данных, содержащихся в памяти машины.

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

«Аналитическая машина не претендует на то, чтобы создавать что-то действительно новое. Машина может выполнить все то, что мы умеем ей предписать. Она может следовать анализу, но она не может предугадать какие-либо аналитические зависимости или истины. Функции машины заключаются в том, чтобы помочь нам получить то, с чем мы уже знакомы31». Аналитическая машина способна выполнять точно описанную последовательность операций до тех пор, пока не будет остановлена, но, создавая эту последовательность, мы должны четко представлять себе результат, к которому хотим прийти по окончании выполнения этих операций. «Функция может быть вычислена машиной без того, чтобы предварительно быть разрешенной с помощью головы и рук человека ».

Комментарии А. Лавлейс имеют описательный характер и представляют собой, по сути, осмысление работы аналитической машины на естественном языке. Предложенные же программы описаны в основном чисто математическими средствами. Само программирование машины Бэббиджа осуществлялось человеком, посредством механических действий (как и в случае первых ЭВМ). Ряд других вычислительных машин, созданных после машины Ч. Бэббиджа, также не требовали создания специальных языков программирования. Порядок команд, которые должна была выполнять машина, вводился оператором непосредственно с помощью пульта управления устройством, а для того, чтобы запомнить последовательность вводимых команд было достаточно памяти человека, управляющего такой вычислительной машиной.

Зависимость языков программирования от архитектурных особенностей конкретного вычислителя

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

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

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

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

Подробно о способе такого перевода мы остановимся в следующей главе. К первым языкам высокого уровня относятся процедурные или, как их еще называют, проблемно-ориентированные языки. Их «высокий уровень» определяется как раз той особенностью, что, однажды описав правило перевода математической записи в машинный код, программисту не приходится прибегать к описанию программы непосредственно на машинно-ориентированном языке. Осуществляется это за счет однажды написанной программы, реализующей этот перевод.

Для описания (и представления) правил перевода языковых выражений некоторого уровня необходим язык более высокого уровня — мета-язык. Описать правило перевода на языке компьютерных наук — значит создать транслятор {компилятор или интерпретатор языка).

Создать первый работающий компилятор удалось только в 1952 г. Его написала для компьютера UNIVAC Грейс Мюррей Хоппер (1906-1992), работавшая тогда в компании Remington Rand. Грейс Хоппер связала свою жизнь с вычислительной техникой еще в 1944 г., и даже разменяв девятый десяток, продолжала работать в компьютерной индустрии, отвечая за связи с общественностью в корпорации DEC93.

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

Так, например, невозможно достоверно установить, была ли форма управляющих структур языка ФОРТРАН навязана конструкторами компьютера IBM 704, или же разработчики языка предложили использовать именно такую форму команд в компьютере. Этот факт сложно установить

Digital Equipment Corporation. именно потому, что язык программирования понимался как полностью зависимый от «вычислителя», он мыслился как «продолжение» вычислителя, расширяющее возможность записи и реализации алгоритма.

Такую тесную зависимость конструкций языка от архитектуры компьютера продемонстрируем следующим примером. Машина ЮМ 704 содержала трехвариантную команду ветвления, основанную на сравнении величины из ячейки памяти с величиной в регистре, поэтому условный оператор IF записывался в следующей форме: IF (арифметическое выражение) оператор 1, оператор 2, оператор 3

Если значение арифметического выражения оказывалось отрицательным, то машина переходила к выполнению действия, предписанного первым оператором, если значение выражения было равно нулю, выполнялся второй оператор, если же значение оказывалось положительным, выполнялся третий по счету оператор. Так, все управляющие операторы языка ФОРТРАН точно описывали работу машины IBM 704.

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

Б.П. Малиновский определяет направление технических разработок в Советском Союзе того времени следующим образом. «Проектируя МИРы, мы поставили дерзкую задачу — сделать машинный язык возможно более близким к человеческому (имеется в виду математический, а не разговорный язык, хотя мы делали опыты и по созданию машин с нормальным человеческим языком). И такой язык «Аналитик» был создан и поддержан оригинальной внутримашинной системой его интерпретации94».

На основании степени удаленности языка постановки задачи от машинного кода, то есть степени снижения семантического разрыва, выделяют три поколения языков программирования. / поколение - машинные языки, о которых говорилось выше, семантический разрыв наиболее высок. II поколение - языки ассемблера (машинно-зависимый мнемонический код). Представляют собой множество сокращений, взаимно однозначно соответствующих операторам машинного языка. III поколение — языки высокого уровня. «Семантический разрыв» снижается за счет введения дополнительных абстрактных конструкций, облегчающих процесс формализации задачи. Создание подобной иерархической структуры осуществляется благодаря возможности однозначного определения1 примитивов.

Отличительной особенностью первых версий языков типа ALGOL и FORTRAN являлось представление о памяти вычислительной машины как о массиве числовых данных, т.е. как о последовательности ячеек памяти, имеющих уникальный идентификатор — адрес95. Поэтому основные конструкции этих языков описывают операции относительно перемещения данных из одной ячейки памяти в другую, сравнения данных, хранящихся в ячейках с разными адресами (как в случае с оператором IF языка ФОРТРАН), и тому подобное.

Исследования в области языков программирования, направленные на преодоление проблем реализации

Правила подстановки должны быть упорядочены и применяться последовательно для порождения конечного множества терминальных цепочек. Рекурсивность синтаксической части должна обеспечиваться трансформационными правилами. «Для каждой из четырех синтаксических категорий (а именно существительного, глагола, прилагательного и наречия) имеется, по крайней мере в английском языке, множество трансформаций, которые делают объем этой категории бесконечным благодаря тому, что в эту категорию могут включаться трансформации предложений любой сложности147».

Морфонологическая часть грамматики также должна состоять из трансформационных правил и правил подстановки. Их роль —сопоставлять каждой терминальной цепочке, порождаемой синтаксическими правилами, фонетическое представление. То есть каждая лексическая морфема представляет цепочку символов, называемых морфонемами148.

Хомский полагал, что, установив форму синтаксической части грамматики, станет возможным «изучать виды языков и систем структурных характеристик, которые в принципе могут быть порождены; относительное богатство и бедность различных концепций и формы грамматик; разного рода проблемы разрешимости; точный смысл, в котором грамматики являются более мощными, чем конечные автоматы в строгом значении этого термина... и т.д.149»

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

И. Бар-Хиллел отмечает значительный вклад в комбинаторную лингвистику, сделанный К. Айдукевичем и З.С. Харрисом. Под грамматикой начинает пониматься распознающая (отождествляющая или операционная) грамматика, то есть устройство, с помощью которого может быть найдена синтаксическая структура данной цепочки элементов данного языка. «Это нахождение должно быть формальным, т.е. зависеть исключительно от формы и порядка элементов, и по возможности эффективным, т.е. приводящим после конечного числа шагов к решению относительно структуры или структур данной цепочки, в некотором подходящем смысле этого слова151». Подробный разбор таких всевозможных грамматик такого рода, которых с тех пор появилось большое множество, не относится напрямую к теме данной работы, поскольку все подробности их описаний связаны с поиском формальной грамматики для естественных языков. Для развития теории языков программирования существенным оказалось то, что некоторые из моделей, предложенных Хомским при классификации такого рода грамматик, оказались применимы к описанию синтаксиса языков программирования.

Хомский описал четыре класса порождающих устройств, или грамматик, определяющих четыре класса языков (Chomsky, 1956, 1959). Два последних класса из четырех, названные контекстно-свободной и регулярной грамматиками, оказались применимы для описания синтаксиса языков программирования. К первым двум типам грамматик относятся т.н. «неограниченные грамматики» и «контекстно-зависимые грамматики». Каждый последующий тип является более ограниченным подмножеством предыдущего и, следовательно, легче поддается анализу. Контекстно-свободные грамматики определяются тем правилом, что левая часть предложения должна состоять не более, чем из одного нетерминала.

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

Понятие конечного автомата рассматривается, например, Бар-Хиллелом, как еще один вид распознающей грамматики153. Он также отмечает, что для практических целей, таких как машинный перевод и другие виды машинной обработки данных, представляет интерес следующая проблема: «в какой степени простые языки непосредственно составляющих154 и языки еще более сложной структуры могут быть аппроксимированы с помощью грамматик с конечным числом состояний»155.

В своей более ранней статье «Три модели описания языка156», Хомский рассматривает вопрос о формальной структуре множества грамматически правильных предложений. «Мы ограничимся английским языком и допустим, что на основе интуиции мы можем всегда отличить предложение от «непредложения». Затем мы задаемся вопросом, какого рода лингвистическую теорию необходимо взять за основу для английской грамматики, которая будет описывать английские предложения удовлетворительным образом157».

Ставя перед собой задачу создать систему правил, описывающую компетенцию говорящего — слушающего, Н. Хомский, указал некий базис, присущий человеку, пользующимся языком. То, что этот базис сохраняется для языков программирования, может объясняться либо, как полагал сам Хомский, априорным для пользователя языка характером этих структур, либо неотъемлемым свойством языка как такового. «...Мы рассматривали относительную полноту теорий структуры языка, основанных только на таком по существу формальном критерии, как простота. Мы предполагали, что существуют другие возможные оценки полноты таких теорий. Мы можем задаться вопросом, позволяет ли синтаксическая структура, обнаруживаемая на основе этих теорий, более глубоко проникнуть в употребление и понимание языка. Здесь мы можем только коснуться этой проблемы, но даже это краткое рассмотрение будет наводить на мысль о том, что этот критерий обеспечивает ту же степень относительной полноты для трех моделей, которые мы рассмотрели158». Речь идет о сравнении трех моделей: марковского процесса159, структурной модели и трансформационной модели. Последние две модели Хомский определяет по ходу статьи.

Основные подходы к описанию семантик языков программирования

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

Исследование подходов к построению семантики позволяет сделать вывод о часто не учитываемой, но очень существенной особенности языков программирования, а именно о том, что семантика этих языков должна анализироваться как по отношению к вычислителю, так и по отношению к человеку, работающему над созданием программ. Выражения, записанные с помощью какого-либо языка, должны быть осмыслены, прежде всего, человеком, их создающим. Эта особенность стала ощутима в момент, когда человеку для того, чтобы управлять вычислительной машиной, перестало быть нужным подробное знание организации аппаратной составляющей устройства, для которого предназначается программа. Как было показано, это было одной из первостепенных задач, для решения которых разрабатывались языки «высокого уровня». Поскольку формальное описание выражений языка программист получает, обратившись к спецификации, в которой все значения конструкций конкретного языка определяются нормативно, выполнимость написанной им программы может быть определена только в процессе ее тестирования и отладки, то есть на уровне практического ее использования.

В этом параграфе мы постараемся обосновать предположение о том, что семантики, предлагаемые в ходе теоретических исследований языков программирования, могут служить основанием для выделения парадигм программирования. Для этого охарактеризуем понятие «парадигма», определенного в результате исследования научных теорий Т.С. Куном. Далее покажем как термин «парадигма» употребляется в области программирования, и какое отношение парадигмы программирования имеют к построению семантик для языков программирования. И, в заключении, укажем специфические черты теории языков программирования как технической теории.

Необходимо отметить, что в разных исследованиях основные понятия парадигмальной концепции интерпретируются по-разному. В результате, понятие парадигмы принимает вид, в значительной степени зависящий от специфики предметной области, в рамках которой осуществляется. методологический анализ. В общем виде, в философии и социологии науки, понятие «парадигма» используется для выделения совокупности концептуальных, ценностных и практических ориентиров, определяющих деятельность научного (интеллектуального) сообщества. В области истории и методологии науки понятие «парадигма» получает значение благодаря работе Куна Т. «Структура научных революций»221. Т. Кун использует этот термин для обозначения научных достижений и ценностей, разделяемых сообществом ученых и направляющих научное исследование в определенный период времени — период «нормальной науки». Они определяют правила исследования и эксперимента, предписывают проблемы-«головоломки» и методы их решения. Деятельность ученого в рамках парадигмы определяет его ценностные ориентиры и формирует его представления согласно предпочтениям научного сообщества. Научное сообщество принимает новую парадигму на основании ее способности ч решать новые научные проблемы, по-другому объяснять сущность явлений и делать предсказания. Принципиальным для Куна является влияние социологических и психологических факторов, оказываемое на принятие новой парадигмы в процессе развития научных теорий. Кроме того, методологически (не существует общего основания) и семантически (не существует универсального языка) Кун считает парадигмы несоизмеримыми. Несоизмеримость парадигм — самое основное, и, соответственно, самое критикуемое положение концепции Т. Куна. Сторонники Р. Карнапа и логического позитивизма рассматривали науку как процесс выдвижения и критической проверки (верификации) утверждений; последователи К. Поппера считали ключевой процедурой не верификацию, а фальсификацию (опровержение) научных гипотез. Но и те и другие исходили из представления о науке как процессе аккумуляции знания: аристотелевская и средневековая физика рассматривались как частичное понимание реальности, дополненное впоследствии новой наукой. Кун же настаивал на том, что учения Аристотеля и Ньютона представляют собой две несовместимые системы знания, поскольку смена парадигм, которая-происходит в результате научных революций, влечет изменение. воспринимаемой ученым картины мира. В интервью222 Т. Кун объясняет несоизмеримость, акцентируя ее лингвистический компонент. «Я бы сказал, что возросло (мое) внимание к языку, который в значительно большей степени играет ту роль, которую в «Структуре научных революций» играли изменения гештальта».

Разработчик программы в процессе формализации задачи полагает некоторый способ рассуждения. Этот способ, в том числе, определяется конструкциями выбранного им языка. Но и язык разработчик выбирает в. соответствии с поставленной задачей. Можно обнаружить тесную связь семантик, понимаемых как моделирование «мира» в процессе создания языка, и парадигм, определяющих для ученого картину мира, определенную языком, и не сводимую к другой картине мира

Похожие диссертации на Методологические основания развития языков программирования