On 07/21/2014 12:15 PM, Andy wrote:
New to Ur/Web. This looks like a very interesting project. Would love
to try it out. Have a few questions:
1) The FAQ states "From the world of dependent types, Ur/Web takes
type-level computation." Does that mean Ur/Web have full support for
dependent type? If not, what is missing? Anything that the type system
of ATS or Agda can do that the type system of Ur/Web can't, or vice versa?
No, I say that Ur/Web doesn't support dependent types. For instance,
types are not allowed to mention variables whose values are not known
until runtime.
2) Looking at the Techempower benchmark, for the "Multiple Queries"
and "Fortune" tests, the performances of Ur/Web-Postgresql are several
times higher than that of Ur/Web-MySQL. This is really strange because
for almost all other frameworks the exact opposite is true: MySQL
results tend to be much higher than postgresql results. Is this due to
some problems with the urweb mysql driver? Any workaround? All my data
is on MySQL so the poor performance on Mysql is a concern.
Can you point to particular parts of the TechEmpower datasets
demonstrating that MySQL tends to give better performance than
PostgreSQL? I only see small differences for other frameworks. In
general, I think Postgres is much better at scaling to high concurrency,
and the 40 hardware threads of the primary hardware platform for these
benchmarks probably qualifies. I'm not yet convinced that there is
anything exceptional about MySQL performance with Ur/Web.
I really do suggest using PostgreSQL with Ur/Web. The true serializable
transactions represent a substantial advantage in programming-model
simplicity vs. MySQL.
3) For the "Data Updates" benchmark Ur/Web has poor performances with
high latencies. The FAQ attributes this to "optimistic SQL concurrency
thrashing to provide the transactional semantics that most benchmark
entrants don't bother to shoot for." Can you get into more details
about this concurrency thrashing and why does it cause poor update
performance? Is there anyway to turn this off and just use the
"normal" semantics that other frameworks use? My application is
write-heavy and latencies measured in seconds are just too high.
I think any explanation of database concurrency-control mechanisms
should get the basic idea across. Under high contention for rows being
written by many threads, transactions often need to be aborted and
restarted, to avoid producing anomalies where transactions don't appear
atomic.
That particular benchmark is highly unrealistic (for most applications),
with 40 hardware threads simultaneously running transactions with 40 SQL
operations apiece (half read, half write). I'd be happy to comment on
your particular workload, if you can give more detail. Even better, I'd
be happy to help build a small benchmark application inspired by your
workload, so that we don't need to speculate about performance.
If your application is popular enough that this level of
performance-tuning matters, then you've probably made it to the big
time! (And I'll be especially motivated to help you apply Ur/Web
therein. :])
4) How big is the size of the javascript code generated by Ur/Web
compared to hand written JS code? For example Dart-generated js tend
to be several times bigger than the comparable hand written one. Is
Ur/Web similar to that?
Client-side code is shipped as "bytecode" in JavaScript datatypes. I
don't have a rough size-conversion factor in mind, but you can look here
for all the recursive function definitions used in client-side code in
the currently posted main demo:
http://www.impredicative.com/ur/demo/Demo/app.1404481194191.js
See the very bottom segment for these definitions, on roughly one line
per function.
Again, to answer this question for your specific application, I'd be
happy to help build a proof of concept that can be measured!
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur