Слайд 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
Слайд 8Dynamic Languages Toolkit
Общая модель
Работа с кодом
Поиск
Caller/callee иерархии
Ссылки/объявления
Рефакторинг
Отладка и запуск
Интерфейс
Редактор, outline, страницы настроек
Eclipse
Open
Source
Языки:
Tcl
Python
Ruby
Perl
Слайд 9Основные задачи
Разработка алгоритма
Реализация общей части
Eclipse
Dynamic Languages Toolkit
Реализации для Python, Ruby
Слайд 10Проблемы
Модульность
eval-блоки
Глобальные переменные
Метапрограммирование
Многопоточность
Слайд 13Алгоритм
Управляемый запросами анализ (Alexander Spoon, Demand-Driven Type Inference with Subgoal Pruning)
Задача, подзадача
Caller/callee
иерархии
Тип (литералы, указатели, self, присваивания, параметры, вызовы)
Использования
Отсечение подзадач
Время
Глубина
Реализация для Smalltalk