Ur (llenguatge de programació)

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.

Infotaula de llenguatge de programacióUr
Tipusllenguatge de programació Modifica el valor a Wikidata
Data de creaciódesembre 2014 Modifica el valor a Wikidata
Darrera versió estable20200209 () Modifica el valor a Wikidata
Influenciat perHaskell i ML Modifica el valor a Wikidata
Extensió dels fitxersur, urs i urp Modifica el valor a Wikidata
Pàgina webimpredicative.com… Modifica el valor a Wikidata

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 modifica

Enllaços externs modifica