лекции (2004) (1160823)
Текст из файла
Языки программирования. Лекция 2.
Определение языка программирования – инструмент планирования поведения исполнителя. Рассмотрели виды программирования и постулировали, что мы будем заниматься исключительно языками индустриального программирования, т.е. языками, на которых собственно и пишутся программные продукты (программы, которые пишутся с целью их отчуждения). Интересно, что практически все современные языки индустриального программирования относятся к императивным языкам (такие как Си) либо к императивно-объектным языкам. Императивные языки расширены объектной парадигмой – C++, Java, C#, Delfi и многие другие. И так мы начали рассматривать концептуальную схему ЯП, ввели 5 позиций рассмотрения ЯП. Конструкции языков программирования мы будем рассматривать в следующей схеме:
1.Базис ЯП.
Базисные конструкции – это те конструкции, которые встроены в язык, иначе говоря, это то, что понимает компилятор. И семантика базиса поддерживаться компилятором.
А) С этой точки зрения мы различаем скалярный базис, то есть те конструкции, которые являются неделимыми. С этой точки зрения все простые типы данных являются простыми, так как являются скалярными, неделимыми. Тип данных integer с машинной точки зрения имеет некоторую структуру, а именно это последовательность либо битов, либо байтов. Но в большинстве ЯП целый тип представляет собой именно скалярную величину, и преобразование его в последовательность байтов и битов это исключительно уже вопрос преобразования типов.
Б) Структурный базис. К структурному базису относятся, например все конструкции, которые с одной стороны определяются языком, а с другой стороны имеют внутреннюю структуру. С этой точки зрения большинство операторов языка, за исключением совершенно тривиальных типа break или continue, они имеют внутреннюю структуру. Начиная с оператора присваивания, который, безусловно, состоит из одной совершенно сложной структуры, включая понятия левой и правой части, а так же большинство управляющих операторов, типа оператора цикла и так далее, ну и составные типы данных, к числу которых, прежде всего, относятся массивы и структуры в традиционных языках программирования.
Ну и вот с этой точки зрения мы увидим, что все императивные ЯП очень сильно похожи друг на друга. Есть некоторые различия, которые прежде всего проявляются в трактовке массивов, а в основном с базисной точки зрения ЯП, именно индустриальные, очень похожи друг на друга. И то, что появляются новые, а старые еще живут, обусловлено различиями, но различиями не в базисе. Различия, прежде всего в средствах развития.
2.Средства развития.
Механизм, который позволяет добавлять в программы на этом языке новые понятия, которых не было в базисе. Самым мощным средством развития из тех, которые мы будем рассматривать, является понятие класс. Есть и другие средства развития, и интересно, что уже в самом первом ЯП (Фортране) появилось такое средство развития, как понятие подпрограммы. Для такого чтобы говорить о средствах развития необходимо: понятие модуля, понятие подпрограммы и понятие общих данных. Все это в зачаточном виде было в языке Фортран, и именно поэтому язык Фортран смог развиваться, и сам по себе Фортран ничего бы не стоил, если бы на нем небыли написаны миллионы строк полезного кода. Все это относиться и к языку Си, есть и модульность, есть средства определения новых типов данных, есть понятие функций – это тот минимум, на котором может развиваться язык, и, разумеется, на языке Си написаны мощные библиотеки стандартных программ. Но все-таки, для того чтобы быть именно базисным языком индустриального программирования одних средств развития недостаточно. Во-первых, они должны быть более мощными, нежели просто понятия функции и определения нового типа данных. Во-вторых, что существенно с современной точки зрения понятию надежности и безошибочности программных средств уделяется все больше внимания.
3.Средства защиты.
Мало того, что мы должны иметь средства описывать новые типы данных, мы должны описывать их таким образом, чтобы соответствующую абстракцию – новый тип данных, можно было, во-первых, легче употреблять, а во-вторых, она была бы защищенной от несанкционированного доступа, ну и прочих неприятностей. Современные ЯП отличаются от более ранних тем, что у первых более гибкие средства развития, но самое главное там существенно усилены именно средства защиты.
Основная часть курса будет посвящена именно средствам развития и в параллель, поскольку они очень сильно интегрированы средствам защиты.
Все языки в нашем курсе мы будем рассматривать по указанной схеме. И почему именно по этой схеме. Основная проблема в современном программировании – это сложность, именно создание современных программных комплексов - одна из самых сложных задач. В современных технических системах, одной из составляющих частей обязательно является программный компонент. Не даром, что одной из самых сложных задача является проектирование самолетов, что в настоящем невозможно без проектирования соответствующих компьютерных систем, которые в свою очередь являются очень сложными. Так вот, в чем проблема? На прошлой лекции мы уже начали об этом говорить – понятие кризиса программного обеспечения. Эта тема обсуждалась еще в 70-х года, и одной из первых книг являлась - книга Брукса «Мифический человекомесяц». В которой была высказана следующая весьма интересная идея «если одна женщина вынашивает ребенка 9 месяцев, то это не значит, что 9 женщин смогут выполнить эту работу за один». Это как раз к вопросу о том, на сколько корректно измерять сложность и трудоемкость программных систем во временных единицах типа человекогод и т.д. собственно кризис отразился в том, что все более менее сложные программные системы, которые начали выпускаться с 60-ых годов, требовали значительно больше времени и средств, чем планировалось, и в конечном итоге программные комплексы не выполняли свою роль. И пример первой такой программы, где все эти свойства проявились впервые – это была операционная система OS360 для машин фирмы IBM. По мотивам создания этой ОС Брукс и написал свою книгу. Сейчас о кризисе уже не пишут, а что изменилось? Сейчас аналогом OS360 является система Windows, ни одна из ее версий в срок не выходила. Service Pack – это отражение того, что заранее признано, что ОС это такая сложная программа – она не может не выйти без ошибок, поэтому практически всегда первая версия программы – это бета-версия, которая тестируется пользователями. Пользователь работающей с некоторой программой заранее должен быть готов обновлять ее. Последнее время обновление ОС Windows связано в основном со средствами защиты, но если вспомнить первые service рack это, по сути, исправление ошибок. Можно сказать, что кризис превратился из кризиса в вяло текущую шизофрению.
В чем причина сложности разработки программного обеспечения – их две.
1. Слабость базиса. С точки зрения базиса ЯП никакого отношения к реальной действительности не имеют, в моделях реального мира никто не оперирует с битами, байтами и т.д. Как следствие, чтобы построить соответствие между моделями реального мира и базисными конструкциями – требуется долгая работа.
2. Отсутствие модели реального мира в компьютерах. Иначе говоря, при наличии модели реального мира возможен контроль и прогноз. Все это в компьютерах отсутствует, а контроль без прогноза невозможен.
Средства развития сейчас направлены на то, чтобы преодолеть слабость базиса, построить свои абстракции, в терминах которых будут выражаться модели реального мира.
Средства защиты необходимы для того, чтобы реализовать механизм прогноза-контроля. Раз есть возможность защиты, значит, есть возможность некоторой избыточности и прогноза-контроля. Что есть защита – если объект ведет себя неподобающим образом, то это можно заметить и исправить либо просто не дать объекту вести себя неподобающим образом.
Исторически очерк развития ЯП.
Можно выделить 3 периода развития ЯП, и в основном интересующие нас ЯП возникли в третьем или в конце второго периода.
-
Эмбриональный период (1950ые-1960-ые годы)
Фортран
Первым компилируемым ЯП был Фортран (1954 - 1957 года в IBM под руководством Джона Бэкуса). Фортран - "транслятор формул", Formulae Translator. До сих пор программируют на этом языке. Фортран – это язык, создатели которого достигли поставленных целей. В определенном смысле Фортран является контрпримером во многих монографиях по ЯП – обычное упоминание – «как плохо что-то сделано в Фортране», и, тем не менее, Фортран является одним из самых успешных ЯП в истории.
Определение: Языковая ниша (Экологическая ниша языка) – это совокупность проблемных областей, для работы в которых и предназначен данный ЯП. Данное понятие пришло из биологии. Обычно получается так, что первый ЯП, который появился в этой нише и занимает ее, несмотря на то, что в принципе можно придумать более адекватный язык.
Так Фортран первым занял свою нишу – язык научно-технических расчетов (НТР) для разнообразных математических и физических моделей, используется интегро-дифференциальное исчислении, разностные методы. До Фортрана было следующее – ученые сами не могли программировать, они писали некоторые блок-схемы, программа писалась совместно с программистом, потом программист в одиночку превращал переменные в адреса памяти, операторы – в машинные команды, набивал все это на перфоленте. Итог – либо численный результат, либо некоторая ошибка исполнения. Слабым звеном являлся программист.
У Фортрана появились:
1. оператор присваивания V:=E, причем на месте Е можно было писать математические формулы
2. можно было использовать вещественные, целочисленные и комплексные типы данных
3. появился условный оператор if с переходом на три направления, если значения флага <0, >0, =0.
4. было 4 разновидности операторов безусловного перехода
5. средства ввода-ввывода
Теперь прикладной специалист мог при наличии компилятора с Фортрана сам за программировать все, что было необходимо. В результате программистская база существенно увеличилась. Но самым главным стало то, что Фортран показал, что такое язык высокого уровня, то есть язык высокого уровня помогает привлечь к программированию большее количество прикладных специалистов. Компьютер становиться более полезным.
Появился термин мобильность или переносимость (Portability). Рассматриваются два аспекта мобильности.
-
Мобильность программного обеспечения.
До этого программа, написанная на одном машинном языке, не могла идти на машине другой архитектуры – очевидно. Несовместимость на уровне двоичных кодов. Хотя до сих пор полностью мобильное программное обеспечение является мифом, чем более сложной является задача, тем труднее перенести ее с одной машины на другую. Мы говорим не об абсолюте, а о степени мобильности. Следовательно, наличие языка высокого уровня, который не зависит от архитектуры и способствует мобильности программного обеспечения.
-
Мобильность знаний.
До появления Фортрана при появлении новой или просто другой модели компьютера приходилось изучать новую систему команд, привыкать к новой ОС, переписывать все программы. После появления Фортрана при переходе с одной машины на другую надо было учитывать только различия в языках – что упростило смену работы для программистов. Хотя на тот момент оборудование стоило гораздо дороже, чем услуги программиста. Сейчас все наоборот, и на это повлияло наличие мобильности знаний. И именно как аспект мобильности знаний рассматривается то требование, что на новой архитектуру переносились старые программы.
Фортран весьма устраивал прикладных специалистов и являлся весьма адекватным языком. Хотя были и некоторые казусы, такие как, например, взрыв при старте американской ракеты. И считается, что проблема была в операторе цикла на Фортране.
Do(не является ключевым словом, могут идти пробелы, а могут и нет)5(
метка, номер оператора, который является последним в цикле) далее управляющая переменная цикла
т.е
do 5 i=1,3 (ошибка состояла в том, что здесь вместо запятой поставили точку)
5 continue
аналог на Паскале
for i:=1 to 3 do
Такую ошибку было трудно рассмотреть, а у Фортрана такие особенности, что пробелы ничего не значат, ключевых слов нет, а переменные могут не объявляться (все, что начинается с I,j,k,l,m,n считается целым, с остальных букв вещественным). Компилятор с Фортрана понимал эту ситуацию так а=1.3, где а –переменная (do 5 i). Поэтому данный оператор цикла был интерпретирован как оператор присваивания со всеми вытекающими отсюда последствиями. На многих других более современных языках программирования такая ситуация в силу ряда требований невозможна. Таким образом, Фортран в других ниша функционировал неэффективно.
Дальнейшие версии Фортрана:
1964 Фортран 4
1966 Фортран 66 (стандарт ANSI) –первый стандартизированный в мире и в отдельных странах язык
1977 Фортран 77 – самый популярный вариант языка
1990 Фортран 90 – совместим со старыми версиями, многие недостатки устранены, но на другую нишу кроме НТР не претендует.
Остальные языки.
1. В данный период языки появлялись по принципу заполнения ниш, так первой возникла ниша НТР. И кроме Фортрана в 1960 году возник Алгол 60. Именно Алгол 60 концептуально оказал влияние на многие последующие ЯП. Так, например, цикл for, впервые использовался в Алголе. Алгол был написан не как ЯП, а как язык описания алгоритмов – Algorithmic Language. Его разработала группа учёных в рамках IFIP. Он проектировался, в отличие от Фортрана, под влиянием определенных концепций языков. В Алголе впервые появилась рекурсия, появилось понятие стека, появилось понятие вложенных областей видимости. Впервые синтаксис языка был описан формально (БНФ – примерно то же самое, что и грамматики класса 2 по Хомскому). Именно после Алгола описания ЯП выглядят следующим образом:
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.