Файл: Системы программирования как неотъемлемая часть ЭВМ.pdf
Добавлен: 06.04.2023
Просмотров: 140
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Системы программирования как неотъемлемая часть ЭВМ
1.1 История развития языков программирования
1.2 Определение и классификация систем программирования
Глава 2. Современные системы программирования
2.1 Языки веб-программирования
2.2 Функционально-императивные языки программирования
При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом алгоритм программист не строит. То есть при использовании декларативного языка в программах описывается способ решения поставленной задачи, а не предписываются шаги для получения результата.
Декларативные языки подразделяются на два класса: функциональные и логические.
Типичным представителем функциональных языков программирования является Лисп. В основе языка Лисп лежит лямбда-исчисление. Лямбда-исчисление – формализм для представления функций и способов их комбинирования. Вместе со своим эквивалентом –комбинаторной логикой, в которой не используются переменные, – предложено около 1930 г. логиками Черчем, Шейнфинкелем и Карри.
В лямбда-исчислении Черча функция записывается в виде l (x1,x2, … , xn).fn
В Лиспе лямбда-выражение имеет вид:
(LAMBDA(x1,x2, … , xn).fn).
Символ LAMBDA означает, что мы имеем дело с определением функции. Символы xi являются формальными параметрами, они образуют список, называемый лямбда-списком; fn – тело функции, которое может иметь произвольную форму, допускаемую интерпретатором Лиспа. Телом функции может быть константа или композиция из вызовов функций.
Одной из наиболее примечательных является классификация моделей языков, предложенная Дж. Бэкусом в 1977 г. В соответствии с ней выделяются три категории языков:
- Простые операционные модели (языки, основанные на конечных автоматах, машине Тьюринга);
- Аппликативные модели (языки на основе лямбда-исчисления Чёрча, системы комбинаторов Карри, чистого Лиспа);
- Модели фон Неймана (традиционные языки программирования).
Джон Устерхаут предложил принцип классификации языков, в соответствии с которым высокоуровневые языки делятся на языки системного программирования и на скриптовые.
Скриптовый язык (англ. scripting language, также называют язык сценариев) — язык программирования, разработанный для записи «сценариев», последовательностей операций, которые пользователь может выполнять на компьютере. Простые скриптовые языки раньше часто называли языками пакетной обработки (batch languages или job control languages). Сценарии всегда интерпретируются, а не компилируются.
В прикладной программе, сценарий (скрипт) — это программа, которая автоматизирует некоторую задачу, которую без сценария пользователь делал бы вручную, используя интерфейс программы.
Поскольку сценарии интерпретируются из исходного кода динамически при каждом исполнении, они выполняются обычно значительно медленнее готовых программ, оттранслированных в машинный код на этапе компиляции. Также, в плане быстродействия скриптовые языки можно разделить на языки динамического разбора (sh, command.com) и предварительно компилируемые (Perl). Языки динамического разбора считывают инструкции из файла программы минимально требующимися блоками, и исполняют эти блоки, не читая дальнейший код. Предкомпилируемые языки вначале считывают всю программу, компилируют её всю либо в машинный код, либо в какой-то внутренний формат, и лишь затем — исполняют получившийся код.
Вегнер сгруппировал некоторые из наиболее известных языков высокого уровня в четыре поколения в зависимости от того, какие языковые конструкции впервые в них появились:
Первое поколение (1954-1958)
FORTRAN I |
Математические формулы |
ALGOL-58 |
Математические формулы |
Flowmatic |
Математические формулы |
IPL V |
Математические формулы |
Второе поколение (1959-1961)
FORTRAN II |
Подпрограммы, раздельная компиляция |
ALGOL-60 |
Блочная структура, типы данных |
COBOL |
Описание данных, работа с файлами |
Lisp |
Обработка списков, указатели, сборка мусора |
Третье поколение(1962-1970)
PL/I |
FORTRAN+ALGOL+COBOL |
ALGOL-68 |
Более строгий приемник ALGOL-60 |
Pascal |
Более простой приемник ALGOL-60 |
Simula |
Классы, абстрактные данные |
Потерянное поколение (1970-1980)
Языки созданные, но не выжившие. Например, PL/1 , Malboge .
Глава 2. Современные системы программирования
2.1 Языки веб-программирования
В наше постиндустриальное общество нельзя не упомянуть тему веб-программирования при разработке сайтов. Любой сайт важно сделать таким, чтобы в будущем можно было его изменять, вносить интерактивность, а также важно, чтобы он реагировал на действия пользователей, умел обрабатывать информацию. Поэтому возникает потребность использовать специальные программы, которые называются скриптами.
Средств, которые используются при разработке сайтов на сегодняшний день много. Скрипты сами по себе делятся на две группы: работающие на стороне сервера и работающие на стороне клиента.
Клиентская часть предназначена для взаимодействия с пользователем посредством графического пользовательского интерфейса. Выделяются следующие задачи клиентской части: обработка и представление в текстовом и графическом виде данных, загруженных браузером по запросу, а также контроль ввода входных параметров для различного рода операций.
Серверная часть отвечает за обработку запроса пользователя: за загрузку и передачу клиенту запрошенной интернет страницы, за формирование и передачу результатов поиска и т.д. Очень часто при разработке сайтов для получения особых результатов используются оба вида скриптов, и без их использования нельзя обойтись.
Веб-программирование - это особый случай программирования, который предлагает больше возможностей и функций при разработке сайтов.
Разных видов языков программирования, таких как Си, Паскаль и т.д. оказалось мало для создания веб-страниц, поэтому появились специальные языки и средства, которые имели новые функции, упрощающие работу с типичными данными и элементами. Рассмотрим наиболее важные и распространенные языки и средства, использующиеся на стороне клиента.
JavaScript - самый известный инструмент веб-программирования. Этот язык очень простой и удобный, который позволяет легко управлять содержимым веб-страниц. Следует заметить, что JavaScript не требуют никаких дополнительных программ и плагинов, что является явным преимуществом. У JavaScript есть три главных особенности: полностью совместим с HTML/CSS; простой и несложный; имеется возможность подключения ко всем распространенным браузерам.
Для написания программ, направленных на работу в интернете, был создан специальный язык - Java. Он уникален, так как способен работать как на стороне клиента, так и на стороне сервера. Существенным отличием между JavaScript и Java заключается в следующем: программа, которая основана на Java не встраивается в html-код. Она способна функционировать под управлением специальной виртуальной машины Java.
Для создания анимаций была создана известная всем технология под названием Flash. Она была разработана фирмой Macromedia и очень быстро получила распространение. На сегодняшний день Adobe Flash — мультимедийная платформа, предоставляющая пользователю широкий спектр возможностей. Основным преимуществам данной технологии является его межплатформенность, то есть этот формат может использоваться на любой аппаратно-программной платформе.
К серверным средствам и языкам программирования можно отнести следующие: SSI, Perl, PHP, ASP.NET и многие другие.
Server Side Include (SSI) — это небольшой набор директив, который позволяет добавлять контент во множество страниц. Преимуществом данной технологии является то, что это происходит незаметно для пользователя, а также она работает только под управлением веб-сервера и представляет собой набор команд вставляемых в HTML-файл.
Язык веб-программирования, который является одним из старых и который был создан специально для серверного программирования — это Perl. Изначально он был создан для написания сетевых программ. Следует заметить, что он появился еще до массового появления интернета и сейчас намного уступает в своих функционалах и возможностях популярным и современным языкам.
PHP - специальный язык программирования, который был создания для написания веб-проложений (сценариев). Отличительной чертой PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц. Это язык хорошо подходит для начинающих, так как он позволяет писать программы с различными базами данных, с графикой, что подчеркивает его простоту и универсальность.
MySQL - самая популярная и распространенная СУБД при разработке сайтов. Она очень проста в использовании, но не предназначена для работы с большим объемом информации. Несмотря на это, есть возможность применения, как в небольших, так и крупных интернет сайтах.
Итак, процесс создания веб-приложений, веб-сайтов называется веб-разработка. Данный процесс включает в себя веб-дизайн, веб-программирование, а также настройку веб-сервера. Но кто же занимается этим? Профессионал в области веб-программирования - веб-программист. Деятельность данного специалиста тесно связана с «всемирной паутиной», с ресурсами, которые будут жить и развиваться в сети. На нем лежит большая ответственность за создание и дальнейшее нормальное функционирование сайтов.
Область применения и интерес к веб-программированию возрастает с каждым днем, потому что появляются новые технологии, новые системы. Следовательно, веб-программирование тоже не стоит на месте, оно развивается, улучшается, становится доступным.
2.2 Функционально-императивные языки программирования
Язык программирования El был разработан под сильным влиянием своего прототипа – языка Erlang, но отличается от него (и многих других языков) рядом существенных характеристик. К числу наиболее важных свойств языка El, существенно влияющих на выбор подхода к его реализации, можно отнести следующее.
Все пользовательские функции – чистые, т.е. не могут создавать побочного эффекта и являются детерминированными (естественно только в тех случаях, когда из них не вызываются встроенные или библиотечные функции, которые могут не быть детерминированными или обладать побочным эффектом). Это обеспечивается отсутствием глобальных переменных, указателей, передачей аргументов в функции и возвратом их результатов только по значению.
Нет операций явного захвата/освобождения памяти. В сочетании с тем, что все переменные, доступные в любой функции, локальны, это приводит к отсутствию процесса «сбора мусора».
Состояние памяти в момент возврата из функции отличается от ее состояния в момент входа в функцию только значением выработанного ею результата, которое присваивается локальной переменной вызывающей функции. Платой за это, естественно, являются некоторые затраты времени на захват памяти для переменных в момент входа в функцию или блок и на возврат памяти в кучу при выходе из функции, но эти затраты распределены по всему времени выполнения функций программы и не могут вызывать эффекта «stop the world».
Мутабельность (возможность переприсванивания значений переменным) вариативна по выбору программиста. Используемые функцией переменные по умолчанию, как это принято в функциональных языках, иммутабельны (для явного указания, что переменная не является переприсваиваемой ее нужно объявлять с ключевым словом def), однако их можно превращать в мутабельные, просто объявляя с использованием ключевого слова var. Объявления переменных делаются либо для указания мутабельности, либо для указания типа данных и могут находиться только в начале блока – совокупности операторов, охваченных фигурными скобками и выполняемых строго последовательно в порядке их записи.
Типизация обрабатываемых данных также вариативна. Прежде всего – имеются примитивные и составные типы данных. К примитивным относятся численные (целые и вещественные) данные ограниченной точности – int, long, float и double. Составными называются числа произвольной точности (bigint и bigfloat), строки (string), списки (list), кортежи (tuple), векторы (vector), бинарники (binary), функции (function) и модули (module). Векторы (массивы однотипных элементов неизменяемого размера) могут быть как прямоугольными, так и ступенчатыми.
С каждым из составных типов связан определенный перечень встроенных методов, необходимых для эффективного использования данных. Типы используемых переменных можно не объявлять.