The install asks which package version (mvx#212)
Bundled packages are no longer pinned in the build. The install offers each
package's latest stable release, the newest newer release at each less-stable
level, and dev; takes the latest stable when nobody is at the terminal; and
MVX_PACKAGE_VERSION_<pkg> pins an exact version. Also corrects the platform
note: mvpkg now publishes an arm64 build as well.
6edfa49
packages: git comes with the toolchain, and JSON is no longer a package
Two changes in mvx left the wiki describing a layout that no longer exists.
mvx#169 removed the package submodules and built the JSON codec into the
runtime. So `packages/git' and `packages/json' are not paths any more, and
JSONENCODE/JSONDECODE are not a package: they are compiled into libmvxrt, need
no configuration, and `-DMVX_JSON=OFF' is not an option the build has.
MVX_PACKAGES defaults to `http' alone, not `json' or `json;http'.
mvx#198 filled the gap that left behind. git had gone from the tree without
arriving anywhere else, so an installed mvx had no GIT at all. `cmake --install'
now downloads the published MVPKG and git packages -- prebuilt, at pinned
versions, each checked against the checksum published beside it -- putting their
verbs and libraries in the system account and their commands in <prefix>/bin.
What each page was saying:
getting-started the install table listed neither mvx-git nor the packages
packages MVX_PACKAGES "defaults to json"; the JSON codec offered as
the reference package; "a real install WOULD copy bin/
commands into a system bin directory", which it now does
intrinsics JSONENCODE/JSONDECODE "provided by the json package"
files "-DMVX_JSON=OFF leaves it out"
git mvx-git "built ... into packages/git/bin/"
Two uses of the word submodule are deliberately untouched, being a different
thing entirely: an ACCOUNT carrying a git submodule (git.md), and the main repo
checking this wiki out under docs/ (tooling.md).
The Linux-x86-64-only caveat is stated where a reader meets it, because the
install warns and carries on rather than failing: on any other platform the
toolchain installs without the packages, and a reader who is not told that finds
a missing GIT and nothing explaining it.
aa9dff5
objects: replace the OpenQM description with its actual syntax
The page described OpenQM "in shape only" because its documentation site
was down, and second-hand accounts turned out to be wrong in ways that
mattered. Read out of its GPL source instead (ScarletDME, the maintained
fork of the Ladybridge release, GPL-2.0 -- the same licence as MVX):
CLASS name [MAX.ARGS n] [INHERITS class1, class2, ...]
PUBLIC FUNCTION / SUB / SUBROUTINE, and PRIVATE
GET and SET give properties -- the compiler treats GET as a public
function and SET as a public subroutine
CREATE.OBJECT is the constructor, and must be a PUBLIC SUBROUTINE
ME is the self-reference, with its own opcode
OBJECT(name, args...) instantiates
-> is member access, tokenised TKN_OBJREF from '-' followed by '>'
INHERITS takes a LIST, so inheritance is multiple
Three of those change the note rather than decorate it:
- GET/SET is a real answer to the second failure in section 1, and a
better one than the public slot this note sketches. Recorded as the
first thing to decide if this ever becomes a proposal, with its cost
named: every property access becomes a dispatch.
- INHERITS disproves what section 7 claimed. That section rejected
inheritance because it "forces a vtable and a linker-visible class
graph"; OpenQM implements MULTIPLE inheritance by giving each
inherited class a private variable of its own name -- delegation, no
vtable. The claim is withdrawn in the text and the narrower honest
reason put in its place, because a design note that leaves a
disproved claim standing is worth less than one that says so.
- '->' was derived here from MVX's own lexer before OpenQM's source
could be read, and OpenQM tokenises the same two characters. Now
stated as convergence from the same constraint rather than left to
read as a borrowed convention.
1881067
objects: bind the theory page to its tracking issue (#195)
The page said 'no issue is open'. One is now: mvx#195 tracks the
question -- whether the language should name what MV already builds by
hand -- not any work, and the status line says so rather than implying
something is scheduled.
Matches how open-dict.md carries (spike, #25) in its H1.
b3e05f8
Classes and objects: a theory page
An experimental design note on what classes would mean in Pick BASIC.
Nothing is built and no issue is open; the page exists so the design can
be argued before anyone commits to it.
The thesis is that MV already builds objects by hand -- a catalogued
subroutine, a named COMMON block and a dynamic array -- and what is
missing is instances and a boundary, not classes as such.
Prior art was checked rather than recalled: UniVerse BASIC 11.2 has ZERO
occurrences of CLASS and UniData's reference has zero, so the comparison
is not UV-classes against QM-classes. It is the UV/Pick idiom against
OpenQM's class module, and the page weighs both. OpenQM's own syntax is
described in shape only, said out loud, because its reference could not
be reached.
Every claim about MVX cites a file, and each was checked before it was
written -- there are no measurements here, so that is the page's only
credential. Two of those checks changed the design:
- '.' is an identifier character, so ORD.TOTAL is a legal variable name
and dot-notation fails the extension bar outright. '->' lexes as
Minus Gt, which cannot occur in valid classic code -- the same
argument DECISIONS.md already accepted for C-style comments.
- mv_copy and mv_clear guard on tag == MV_STR and nothing else, so an
object that IS a string is refcounted and released with no runtime
change at all, and serialises, prints and diffs for free. That is
what makes the value-semantics design cheaper than a new tag, and the
rejected alternative says what it costs.
Registered in _Sidebar.md under the language page, labelled (theory)
there as well as in the H1, so nobody arriving from the nav mistakes it
for shipped behaviour.
7ee144b
#73: mark .mvx <-> .mv-account conversion done (real conversion)
e4f3a4f
open-dict: cross-platform dict + account interchange design (#25 spike)
6a7c808
packages: document the native BUILD-PKG verb
0fa895c
packages: document the ? optional-dependency marker
32ad32b
LOOP: note the compact single-line WHILE/UNTIL cond DO form
ecad611
CREATE-FILE registers a VOC file pointer (#71)
c28feb0
Document TRIM(str, char[, option]) character trimming
9416b59
Document the http extension package (HTTPGET/HTTPGETFILE)
da55871
git: mvx-git carries submodules as gitlinks (#66)
b45e2b4
statements: alphanumeric labels (NAME:) alongside numeric (#65)
4ddce45
statements: EQU accepted as short spelling of EQUATE (#64)
40c386f
files: nested TRANS (dict-name target) via the runtime I-type evaluator (#63)
9631281
files: SORT BY a TRANS column pushes ORDER BY into the co-located JOIN (#53)
d934e6b
MongoDB: relational mapping, native indexes, WITH/COUNT push-down (#62)
34286ac
deployment: MongoDB storage driver (#61)
21c4de5
git: record-git stores in the account's own .git; subdirectory accounts (#58)
30ba2bf
git: mvx-git now drives the record-git engine directly (#58)
82a2bfe
terminal: mouse DRAG events (button-held motion) (#57)
dd45bcb
terminal: document basic mouse support (@(-9)/@(-10), MOUSE()) (#57)
5108125
files: note the server-side single-statement BUILD-MAP backfill push-down (#56)
7fbaf63
Docs: BUILD-MAP backfill is batched in a transaction on SQL backends
342949e
Docs: BUILD-MAP PROGRESS indicator for large backfills
5e4710b
Docs: package language extensions (ext ABI, EXPORTS/NATIVE, systems, MVX_PACKAGES); JSON is a package
6574688
Docs: JSON encode/decode, MAPSPEC/MAPFIELD, the shared mapper
2103e6a
Docs: TRANS translates a multivalued key element-wise
52f88b2