On 05.01.2014 22:10, Adam Chlipala wrote:
I think it is better to direct efforts into improvement of the FFI
interface and urweb API because we will need them anyway. If I only
had methods for
1) clone the context to use it with a new thread inside an FFI
2) call the url handler (I already know that `uw_begin' or
`uw_get_app(ctx)->handle(ctx, uri)' may help me here)
I think I'm basically on board with this proposal, but there is it
least one potential complication that seems worth bringing up.
Any Ur/Web code may encounter a benign exception requiring transaction
restart. The canonical example is a serialization failure from
optimistic SQL concurrency. Your suggestions above don't make it
clear how transactions should be handled in general, including where
to jump back to when a transaction needs restarting.
I assumed the strategy to be an FFI-specific. As soon as FFI API
provides the basic combinators (uw_begin, uw_commit, uw_rollback, ...),
the programmer is able to implement any algorithm they want. The
`periodic_loop()' from request.c demonstrates one possible algorithm,
probably, the most popular one.
For simplicity's sake, what do you think of implementing the following
two functions instead?
1) clone context but don't start a transaction for it (note that this
also opens a database connection, checks the schema, and creates
prepared statements!)
2) given a context and a URI, run the associated Ur/Web code in that
context in a new transaction associated only with this operation
Fine! I'll draft a patch and publish it.
My main recommendation, though, is to do like this for a record that
needs to cross the Ur-C boundary. This would be code in an FFI .urs
file:
type myrecord
val myrecord : int -> string -> myrecord
val getInt : myrecord -> int
val getString : myrecord -> string
OK. I already use this method, the only thing that bothers me is the
amount of boilerplate code. But It is not that important at the moment.
Regards,
Sergey
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur