On 01/05/2014 11:00 AM, Sergey Mironov wrote:
If I understand correctly, it is the two specialized versions of
`validator' which cause problems in my example. But does this mean
that specializations are not usable in practice at the moment?
More precisely, you'll run into trouble if you cause multiple
specializations of a function that defines local functions that need to
have URIs assigned to them!
Do you plan to introduce some kind of automatic names generator for cases
like this one?
No, I advise folks to use functors for such cases. One principle of
Ur/Web is not to try to come up with URI schemes automatically, like in
e.g. some functional-language frameworks that assign long random-looking
identifiers to continuations. I want URLs to look pretty! To that end,
Ur/Web solicits the programmer's help in URI choice. An application of
a functor will have a programmer-provided name, which will appear as a
subdirectory name in URLs.
I think, it would be fine If urweb had made two urls
(say, `validator0' and `validator1' ) out of two static copies of
`validator' in my example. I vote for this improvement until there are
counterexamples demonstrating how this improvement may violate the
security or confuse something.
Well, what if your program already contained a function literally named
'validator0'? Now URL generation depends arbitrarily on the other code
in a program! With the current scheme, it is possible to audit one
module (e.g., .ur file) in isolation and know exactly what URI scheme
will be generated for it.
2014/1/4 Adam Chlipala<[email protected]>:
On 01/04/2014 01:57 PM, Sergey Mironov wrote:
Wow, sorry for that. Unfortunately, it is not my only trouble with
this sample. Please, see FormBug2.ur (in attach). I've replaced !=
with `eq' call.
The new errors are
$ urweb -dbms sqlite FormBug2
:0:0: (to 0:0) Duplicate HTTP tag validator
Your code needs to create URLs referencing the function [validator], but
multiple versions of it must exist due to multiple (static) calls to its
enclosing function, and they'd all get the name "validator" in URLs. Try
making the enclosing function a functor instead, so you get to choose a
module name for its outputs manually, providing the compiler with advice
about namespacing.
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur