======== 20120329 ======== - New JavaScript FFI function: setInnerHTML - Bug fixes - Documentation improvements ======== 20120310 ======== - 'ORDER BY RANDOM' - New Basis members: diffInMilliseconds, toMilliseconds - widget now returns 'option string' instead of 'string' - '-dumpSource' command-line flag - Bug fixes and optimization improvements ======== 20120110 ======== - Improvements to type inference and error messages - New 'dynClass' pseudo-attribute for most HTML tags - New 't.*' notation for selecting all columns of a table - New SQL functions: 'lower' and 'upper' - 'timeFormat' .urp directive - Client-side 'debug' and 'naughtyDebug' calls use a browser debug console, if available - Allow 'source' values to be returned by RPCs - Change the HTML context classification scheme in 'Basis' - Rename 'Top.id' to 'ident' to avoid clash with 'Basis.id' - More client-side function implementations - Some expanded reference manual sections - Tweak to linker command line argument order (to prevent issues with new Ubuntu versions) - Bug fixes ======== 20111127 ======== - Improvements to type inference and error messages - New Basis members: ceil, float, null, round, trunc - New SQL expression forms: 'IF..THEN..ELSE', 'COALESCE', and 'LIKE' - Support for the full set of HTML character entities - Client-side versions of some time-related functions - New URWEB_PG_CON environment variable - Allow arguments for 'con' signature items, not just declarations - Bug fixes and performance improvements - Tweaks for idiosyncrasies of OS X (like deprecated OpenSSL) ======== 20110917 ======== - Start of official tutorial - Compiler support for generating nice tutorial HTML from literate source files - New protocol 'static' for generating static pages - Replace GCCARGS 'configure' variable with CCARGS - Better support for compilation with Clang (including on OS X) - Fancier 'configure' script with versioning - Applications consult URWEB_STACK_SIZE environment variable to determine thread stack size - HTML tag IDs now drawn from an abstract type - New Basis functions: diffInSeconds, mkMonad, onClick, onDblclick, onKeydown, onKeypress, onKeyup, onMousedown, onMouseup, preventDefault, stopPropagation, toSeconds - Add tag - Add 'target' attribute for - New compiler command-line option: -dumpTypes - New syntactic sugar for computed ORDER BY clauses - Bug fixes and optimization improvements ======== 20110715 ======== - Treat local variables the same as module-level variables, for the purpose of implicit argument insertion - New 'noXsrfProtection' directive for .urp files - Non-debug builds omit source location information in error messages shown to the user (but keep that information in log entries) - Basis.getHeader and Basis.setHeader - Basis.show_css_class - Basis.currentUrlHasQueryString - Make Basis.rand cryptographically secure - Client-side versions of Basis.now and Basis.show_time - Bug fixes - Improvements to auto-configuration and build process (now builds with LLVM's Clang!) - Clarifications in the manual ======== 20110517 ======== - Cygwin compatibility - Compatibility with Gentoo packaging process, including a .ebuild file - Change typing of SQL subqueries, to indicate that they may always return NULL (for no rows) - Syntactic sugar for GROUP BY with variable numbers of columns (using 'tab.{{c}}', where 'c :: {Type}') - 'ALL' for SQL relational operators - Add nullable types to the class for valid operands for SQL arithmetic - 'alt' attribute for - and HTML tags - Allow 'debug' and 'naughtyDebug' in client-side code, implemented with 'alert' - Bug fixes and optimization improvements ======== 20110123 ======== - Changes to encoding of SQL aggregate functions: nullable types may be aggregated, and non-COUNT aggregates return nullable results. - SQL subqueries may apply aggregate functions to columns bound in enclosing queries. - Switch from libmhash to OpenSSL. - 'cdataChar', for injecting arbitrary character codes into XML - 'crypt', for access to the standard UNIX password encryption routine - 'readUtc', for parsing time strings in the UTC time zone - Built-in 'time' type now stores microseconds (which for now are only used in connection with Postgres timestamps). - Client-side URL blessing and redirection - 'currentUrlHasPost' function - Transactional 'free' functions now passed an argument indicating whether the runtime system expects to retry the transaction. - Change tasks to allow task kind-specific inputs - Add 'clientLeaves' and 'periodic' task kinds - Support for externally-callable pages, via the 'postBody' and 'queryString' types and the 'effectfulUrl' function - 'minHeap' and 'alwaysInline' .urp options - '-prefix' command-line option - Comments in .urp files (lines starting with '#') - Miscellaneous additions to the standard library - Bug fixes and improvements to type inference and optimization ======== 20101102 ======== - Polymorphic variants (see Basis.variant) - New 'onError' directive for .urp files - (* *) and comments in XML - Basis.classes, Basis.confirm, and Basis.tryDml - New notations ::_ and :::_, for constructor parameters of unknown kind - Invocations like 'urweb foo' will compile foo.ur as a single-file project, even if no foo.urp exists - '-limit' command-line flag and 'limit' .urp directive - Bug fixes and optimization improvements ======== 20100603 ======== - Changed URL escaping convention, to avoid confusing proxies. The new convention is like the normal one, but with '.' instead of '%'. - Changed JavaScript compilation of recursive functions to use thunks. This change avoids most costs of functions not referenced on particular pages, reducing loading time dramatically. - Support HTTP caching of application-specific JavaScript code - Bug fixes ======== 20100506 ======== - New experimental checker for information flow and access control policies (See demo at http://www.impredicative.com/ur/scdv/) ======== 20100401 ======== - Subquery expressions and FROM items - Low-level support for SELECT with no FROM clause - Fixes for DBMS-portability of relational operators ======== 20100325 ======== - -verbose flag - COUNT(col) SQL aggregate function - 'benignEffectful' and 'safeGet' .urp commands - Remove Basis.getRequestHeader, since it can be used to circumvent cookie security - Rename Top.foldR*X to map*X - Bug fixes and optimization improvements ======== 20100213 ======== - Improvements to 'configure'; should now fail if any uncommon but required package is missing - Other fixes to configuration, build system, and C code portability - sigfile .urp directive & -sigfile command-line option - .urp files with no directives no longer need to begin with blank lines. - Other bug fixes ======== 20100130 ======== - Conversion to an Automake-based build system, for greater portability in building shared libraries - -path and -root command-line flags - Exported page handling functions (i.e., those page-generating functions appearing in the main module's signature) may now take any number of arguments, including 0. ======== 20100112 ======== - Basis.serialized type family, for storing more types in the database - Basis.textBlob, for building blobs from strings - Basis.debug function, for server-side debug printing - Bug fixes & optimization improvements ======== 20091230 ======== - Automatic insertion of implicit arguments in more positions - Reifying expressions as URLs and redirecting to them explicitly - More syntactic sugar for SQL - Typing of SQL queries no longer exposes which tables were used in joins but had none of their fields projected - Tasks - Dynamic linking of the runtime system - Optimization improvements - Bug fixes ======== 20091203 ======== - Extended cookie interface (breaks backward compatibility for 'setCookie') - Bug fixes - Extended UTF-8 characters in HTML ======== 20091124 ======== - Improved Internet Explorer compatibility ======== 20091108 ======== - Bug fixes - Optimization improvements - Removed a restriction that prevented some RPCs and calls to sleep or recv from compiling ======== 20091012 ======== - Small bug fixes affecting MySQL and SQLite ======== 20091009 ======== - Bug fixes - Improvement to choice of line number to cite in record unification error messages - SELECT DISTINCT - New extra demos: orm1 and versioned1 ======== 20090926 ======== - Reimplemented client-side code generation to use an interpreter, rather than compilation to JavaScript; this avoids common browser flaws: lack of optimization of tail calls and occasional bugs in closure handling. - Bug fixes ======== 20090919 ======== - Bug fixes - Optimization improvements - Expanded grid demo in demo/more: optional columns, sorting, filtering, paging, selecting rows, aggregate row ======== 20090912 ======== - Bug fixes - Optimization improvements - New set of extra demos in demo/more ======== 20090825 ======== - Many bug fixes - Remote procedure calls must be marked with the new 'rpc' function. - Some tweaks to enable usage on OSX (suggested by Paul Snively) ======== 20090718 ======== - New application protocols: CGI and FastCGI - New database backends: MySQL and SQLite - More JavaScript events added to tags in standard library - New manual section on using the foreign function interface (FFI) ======== 20090623 ======== - Many bug fixes - Mutually-recursive datatypes - SML-style pattern-matching syntax for "fun", "fn", and local "val" - Backwards-incompatible change to syntax of formal constructor parameters to value-level functions, to support the previous change - Path map support inspired by SML/NJ CM and MLton ML Basis - Start of some new standard library modules - Some improvements to JavaScript runtime, including better error handling ======== 20090505 ======== - Reimplement constructor class resolution to be more general and Prolog-like - SQL table constraints - URLs - Client-side error handling callbacks - CSS - Signing cookie values cryptographically to thwart cross site request forgery - Blobs and HTTP file upload - SQL outer joins - SQL views - Subforms - C and JavaScript FFI - Path rewriting ======== 20090405 ======== - Asynchronous message-passing and the associated server-side client bookkeeping - Reimplement parts of the client-side runtime system to avoid space leaks - spawn and sleep - Expand the constructor class instance rule format ======== 20090312 ======== - Replace type-level "fold" with "map" - Replace expression-level "fold" with folders, defined in Top and supported by some special compiler inference - Replace guarded constructors with guarded types, introduced only by guarded expression abstraction, and with a new explicit application form - Kind polymorphism - Generalize type classes to constructor classes - Initial compilation of client-side code to JavaScript - Initial support for mixed client- and server-side programming (i.e., "AJAX") - src/coq: Coq formalization of a core Ur-like calculus ======== 20081209 ======== - Optimization: Fusing page writes with calls to recursive functions - Optimization of bottleneck compiler phases - Reference manual - SQL arithmetic operators ======== 20081120 ======== - Fix bug that sometimes led to omission of initial "" in pages - Take advantage of nested functions in some demos - "profile" option that may appear in .urp files, to enable gprof profiling - "-guided-demo" option that works like "-demo" but uses less screen space for prose ======== 20081118 ======== - Nested function definitions - Primitive "time" type - Nullable SQL columns (via "option") - Cookies - Compiler: Specialization of functions to known arguments (especially of function type) ======== 20081028 ======== - Add GCCARGS configure option ======== 20081027 ======== - On missing inputs, print an error message, but don't exit the web server. - Remove need for "() <-" notation. ======== 20081026 ======== - Change 'sed' call to work on OSX. - Avoid including or linking libpq files on apps that don't use SQL.