Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 09.01.2004 | Доступ: свободный | Студентов: 3807 / 327 | Оценка: 4.02 / 3.77 | Длительность: 10:03:00
ISBN: 978-5-9556-0009-3
Лекция 13:

Оптимизация вычислений и абстрактные машины

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

Заметим, что возможность "ленивого" связывания переменных с их значениями в языках функционального программирования вытекает из формулировки теорем Черча-Россера.

Поскольку доказательство теорем Черча-Россера выходит за рамки настоящего курса, ограничимся приведением формулировок теорем как таковых.

Теорема Черча-Россера

Пусть E1 и E2 суть ламбда-выражения, причем справедливо соотношение: E1 = E2.

Тогда существует ламбда-выражение E такое, что выполнены следующие условия: во-первых, E1 = E, и, во-вторых, E2 = E.

Заметим, что символ "=" в формулировке теоремы понимается в смысле отношения конвертируемости.

Теорема Черча-Россера (1)

Если в языке вызовы по имени и по значению приводят к определенному результату, то это один и тот же результат.

Теорема Черча-Россера (2)

Если вычисление значения выражения приводит к определенному результату, то к нему всегда приводит вызов по имени и не всегда - по значению.

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

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

Напомним, что ни SECD-машина П. Лендина, ни категориальная абстрактная машина редукция графов в "классическом" представлении не обладают способностью поддержки реализации механизма отложенного означивания переменных.

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

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

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

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

Во-первых, необходимо отметить, что в рамках рассматриваемой инструментально-технологической платформы Microsoft .NET используется виртуальная машина с универсальным высокоуровневым ассемблером (известным под названием Microsoft Intermediate Language, или, сокращенно, MSIL), принципиально подобная КАМ. Абстрактная машина. NET транслирует исходный текст на языке программирования в код MSIL, который в значительной степени подобен КАМ -коду.

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

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

В-четвертых, виртуальная машина .NET обеспечивает поддержку универсальной среды вычислений с широким спектром унифицированных предопределенных типов и структур данных.

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

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

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

Далее, посредством перечисленных теорий были формализованы такие важнейшие аспекты языков программирования, как синтаксис и семантика.

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

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

Еще одним пунктом исследований стали важнейшие аспекты реализации языков программирования, включая схемы трансляции в промежуточнные коды для виртуальных машин SECD и КАМ.

Наконец, мы провели сравнительное исследование различных стратегий вычислений и оптимизации кода.

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

В связи с этим в ходе дальнейшего исследования планируется систематическое изучение следующих вопросов:

  1. математическое обоснование объектного подхода к программированию (на примере языка программирования C#);
  2. компонентное проектирование интегрированных гетерогенных программных систем (на примере языков функционального программирования SML и объектно-ориентированного программирования C#);
  3. теория и практика разработки событийно управляемых приложений;
  4. сравнительное исследование функционального и объектно-ориентированного подходов к программированию.

Дальнейшие исследования, согласно практике, сложившейся на протяжении первой части курса, будут проводиться синтетически по направлениям теоретического обоснования программирования на основе современных формальных систем computer science и современной практики проектирования и реализации программного обеспечения на основе универсальной и прогрессивной программно-инструментальной платформы Microsoft .NET.

Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [24, 31, 32, 49, 51, 62, 76, 78].