Фунции с yield
это особые функции для создания последовательностей - алгоритмов. К примеру:
function f1:sequence of byte;
begin
loop 10 do yield Random(256);
end;
begin
var seq := f1();
writeln(seq);
writeln(seq);
end.
Выпишет 2 разных массива, потому что в seq хранится только алгоритм. Ну а в данном случае я использовал это только потому что заранее не известно количество байт. Я не уверен быстрее ли это чем список, но хотя бы удобнее. Почитайте справку про yield и yield sequence.
И да, я проверил - распаковка дала точную копию исходного файла.