ailev.ru

10 января 2008 · Комментарий

Без заголовка

По поводу спотыкается на циклах - тут дело в принципиальных ограничениях. Если нет циклов и рекурсий, то задача решается относительно просто: дерево входных данных получается конечным, хотя возможно и очень большим. Тем не менее конечное дерево можно как-то пытаться обработать за разумное время, напеример, итеративно. Если есть циклы и рекурсии, то все сложнее - в data flow анализе надо выходные данные учитывать как входные. Т.е. дерево входных данных вообще говоря получается неограниченное. Тут два варианта: либо мы фиксируем размеры массивов, либо приходится делать консервативные обощения, последенее в конечном итоге и зарубает всю идею суперкомпиляции. Первый же вариант - фиксированные размеры массивов - применим только в узких случаях, и вообще говоря, вместо него можно использовать метапрограммирование, т.е. просто генерировать специализированную версию программ. На мой взгляд, это проще и понятнее для программеров. Например, макросы в Lisp/Scheme/Nemerle, Template Haskell, MetaOCaml.

К записи · К обсуждению