Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемwww.i-lab.nsu.ru
1 Вычисление типов в императивных динамически типизированных языках. Михаил Калугин, студент 3 курса ММФ Научные руководители: Игорь Николаевич Скопин Андрей Викторович Платов В рамках проекта Dynamic Languages Toolkit ( Xored Software, Inc. 8 декабря 2006
2 Проблемы динамической типизации Сложность чтения программ Ошибки Низкая скорость получаемого кода Сложность анализа class Foo: def doo(self): print "wow" def callFoo(a): a.doo() z = Foo() callFoo(z) x = 5 x = string
3 Использование информации о типах Верификация IDE Code completion Caller/callee иерархии Подсказки о типах в outline, … Оптимизация
4 Основные задачи Разработка архитектуры Реализация общей части Eclipse Dynamic Languages Toolkit Реализации для Python, Ruby Цель Система для вычисления типов.
5 Архитектура Обобщенность Модель Алгоритм Расширяемость Python, Ruby Любой другой динамический язык Управляемость Скорость Точность
6 Существующие подходы Управляемый запросами анализ (Alexander Spoon, Demand-Driven Type Inference with Subgoal Pruning) Задачи и подзадачи, отсечение Итеративный анализ, построение графа ограничений (Ole Agesen, Concrete Type Inference: Delivering Object-Oriented Applications ) Type feedback
7 Основные задачи Разработка алгоритма Реализация общей части Eclipse Dynamic Languages Toolkit Реализации для Python, Ruby
8 Dynamic Languages Toolkit Общая модель Работа с кодом Поиск Caller/callee иерархии Ссылки/объявления Рефакторинг Отладка и запуск Интерфейс Редактор, outline, страницы настроек Eclipse Open Source Языки: Tcl Python Ruby Perl
9 Основные задачи Разработка алгоритма Реализация общей части Eclipse Dynamic Languages Toolkit Реализации для Python, Ruby
10 Проблемы Модульность eval-блоки Глобальные переменные Метапрограммирование Многопоточность
11 План работы
12 Спасибо за внимание Вопросы?
13 Алгоритм Управляемый запросами анализ (Alexander Spoon, Demand-Driven Type Inference with Subgoal Pruning) Задача, подзадача Caller/callee иерархии Тип (литералы, указатели, self, присваивания, параметры, вызовы) Использования Отсечение подзадач Время Глубина Реализация для Smalltalk
14 Алгоритм Итеративный анализ, построение графа ограничений (Ole Agesen, Concrete Type Inference: Delivering Object-Oriented Applications ) def foo(): x = 42 y = x * 3.5 x = []
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.