Ссылочная прозрачность и mmap в Haskell

Я надеялся использовать System.INotify и System.IO.MMap вместе, чтобы следить за модификациями файлов, а затем быстро выполнять сравнения для отправки исправлений по сети. Однако в документации для System.IO.MMap есть пара предупреждений о ссылочной прозрачности :

. В документации указано

It is only safe to mmap a file if you know you are the sole user. Otherwise referential transparency may be or may be not compromised. Sadly semantics differ much between operating systems.

MMap возвращает значения IO ByteString. Конечно, когда я использую это значение с putStr, я каждый раз ожидаю другого результата? Я предполагаю, что автор имеет в виду, что значение могло измениться во время операции ввода-вывода типа putStrи вылететь?

НАЧАЛО -ИЗ -РЕДАКТИРОВАТЬ :Если подумать, я думаю, что ответ на эту часть вопроса несколько очевиден... Если значение изменится в любое время после распаковки, это будет проблематично.

do 
  v <- mappedValue :: IO ByteString
  putStr v
  putStr v  -- Expects the same value of v everywhere

КОНЕЦ -ИЗ -РЕДАКТИРОВАТЬ

Разве нельзя получить какую-то блокировку отображаемой области или файла?

В качестве альтернативы можно ли написать функцию copy :: IO ByteString -> IO ByteString, которая безопасным образом делает снимок файла в его текущем состоянии?

10
задан Rehno Lindeque 1 July 2012 в 18:54
поделиться