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,Ur/Web: A Simple Model for Programming the Web 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.

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 programaPrograma d'exemple "Noisy" 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

Enllaços externs Pàgina inicial del llenguatge Ur Exemples de programació en Ur

Categoria:Llenguatges de programació funcional Categoria:Llenguatge de programació ML