Практические причины церковного кодирования

Черч-кодирование (он же шаблон посетителя) — это способ представления данных в виде функций: вместо

data T = C1 F1 F2 | C2 F3 F4

вы можете определить

data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r)

. Хотя возможность представлять что-либо в виде функции — это хорошо, я всегда думал, что первая версия предпочтительнее, потому что она чище и не требует языковых расширений (явное forall). Однако иногда в публичных библиотеках можно найти закодированные церковью данные. Каковы преимущества использования этого?

Примеры церковной кодировки в публичных библиотеках:


person Rotsor    schedule 21.03.2012    source источник


Ответы (1)


Это соответствует стилю передачи продолжений с несколькими продолжениями и делается для производительности: избегается явное построение и уничтожение данных, вместо этого управление передается непосредственно на основе результатов сопоставления с образцом, которое вместо этого было бы выполнено немедленно. Это не всегда приводит к повышению производительности, но когда это происходит, это может быть довольно значительным.

По сути, вы можете рассматривать это как данные и контроль. Если то, что вы делаете, по сути похоже на элемент управления — например, ветки успеха и отказа парсера — тогда представление на основе элемента управления может быть лучше. В противном случае придерживайтесь данных.

person ehird    schedule 21.03.2012