Ur (llenguatge de programació)
Ur també anomenat Ur/Web és un llenguatge de programació, d'àmbit d'aplicació específic per desenvolupar aplicacions web, creat per Adam Chlipala a l'Institut Tecnològic de Massachusetts,[1] que partint d'un únic programa, genera HTML amb codi client en JavaScript, codi nadiu per al servidor, i codi SQL per al sistema gestor de base de dades.
Tipus | llenguatge de programació |
---|---|
Data de creació | desembre 2014 |
Darrera versió estable | 20200209 () |
Influenciat per | Haskell i ML |
Extensió dels fitxers | ur, urs i urp |
Pàgina web | impredicative.com… |
Fa un ús extensiu dels registres, que converteix en estructures travessables, assegurant l'encaix de l'estructura dels formularis amb la dels gestors al servidor i proporciona un "Mapatge d'objectes relacional" integrat en el codi per la correcta generació de l'SQL.
La sintaxi es basa en la del llenguatge ML Estàndard incorporant conceptes del llenguatge Haskell.
Exemple de programa[2] amb formulari que interactua amb el servidor, encapsulant la comunicació Ajax XMLHttpRequest en la crida rpc().
datatype list t = Nil | Cons of t * list t
table t : { Id : int, A : string }
PRIMARY KEY Id
(* accions de servidor cridades via Ajax per "rpc()" més avall *)
fun add id s =
dml (INSERT INTO t (Id, A) VALUES ({[id]}, {[s]})) (* plantilla de codi SQL *)
fun del id =
dml (DELETE FROM t WHERE t.Id = {[id]})
fun lookup id =
ro <- oneOrNoRows (SELECT t.A FROM t WHERE t.Id = {[id]});
case ro of
None => return None
| Some r => return (Some r.T.A)
(* "check" cridat des de "onclick", serà compilat a JavaScript *)
fun check ls =
case ls of
Nil => return ()
| Cons (id, ls') =>
ao <- rpc <| lookup id;
alert (case ao of
None => "Fi"
| Some a => a);
check ls'
fun main () =
idAdd <- source "";
aAdd <- source "";
idDel <- source "";
return <xml><body>
<button value="Check values of 1, 2, and 3"
onclick={fn _ => let val llista = 1 :: 2 :: 3 :: []
in
check llista
end}/><br/>
<br/>
<button value="Add" onclick={fn _ => id <- get idAdd;
a <- get aAdd;
let
rpc <| add intId a
where
val intId = readError id
end}/>
<ctextbox source={idAdd}/>
<ctextbox source={aAdd}/><br/>
<br/>
<button value="Delete" onclick={fn _ => id <- get idDel;
let
rpc <| del intId
where
val intId = readError id
end}/>
<ctextbox source={idDel}/>
</body></xml>
Referències
modificaEnllaços externs
modifica- Pàgina inicial del llenguatge Ur (anglès)
- Exemples de programació en Ur (anglès)