Проиллюстрируем особенности реализации наиболее существенных стратегий вычислений на примере
Как было показано в ходе предыдущей лекции, такая формализация вычислительной машины как категориальная
Кроме того, как показывает практика, именно
Тем не менее, в базовом варианте построения категориальной
Перечислим наиболее существенные (с учетом целей и задач нашего курса) из этих недостатков.
Прежде всего, обращает на себя внимание некоторая громоздкость вычислений, хотя это и объясняется отчасти низкоуровневым характером категориальной
Другим существенным недостатком
Наконец, очевидно, что повторяющиеся фрагменты программы требуют многократных вычислений, поскольку порядок вычислений предопределен и заведомо не оптимален.
Выявив и оценив недостатки "классической" реализации категориальной
Прежде всего, для решения проблемы громоздкости вычислений (которая, как отмечалось, вытекает из ограниченности системы команд
Кроме того, в целях оптимизации кода категориальной
Затем, чтобы устранить сложности, связанные с поддержкой категориальной
Наконец, следует рассмотреть вопрос о реализации на основе категориальной
Приступим к реализации усовершенствований категориальной
Прежде всего, для решения проблемы громоздкости вычислений, которая обусловлена ограниченностью системы команд
Заменим "встроенные" в систему команд категориальной
В частности, в целях экономии времени, рассуждая без ограничения общности, приведем пример записи двухместной функции сложения:
$$+<x,y> = \varepsilon o<\varepsilon o<'+,x>,y>.$$C учетом характеристических равенств для категориальной
которое находится в полном соответствии с правилами
Продолжим обсуждение перехода к
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
true |
if abc |
|
S |
a c |
m |
false |
if abc |
|
S |
b c |
m |
(a,b) |
add c |
S |
{a+b} |
C |
S |
(a,b) |
eq c |
S |
true/false |
C |
S |
Как видно из приведенной таблицы, if, проверки условия eq, а также сложения add. Проиллюстрируем практическую эффективность программного кода усовершенствованной категориальной 2 и 3 в "классической" версии "языка программирования"
push cur (push push cdr swap quote 2 cons
app swap push cur (cdr) swap quote 3 cons
app cons app) swap quote + cons app.
"Запрограммируем" ту же задачу в усовершенствованной версии
push quote 2 swap quote 3 cons add.
Как видно, объем программы сократился более чем втрое.
Рассмотрим, каким образом можно решить проблему с рекурсивными вычислениями в категориальной
Чтобы устранить сложности, связанные с поддержкой категориальной
Пересмотрим
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
T |
dum c |
|
$Y |
C |
S |
[a:b] |
wind c |
(t$Y)S |
(t.[a:b]) |
C |
S |
Как видно из приведенной таблицы, wind и dum для обработки рекурсивных объектов.
До сих пор рассматривались варианты
При вычислении с
При вычислении с
Наконец, при вычислении с
Чтобы устранить сложности с поддержкой категориальной
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
s |
{ |
S |
C.s |
C1 |
S |
C.s |
unfreeze.C |
S |
s |
C |
S |
s |
unfreeze.C |
S |
s |
C |
S |
Сформулируем ряд теорем, известных по именам их авторов как
Заметим, что возможность "ленивого" связывания переменных с их значениями в языках функционального программирования вытекает из формулировки
Поскольку доказательство
Пусть E1 и E2 суть ламбда-выражения, причем справедливо соотношение: E1 = E2.
Тогда существует ламбда-выражение E такое, что выполнены следующие условия: во-первых, E1 = E, и, во-вторых, E2 = E.
Заметим, что символ "=" в формулировке теоремы понимается в смысле отношения конвертируемости.
Если в языке
Если вычисление значения выражения приводит к определенному результату, то к нему всегда приводит
После выяснения особенностей различных
Наиболее очевидным, исходя из специфики курса, представляется подход, при котором пересматривается
Напомним, что ни
Другим возможным подходом к реализации "ленивой" стратегии вычислений может служить использование механизма
Наконец, еще одним теоретически интересным и практически важным подходом к реализации стратегии отложенных вычислений является предложенное Р. Флойдом усовершенствование
Заметим, что последнее направление является весьма важным еще и в силу того, что оно позволяет моделировать методы реализации языков программирования с возможностью алгоритмизированной оптимизации программного кода.
Подводя итоги сравнительного анализа стратегий вычисления и направлений их оптимизированной реализации на основе
Во-первых, необходимо отметить, что в рамках рассматриваемой инструментально-технологической платформы Microsoft .NET используется виртуальная машина с универсальным высокоуровневым ассемблером (известным под названием Microsoft Intermediate Language, или, сокращенно, MSIL), принципиально подобная
Во-вторых, виртуальная машина инструментально-технологической платформы Microsoft .NET является достаточно универсальным решением и предусматривает такие важнейшие механизмы поддержки проектирования и реализации языков программирования, как централизованная
В-третьих, виртуальная машина .NET, в отличие от
В-четвертых, виртуальная машина .NET обеспечивает поддержку универсальной
Завершая первую часть учебного курса, посвященного исследованию современной теории и практики программирования (на примере языка функционального программирования SML) и поддерживающих
Прежде всего, нами была рассмотрена история развития языков программирования, а также построен вариант классификации современных подходов к программированию.
Затем было дано представление важнейших математических формальных систем, которые составляют теоретическое основание современных подходов к программированию и, прежде всего, функционального подхода. В частности, были рассмотрены исчисление ламбда-конверсий,
Далее, посредством перечисленных теорий были формализованы такие важнейшие аспекты языков программирования, как
Кроме того, было исследовано интуитивно ясное понятие типа, изучены основы теории типов и типизации в языках программирования.
Затем мы перешли к рассмотрению вопросов, связанных с представлением рекурсивных функций и множеств, а также к формализации
Еще одним пунктом исследований стали важнейшие аспекты реализации языков программирования, включая схемы трансляции в промежуточнные коды для виртуальных машин SECD и
Наконец, мы провели сравнительное исследование различных стратегий вычислений и оптимизации кода.
Вполне естественно, что, исходя из обширного спектра и существенной глубины рассматриваемой проблематики, ряд важнейших аспектов теории и практики современного программирования (в рамках первой части курса) был лишь обозначен или изложен весьма конспективно.
В связи с этим в ходе дальнейшего исследования планируется систематическое изучение следующих вопросов:
Дальнейшие исследования, согласно практике, сложившейся на протяжении первой части курса, будут проводиться синтетически по направлениям теоретического обоснования программирования на основе современных формальных систем computer science и современной практики проектирования и реализации программного обеспечения на основе универсальной и прогрессивной программно-инструментальной платформы Microsoft .NET.
Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [24, 31, 32, 49, 51, 62, 76, 78].
Проиллюстрируем особенности реализации наиболее существенных стратегий вычислений на примере
Как было показано в ходе предыдущей лекции, такая формализация вычислительной машины как категориальная
Кроме того, как показывает практика, именно
Тем не менее, в базовом варианте построения категориальной
Перечислим наиболее существенные (с учетом целей и задач нашего курса) из этих недостатков.
Прежде всего, обращает на себя внимание некоторая громоздкость вычислений, хотя это и объясняется отчасти низкоуровневым характером категориальной
Другим существенным недостатком
Наконец, очевидно, что повторяющиеся фрагменты программы требуют многократных вычислений, поскольку порядок вычислений предопределен и заведомо не оптимален.
Выявив и оценив недостатки "классической" реализации категориальной
Прежде всего, для решения проблемы громоздкости вычислений (которая, как отмечалось, вытекает из ограниченности системы команд
Кроме того, в целях оптимизации кода категориальной
Затем, чтобы устранить сложности, связанные с поддержкой категориальной
Наконец, следует рассмотреть вопрос о реализации на основе категориальной
Приступим к реализации усовершенствований категориальной
Прежде всего, для решения проблемы громоздкости вычислений, которая обусловлена ограниченностью системы команд
Заменим "встроенные" в систему команд категориальной
В частности, в целях экономии времени, рассуждая без ограничения общности, приведем пример записи двухместной функции сложения:
$$+<x,y> = \varepsilon o<\varepsilon o<'+,x>,y>.$$C учетом характеристических равенств для категориальной
которое находится в полном соответствии с правилами
Продолжим обсуждение перехода к
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
true |
if abc |
|
S |
a c |
m |
false |
if abc |
|
S |
b c |
m |
(a,b) |
add c |
S |
{a+b} |
C |
S |
(a,b) |
eq c |
S |
true/false |
C |
S |
Как видно из приведенной таблицы, if, проверки условия eq, а также сложения add. Проиллюстрируем практическую эффективность программного кода усовершенствованной категориальной 2 и 3 в "классической" версии "языка программирования"
push cur (push push cdr swap quote 2 cons
app swap push cur (cdr) swap quote 3 cons
app cons app) swap quote + cons app.
"Запрограммируем" ту же задачу в усовершенствованной версии
push quote 2 swap quote 3 cons add.
Как видно, объем программы сократился более чем втрое.
Рассмотрим, каким образом можно решить проблему с рекурсивными вычислениями в категориальной
Чтобы устранить сложности, связанные с поддержкой категориальной
Пересмотрим
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
T |
dum c |
|
$Y |
C |
S |
[a:b] |
wind c |
(t$Y)S |
(t.[a:b]) |
C |
S |
Как видно из приведенной таблицы, wind и dum для обработки рекурсивных объектов.
До сих пор рассматривались варианты
При вычислении с
При вычислении с
Наконец, при вычислении с
Чтобы устранить сложности с поддержкой категориальной
| Старое состояние КАМ | Новое состояние КАМ | ||||
|---|---|---|---|---|---|
| Терм | Код | Стек | Терм | Код | Стек |
s |
{ |
S |
C.s |
C1 |
S |
C.s |
unfreeze.C |
S |
s |
C |
S |
s |
unfreeze.C |
S |
s |
C |
S |
Сформулируем ряд теорем, известных по именам их авторов как
Заметим, что возможность "ленивого" связывания переменных с их значениями в языках функционального программирования вытекает из формулировки
Поскольку доказательство
Пусть E1 и E2 суть ламбда-выражения, причем справедливо соотношение: E1 = E2.
Тогда существует ламбда-выражение E такое, что выполнены следующие условия: во-первых, E1 = E, и, во-вторых, E2 = E.
Заметим, что символ "=" в формулировке теоремы понимается в смысле отношения конвертируемости.
Если в языке
Если вычисление значения выражения приводит к определенному результату, то к нему всегда приводит
После выяснения особенностей различных
Наиболее очевидным, исходя из специфики курса, представляется подход, при котором пересматривается
Напомним, что ни
Другим возможным подходом к реализации "ленивой" стратегии вычислений может служить использование механизма
Наконец, еще одним теоретически интересным и практически важным подходом к реализации стратегии отложенных вычислений является предложенное Р. Флойдом усовершенствование
Заметим, что последнее направление является весьма важным еще и в силу того, что оно позволяет моделировать методы реализации языков программирования с возможностью алгоритмизированной оптимизации программного кода.
Подводя итоги сравнительного анализа стратегий вычисления и направлений их оптимизированной реализации на основе
Во-первых, необходимо отметить, что в рамках рассматриваемой инструментально-технологической платформы Microsoft .NET используется виртуальная машина с универсальным высокоуровневым ассемблером (известным под названием Microsoft Intermediate Language, или, сокращенно, MSIL), принципиально подобная
Во-вторых, виртуальная машина инструментально-технологической платформы Microsoft .NET является достаточно универсальным решением и предусматривает такие важнейшие механизмы поддержки проектирования и реализации языков программирования, как централизованная
В-третьих, виртуальная машина .NET, в отличие от
В-четвертых, виртуальная машина .NET обеспечивает поддержку универсальной
Завершая первую часть учебного курса, посвященного исследованию современной теории и практики программирования (на примере языка функционального программирования SML) и поддерживающих
Прежде всего, нами была рассмотрена история развития языков программирования, а также построен вариант классификации современных подходов к программированию.
Затем было дано представление важнейших математических формальных систем, которые составляют теоретическое основание современных подходов к программированию и, прежде всего, функционального подхода. В частности, были рассмотрены исчисление ламбда-конверсий,
Далее, посредством перечисленных теорий были формализованы такие важнейшие аспекты языков программирования, как
Кроме того, было исследовано интуитивно ясное понятие типа, изучены основы теории типов и типизации в языках программирования.
Затем мы перешли к рассмотрению вопросов, связанных с представлением рекурсивных функций и множеств, а также к формализации
Еще одним пунктом исследований стали важнейшие аспекты реализации языков программирования, включая схемы трансляции в промежуточнные коды для виртуальных машин SECD и
Наконец, мы провели сравнительное исследование различных стратегий вычислений и оптимизации кода.
Вполне естественно, что, исходя из обширного спектра и существенной глубины рассматриваемой проблематики, ряд важнейших аспектов теории и практики современного программирования (в рамках первой части курса) был лишь обозначен или изложен весьма конспективно.
В связи с этим в ходе дальнейшего исследования планируется систематическое изучение следующих вопросов:
Дальнейшие исследования, согласно практике, сложившейся на протяжении первой части курса, будут проводиться синтетически по направлениям теоретического обоснования программирования на основе современных формальных систем computer science и современной практики проектирования и реализации программного обеспечения на основе универсальной и прогрессивной программно-инструментальной платформы Microsoft .NET.
Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [24, 31, 32, 49, 51, 62, 76, 78].
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.