Файл: Классификация языков программирования высокого уровня.pdf
Добавлен: 30.03.2023
Просмотров: 473
Скачиваний: 2
СОДЕРЖАНИЕ
1.1 История развития языков программирования
2. Обзор современных языков программирования
3. Классификация языков программирования
3.2. Языки программирования низкого уровня
3.3. Языки программирования высокого уровня
3.4. Объектно-ориентированные языки
3.5. Декларативные языки программирования
3.6 Логическое программирование
3.7. Языки сценариев (скрипты)
Введение
Основные стили, или парадигмы программирования, к которым обычно относят императивное, функциональное, логическое и объектно-ориентированное программирование [1, 6], возникли более сорока лет назад вместе с первыми языками программирования и развивались сначала относительно независимо друг от друга. Каждая из парадигм отображает определенную модель вычислений, включая структуры данных и механизмы управления, и с ней связан определенный класс прикладных задач, которые удобно решать средствами данной парадигмы.
В настоящий момент большинство современных языков программирования [3, 4] обычно включают средства и приёмы программирования различных парадигм, хотя классифицируются согласно средствам своего ядра (к примеру, язык программирования Лисп – функциональный язык, хотя включает некоторые конструкции императивного стиля). Тем самым все более сложным становится выбор языка для обучения программированию в высшей школе.
В данной работе дается краткий обзор и сравнение основных парадигм программирования и показывается, что полноценное образование в области информатики и программирования предполагает освоение базовых приемов всех парадигм путем изучения языков, являющихся типичными представителями своей парадигмы.
Цель работы – обзор классификации языков программирования.
1. Языки программирования
1.1 История развития языков программирования
Первые универсальные языки отображались непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программисты должны были знать архитектуру машины досконально. Программы были достаточно простыми, что было обусловлено, во-первых, ограниченными возможностями этих машин, и, во-вторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинных языках. Вместе с тем такой способ разработки давал программисту просто огромную власть над системой. Появлялась возможность таких хитрых алгоритмов и способов организации программ, которые и не снились современным разработчиками.
Ассемблер. Первым значительным шагом стал переход к языку ассемблера (английский язык assembly language, или assembler). Не очень заметный с первого взгляда шаг - переход к символьному кодированию машинных команд - имел фактически огромное значение. Программисту не надо было больше погружаться к способам кодирования команд на аппаратном уровне. Более того, обычно одинаковые по сути команды кодировались совершенно разными способами в зависимости от своих свойств. Появилась также возможность использования макросов и меток, что также упрощало создание, модификацию и отладку программ.
Появилась даже некоторая совместимость целого семейства машин с похожей системой команд и некоторого общего ассемблера для них, при этом не было необходимости обеспечивать двоичную совместимость. Впервые в истории развития программирования появилось два представления программы: в исходных текстах и в откомпилированном виде. К концу ассемблерной эры возможность автоматической трансляции в обе стороны была потеряна навсегда.
Фортран. В 1954 году в недрах IBM группой разработчиков во главе с Дж. Бэкусом (John Backus) был создан язык программирования Fortran. Значение этого события трудно переоценить. Это стало первым шагом программирования высокого уровня. Впервые программист смог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, что отличала новый язык от ассемблера, была концепция подпрограмм. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь потому, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу ошибок. Язык Фортран использовался (и используется на сегодняшний день) для научных вычислений. Отсутствуют привычные языковые конструкции, семантическая проверка компилятором, поддержка современных способов структурирования кода и данных. Это понимали и сами разработчики. По признанию самого Бэкуса, перед ними стояла задача скорее разработки компилятора, чем языка. Понимание самостоятельного значения языков программирования пришло позже. Появление Фортрана встретили еще большей критикой, чем ассемблера. Программистов пугало снижение эффективности программ за счет использования промежуточного звена в виде компилятора. И эти опасения имели под собой основу: действительно, хороший программист, скорее всего, при решении какой-либо небольшой задачи вручную напишет код, который будет работать быстрее, чем код, полученный как результат компиляции. Через некоторое время пришло понимание того, что реализация крупных проектов невозможна без использования языков высокого уровня. Мощность вычислительных машин росла, и преимущества языков высокого уровня стали настолько очевидными, что подтолкнули разработчиков к созданию новых языков, все более современных.
Cobol. В 1960 году был создан язык программирования Cobol. Он задумывался как язык для создания коммерческих приложений, и он стал таким. На КОБОЛ написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно для коммерческих прикладных задач. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, в сочетании с Microsoft.NET, что потребовало внесения некоторых черт объектно-ориентированного языка.
PL / 1. В 1964 году все та же корпорация IBM создала язык PL / 1, который был призвана заменить Кобол и Фортран. Этот зык имел исключительное разнообразие синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо отметить, что синтаксическая структура языка была крайне сложной. Пропуски уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы.
В силу таких особенностей разработка компилятора для PL / 1 была исключительно сложным делом. В связи с вышеперечисленными причинами язык так и не стал популярным вне мира IBM.
BASIC. В 1963 году в Дартмурском колледже (Dartmouth College) был создан язык программирования BASIC (Beginners 'All-Purpose Instruction Code - многоцелевой язык символических инструкций для начинающих). Язык задумывался в первую очередь как средство обучения и как первый язык программирования. Он предполагался таким, чтобы легко интерпретировался и компилировался. Надо сказать, что BASIC действительно стал языком, на котором часто учатся программировать. Было создано несколько мощных реализаций BASIC, поддерживающих самые современные концепции программирования (яркий тому пример - Microsoft Visual Basic).
Algol. В 1960 году командой во главе с Петером Науру (Peter Naur) был создан язык программирования Algol. Этот язык дал начало целому семейству Алгол-подобных языков (важнейший представитель - Pascal). В 1968 году появилась новая версия языка. Она хоть и не нашла такого широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков. Язык был достаточно интересен, поскольку обладал многими уникальным на тот момент характеристиками.
Дальнейшее развитие языков программирования.
Создание каждой из вышеупомянутых языков (за исключением, возможно, Algolа) было вызвано некоторыми практическими требованиями. Эти языки послужили фундаментом для более поздних разработок. Все они представляют одну и ту же парадигму программирования.
Следующие языки пошли существенно дальше в своем развитии, в сторону более глубокого абстрагирования.
Pascal-подобные языки. В 1970 году Николаусом Виртом был создан язык программирования Pascal. Язык замечателен тем, что это первый широко распространенный язык для структурного программирования (первым, строго говоря, был Алгол, но он не получил такого широкого распространения). Впервые оператор безусловного перехода перестал играть основополагающую роль при управлении порядком выполнения операторов. В этом языке также внедрена строгая проверка типов, что позволило выявлять многие ошибки на этапе компиляции. Отрицательной чертой языка было отсутствие в нем средств для разбивания программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula являются языки Oberon и Oberon-2. Они характеризуются движением в сторону объектно и компоненто- ориентированности.
С-образные языки. В 1972 году Керниганом и Ритчи был создан язык программирования C. Он создавался как язык для разработки операционной системы UNIX. C часто называют «ассемблером, что переносится», имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные конструкции управляющих и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу. В 1986 году Бьярн Страуструп создал первую версию языка C ++, добавив в язык C объектно-ориентированные черты, взятые из Simula, и исправив некоторые ошибки и неудачные решения языка. C ++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая (третья) версия стандарта, которая содержит в себе некоторые весьма существенные изменения. Язык стал основой для разработки современных больших и сложных проектов. В нем есть и слабые стороны, вытекающие из требований эффективности.
В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Он наследовал синтаксис C и C ++ и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет показателей и множественного наследования, что сильно повышает надежность программирования.
В 1999-2000 годах в корпорации Microsoft был создан язык C #. Он в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Он ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.
Языки Ada и Ada 95. В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции. Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объектную ориентированность и исправляет некоторые неточности. Оба эти языка не получили широкого распространения вне военных и других крупномасштабных проектами (авиация, железнодорожные перевозки). Основной причиной является сложность освоения языка и достаточно громоздкий синтаксис (значительно более громоздкий, чем в Pascal).
Языки обработки данных. Все перечисленные языки являются языками общего назначения в том смысле, что они не ориентированы и не оптимизированы под использование каких-либо специфических структур данных или на применение в каких-либо специфических областях. Было разработано большое количество языков, ориентированных на достаточно специфические применения. В 1957 году была предпринята попытка создания языка для описания математической обработки данных. Язык была назван APL (Application Programming Language). Его отличительной особенностью было использование математических символов (что затрудняло применение на текстовых терминалах, появление графических интерфейсов сняло эту проблему) и очень мощный синтаксис, который позволял проводить множество нетривиальных операций прямо над сложными объектами, не прибегая к разбивке их на компоненты. Широкому применению помешало, как уже отмечалось, использование нестандартных символов как элементов синтаксиса.
В 1962 году появился язык Snobol (а в 1974 - его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает C и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl - язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему не хватает элегантности.
В 1969 году был создан язык SETL - язык для описания операций над множествами. Основной структурой данных в языке является множество, а операции аналогичны математическим операциям над множествами. Полезен при написании программ, имеющих дело со сложными абстрактными объектами.
Скриптовые языки. В последнее время в связи с развитием Интернет-технологий и производительности компьютеров получили распространение так называемые скриптовые языки. Эти языки изначально ориентировались на использование в качестве внутренних управляющих языков в сложных системах. Многие из них, однако же, вышли за пределы сферы своего первоначального применения и используются в настоящее время в совершенно других областях. Характерными особенностями данных языков является, во-первых, их интерпретируемость (компиляция либо невозможна, либо нежелательна), во-вторых, простой синтаксис, а в-третьих, легкая расширяемость. Таким образом, они идеально подходят для использования в часто меняющихся программах, очень небольших программах или в случаях, когда для выполнения операторов языка затрачивается время, несопоставим со временем их разбора. Было создано большое количество таких языков.