Urweb

Jul 20, 2023

Ultimate host for embedded domain-specific languages

Ur is a programming language in the tradition of ML and Haskell, but featuring a significantly richer type system. Ur is functional, pure, statically-typed, and strict. Ur supports a powerful kind of metaprogramming based on row types.

Ur/Web is Ur plus a special standard library and associated rules for parsing and optimization. Ur/Web supports construction of dynamic web applications backed by SQL databases. The signature of the standard library is such that well-typed Ur/Web programs “don’t go wrong” in a very broad sense. Not only do they not crash during particular page generations, but they also may not

  • Suffer from any kinds of code-injection attacks
  • Return invalid HTML
  • Contain dead intra-application links
  • Have mismatches between HTML forms and the fields expected by their handlers
  • Include client-side code that makes incorrect assumptions about the “AJAX”-style services that the remote web server provides
  • Attempt invalid SQL queries
  • Use improper marshaling or unmarshaling in communication with SQL databases or between browsers and web servers


Checkout these related ports:
  • Zig - Language designed for robustness, optimality, and maintainability
  • Zephir - Zephir is a transpiled language used for creating C-extensions for PHP
  • Ypsilon - Scheme implementation for real-time applications
  • Yorick - Interpreted language for scientific simulations
  • Yap - High-performance Prolog compiler
  • Yap-devel - High-performance Prolog compiler
  • Yabasic - Yet another Basic for Unix and Windows
  • Voc - Vishap Oberon Compiler for Oberon-2
  • Vala - Programming language and compiler that converts Vala code into C code
  • V8 - Open source JavaScript engine by Google
  • V8-beta - Open source JavaScript engine by Google
  • V - V Programming Language
  • Ucc - C Compiler Which Implements the ANSI C89 Standard
  • Twelf - Meta-logical framework for deductive systems
  • Tuareg-mode.el - Emacs major mode for editing Caml code