summaryrefslogtreecommitdiff
path: root/CHANGELOG
blob: 838da410638cb4c2c941ce561616d6bd49ba00a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
========
20150520
========

- Change default behavior of client-side GUI event handlers:
  By default, events are now passed to handlers on parent DOM nodes as well,
  just like in normal JavaScript.
  Call [preventDefault] or [stopPropagation] to tweak that behavior.
  WARNING: This change may break backward compatibility!
- URIs specified with 'file' .urp directive are implicitly allowed to be referenced.
- New HTML tags: <fieldset>, <legend>
- New urweb-mode Emacs command: 'urweb-close-matching-tag'
- Bug fixes

========
20150412
========

- Several new infix operators for function composition, etc.
- Hexadecimal integer literals
- New HTML events: 'oncontextmenu', 'onmouseenter', and 'onmouseleave'
- New HTML attributes: 'download'
- Bug fixes and optimization improvements

========
20150214
========

- Bug fixes and improvements to type inference and optimization

========
20150103
========

- New antiquote syntax for 'ORDER BY' clauses
- New standard library function: List.mem
- Bug fixes and improvements to type inference

========
20141206
========

- New HTML5 form widget tags and attributes
- New command-line option for HTTP servers: '-T', to set recv() timeout
- New C function uw_remoteSock() for use in FFI code
- Bug fixes and improvements to type inference and optimization

========
20140830
========

- New HTML attribute: 'role'
- Bug fixes

========
20140819
========

- Improvements to HTML model
- Bug fixes and optimization improvements

========
20140807
========

- New .urp directive: 'file'
- Support for 'aria-*' attributes in HTML
- Default value of 'jsFunc' for less-safe FFI
- Client-side implementation of Basis function 'strsindex'
- Bug fixes and improvements to type inference and documentation

========
20140704
========

- New syntactic shorthand for antiquoting subqueries
- New Top members: max and min
- 'sql_injectable_prim' instance for 'url'
- Bug fixes

========
20140615
========

- New syntactic sugar: 'let E where DS end' for 'let DS in E end'
- Add 'onChange' attributes to more tags.
- New standard library function: String.trim
- Start treating Ur/Web tag <button> as real HTML tag <button>,
  with special handling of 'value' attribute as tag content.
- Bug fixes

========
20140531
========

- Parsing extension: monadic bind supports patterns, like "(x, y) <- a; b"
- New, optional less safe FFI
- New HTML tags: <tbody>, <tfoot>, <thead>
- HTML5 data-* attributes
- HTML5 semantic tags
- Syntactic sugar extension: allow parens grouping joins in FROM clauses
- Bug fixes and documentation improvements

========
20140426
========

- New Basis functions having to do with dates and times, wrapped nicely in new
  Datetime module of standard library
- New .urp directives: 'html5', 'neverInline', 'noMangleSql'
- New command-line arguments: '-explainEmbed', '-stop'
- Changes to C FFI interface, especially for uw_register_transactional()
- 'Basis.getEnv' now always calls UNIX getenv() outside a page handler.
- Changed <active> to avoid generating an empty <span> for empty content.
- New HTML tag: <pre>
- Bug fixes and improvements to type inference, optimizations, and documentation

========
20131231
========

- Performance optimizations for Ur/Web's standalone HTTP servers
- New command-line options for those servers: '-k' and '-q'
- New HTML pseudo-tag: <script>
- Trying to recv() from a different client's channel now triggers a run-time
  error.
- New compiler command-line argument: -print-cinclude
- Bug fixes and improvements to optimizations, error messages, and documentation

========
20131124
========

- Extend 'where con' to allow descending into submodule structure
- Type inference improvements
- Treat transactional FFI functions as effectful by default,
  so that 'effectful'/'benignEffectful' .urp directives aren't necessary
- Interpret 'table' signature items more flexibly,
  automatically adding (Ur) constraints to support
  a kind of subtyping over (SQL) constraint sets
- New header file scheme to support FFI code in either of C or C++
- New command-line arguments: -ccompiler, -print-ccompiler
- More HTML tags: <dd>, <dl>, <dt>, <em>, and <strong>
- Add 'rel' attribute to <a>
- New type synonym 'xhead'
- Refactored the development Mercurial repository to remove autogenerated files
- More integration with Autotools distribution functionality
- Improvements to documentation and compiler error messages
- Bug fixes and optimization improvements

========
20130421
========

- Allow any FFI module to declare new HTML tags
- Ignore polymorphism in JavaScript calls to custom FFI functions, allowing a
  kind of simple dynamic typing (unsafe, of course)
- Add some name-mangling rules to allow XML attribute 'name' and attributes with
  dashes
- New Basis members: pow and tryRpc
- Add 'placeholder' attribute for <password>
- New standard library functions: Option.unsafeGet
- Add ./configure MLTONARGS option for MLTON arguments
- Bug fixes and documentation improvements

========
20120925
========

- Changes to optimization/compilation strategy that can speed up compilation and
  reduce code size dramatically
- New .urp directives: 'coreInline' and 'monoInline'
- 'show' instance for 'sql_query'
- Improvements to compiler error messages
- Bug fixes and optimization improvements

========
20120807
========

- Client-side mouse and keyboard event handlers are now functions over records.
- More flexibility in local type class instances
- Remove 'class' declaration; use 'con' instead now.
- SQL window functions
- New HTML pseudo-tag: <active>
- New Basis members: getenv (and associated functions), giveFocus
- New Top member: postFields (to process POST form data when called by some external script)
- HTTP daemons take '-a' option to set IP address to listen on
- More global mouse event hooks
- Bug fixes and performance improvements

========
20120519
========

- Compatibility fixes for new Automake and GCC versions
- Allow synchronous RPC's in 'onunload' code
- Start of special cases for parsing CSS class names: interpret "table" as identifier 'tabl'
  (since 'table' is an Ur/Web keyword)
- Bug fixes and improvements to type inference and optimization

========
20120512
========

- New support for CSS style code embedded in Ur/Web programs.
  Two recommended usage methods:
  1. Use 'style' attributes with normal CSS syntax inside string literals.
  2. Generate styles programmatically with the Style module of the Gui library
     (distributed separately).
- 'dynStyle' attribute, which is to 'style' as 'dynClass' is to 'class'
- Parsing of standard syntax for 'class' attributes, via specially interpreted
  string literals
- New optional suffix for 'rewrite' in .urp files: [-]
- Compiler error message improvements, including simplification of types
- New command line parameters: '-boot', '-dumpTypesOnError', '-unifyMore'
- New .urp directives: 'linker'
- Support for speeding up compilation by caching type inference results:
  Run 'urweb daemon start' to spawn a background process,
  'urweb daemon stop' to kill it.
- Enforcement of uniqueness of top-level module names across a project
- Adjust error message format to match Emacs compilation mode defaults
- More HTML attributes added
- New antiquote syntax for 'PRIMARY KEY'
- Bug fixes and improvements to type inference and platform compatibility

========
20120329
========

- New JavaScript FFI function: setInnerHTML
- Bug fixes
- Documentation improvements

========
20120310
========

- 'ORDER BY RANDOM'
- New Basis members: diffInMilliseconds, toMilliseconds
- <radio> 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 <image> tag
- Add 'target' attribute for <a>
- 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 <img>
- <sup> and <sub> 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 "<html>" 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.