Releases: mvx-lang/mvx
Release list
v0.2.2
What's Changed
- docs: a theory page on classes and objects by @gheydon in #194
- docs: bind the classes-and-objects page to its tracking issue by @gheydon in #196
- docs: the real OpenQM syntax in the classes page by @gheydon in #197
- #198 install the git package with the toolchain, not beside it by @gheydon in #199
- docs: bump the wiki to the packages-and-install rewrite by @gheydon in #200
- #201 mkpkg: fall back to a libs: line when pkg-config knows nothing by @gheydon in #202
- #203 pin the release runner, so the glibc floor stops moving on its own by @gheydon in #204
- #206 install mvpkg 1.24.0, so a new toolchain gets the new registry default by @gheydon in #207
- #205 a source tarball says the version it was released as by @gheydon in #208
- #205 carry the source-version stamp to main, where the action is consumed by @gheydon in #209
- #210 an installed toolchain finds its own system account, everywhere it looks by @gheydon in #211
- #212 the install asks which package version instead of pinning one by @gheydon in #213
- docs: bump the wiki to the install-time version choice by @gheydon in #214
- #212 the image build lists releases with a token, and a rejected token falls back by @gheydon in #215
- Merge main into develop so main can take develop cleanly by @gheydon in #216
- Merge develop into main: v0.2.2 by @gheydon in #217
Full Changelog: v0.2.1...v0.2.2
What's Changed
- docs: a theory page on classes and objects by @gheydon in #194
- docs: bind the classes-and-objects page to its tracking issue by @gheydon in #196
- docs: the real OpenQM syntax in the classes page by @gheydon in #197
- #198 install the git package with the toolchain, not beside it by @gheydon in #199
- docs: bump the wiki to the packages-and-install rewrite by @gheydon in #200
- #201 mkpkg: fall back to a libs: line when pkg-config knows nothing by @gheydon in #202
- #203 pin the release runner, so the glibc floor stops moving on its own by @gheydon in #204
- #206 install mvpkg 1.24.0, so a new toolchain gets the new registry default by @gheydon in #207
- #205 a source tarball says the version it was released as by @gheydon in #208
- #205 carry the source-version stamp to main, where the action is consumed by @gheydon in #209
- #210 an installed toolchain finds its own system account, everywhere it looks by @gheydon in #211
- #212 the install asks which package version instead of pinning one by @gheydon in #213
- docs: bump the wiki to the install-time version choice by @gheydon in #214
- #212 the image build lists releases with a token, and a rejected token falls back by @gheydon in #215
- Merge main into develop so main can take develop cleanly by @gheydon in #216
- Merge develop into main: v0.2.2 by @gheydon in #217
Full Changelog: v0.2.1...v0.2.2
dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
Full Changelog: v0.1.4...dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
Full Changelog: v0.1.4...dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open form by @gheydon in #132 - #164 phrases, a default column list, and a dictionary listing worth reading by @gheydon in #165
- demo-tests.sh belongs with the account it tests by @gheydon in #163
- Bump the demo submodule so its suite is reachable by @gheydon in #166
Full Changelog: v0.1.4...dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open form by @gheydon in #132 - #164 phrases, a default column list, and a dictionary listing worth reading by @gheydon in #165
- demo-tests.sh belongs with the account it tests by @gheydon in #163
- Bump the demo submodule so its suite is reachable by @gheydon in #166
Full Changelog: v0.1.4...dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open form by @gheydon in #132 - #164 phrases, a default column list, and a dictionary listing worth reading by @gheydon in #165
- demo-tests.sh belongs with the account it tests by @gheydon in #163
- Bump the demo submodule so its suite is reachable by @gheydon in #166
- publish-source: take an artifact base, like the build actions do by @gheydon in #167
Full Changelog: v0.1.4...dev
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open f...
mvx v0.2.1
A new account keeps its files in sqlite
This changes where a new account stores its data. Existing accounts do not move.
lmdb pushes nothing down. Its driver implements select_begin/next/end/count and the index hooks and nothing else — no select_where, no select_order, no filtered COUNT, no SUM, no join, no explain — so every WITH streamed the whole id list to the verb and filtered it there. sqlite answers those in SQL, and is the same deal for the operator: one local file, no server to run.
The difference shows in what DESCRIBE reports. Where a new account used to say:
lmdb: no server-side query planner; the driver returns the id list ...
it now says:
sqlite: SELECT id FROM "CUST" WHERE ...
Nothing existing moves
An account that has lmdb files keeps lmdb. Accounts made before this release declare no backend, so they are asked rather than assumed: if lmdb already holds files for the account, lmdb is what it keeps getting.
The first time such an account is entered from TCL, the backend holding its VOC is recorded in .mvx (voc = lmdb), so it is settled once and never worked out again. If VOC cannot be found in lmdb either, MVX asks — on a terminal — and records the answer rather than guessing; off a terminal it changes nothing.
An account now says what it uses
.mvx carries two declarations:
driver = sqlite the default for a file nothing else placed
voc = sqlite VOC's own
VOC is declared separately because it is the bootstrap file: it must be opened before anything that could describe it, and it need not match the default — an account keeps the VOC it was made with while later files go elsewhere.
Moving a file between backends
CONVERT-FILE <file> <type> is the operator route, and it moves VOC too:
CONVERT-FILE VOC lmdb
.mvx is updated to match, because a stale voc = does not merely mislead — VOC is the one file nothing else can describe, so it would lock the account.
CONVERT-FILE <file> lmdb was broken by the default change and is fixed here. It created the target with the account default, so it reported converted to lmdb and left the file where it was.
Also
LISTFreports a file whatever local backend holds it. It asked lmdb only, so a file the account placed in sqlite was invisible — and because mvx-git finds an account's files through that list, such an account committed without its records..gitignorecovers every backend's store, not just lmdb's. lmdb's is a directory; sqlite's is a file with-shmand-wal, so a run in a source tree left three untracked files behind.
If you use mvx-git
Update the git package to 2.0.4 or later. Earlier versions commit a sqlite-backed account's raw database instead of its records, because the store-exclusion rule named mvxdata.lmdb literally.
What's Changed
- #187 an account records which transport it uses by @gheydon in #188
- #187 LISTF reports a file whatever local backend holds it by @gheydon in #189
- #187 sqlite is the default backend for a new account by @gheydon in #190
- #191 converting VOC updates the account's record of where VOC is by @gheydon in #192
- #187 ignore every backend's local store, not just lmdb's by @gheydon in #193
Full Changelog: v0.2.0...v0.2.1
What's Changed
- #187 an account records which transport it uses by @gheydon in #188
- #187 LISTF reports a file whatever local backend holds it by @gheydon in #189
- #187 sqlite is the default backend for a new account by @gheydon in #190
- #191 converting VOC updates the account's record of where VOC is by @gheydon in #192
- #187 ignore every backend's local store, not just lmdb's by @gheydon in #193
Full Changelog: v0.2.0...v0.2.1
mvx v0.2.0
Records are stored as documents, not blobs
This release changes how records are stored, and existing files must be converted.
A record used to go into every SQL backend as one opaque blob column, so the backend could not see a single field of it. It is now a document: attributes become JSON keys, multivalues become arrays, subvalues nest inside those.
| backend | before | now |
|---|---|---|
| sqlite | blob | doc TEXT |
| postgres | blob | doc jsonb |
| mysql | blob | doc JSON |
| mongo | a wrapped blob | a real BSON subdocument |
Values are stored as text and cast at query time, so the document holds what you wrote and the query decides what it means. A value that is not valid UTF-8 is carried as {"$b64": ...} rather than corrupted.
Migrating
Existing files are not readable by this release until they are converted:
mvx-doc-migrate <driver> <location>
It converts every file in a location in place, one transaction per file, and is safe to re-run. The location is written the way BINDINGS writes it — for a connection profile that is @name, so run it from the account. An old file cannot simply be opened, which is why the tool walks the backend's own catalogue rather than asking MVX for a file list.
Files now also record what format they are, so a file can say what it is instead of being guessed at.
Why it was worth breaking
Once the backend can see inside a record, the query goes to the data instead of the data coming to the verb:
WITHmatches any value of a multivalued attribute, and gives the same answer whether an index exists or not — previously the indexed and unindexed paths disagreed.ORDER BYpushes down on an unmapped attribute when the sort is numeric, reproducing MV's own ordering.CREATE-INDEXworks on an unmapped attribute on mysql.DESCRIBEreports the query that will actually run, including a plainBYand unmapped attributes.
Not everything pushes. On an unmapped attribute:
= |
# |
ranges (> < >= <=) |
|
|---|---|---|---|
| sqlite | pushes | pushes | pushes |
| postgres | pushes | pushes | pushes |
| mysql | pushes | pushes | verb |
| mongo | pushes | verb | verb |
mysql is the odd one because JSON_TABLE does not correlate inside EXISTS, so its predicate is built from JSON_CONTAINS, which expresses containment and its negation but not an ordering. mongo also has no select_order or explain, so every BY sorts in the verb. Every one of these returns the right answer, just without the backend's help — a mapped column has none of these limits.
Driver ABI 11 → 14
Any out-of-tree storage driver must be rebuilt. Compiled artifacts now carry the ABI they were built against and are refused at load with a clear message, rather than failing later as an undefined symbol.
Also in this release
- The R83 command stack —
.L,.R,.RU,.DE,.X,.?, with D3's semantics: unique commands only, entry 1 is the most recent, and re-running or editing an entry moves it to the top. One history, shared with the line editor. - TCL macros —
M/Nitems in VOC, run by typing their name, plus.C,.COand.X name. - Arithmetic and aggregate I-types —
PRICE * QTYandSUM(EPRICE)evaluate instead of listing blank, per value across an association. STOP "message"prints and stops, andABORTexists. The concatenated form used to abort the compiler with invalid IR.@SENTENCEis populated, so portable code needs no$IFDEFbetween it andSENTENCE().- Packages can export a
FUNCTION, resolved across a package boundary byDEFFUN. mvx --version, theVERSIONverb,MVXVERSION()andSYSTEM(1001)— the release and the driver ABI. A package can declare!mvx>=x.y.zor!mvx-abi>=n, andLINK-PKGrefuses what it cannot satisfy.- The package submodules are gone; the JSON codec is built into the runtime.
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open form by @gheydon in #132 - #164 phrases, a default column list, and a dictionary listing worth reading by @gheydon in #165
- demo-tests.sh belongs with the account it tests by @gheydon in #163
- Bump the demo submodule so its suite is reachable by @gheydon in #166
- publish-source: take an artifact base, like the build actions do by @gheydon in #167
- Merge develop into main: publish-source takes an artifact base by @gheydon in #168
- #169 drop the package submodules; JSON is built into the runtime by @gheydon in #170
- #122 a test system for the demo account, outside it by @gheydon in #176
- #157 store records as documents, not blobs by @gheydon in #175
- #114 the R83 command stack: .L, .R, .X, .DE by @gheydon in #178
- #177 TCL macros, and the stack's .C / .CO / .X name by @gheydon in #179
- #121 arithmetic and aggregate I-types are evaluated by @gheydon in #180
- #120 STOP takes a message, and ABORT exists by @gheydon in #181
- #130 a literal operand is boxed once, not per iteration by @gheydon in #182
- #101 a package can export a FUNCTION, and DEFFUN resolves it by @gheydon in #184
- #117 the toolchain says what it is, and a package says what it needs by @gheydon in #185
- #97 @Sentence is populated, so one spelling is portable by @gheydon in #186
Full Changelog: v0.1.4...v0.2.0
What's Changed
- #136 a package declares its verbs, and mkpkg derives the VOC record by @gheydon in #139
- #142 PLATFORM.H says it is generated, and names the master file by @gheydon in #143
- #130 dynamic arrays: the index is reached, believed, and kept by @gheydon in #144
- #145 COUNT and DCOUNT ask the index instead of scanning by @gheydon in #145
- #146 INSERT and DELETE stop rebuilding the value by @gheydon in #146
- #147 the reductions stop paying for generality they do not use by @gheydon in #147
- #148 a benchmark for the sort inside the SORT and LIST verbs by @gheydon in #148
- #149 the repository workflow mv_git ended up with by @gheydon in #149
- #150 A SQLite storage backend, and FILELIST stops naming drivers by @gheydon in #151
- #152 A MySQL / MariaDB storage backend by @gheydon in #154
- #155 One logical WRITE is one transaction (driver ABI 11) by @gheydon in #156
- #158 one column per attribute, and a deterministic read-back by @gheydon in #159
- #160 don't truncate the package path, don't hash the checkout path by @gheydon in #161
- #131 cover what
mvx-git adoptasks about the open form by @gheydon in #132 - #164 phrases, a default column list, and a dictionary listing worth reading by @gheydon in #165
- demo-tests.sh belongs with the account it tests by @gheydon in #163
- Bump the demo submodule so its suite is reachable by @gheydon in #166
- publish-source: take an artifact base, like the build actions do by @gheydon in #167
- Merge develop into main: publish-source takes an artifact base by @gheydon in #168
- #169 drop the package submodules; JSON is built into the runtime by @gheydon in #170
- #122 a test system for the demo account, outside it by @gheydon in #176...
v0.1.4
v0.1.3
What's Changed
- A banked sieve, so every MV BASIC can run the full benchmark by @gheydon in #125
- Make dynamic-array access fast: reuse buffers, patch in place, index long ranges by @gheydon in #127
- suite: normalise package versions, and follow mv_git's fixed behaviour by @gheydon in #129
- mvx-basic: predefine ENGINE beside MVX by @gheydon in #128
- #133 a catalogued verb is rebuilt, not carried by @gheydon in #134
- #131 packages/git was 90 commits stale, so the suite tested something else by @gheydon in #135
Full Changelog: v0.1.2...v0.1.3
What's Changed
- A banked sieve, so every MV BASIC can run the full benchmark by @gheydon in #125
- Make dynamic-array access fast: reuse buffers, patch in place, index long ranges by @gheydon in #127
- suite: normalise package versions, and follow mv_git's fixed behaviour by @gheydon in #129
- mvx-basic: predefine ENGINE beside MVX by @gheydon in #128
- #133 a catalogued verb is rebuilt, not carried by @gheydon in #134
- #131 packages/git was 90 commits stale, so the suite tested something else by @gheydon in #135
Full Changelog: v0.1.2...v0.1.3
v0.1.2
What's Changed
- #95 compiler: $INCLUDE FILE ITEM account-relative; mkpkg per-platform PLATFORM.H by @gheydon in #96
- #98 test: fix tcl-mvxgit-remote — pin the bare remote's HEAD to main by @gheydon in #99
- #100 integrate getopt + declarative flags (cmd/git) on the PLATFORM.H seam by @gheydon in #102
- mkpkg: resolve a standalone package's own PLATFORM.H via MVXACCOUNT by @gheydon in #103
- mkpkg: place a standalone package's PLATFORM.H beside the BP sources (baseDir) by @gheydon in #104
- bump packages/git to 1.5.1 (inline single-caller GITUDT.* helpers) by @gheydon in #105
- bump cmd to 1.2.1 and git to the PLATFORM.H ignore fix by @gheydon in #106
- packages: build dependencies, marked '+' in PKG by @gheydon in #107
- bump git to 1.5.2 and getopt to its build-dep declaration by @gheydon in #108
- bump json to its current main by @gheydon in #109
- bump mapfield to its current main by @gheydon in #110
- bump git to 1.6.1 (account attributes + the VOC-deletion fix) by @gheydon in #111
- #113 a backend you have not got is a question, not a fatal error by @gheydon in #115
- publish-source: a tag with a suffix is a pre-release by @gheydon in #116
- release: check out the submodules the build installs by @gheydon in #118
New Contributors
Full Changelog: v0.1.1...v0.1.2
What's Changed
- #95 compiler: $INCLUDE FILE ITEM account-relative; mkpkg per-platform PLATFORM.H by @gheydon in #96
- #98 test: fix tcl-mvxgit-remote — pin the bare remote's HEAD to main by @gheydon in #99
- #100 integrate getopt + declarative flags (cmd/git) on the PLATFORM.H seam by @gheydon in #102
- mkpkg: resolve a standalone package's own PLATFORM.H via MVXACCOUNT by @gheydon in #103
- mkpkg: place a standalone package's PLATFORM.H beside the BP sources (baseDir) by @gheydon in #104
- bump packages/git to 1.5.1 (inline single-caller GITUDT.* helpers) by @gheydon in #105
- bump cmd to 1.2.1 and git to the PLATFORM.H ignore fix by @gheydon in #106
- packages: build dependencies, marked '+' in PKG by @gheydon in #107
- bump git to 1.5.2 and getopt to its build-dep declaration by @gheydon in #108
- bump json to its current main by @gheydon in #109
- bump mapfield to its current main by @gheydon in #110
- bump git to 1.6.1 (account attributes + the VOC-deletion fix) by @gheydon in #111
- #113 a backend you have not got is a question, not a fatal error by @gheydon in #115
- publish-source: a tag with a suffix is a pre-release by @gheydon in #116
- release: check out the submodules the build installs by @gheydon in #118
New Contributors
Full Changelog: v0.1.1...v0.1.2
v0.1.1
v0.1.0
Full Changelog: https://github.com/mvx-lang/mvx/commits/v0.1.0
Full Changelog: https://github.com/mvx-lang/mvx/commits/v0.1.0