Курс «История информатики» Лекция

Главная страница
Контакты

    Главная страница


Курс «История информатики» Лекция



страница13/17
Дата04.11.2017
Размер2,09 Mb.


1   ...   9   10   11   12   13   14   15   16   17

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


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

Стиль программирования из процесса кодирования блок-схемы алгоритма вырос в спектр регламентированных технологий согласованного выбора и обоснования программистских решений, реализация которых приспособлена к отладке, тестированию и массовому применению.



Обычно при разработке системы программирования различают три уровня: синтаксис, семантика и прагматика реализуемого языка. При изучении парадигм программирования центральную роль играет семантика, а синтаксис и прагматика используются как вспомогательные построения на примерах.

Венский метод (ВМ) определения языков программирования был разработан в 1968 году в Венской лаборатории IBM под руководством П. Лукаса на основе идей, восходящих к Дж. Маккарти. Благодаря хорошо разработанной концепции абстрактных объектов, позволяющей концентрировать внимание лишь на существенном и игнорировать второстепенные детали, Венский метод годится для описания и машин, и алгоритмов, и структур данных.

Конкретный синтаксис языков программирования принято представлять в виде простых БНФ (Формул Бекуса-Наура). Абстрактный синтаксис программ выглядит как объявление объектов, заранее известных в языке, и представление разных форм, вычисление которых обладает определенной спецификой.

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

Операционная семантика языка определяется как интерпретация абстрактного синтаксиса, представляющего выражения, имеющие значение. Учитывая исследованность проблем синтаксического анализа и существование нормальных форм, гарантирующих генерацию оптимальных распознавателей программными инструментами типа YACC-LEX, в качестве абстрактного синтаксиса может быть выбрано не текстовое, а структурное представление программ.

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

Разнообразие парадигм программирования отражает различия в стиле мышления программистов и в требованиях к длительности жизненного цикла программ в разных сферах их применения. Для стандартного программирования характерно четкое разделение понятий “программа” и “данное” и учет в процессе обработки данных средств контроля типов данных. Кроме того идеи структурного программирования налагают на стиль программирования ряд ограничений, способствующих удобству отладки программ:



  • Дисциплина логики управления с исключением переходов по меткам.

  • Минимизация использования глобальных переменных в пользу параметров процедур.

  • Полнота условий в ветвлениях, отказ от отсутствия “else”.

  • Однотипность результатов, полученных при прохождении через разные ветви.

Общий механизма интерпретации стандартной программы естественно представить как автомат с отдельными таблицами имен для переменных, значения которых подвержены изменениям, и для меток и процедур, определения которых неизменны. Наиболее распространенные языки программирования, такие как Фортран, Паскаль, Си, Бейсик, придерживаются примерно такой семантики при слегка варьируемой строгости контроля типов данных. Семантика стандартных императивных языков допускает применение общей абстрактной машины, что объясняет существование многоязыковых систем программирования, поддерживающих общие библиотеки процедур, компонентов и модулей, а также интеграцию с ассемблером.

К обзору других парадигм программирования мы вернемся в конце этой лекции.



Методы компиляции программ и реализации систем программирования


От простой сборки кода программы по шаблонам (ассемблирование) методы компиляции выросли в весьма сложную науку, обладающую строгой теорией и обширной экспериментальной базой. Алгоритмы, доказательные построения, верификация, формальный вывод, синтаксически управляемая автоматизация конструирования программ и их глобальная оптимизация, статический анализ, частичные вычисления, эквивалентные преобразования, контроль типов данных, спецификации, тестирование, библиотеки модулей и высококвалифицированных компонент, динамическая оптимизация памяти и компиляция “на лету” – этот ряд интереснейших подходов и методов к обеспечению эффективности и надежности программирования можно продолжать, он пополняется непрерывно с развитием технологий и мощностей, доступных разработчикам программного обеспечения. Появились многоязыковые системы программирования и сетевые сервисы по сопровождению большого числа интересных языков программирования

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



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

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

В языках программирования различают вызовы аргументов функции по значению, по имени и по ссылке. Техника приостановки и возобновления функций в зависимости от контекста и программы, т.е. вызов по необходимости называют “ленивые вычисления” (lazy evaluation). В некоторых языках программирования, таких как язык SAIL и Hope это основная модель вычислений.

Идея смешанных вычислений (А.П. Ершов) с точки зрения реализации близка технике ленивых вычислений, но сложилась концептуально из несколько иных предпосылок, и именно из опыта разработки оптимизирующих трансляторов для языков высокого уровня. Рассматривается пара Программа-Данные при недостаточных данных, отображаемая в так называемую остаточную программу, которая может дать нужный результат, если дать недостающие данные. Для определения такого отображения понадобилась разметка действий программы на исполнимые и задерживаемые. Если такую разметку не связывать с отсутствием данных, то получается модель, практически подобная вычислениям с приостановками и возобновлением.

Первые работы Lombardi от середины 60-х годов в этой области посвящены частичным вычислениям, т.е. обработке частично определенных выражений над числами. Реализация такой обработки на Лиспе осуществляла выполнимые операции и строила из полученных частичных результатов и невыполнимых операций некоторый промежуточный результат - выражение, доопределив которое, можно получить полный результат.

Системы управления базами данных и их приложения


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

1   ...   9   10   11   12   13   14   15   16   17

  • Методы компиляции программ и реализации систем программирования
  • Системы управления базами данных и их приложения