Mike Gerwitz

Activist for User Freedom

aboutsummaryrefslogtreecommitdiffstats
blob: 9222f5e12977c1cd8eb922c54aec50dcac0bff1e (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
TAME Release Notes
==================
This file contains notes for each release of TAME since v17.4.0.

TAME uses [semantic versioning][].  Any major version number increment
indicates that backwards-incompatible changes have been introduced in that
version.  Each such version will be accompanied by notes that provide a
migration path to resolve incompatibilities.

[semantic versioning]: https://semver.org/

TAME developers: Add new changes under a "NEXT" heading as part of the
commits that introduce the changes.  To make a new release, run
`tools/mkrelease`, which will handle updating the heading for you.


v18.0.0 (2021-06-23)
====================
This release focuses primarily on compiler optimizations that affect runtime
performance (both CPU and memory).  The classification system has undergone
a rewrite, but the new system is gated behind a template-based feature flag
`_use-new-classification-system_` (see Core below).  Many optimizations
listed below are _not_ affected by this toggle.

Compiler
--------
- Numerous compiler optimizations including (but not limited to):
  - Classification system rewrite with significant correctness and
    performance improvements, with significantly less generated code.
    - There is more work to be done in TAMER.
    - This change is gated behind a feature toggle (see
      `_use-new-classification-system_` in Core below).
  - Significant reduction in byte count of JavaScript target output.
  - Classifications with single-`TRUE` predicate matches are aliases and now
    compile more efficiently.
  - Classifications that are a disjunction of conjunctions with a common
    predicate will have the common predicate hoisted out, resulting in more
    efficeint code generation.
  - Classifications with equality matches entirely on a single param are
    compiled into a `Set` lookup.
  - Most self-executing functions in target JavaScript code have been
    eliminated, resulting in a performance improvement.
  - Floating point truncation now takes place without using `toFixed` in
    JavaScript target, eliminating expensive number->string->number
    conversions.
  - Code paths are entirely skipped if a calculation predicate indicates
    that it should not be executed, rather than simply multiplying by 0
    after performing potentially expensive calculations.
  - A bunch of wasteful casting has been eliminated, supplanted by proper
    casting of param inputs.
  - Unnecessary debug output removed, significantly improving performance in
    certain cases.
  - Single-predicate any/all blocks stripped rather than being extracted
    into separate classifications.
  - Extracted any/all classifications are inlined at the reference site when
    the new classification system is enabled, reducing the number of
    temporaries created at runtime in JavaScript.
- Summary Page now displays values of `lv:match/@on` instead of debug
  values.
  - This provides more useful information and is not subject to the
    confusing reordering behavior of the compiler that is not reflected on
    the page.
  - Changes that have not yet been merged will remove debug values for the
    classification system.

Core
----
- New feature flag template `_use-new-classification-system_`.
  - This allows selectively enabling code generation for the new
    classification system, which has BC breaks in certain buggy situations.
    See `core/test/core/class` package for more information.
- Remove `core/aggregate`.
  - This package is not currently utilized and is dangerous---it could
    easily aggregate unintended values if used carelessly.  Those who know
    what they are doing can use `sym-set` if such a thing is a good thing
    within the given context, and proper precautions are taken (as many
    templates already do today).

Rust
----
- Version bump from 1.42.0 to 1.48.0 now that intra-doc links has been
  stabalized.

Miscellaneous
-------------
- `build-aux/progtest-runner` will now deterministically concatenate files
  based on name rather than some unspecified order.


v17.9.0 (2021-05-27)
====================
This is a documentation/design release, introducing The TAME Programming
Language in `design/tpl`.

Compiler
-------
- Allow the mapping of flag values from `program.xml`.

Design
------
- Introduce The TAME Programming Language.


v17.8.1 (2021-03-18)
====================
This release contains a bufix for recent build changes in v17.8.0 that were
causing, under some circumstances, builds to fail during dependency
generation.  It also contains minor improvements and cleanup.

Build System
------------
- [bugfix] Lookup tables will no longer build `rater/core/vector/table` when
  geneating the `xml` package.
  - This was causing problems during `suppliers.mk` dependency generation.
    The dependency is still in place for the corresponding `xmlo` file.
  - This was broken by v17.8.0.
- Minor improvements to `tame` and `tamed` scripts to ensure that certain
  unlikely failures are not ignored.


v17.8.0 (2021-02-23)
====================
This release contains changes to the build system to accommodate
liza-proguic's introduction of step-based packages (in place of a monolithic
`package-dfns.xml`), as well as miscellaneous improvements.

Compiler
--------
- `rater.xsd`, used for certain validations of TAME's grammar, has been
  updated to an out-of-tree version; it had inadvertently gotten out of
  date, and the discrepency won't happen again in the future.
  - Further, limits on the length of `@yields` identifiers have been
    removed; the lack of namespacing and generation of identifiers from
    templates can yield longer identifier names.

Build System
------------
- Only modify `.version.xml` timestamp when hash changes.  This allows
  its use as a dependency without forcefully rebuilding each and every time.
- `configure` will no longer immediately generate `suppliers.mk`.
  - Additionally, `build-aux/suppmk-gen`, which `configure` directly invoked
    until now, was removed in favor of generic rules in `Makefile.am`.
- Step-level imports in program definitions are now recognized to
  accommodate liza-proguic's step-level package generation.
- Step-level program packages are now properly accounted for as dependencies
  for builds.
