8a25bf1a05a8e55e08796092f0dfb9a6.ppt
- Количество слайдов: 18
СИСТЕМНОЕ И ПРИКЛАДНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Лекция 4. Интерпретация и компиляция программ. Виртуальные машины. Обеспечение переносимости программ.
Интерпретация и компиляция
Интерпретация и компиляция программ • Интерпретация – поэлементная (пооператорная, построчная) трансляция с одновременным исполнением программы • Компиляция – трансляция всей программы в целом на язык низкого уровня • разносятся фазы трансляции и исполнения 3
Интерпретация и компиляция программ • Интерпретатор - «станок с ЧПУ» , буквальное исполнение инструкций • Компилятор – «станкостроительная машина» , создаёт машину, выполняющую заданные инструкции картинки (с) Dan Pipony, http: //blog. sigfpe. com 4
Компиляция программ • разбор (анализ) программы • лексический - текст разбивается на лексемы • синтаксический - проверяется корректность синтаксиса - строится дерево разбора • семантический - проверяется смысловая корректность - формируется промежуточное представление • оптимизация • удаление лишних конструкций, редукция • генерация кода на основе внутреннего представления • код на целевом языке • компоновка (для многомодульных программ) 5
Способы исполнения программ • компиляция • трансляция программного кода в машинный код целевой платформы • интерпретация • программный код исполняется без предварительной трансляции в машинный код ( «виртуальная машина» ) • смешанные подходы • интерпретатор перед исполнением транслирует код на промежуточный язык (байт-код) • компиляция в код виртуальной машины 6
Виртуальные машины
Виртуальные машины • Виртуальная машина – уровень абстракции от аппаратной и/или программной платформы (ОС) • эмулирует физическую машину - обеспечивая переносимость программ с одной платформы на другую • или создаёт виртуальное окружение ( «песочницу» ) - ограничивая возможности исполняемых программ в целях безопасности 8
ВМ как исполняющая среда языка программирования • Эмулирует операции некоего процессора (набор инструкций) • Два основных способа реализации: • стековые ВМ - операнды команд процессора размещаются в стеке (LIFO) - результаты операций также помещаются в стек - проще механизм, короче код, но хуже оптимизируется • регистровые ВМ - операнды и результаты размещаются в явно адресуемых регистрах - больше возможностей для оптимизации, но длиннее код операций (включает указание адресов операндов) 9
Стековая и регистровая ВМ Стековая ВМ: POP 20 POP 7 ADD 20, 7, result PUSH result Регистровая ВМ: ADD R 1, R 2, R 3; картинки: http: //markfaction. wordpress. com/2012/07/15/stackbased-vs-register-based-virtual-machine-architectureand-the-dalvik-vm/ 10
Виртуальные машины: Java JVM vs. Dalvik • JVM – стековая • Dalvik – регистровая • может исполнять Java-байткод • но требуется дополнительный уровень трансляции и оптимизации картинка: http: //markfaction. wordpress. com/2012/07/15/stackbased-vs-register-based-virtual-machine-architecture-and 11 the-dalvik-vm/
Виртуальные машины: Java VM • JVM реализует набор команд: • операции над стеком • арифметика • управляющие инструкции (переход, ветвление, возврат, генерация исключений) • сохранение и загрузка локальных переменных • доступ к полям класса (в т. ч. статическим) • вызов методов (статических, виртуальных, закрытых, интерфейсных) • создание объектов (в т. ч. массивов) • преобразование и проверка типов 12
Виртуальные машины: Java Трансляция java-кода в байткод System. out. println(“some string”); транслируется в: getstatic java. lang. System. out Ljava/io/Print. Stream; ldc “some string" invokevirtual java. io. Print. Stream. println (Ljava/lang/String; )V То есть: 1. В стек помещается ссылка на объект потока ввода-вывода, 2. В стек помещается ссылка на строку, которую надо вывести 3. Происходит вызов метода (функции) println для заданных операндов 13
Виртуальные машины: CLR (. NET framework) • Common Language Runtime – исполняющая языковая среда языка CIL • Common Intermediate Language – похожий на asm промежуточный язык картинки: (с) Wikipedia. org 14
Виртуальные машины: CIL Hello World. assembly Hello {}. method public static void Main() cil managed {. entrypoint. maxstack 1 ldstr "Hello, world!" call void [mscorlib]System. Console: : Write. Line(string) ret } 15
Обеспечение переносимости программ Абстрагирование от программных и аппаратных платформ
Переносимость программ • Компилируемые языки: • совместимые ОС и аппаратные платформы ( «бинарная совместимость» ) • ОС с разным API: - абстрагирование через библиотеки - перекомпиляция (код не надо переписывать) • разные аппаратные платформы - кросс-компиляция • Виртуальные машины и интерпретаторы: • программа распространяется как байт-код или исходный код • целевая среда должна предоставлять способ его выполнить • возможна оптимизация под конкретную платформу (JITкомпиляция) 17
Ссылки • Устройство интерпретатора языка Python: http: //ideafix. name/wp-content/uploads/2012/09/Python 14. pdf • Стековая и регистровая ВМ: http: //www. sternkn. com/stack-based-vs-register-basedvirtual-machine-architecture-and-the-dalvik-vm/ • Модификация байт-кода Java VM: http: //www. ibm. com/developerworks/ru/library/ljvmbytecode_mdf_1 • CIL и системное программирование в MS. NET (учебный курс): http: //www. intuit. ru/studies/courses/89/89/info • The Three Projections of Doctor Futamura: http: //blog. sigfpe. com/2009/05/three-projections-ofdoctor-futamura. html 18
8a25bf1a05a8e55e08796092f0dfb9a6.ppt