[Ur] new user having some questions such as a:::Type twice? and more
Marc Weber
marco-oweber at gmx.de
Wed Sep 29 09:18:19 EDT 2010
Hi list.
1)
Which is the correct type for my_length2
The line below "TYPE 1" show how to it for my_length
my_length2 takes two lists and sums both length. (There is no use case
but learning ur for this function)
val rec my_length
(* TYPE 1 *)
: a:::Type -> list a -> int
= fn [a:::Type] (li: list a) =>
case li of
[] => 0
| _ :: ls => 1 + my_length ls
val my_length2
(* TYPE 2 *)
(*: What is the type of this function *)
= fn [a:::Type] [b:::Type] (li: list a, lj: list b) =>
( my_length li + my_length lj )
fun main () =
let
val add3: int -> int = fn x => x +1
in
(* show (1,2) *)
return <xml><body>
<div>
{[ my_length(Cons(1, [])) ]}
<br/>
{[ my_length2(Cons(1, []), Cons("1", [])) ]}
</div>
</body></xml>
end
2)
comparing my_length above with the one by lib/ur/list.ur I think
my_length is much simpler. So why is lib/ur/list.ur using acc?
lib/ur/list.ur:
val length = fn [a] =>
let
fun length' acc (ls : list a) =
case ls of
[] => acc
| _ :: ls => length' (acc + 1) ls
in
length' 0
end
3) Is there a way to comment lines in .urp files?
4)
How would you feel about adding //, # or-- like comments which always
comment everything until end of line?
5) Has anyone already thought about adding pdf support in some way -
probably by interfacing with C?
6) speed:
I did some benchmarking:
url_1,2,3 are a *very* simple xml documents.
So I added more and more of them taking time.
the main page contains N <a ..> tags and main.ur
contains N url_N functions:
fun main () =
return <xml>
<head> <title>Hello world!!</title> </head>
<body>
<h1>My tests</h1>
<a link={url_1()}>url1</a>
[...]
</body>
</xml>
and url_1 () = return <xml><body> <a href="http://en.wikipedia.org/wiki/Type_inference">Learn something</a><br/> <br/> <form> URL of your choice: <textbox{#Url}/> </form> </body></xml>
and url_2 () = return <xml><body> <a href="http://en.wikipedia.org/wiki/Type_inference">Learn something</a><br/> <br/> <form> URL of your choice: <textbox{#Url}/> </form> </body></xml>
[...]
results:
| num of url_1 functions | timing in sec | num / timing
20 exit code was 0timing :1.37693095207214 ratio: 0.0688465476036072
40 exit code was 0timing :2.38593482971191 ratio: 0.0596483707427979
80 exit code was 0timing :5.21924781799316 ratio: 0.0652405977249146
160 exit code was 0timing :8.78839206695557 ratio: 0.0549274504184723
320 exit code was 0timing :18.0503919124603 ratio: 0.0564074747264385
640 exit code was 0timing :40.8116230964661 ratio: 0.0637681610882282
Which means about 50ms typing time for each additional and url_ = ... ?
This seems to be a lot to me.
if I use fun NAME only putting the functions above main I get the same
ratio.
Having about 640 functions means 40sec compilation time. That's
close to being a coffee break.
Now I worked on a booking system (PHP) which has about 1200 PHP
functions which would have meant 1min 20sec. That's a very rough
approximation.
Benchmark test script:
http://mawercer.de/~marc/Test.hx
Do you think splitting a larger project into pieces is enough to
keep compilation time short?
Or can urweb be made faster as well?
7) XHTML: does it make sense to think about encoding it differently -
maybe something close to WASH style?
html
body onclick=".."
script type="javascript" url="myscript.js"
head
h2 {["title"]}
Of course this depends on indentation (like python, Haskell, ..) do.
Its a faster to write and easier to read IMHO.
Even if ur will never support this - would it be possible to use
create a function taking a block of code (string) returning an ast
which would be processed by ur instead?
8) does ur have a repository you I could clone ?
Marc Weber
More information about the Ur
mailing list