Ответ 1
Я могу предоставить одну твердую точку данных: у нас с Джоном Диасом была бумага в семинаре ML ML 2005 года, где мы сравнили стоимость использования zipper для представления графиков потока управления с затратами на использование изменяемых полей записи в Objective Caml. Мы были очень приятно удивлены, обнаружив, что производительность нашего компилятора с графиками потока управления на основе молнии на самом деле немного лучше, чем производительность, используя традиционную структуру данных с изменяемыми записями, связанными указателями. Мы не смогли найти серьезных инструментов анализа, чтобы точно сказать, почему молния была быстрее, но я подозреваю, что причина в том, что было меньше инвариантов для поддержания и, следовательно, относительно меньше назначений указателей. Также возможно, что оптимизатор был достаточно умен, чтобы амортизировать некоторые из затрат на распределение, вызванные застежкой-молнией. В любом случае застежка-молния может использоваться в оптимизационном компиляторе, и на самом деле есть небольшое преимущество в производительности.