tag:blogger.com,1999:blog-2257407812464695041.post3891123229922168703..comments2022-04-03T23:14:48.607+03:00Comments on Метавычисления и специализация программ: Что лучше: частичные вычисления или суперкомпиляция?Sergei Romanenkohttp://www.blogger.com/profile/07642728590209375907noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-2257407812464695041.post-20001232108640362222009-06-16T00:55:58.466+04:002009-06-16T00:55:58.466+04:00А ссылку-то на проект вставить забыл:
http://code...А ссылку-то на проект вставить забыл:<br /><br />http://code.google.com/p/unmix/Sergei Romanenkohttps://www.blogger.com/profile/07642728590209375907noreply@blogger.comtag:blogger.com,1999:blog-2257407812464695041.post-91464977730602996282009-06-16T00:55:03.280+04:002009-06-16T00:55:03.280+04:00Кстати, я недавно собрался с силами, создал в Goog...Кстати, я недавно собрался с силами, создал в Google Code проект, и выставил в нём частичный вычислитель Unmix (в том виде, в котором он был в 1993 году).<br /><br />Когда мне удалось его первый раз самоприменить и вычислить Unmix(Unmix, Unmix), у меня в компьютере было 640 Kb, а сейчас - 4 Gb. Неудивительно, что с тех пор мозги у меня несколько атрофировались.<br /><br />Вот когда у компьютера мозги были совсем куриные, иногда приходилось думать и самому... :-)Sergei Romanenkohttps://www.blogger.com/profile/07642728590209375907noreply@blogger.comtag:blogger.com,1999:blog-2257407812464695041.post-36704046738778121472009-06-07T12:54:34.714+04:002009-06-07T12:54:34.714+04:00Может ли частичный вычислитель "обойти" ...Может ли частичный вычислитель "обойти" суперкомпилятор по грубине преобразования программы (а не по "потребительским" качествам, вроде скорости работы и предсказуемости результатов)?<br /><br />Можно рассматривать и частичные вычисления, и суперкомпиляция как частный случай "преобразования программ". Т.е., есть набор каких-то правил, как "можно" из одной программы сделать другую, "эквивалентную" (в соответствии с неким определением "эквивалентности").<br /><br />При этом вопрос о том, какие правила и когда применять, остаётся "за кадром". Предполагается, что есть некий "дядя", который и берёт на себя ответственность и за последовательность преобразований, и за их конечный результат.<br /><br />Кстати, многие интерактивные системы преобразования именно так и работают. Но, видимо из маркетинговых соображений, вывеска у них другая: вместо "эквивалентных преобразований" программ теперь говорят о "рефакторизации" программ (refactoring). Сидит человек и решает, что и как сделать с программой, а "грязную работу" по применению правил преобразования за него делает компьютер. И это - хорошо и полезно (поскольку при ручной переделке программы, человек слишком легко может что-то напортить).<br /><br />Так вот, если частичные вычисления и суперкомпиляцию рассматривать как набор преобразований, то суперкомпиляция - заведомо "круче", чем частичные вычисления. Ибо всё, что может делать частичный вычислитель, заведомо может сделать и суперкомпилятор.<br /><br />Однако, если мы от "набора преобразований" переходим к "алгоритмам преобразования", то вопрос сразу усложняется.<br /><br />Те, кто занимался частичными вычислениями, придумали кое-какие специфические методы, которые в суперкомпиляторах обычно не применяются. В первую очередь, предварительную разметку программ. Что, как я и говорил, обеспечивает предсказуемость результатов работы специализатора, основанного на частичных вычислениях: структуры остаточной пограммы, скорости её генерации и объёма потребляемых ресурсов.<br /><br />Опять же, сравнивать надо не на "конкретной" программе, а на каких-то классах задач. Дело в том, что под конкретную программу всегда можно "подхакать" и частичный вычислитель, и суперкомпилятор, чтобы "получилось хорошо".<br /><br />Такими делами занимаются даже производители графических карт: карты затачивались под хороший результат на конкретном (общепринятом) тесте! А в реальных ситуациях работали медленно. Ну и скандал был, когда это дело вылезло наружу.<br /><br />Также следует учитывать, что частичные вычислители обычно работают не совсем автоматически: в исходную программу можно (или требуется?) вставлять аннотации, с помощью которых указывается, какие методы нужно "раскрывать" (подставлять in-line), где нужно "обобщать" аргументы (от S до D), и т.п. Поэтому и возникает вопрос, что мы собираемся "сравнивать" применительно к "конкретной программе"? С одной стороны - искусство человека по расставлению аннотаций в программе, а с другой - полностью автоматические методы?Sergei Romanenkohttps://www.blogger.com/profile/07642728590209375907noreply@blogger.comtag:blogger.com,1999:blog-2257407812464695041.post-36848379343233585292009-06-07T10:11:29.355+04:002009-06-07T10:11:29.355+04:00Замечательное объяснение о том, что для самопримен...Замечательное объяснение о том, что для самоприменимости специализатор должен быть не слишком глуп, но и не шибко умен. Но, все-таки, самоприменимость - достаточно высокая и, пока-что, достаточно "научная" задача. <br /><br />Интересно, а есть ли более идейно простая задача-пример специализации конкретной программы, где частичный вычислитель оказывается на высоте, а суперкомпилятор - тот же самый SPSC или HOSC дает плохой результат?<br /><br />Может ли частичный вычислитель хоть в каком-то случае, где, например, суперкомпилятор переобобщает конфигурацию, обойти суперкомпилятор.<br /><br />Было бы интересно увидеть короткий, но красивый пример.Ilya Klyuchnikovhttps://www.blogger.com/profile/11649830202064984151noreply@blogger.com