- `supplier.mk` is now automatically regenerated when source files
  change.  This previously needed to be done manually when imports changed.
  - `supplier.mk` generation will no longer be verbose (it'll instead be
    only one line), which makes it more amenable to more frequent
    regeneration.


v17.7.0 (2020-12-09)
====================
This release provides tail-call optimizations aimed at the query system in
core.

Compiler
--------
- [bugfix] Recursive calls using TCO will wait to overwrite their function
  arguments until all expressions calculating the new argument values have
  completed.

`tame-core`
-----------
- `mrange` is now fully tail-recursive and has experimental TCO applied.
  - It was previously only recursive for non-matching rows.


v17.6.5 (2020-12-03)
====================
This release improves Summary Page performance when populating the page with
data loaded from an external source.

Summary Page
------------
- Populating the DOM with loaded data now runs in linear time.


v17.6.4 (2020-11-23)
====================
This release tolerates invalid map inputs in certain circumstances.

Compiler
--------
- Tolerate non-string inputs to `uppercase` and `hash` map methods.


v17.6.3 (2020-11-03)
====================
- Update the CDN used to get MathJax.


v17.6.2 (2020-10-01)
====================
- Optionally include a "program.mk" file if it is present in the project's root
  directory. This allows us to move program specific tasks outside of TAME.


v17.6.1 (2020-09-23)
====================
Compiler
--------
- `lv:param-class-to-yields` will now trigger a failure rather than relying
  on propagating bad values, which may not result in failure if the symbol
  is represented by another type (non-class) of object.

Miscellaneous
-------------
- `package-lock.json` additions.


v17.6.0 (2020-08-19)
====================
This release provides a new environment variable for JVM tuning.  It does
not provide any new compiler features or performance enhancements in itself,
though it enables optimizations through JVM tuning.

Compiler
--------
- The new environment variable `TAMED_JAVA_OPTS` can now be used to provide
  arguments to the JVM.  This feature was added to support heap ratio
  tuning.

Miscellaneous
-------------
- `build-aux/lsimports` was causing Gawk to complain about the third
  argument to `gensub`; fixed.
- `bootstrap` will test explicitly whether `hoxsl` is a symbol link, since
  `-e` fails if the symlink is broken.


v17.5.0 (2020-07-15)
====================
This release adds support for experimental human-guided tail call
optimizations (TCO) to resolve issues of stack exhaustion during runtime for
tables with a large number of rows after having applied the first
predicate.  This feature should not be used outside of `tame-core`, and will
be done automatically by TAMER in the future.

`tame-core`
-----------
- `vector/filter/mrange`, used by the table lookup system, has had its
  mutually recursive function inlined and now uses TCO.
  - This was the source of stack exhaustion on tables whose predicates were
    unable to filter rows sufficiently.

Compiler
--------
- Experimental guided tail call optimizations (TCO) added to XSLT-based
  compiler, allowing a human to manually indicate recursive calls in tail
  position.
  - This is undocumented and should only be used by `tame-core`.  The
    experimental warning will be removed in future releases if the behavior
    proves to be sound.
  - TAMER will add support for proper tail calls that will be detected
    automatically.


v17.4.3 (2020-07-02)
====================
This release fixes a bug caused by previous refactoring that caused
unresolved externs to produce an obscure and useless error for the end
user.

Linker
------
- Provide useful error for unresolved identifiers.
  - This was previously falling through to an `unreachable!` block,
    producing a very opaque and useless internal error message.


v17.4.2 (2020-05-13)
====================
This release adds GraphML output for linked objects to allow us to
inspect the graph.

Linker
------
- Add `--emit` oprion to `tamer/src/bin/tameld.rs` that allows us to specify
  the type of output we want.
- Minor refactoring.

Miscellaneous
-------------
- Added `make` target to build linked GraphML files.
- Updated `make *.xmle` target to explicitly state it is emitting `xmle`.
- Added Cypher script to use in Neo4J after a GraphML file is imported.
- `RELEASES.md`
  - Add missing link to semver.org.
  - Fix `tame-core` heading, which was erroneously Org-mode-styled.
  - Rephrase and correct formatting of an introduction paragraph.


v17.4.1 (2020-04-29)
====================
This release refactors the linker, adds additional tests, and improves
errors slightly.  There are otherwise no functional changes.

Compiler
--------
- Refactor proof-of-concept dependency graph construction code.
- Improvements to error abstraction which will later aid in reporting.

Miscellaneous
-------------
- `RELEASES.md` added.
- `tools/mkrelease` added to help automate updating `RELEASES.md`.
- `build-aux/release-check` added to check releases.
  - This is invoked both by `tools/mkrelease` and by CI via
    `.gitlab-ci.yml` on tags.


v17.4.0 (2020-04-17)
====================
This release focuses on moving some code out of the existing XSLT-based
compiler so that the functionality does not need to be re-implemented in
TAMER.  There are no user-facing changes aside form the introduction of two
new templates, which are not yet expected to be used directly.

`tame-core`
-----------
- New `rate-each` template to replace XSLT template in compiler.
- New `yields` template to replace XSLT template in compiler.
- Users should continue to use `rate-each` and `yields` as before rather
  than invoking the new templates directly.
  - The intent is to remove the `t` namespace prefix in the future so that
    templates will be applied automatically.

Compiler
--------
- XSLT-based compiler now emits `t:rate-each` in place of the previous XSLT
  template.
- XSLT-based compiler now emits `t:yields` in place of the previous XSLT
  template.