Проекции Футамуры и частичные вычисления (Ренат Идрисов)
Ренат Идрисов (ИСИ СО РАН) рассказывает о теоретических основах программирования, о проекциях Футамуры-Турчина и о том, можно ли написать компилятор для интерпретируемого языка.
множеством параметров специализированной программы, когда значения части параметров известны и фиксированы. • Пример: возведение в степень и нахождение площади квадрата
x 0 = 1 f x n = x * f x (n-‐1) s x = f x 2 -‐-‐-‐-‐-‐ s x = x * x funcwon f(x, n) { if (n===0) return 1; if (n===1) return x; return x * f(x, n-‐1); } funcwon s(x) { return f(x, 2); } funcwon s(x) { return x*x; }
выполнение программы, а затем использует эту модель для производства более эффективной программы называется суперкомпилятором (англ. supervising compiler) • Это можно таже назвать «абстрактной интерпретацией» программ
| S N add x Z = x add x (S y) = S (add x y) add2 x = add x (S (S Z)) Остаточная программа: data N = Z | S N add2 x1 = S (S x1) Путь вычислений: add2 x1 add x1 (S (S Z)) S (add x1 (S Z)) S (S (add x1 Z) S (S x1)
Haskell, Java, Lisp, Modula-‐2, OCaml, Oberon, Pascal, Python, Scala, Smalltalk, and Vala • Для корректности специализатору не обязательно выполнять какие-‐то определённые оптимизации
вычисления для объектно-‐ориентированных языков • С.М. Абрамов Метавычисления и их применение • А.В. Климов Введение в метавычисления и суперкомпиляцию • Three Futamura Projecwons и не только ( h€p://habrahabr.ru/post/47418/) • The Three Projecwons of Doctor Futamura ( h€p://blog.sigfpe.com/2009/05/three-‐projecwons-‐of-‐ doctor-‐futamura.html) • Обфускация JavaScript (h€p://habrahabr.ru/post/ 112530/)