Файл: Языки программирования высокого уровня..pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 24.04.2023

Просмотров: 329

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

мама(«Даша»,»Маша»).

мама(«Наташа»,»Даша»).

Кроме этого, имеется правило, вводящее отношение бабушка:

бабушка(X,Y):–

мама(X,Z),

мама(Z,Y) [5].

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

бабушка(«Наташа»,X).

Ответ на этот запрос система ПРОЛОГ выдаст так:

X=Маша [5]

Возможности применения языка ПРОЛОГ весьма обширны. Среди наиболее известных – применение в символической математике, планировании, автоматизированном проектировании, построении компиляторов, базах данных, обработке текстов на естественных языках. Но, наверное, самое характерное применение ПРОЛОГа – это экспертные системы.

На сегодняшний день существует целый класс логических языков; так, от языка Planner также произошли логические языки программирования QA–4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog [5].

Функциональные языки

Первым языком функционального типа является язык ЛИСП, созданный в Массачусетсском технологическом институте в 1956–1959 гг. Джоном Маккарти, который в 1956 г. на Дармутской конференции (США) впервые предложил термин «искусственный интеллект» [12].

Рисунок 3 Джон Маккарти

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

После своего появления ЛИСПу присваивали много эпитетов, отражающих его черты: язык функций, символьный язык, язык обработки списков, рекурсивный язык. С позиций сегодняшней классификации ЛИСП определяется как язык программирования функционального типа, в основу которого положен метод –исчисления [12].

Программа, написанная на функциональном языке, состоит из неупорядоченного набора уравнений, определяющих функции и значения, которые задаются как функции от других значений. Программы и данные ЛИСПа существуют в форме символьных выражений, которые хранятся в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы – это символы, используемые для идентификации объектов, которые могут быть числовыми и символьными (понятия, материалы, люди и т.д.). Список – это последовательность из нуля или более элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Над списками выполняются три примитивные операции: извлечение первого элемента списка; получение оставшейся части списка после удаления первого элемента; объединение первого элемента списка L и оставшейся части списка Q.


Тексты программ на функциональных языках программирования только описывают способ решения задачи, но не предписывают последовательность действий для решения. В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие: краткость и простота; строгая типизация; модульность; функции – объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления [12].

Кроме ЛИСПа, к функциональным языкам относят РЕФАЛ (разработан в середине 60–х годов В.Ф. Турчиным в МГУ им. М.В. Ломоносова), Haskell, Clean, ML, OCaml, F#.

Приведем пример описания известного алгоритма быстрой сортировки списка на языке Haskell:

qsort [] = []

qsort (x:xs) = qsort elts_lt_x ++ [x]

++ qsort elts_greq_x where

elts_lt_x = [y | y <– xs, y < x]

elts_greq_x = [y | y <– xs, y >= x]

Здесь записано, что пустой список уже отсортирован. А сортировка непустого списка состоит в том, чтобы разбить список на три: список элементов, меньших головы исходного списка, голова исходного списка ([x]) и список элементов хвоста исходного списка, больше или равных x [4].

Объектно–ориентированные языки

Объектно–ориентированные языки – это языки, в которых понятия процедуры и данных, используемых в обычных системах программирования, заменены понятием «объект» (см. статью «Объектно–ориентированное программирование»). Языком объектно–ориентированного программирования в чистом виде считается SmallTalk, возможности объектно–ориентированного программирования заложены также в Java, C++, Delphi.

Дальнейшее развитие современного программирования связано с так называемым «параллельным программированием». Для реализации этой технологии разрабатываются специализированные объектно–ориентированные языки. К языкам такого типа относят, например, MC# (mcsharp) – высокоуровневый объектно–ориентированный язык программирования для платформы .NET, поддерживающий создание программ, работающих в распределенной среде с асинхронными вызовами [17].

Кроме приведенных видов, известно также самое простое деление – на языки высокого и низкого уровня.

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


Язык высокого уровня – это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем, и поэтому их часто называют проблемно–ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах [17].

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

2. Языки программирования высокого уровня

2.1. Характеристика языков программирования высокого уровня

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

В 1960 – х годах, языки программирования высокого уровня , используя компилятор обычно называли autocodes . Примерами являются autocodes COBOL и Fortran .

Первый язык программирования высокого уровня предназначен для компьютеров был планкалкюль , созданный Конрадом Цузе . Тем не менее, он не был реализован в свое время, и его первоначальные взносы были в значительной степени изолированы от других событий из – за Второй мировой войны , в стороне от влияния языка на язык «Superplan» по Хайнц Ратишозер , а также в некоторой степени Алголь . Первый значительно распространенный язык высокого уровня был Фортран, машинно–независимого развитием ранее IBM в AutoCode систем. Алгол, определенный в 1958 и 1960 год комитетов европейских и американских ученых – компьютерщиков, представил рекурсию , а также вложенные функции в соответствии с лексической областью . Это был также первым язык с четким разграничением между значением и именинами параметрами и соответствующими им семантикой . Алгол также представил несколько структурированных программных концепций, например, в то время– до, и если–то– то в другом месте конструкции и ее синтаксис был первым , который будет описан в формальной записи – « Бэкуса–Наура « (BNF). В течение примерно тот же периода, Кобол введены записи (также называемые структуры) и Лисп введен полностью общая лямбда – абстракция в языке программирования в первый раз [17].


«Язык высокого уровня» относится к более высокому уровню абстракции от машинного языка . Вместо того , чтобы дело с регистрами, адресами памяти и стека вызовов, высокоуровневые языки дело с переменными, массивы, объекты , комплексная арифметика или булевы выражения, подпрограммы и функции, циклы потоков , блокировок и других понятий абстрактной информатики, с акцентом на удобство использования более оптимальной эффективности программы. В отличие от низкоуровневых языков ассемблера , языки высокого уровня имеют мало, если таковые имеются, языковые элементы , которые транслируют непосредственно в родной Компьютера опкодами . Другие функции, такие как обработки строк процедуры, функции языка объектно–ориентированный, и файл ввод / вывод, могут также присутствовать. Одно замечание о языках программирования высокого уровня является то , что эти языки позволяют программисту быть отсоединен и отделен от машины. То есть, в отличие от языков низкого уровня , таких как сборки или на машинном языке, программирования высокого уровня может усилить инструкции программиста и вызывают много движений данных в фоновом режиме , без их ведома. Ответственность и способность выполнять инструкции были переданы машине от программиста [8].

Языки высокого уровня намерены предоставить функции , которые стандартизируют общие задачи, позволяют богатую отладку и поддерживать архитектурный агностицизм; в то время как языки низкого уровня часто производят более эффективный код с помощью оптимизации для конкретной архитектуры системы. Абстракция неустойка является стоимостью , что методы программирования высокого уровня платить за то , что не в состоянии оптимизировать производительность или использовать определенные аппаратные , так как они не воспользоваться некоторыми архитектурными ресурсами низкого уровня. Программирования высокого уровня имеют такие функции, как более общие структуры данных и операции, интерпретации времени выполнения, а также промежуточные файлы кода; которые часто приводят к исполнению гораздо больше операций , чем это необходимо, более высокое потребление памяти и большего размера двоичной программы. По этой причине, код, который нужно особенно быстро бегать и эффективно может потребоваться использование языка более низкого уровня, даже если язык высокого уровня позволит сделать кодирование проще. Во многих случаях критические части программы в основном на языке высокого уровня могут быть ручными закодировано в языке ассемблера , что приводит к гораздо быстрее, эффективнее, или просто надежно функционировать оптимизированную программу [8].


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

Достоинства языков программирования высокого уровня:

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

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