Реферат по предмету "Разное"


А. Н. Медведков научный руководитель Н. П. Васильев, к т. н

УДК 004(06) Компьютерные системы и технологии А.Н. МЕДВЕДКОВ Научный руководитель – Н.П. ВАСИЛЬЕВ, к.т.н., доцентМосковский инженерно-физический институт (государственный университет)РЕАЛИЗАЦИЯ ДИНАМИЧЕСКИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ДЛЯ CLRРассмотрены некоторые свойства динамических и статических языков программирования и особенности реализации динамических языков для среды CLR на примере Python и C#. Проанализированы и сопоставлены различные подходы к решению задачи.Изначально считалось, что виртуальная машина CLR – не подходящая платформа для реализации динамических языков программирования. Существование этой точки зрения связано с различиями в свойствах динамических языков и устройством CLR [2]. Появление множества реализаций [1] динамических языков на этой платформе опровергает это утверждение. По производительности они не уступают оригинальным. Среди особенностей динамических языков программирования можно выделить слабо типизированный синтаксис и позднее связывание для вычисления выражений во время исполнения. Слабо типизированный синтаксис подразумевает минимальные ограничения на типы переменных или их отсутствие, в отличие от строгой (статической) типизации, когда тип объявленной переменной не изменяется. Таким образом, при слабой типизации не обеспечивается типовая безопасность. В статических языках программирования, если компилятор не находит конкретного метода класса, он генерирует ошибку компиляции. В динамических языках код оценивается во время исполнения по нескольким причинам. Во-первых, разрешение и вызов производятся относительно экземпляров как можно позже, что исключает их из правил компиляции. Во-вторых, во время компиляции не известен тип объекта, соответственно, требуется экземпляр, чтобы выяснить, имеет ли он конкретный метод. В-третьих, некоторые правила расширения языка может потребоваться выполнить непосредственно перед разрешением и вызовом. CLR считалась неподходящей для динамических языков из-за статического характера инструкций CIL, сопоставления типов и сигнатур, общеязыковой спецификации (CLS) и общей системы типов (CTS). При генерировании кода компилятор должен указывать тип переменных в метаданных, т.к. переменные, параметры и поля классов строго типизированы. В CLR все типы являются наследниками класса System.Object, что позволяет присваивать экземпляру этого класса любые экземпляры любых типов (этот подход применяется в VB .NET, Jscript .NET, IronPython). Отсюда возникает другая проблема: использование строго типизированной базовой библиотеки классов. Для ее решения применяется позднее связывание и Reflection. Так же существует проблема в виде типизированных инструкций CIL. Одним из вариантов решения является проверка типов переменных и приведение их к этим типам с последующим вызовом соответствующих инструкций CIL. Однако такой вариант не оптимизирован за счет преобразования типов-значений в объекты и обратно. В Python существуют такие встроенные типы, как списки и хеш-таблицы. Вариантов реализации подобных конструкций несколько: можно использовать классы из базовой библиотеки (List, Dictionary), либо создать свои классы. Выбор того или иного решения определяется требуемым функционалом типов. Для Python функционал классов библиотеки оказался недостаточен. События (MultiCastDelegate) также являются строго типизированными, чтобы подписываться на них, нужен делегат вызываемого метода. Класс Delegate имеет различные конструкторы, которые можно использовать для позднего связывания, но сигнатуры метода и делегата могут не совпадать. Во второй версии .Net Framework были добавлены свойства контрвариантности параметров делегатов (менее специфичные) и ковариантности возвращаемого значения (более специфичное). Таким образом, проблема параметров может быть решена, но не типа возвращаемого значения. В этом случае на помощь приходит еще одно нововведение – DynamicMethod, позволяющий осуществить lightweight code generetion (т.е. без привязки к объекту). С помощью этого класса и Reflection можно создавать делегаты с нужными типами параметров и возвращаемого значения, что решает проблему позднего связывания. Реализация динамических языков программирования для CLR – задача не простая, но ее можно решить. Это подтверждают примеры реализации Python, Ruby, Smalltalk, Scheme, JScript, Tcl/Tk и других языков.Список литературы .Net Languages. http://www.dotnetpowered.com/languages.aspxJohn Gough. Compiling for the .NET Common Language Runtime. Prentice Hall PTR, 2001.Serge Lidin. Inside Microsoft .NET IL Assembler. Microsoft Press, 2002.Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Addison Wesley, 1986


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.