Файл: Изучение классификации языков программирования и их развития.pdf

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

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

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

Добавлен: 12.03.2024

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

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

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

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

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

Язык Оccam. Этот язык был создан в 1982 году и предназначен для программирования транспьютеров - многопроцессорных систем распределенной обработки данных. Он описывает взаимодействие параллельных процессов в виде каналов - способов передачи информации от одного процесса к другому. Отмечается особенность синтаксиса языка Occam - в нем последовательный и параллельный порядки выполнение операторов равноправны, и их необходимо явно указывать ключевыми словами PAR и SEQ.

Модель параллельных вычислений Linda. В 1985 году была предложена модель параллельных вычислений Linda. Основной ее задачей является организация взаимодействия между параллельно выполняющимися процессами. Это достигается за счет использования глобальной кортежной области. Процесс может поместить туда кортеж с данными (то есть совокупность нескольких, разнородных данных), а другой процесс может ожидать появления в области некоторого кортежа и, после его появления, прочитать кортеж с возможным последующим его удалением. Заметим, что процесс может, поместить кортеж в область и завершиться, а другой процесс может через некоторое время воспользоваться этим кортежем. Таким образом обеспечивается возможность асинхронного взаимодействия. Из этого видно, что при помощи такой модели может быть сэмулировано и синхронное взаимодействие. Linda - это модель параллельных вычислений, она может быть добавлена в любой язык программирования. Существуют достаточно эффективные реализации Linda, обходящие проблему существования глобальной кортежной области с потенциально неограниченным объемом памяти.


Неимперативные языки

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

Функциональные языки. Основная идея, лежащая в основе функционального программирования - это представление программы в виде математических функций. Оператор присваивания в таких языках не используется (он там просто не нужен). Императивные возможности, как правило, имеются, но их применение обуславливается серьезными ограничениями. Динамическое программирование является довольно важным подходом в решении многих сложных задач, основанным на разбиении задачи на подзадачи и решении этих подзадач единожды, даже если они являются частью нескольких других подзадач. Это также относится к функциональному программированию. Существует одна особенность такого программирования - отсутствие переменных - мешает кешировать результаты решения подзадач, но другая особенность поможет - ленивые вычисления. Поэтому и создали языки с ленивой и с энергичной семантикой. В обычных, не ленивых, языках программирования вычисления строгие - то есть аргументы функции вычисляются перед выполнением самой функции. А в ленивых языках, вычисления отложенные. Все вычисления (кроме некоторых функций ввода-вывода), не выполняются сразу, а откладываются до надобности. Первые языки имеют более эффективную реализацию, в то время как вторые - лучшую семантику. Из языков с энергичной семантикой существует ML и два его современных диалекта - Standard ML (SML) и CaML. Последний имеет объектно-ориентированного потомка - Objective CaML (O’CaML). Среди языков с ленивой семантикой наиболее распространены два: Haskell и его более простой диалект Clean.

[5]Ленивые функции. Функции бывают ленивыми и строгими в своих аргументах. Ленивые - не вычисляют свои аргументы, а строгие - вычисляют, до какого-либо ограничения. Стоит отметить, что функция может быть ленивой в одном аргументе и строгой в другом. Большинству функций нужно использовать свои аргументы, что подразумевает их вычисление. [6]Есть простой способ проверить ленива ли функция в каком-либо аргументе. Нужно просто передать аргумент undefined, и если результатом будет ошибка, то функция строга в этом аргументе, а если нет, то ленива.


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

Языки логического программирования. Программы на языках логического программирования выражены как формулы математической логики, а компилятор пытается получить следствия из них. Родоначальником большинства языков логического программирования является язык Prolog (1971). У него есть ряд потомков - Parlog. Создан в 1983, ориентирован на параллельные вычисления. Также Delta Prolog и др. Логическое программирование, как и функциональное — это отдельная область программирования.

ЗАКЛЮЧЕНИЕ

Можно выделить общую тенденцию в развитии языков программирования. Языки развиваются в сторону всё большей абстракции. И это сопровождается падением эффективности. Повышение уровня абстракции следует за собой повышение уровня надёжности программирования. С низкой эффективностью можно справиться путём создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить её объем. Это, конечно, требует времени и средств, но это всё возможно сделать. А вот с ошибками в программах можно справиться только одним способом: их необходимо исправлять. А ещё лучше - написать идеальный код и максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Богазова З. Разные языки программирования и их области применения. Лекция в Яндексе / Блог компании Яндекс. URL: https://habr.com/ru/company/yandex/blog/272759/. (Дата обращения 27.04.19).
  2. Омский Государственный Технический Университет. URL: https://studfiles.net/preview/1397961/page:2/ (Дата обращения 29.04.19).
  3. К.А. Хайдаров. Основы алгоритмизации и языков программирования. URL: http://bourabai.ru/alg/classification04.htm (Дата обращения 29.04.19).
  4. А.Я. Архангельский. Программирование в Borland C++ - М., Бином, 2003.
  5. Эволюция языков программирования. URL: http://langprog.far.ru/historylangprog.html (Дата обращения 30.04.19).
  6. Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen. URL: http://book.realworldhaskell.org/read/profiling-and-optimization.html
  7. Haskell. URL: https://habr.com/ru/post/131910/ (Дата обращения 30.04.19).
  8. Курносов А.П., Кулев С.А., Улезько А.В. Информатика. -М.: КолосС, 2005.-272 с.
  9. Малышев Р.А. Локальные вычислительные сети: Учебное пособие, РГАТА. – Рыбинск, 2005. – 83 с.

Приложения

Приложение

Рисунок 1

История развития языков программирования

[7]

Рисунок 2

Структура программы на языке Java

[8]

  1. Богазова З. Разные языки программирования и их области применения. Лекция в Яндексе / Блог компании Яндекс. URL: https://habr.com/ru/company/yandex/blog/272759/. (Дата обращения 27.04.19).

  2. Принципы объектно-ориентированного программирования. URL: https://habr.com/ru/post/147927/

  3. Эволюция языков программирования. URL: http://langprog.far.ru/historylangprog.html (Дата обращения 30.04.19).

  4. Эволюция языков программирования. (Дата обращения 30.04.19)

  5. Haskell. URL: https://habr.com/ru/post/131910/ (Дата обращения 30.04.19).

  6. Real World Haskell by Bryan O'Sullivan, Don Stewart, and John Goerzen. URL: http://book.realworldhaskell.org/read/profiling-and-optimization.html

  7. История развития языков программирования. URL: https://en.ppt-online.org/41161

  8. Структура программы на языке Java. URL: http://bourabai.ru/alg/classification04.htm