As a compromise that blends both views, weadopted an approach [19, 22] based around an in-
termediate target that is readily accessible by both
OS developers and formal methods practitioners. It
uses the functional programming language Haskell to
provide a programming language for OS developers,
while at the same time providing an artefact that can
be automatically translated into the theorem proving
tool and reasoned about
серьёзно что-ли?!
читаю доку про SEXP вижу: RAWSXP length, truelength followed by a block of bytes. читаю исходники: INLINE_FUN SEXP ScalarRaw(Rbyte x) { SEXP ans = allocVector(RAWSXP, (R_xlen_t)1); RAW(ans)[0] = x; return ans; вот какого черта?
socket state changes (events) over the inproc:// transport to a given endpoint. При этом zmq_socket_monitor можно подключить к Router (XSUB), это конечно круто, но какого спрашивается черта и где в доках неточность?
я понимаю что код кривой, но почему следующий код приводит к тому, что мне бесконечное число раз приходит единственное посланное сообщение (т.е. zmq_close) асинхронный, но поведение совсем неожиданное:
на haskell wiki — нашёл вроде, решил проверить не реализовали ли на hackage.. обнаружил, что половиду моей конечной цели сделали,
решил поглядеть реализацию, увидел что про-теряно половина сути либы, написал тесты — действительно все к чертям валится и надо
писать патчи (сравнимые с размером либы).. ну как так жить..
в сишной либе:
tyedef foorec { ... } foorec, *foo;
extern *foo F_foo;
в c2hs файле:
data FOOREC = FOOREC
{# pointer *FOOREC as FOO -> FOOPREC #}
foreign import ccall unsafe "&F_foo" fFoo :: Ptr Foo
Значение в коде получается как:
f <- peek fFoo
Тут поидее все правильно, а вот дальше..
В обычном исходнике всё хорошо, а вот в ghci — мистика, если вызывать peek fFoo, то результат отличается, если мы это делаем в top-level сессии и если мы это делаем внутри функции:
т.е.
h = peek Foo (внутри файла)False
x1 <- peek Foo (внутри сессии)
x2 <- h
x1 == x2
я нашёл серию хаков позволяющих сделать обход этой проблемы, но это жутко не красиво, да и учитывая, что в executable всё хорошо, хотелось бы обход использовать только для ghci.
а). Почему так? б). Куда копать, чтобы понять почему так получается? в). можно ли написать код в хакцельной либе так, чтобы код для executable и для ghci отличался, т.е. что-то типа
#if _IN_GHCI
p <- readIORef globalHack
#else
p <- peek fFoo
#endif
сделать тест, доказывающий это, при этом код проходит квиктестовые тесты, а hpc говорит, что проблемное место посещается