Skip to content

Add Mach programming language - #653

Merged
celtic-coder merged 1 commit into
breck7:mainfrom
octalide:add-mach
Sep 23, 2026
Merged

celtic-coder merged 1 commit into
breck7:mainfrom
octalide:add-mach

Conversation

@octalide

Copy link
Copy Markdown
Contributor

Adds concepts/mach.scroll for Mach, a self-hosted systems language. The compiler, code generators and linker are written in Mach and have no external dependencies.

The example builds and runs with mach 5.10, and every feature flag is checked against the language reference. This comes from the language's author.

@celtic-coder
celtic-coder merged commit 8c0b23f into breck7:main Sep 23, 2026
@celtic-coder

Copy link
Copy Markdown
Collaborator

Thanks @octalide!

@celtic-coder

Copy link
Copy Markdown
Collaborator

Hi @octalide,

The Mach programming language has also been added to Programming-Language-DataBase#47.

Kind Regards,
Liam

kaby76 pushed a commit to kaby76/pldb that referenced this pull request Oct 4, 2026
@breck7

breck7 commented Oct 7, 2026

Copy link
Copy Markdown
Owner

not sure if this went live yet because of deploy bug, but just verified its live now: https://pldb.io/concepts/mach.html

kaby76 added a commit that referenced this pull request Oct 29, 2026
* Fix Windows/MSYS2 build compatibility

This commit fixes several issues that prevented the PLDB build from
working on Windows with MSYS2:

Path handling fixes:
- code/measures.parsers: Use regex to match both forward and backslashes
  when stripping /concepts from paths
- code/conceptPage.scroll: Use path.resolve() to ensure absolute paths
- lists/*.scroll & code/generateFeaturePages.scroll: Use path.resolve()
  with particle.root.filePath for cross-platform path resolution

Bootstrap fixes in Computer.js:
- getLanguageTemplate(): Handle missing concepts gracefully during bootstrap
- get measures(): Return empty array if measures.json doesn't exist yet
- makeATag(): Return placeholder link instead of throwing for missing files
- get features(): Guard against empty features array

Build configuration:
- code/conceptPage.scroll: Add buildHtml directive so concept pages generate HTML

Data:
- pldb.json: Include complete generated database (5144 languages) for
  build bootstrapping since pldb.io is no longer available

Note: The scroll-cli package also requires a patch to node_modules for
Windows compatibility (Utils.posix.basename -> require("path").basename
in parsers/root.parsers) which is not included in this commit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update readme with complete build instructions

- Document the multi-step build process with proper order
- Add feature page generation step (was undocumented)
- Add Windows/MSYS2 compatibility instructions for scroll-cli patch
- Note that npm run build may not work on all platforms
- Add instructions for running local server

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Fix path resolution for replaceNodejs/runNodejs contexts

The `particle` variable is only available in evalNodeJs context, not in
replaceNodejs/runNodejs contexts which run as separate Node.js scripts.

Changed lists/*.scroll and code/generateFeaturePages.scroll to use
process.cwd() instead of particle.root.filePath for path resolution.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Document build order dependencies in readme

- Note that creators must be built before lists
- Note that feature scroll files must be generated before building features

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add in build and run server, update instructions.

* Force add.

* Add server deployment script and documentation

- Add setup-pldb.sh for automated deployment to Ubuntu servers
- Update readme.scroll with deployment instructions

The script handles Node.js installation, swap space creation,
building, and systemd service configuration for auto-start on reboot.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add antlr grammar cross-references for 122 concepts.

- Add antlr entries for ~110 new concepts linking to grammars-v4
- Fix 12 existing antlr URLs (correct nested paths, blob->tree format)
- Part of grammars-v4 #4742

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update pldb.json

* Add antlr grammar cross-references for 172 concepts.

- Add antlr entries for ~155 new concepts linking to grammars-v4
- Fix 17 existing antlr URLs (correct nested paths, blob->tree format)
- Part of grammars-v4 #4742

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update Computer.js

* Fix null reference errors in Computer.js for missing concept data

Add null-safe access for leachim6 examples without example sub-particles,
writtenIn references to unknown concept IDs, and inbound links to
unloaded concepts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update pldb.json

* Decouple pldb.json and add maintenance page during build

Make pldb.json loading resilient so the build works whether pldb.json
is missing, empty, or complete. Replace the bare require() class field
with a try/catch getter that defaults to [].

When using --serve, start the server immediately with a self-refreshing
maintenance page before the build begins. The real site appears
automatically once the build completes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix CRLF line endings in javascript.scroll and antlr.scroll

The scroll parser doesn't strip \r, so CRLF files produced ids like
"javascript\r" causing ENOENT errors during build. Convert both files
to LF and add eol=lf to .gitattributes for *.scroll to prevent
recurrence. Regenerate pldb.json with clean data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Show maintenance page during remote server rebuild

Stop the existing PLDB service before rebuilding, then serve a
temporary maintenance page on port 80 while the clone and build
run. The page auto-refreshes so browsers see the real site once
the build finishes and the systemd service restarts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Serve maintenance page for all URL paths during rebuild

Add --single flag to npx serve so all routes return the maintenance
page instead of 404.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Build on GitHub Actions and deploy pre-built artifact to server

Add a GitHub Actions workflow that builds the site on push to main
and publishes the result as a GitHub Release tarball. Update
setup-pldb.sh to download the pre-built artifact instead of cloning
and building on the server, removing the need for swap space on
low-memory droplets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix tar 'file changed as we read it' by writing tarball to /tmp

The tarball was being created inside the directory being archived,
causing tar to detect the directory changing mid-read.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix maintenance server not fully killed before starting PLDB service

The npx serve process spawns a child node process, and killing only the parent PID left the child holding port 80. Now kills the entire process group and uses fuser as a safety net.

* Update readme docs for GitHub Actions build and deploy workflow

Document the new workflow: push to main triggers a GitHub Actions build, then setup-pldb.sh downloads the pre-built artifact instead of building on the server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix badge status.

* Replace https://pldb.io with http://pldb.info across all files

Update all URL references in scroll, markdown, parsers, explorer, and SVG files to point to the new pldb.info domain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Replace functional pldb.io references with pldb.info

Update editBaseUrl folderName params, issues subdomain, and feedback email to use pldb.info domain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Update readme.md

* Update readme.md

* Fix missing Monaco editor by using full npm install on server

The site serves monaco-editor directly from node_modules/ at runtime, but monaco-editor is listed as a devDependency. Using npm install --production skipped it, leaving the monacoContainer empty on concept pages.

Change npm install --production back to npm install so all dependencies (including monaco-editor) are installed on the server.

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Yes, Kenny found this and solution.

* Update pldb.io -> pldb.info

Update remaining links across the repo.

* Update builds on PR merges.

* Update Email Address

PLDB Admins (Google Groups)

* Fix workflow to not overwrite latest release on PRs

Gate release steps on push-to-main only. PRs now upload an ephemeral
artifact (site-pr-{number}, 7-day retention) instead of touching the
latest release. Also add --cleanup-tag to the delete step so the git
tag is removed before recreating, preventing "tag already exists" failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add test-local.sh for serving pre-built artifacts locally

  Downloads and serves either the latest release from main or a
  specific PR artifact (--pr <number>), with optional --repo and
  --port overrides. Repo is auto-detected from git remote origin.

  Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

  And yes — if you want to revert the setup-pldb.sh changes, just leave it unstaged in GitHub Desktop. Do you want me to revert it
  back to the original, or leave the --pr support in there for potential future use?

* Add npm install step to test-local.sh after extracting tarball

node_modules is excluded from the tarball (same as production), so
npm install is needed to restore dependencies like the Monaco editor.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add Top TIOBE Languages section to homepage

Fetches the TIOBE top 10 at build time (npm run build) and renders
them on the index page beneath Top Languages, with PLDB concept links
and a "(Fetched YYYY-MM-DD)" timestamp inline with the heading.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix problem raised by copilot.

* Fix TIOBE fetch error handling per PR review

- Reject on non-2xx HTTP status (drain response to free socket)
- Add error listener on response stream to prevent unresolved promise

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Require at least 10 TIOBE matches before resolving fetch

A partial parse (e.g. from an HTML structure change) would previously
succeed silently. Now reject if fewer than 10 languages are found.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Patch scroll-cli copy button to work in non-HTTPS contexts

Add patchScrollCliCopyButton() to build.js that replaces the
navigator.clipboard early-return guard with a fallback using
document.execCommand("copy"), so the copy icon appears when
viewing pages over HTTP or as local file:// URLs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix copy button patch and heap OOM in build

- Update quote escaping in patchScrollCliCopyButton to match scroll-cli's current minified output (plain quotes instead of escaped)
- Increase Node.js heap to 8GB via NODE_OPTIONS to prevent OOM crash on large builds

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add npm run clean script to remove build artifacts

Adds clean.js and a "clean" script in package.json that removes all files
generated by "npm run build:serve" without touching source files or
in-progress work. Also unblocks clean.js from .gitignore's *.js rule.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Guard clean.js against running outside repo root; document in readme

Adds a check that exits with an error if clean.js is not run from the
top-level repository directory. Also adds npm run clean to the readme's
NPM Scripts table.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add weekly automated TIOBE rebuild and server auto-update

- Schedule GitHub Actions to rebuild every Monday at 06:00 UTC, publishing
  a fresh site.tar.gz with updated TIOBE data to GitHub Releases
- Update setup-pldb.sh to install a server-side update script and cron job
  that pulls the new release and hot-swaps the site directory at 09:00 UTC,
  with automatic rollback if the service fails to restart

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix crash in feature page generation when particle is undefined

getParticle() returns undefined for concepts that don't have the
feature particle directly in their scroll file. Use optional chaining
to guard both the .length check and .subparticlesToString() call.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Address Copilot review feedback on weekly rebuild PR

- build.yml: add concurrency group to prevent push/schedule races on
  the latest release
- setup-pldb.sh: normalize repo URL to HTTPS before saving; change
  log() to append directly to avoid duplicate lines from cron redirect;
  fail fast if backup mv fails; use explicit if/else around systemctl
  restart so set -e does not skip rollback on failure
- Computer.js: cache getConceptFile/getParticle result to avoid
  redundant lookups in filter+map

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix cron job not being installed when server has no existing crontab

With set -e active inside the ENDSSH heredoc, grep -v exits 1 when
given empty input (no existing crontab), causing the subshell to abort
before the echo runs. crontab - then receives empty stdin and installs
nothing. Adding || true prevents the early exit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add latest PL news section

Fetches recent articles from arXiv cs.PL, lobste.rs/t/plt, Lambda the
Ultimate, and Hacker News during each build. Includes disambiguation
logic to avoid false positives for ambiguous language names (C, R, Go).
Adds a "News on Programming Languages" link on the homepage and a full
article listing at /news.html.

Also fixes test-local.sh npm install --prefix failure on MSYS2/Windows.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add ACM Digital Library as a news source

Fetches from PACMPL (covers POPL, ICFP, OOPSLA) and TOPLAS feeds.
Also fixes RSS 1.0 parser to not match <items> container element.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix styling.

* Fix double-escaped ampersand in ACM DL section heading

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add Medium as a news source

Fetches articles tagged 'programming-languages' and 'programming-language'
from Medium's RSS feeds. Deduplication handles the overlap between the two tags.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Rename news section and fix Medium duplicate articles

- Rename "News on Programming Languages" to "Research and News on
  Programming Languages" in both the homepage widget and news page
- Fix Medium deduplication by stripping query strings before comparing
  URLs (both tag feeds return the same articles with different ?source=
  parameters)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add news.scroll to .gitignore (generated file)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix link.

* Fix links.

* Updates.

* Replace ACM DL with DBLP and IEEE TSE

ACM DL started returning 403. Replaced with:
- DBLP Computer Science Bibliography (JSON API, no key, covers all PL
  venues; filtered to current year and prior year)
- IEEE Transactions on Software Engineering (RSS, no auth required)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Address Copilot review feedback on DBLP fetcher

- Normalize DBLP titles with decodeEntities() to prevent double-escaping
- Handle info.ee being an array by picking the first URL
- Guard author extraction against non-object entries
- Fix comment to accurately describe sort behavior (relevance then year)
- Use consistent full name "IEEE Transactions on Software Engineering"
  in both the section header and the sources line

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add retry logic (5 attempts, 20s timeout) to all news feed fetchers

Each source fetcher now uses fetchWithRetry instead of fetchUrl directly,
retrying up to 5 times with a 2s delay and 20s per-attempt timeout to
handle transient failures (e.g. DBLP timeouts).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix subdirectory pages having wrong baseUrl due to settings.scroll override

root header.scroll imported settings.scroll (baseUrl http://pldb.info/),
which overrode subdirectory-specific baseUrl settings (blog/, lists/,
features/, pages/) since it was always imported last. This caused canonical
URLs, OG image URLs, and "Continue reading" links to point to the root
instead of the correct subdirectory path.

Fix by removing settings.scroll from header.scroll and placing it in
rootHeader.scroll (used only by root-level pages) and 404.scroll (the
only root-level file that imports header.scroll directly).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix snippet links pointing to wrong path when URL lacks trailing slash

printSnippetsParser and printTitleParser generated relative links
(e.g. chrisLattner.html) which break when a directory page is served
without a trailing slash (e.g. /blog instead of /blog/) — the browser
resolves the link against the parent path, stripping the /blog/ prefix.

Patch scroll-cli at build time to use root-relative paths derived from
scrollProgram.absoluteLink (e.g. /blog/chrisLattner.html) instead of
the bare permalink. This makes all snippet and title links work
regardless of whether the URL includes a trailing slash.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Address Copilot review feedback

- Add null guard to snippets.parsers patch: _absLink may be undefined,
  so check (_absLink && _absLink.includes("://")) consistently with the
  title.parsers patch
- Add comment noting that root-relative links require a local server and
  do not work under file://
- Fix 404.scroll: change bare 'replace BASE_URL' to 'replace BASE_URL .'
  to be explicit and consistent with other root-level pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Updates.

* Fix snippet links pointing to wrong path when URL lacks trailing slash

printSnippetsParser and printTitleParser generated relative links
(e.g. chrisLattner.html) which break when a directory page is served
without a trailing slash (e.g. /blog instead of /blog/) — the browser
resolves the link against the parent path, stripping the /blog/ prefix.

Also fixes inline links (HTML/TXT) and images inside snippet body
content that had the same relative-path problem.

Patch scroll-cli at build time:
- snippets.parsers makeSnippet: adds a _fixRelativePaths helper that
  converts ALL relative href/src attributes in snippet HTML to
  root-relative paths (e.g. /blog/chrisLattner.html, /blog/ages.png).
  Covers "Continue reading", inline links, and images in both the
  endSnippet and full-snippet code paths.
- title.parsers printTitle: uses root-relative permalink derived from
  scrollProgram.absoluteLink.

Note: root-relative links require a local server; they do not work
under file://.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Address Copilot review feedback: merge snippet patches into single atomic replacement

Merges the two separate patchFile calls for snippets.parsers into one atomic
replacement covering the entire makeSnippet body, so the _fixRelativePaths
definition and its usage are always patched together.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Improve news page formatting and navigation

- Indent news section headings 1.5em and list items an additional 1.5em
- Link section headings and Sources line to each source's main website
- Center the "Updated:" metadata line

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Escape URL in news section heading href attribute

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Make Sources line jump to sections instead of external links

The "Sources:" links in the header now scroll to the corresponding
section heading on the page. The headings themselves retain the
external links to each source website.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add GQL (Graph Query Language) concept page

Adds concepts/graph-query-language.scroll for ISO/IEC 39075:2024 GQL,
the first new ISO database query language standard since SQL in 1987.
Named graph-query-language since gql.scroll is already taken by a 1980
Birkbeck College language. Includes description, keywords, language
features, influenced-by links (sql, cypher, gsql, pgql, sparql),
ANTLR grammar reference, and Wikipedia metadata.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Add weekly DBLP update for GQL concept page

- code/updateDblpGql.js: fetches DBLP publications for GQL (ISO 39075)
  and SQL/PGQ from the last 5 years and writes them into the `dblp`
  block of concepts/graph-query-language.scroll
- build.js: calls updateDblpGql as Step 2.7, so it runs on every build
  (both the weekly Monday schedule and normal push/PR builds)
- concepts/graph-query-language.scroll: initial dblp block with 14
  publications (2021–2026) from two DBLP queries: "GQL graph" and
  "SQL/PGQ"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Move DBLP GQL update to a separate Tuesday workflow

- Remove updateDblpGql call from build.js (no longer runs on every build)
- Add .github/workflows/update-dblp-gql.yml: runs every Tuesday at 06:00
  UTC, fetches fresh DBLP data, commits the updated scroll, and pushes
  (which then triggers the Monday build.yml on the next push to main)
- Also supports manual dispatch via workflow_dispatch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* Proposed CWL updates

Hello, I'm one of the CWL project co-founders and the CWL Project Leader.

I guessed at the syntax based upon other entries; my apologies if I got something wrong.

* Update DBLP GQL publications (weekly)

* Update DBLP GQL publications (weekly)

* fixes and github pages workflow

* Add NOVA programming language

NOVA is a constraint-native programming language unifying object-capability
security and row-typed effect systems. Authority to touch the outside world
is an unforgeable token passed explicitly rather than granted by import, and
a function's effects are checked as part of its type signature, so a
closure cannot silently launder a captured capability into a context that
expects a pure function.

Repository: https://github.com/ieeecsopen/NOVA
License: Apache-2.0

0.2 research preview — the frontend type/effect/capability checker and a
reference interpreter are implemented and tested (49-case conformance
suite); a first-order native C backend covers a subset of the language.

* Add Conflate programming language entry

* Format Conflate entry with Scroll

* Add FuncSug programming language

* Add Morloc language (#652)

Morloc composes functions across languages under a common type
system. CLIs, APIs and MCP models are generated directly from the
functions. Recursion (with tail-call optimization), recursive types, sum
types, typeclasses, pattern matching, guards and all other good things
are supported across languages.

* Add Mach programming language (#653)

* Create ussr.scroll

* Canonicalize 7 duplicate creator names (#654)

Fold 7 people who were credited under two spellings onto the
spelling PLDB's creators/ directory already uses.

- John George Kemeny -> John G. Kemeny
- Daniel Weinreb -> Dan Weinreb
- Dave Moon -> David A. Moon
- Mary Fernandez -> Mary Fernández
- Leon Bottou -> Léon Bottou
- Yann Le Cun -> Yann LeCun
- John Cowan -> John W. Cowan

* Deploy upstream release artifacts to production after successful builds

* Align deployment health checks and configuration with production HTTPS

* Adds Tint, a statically typed UI language (#656)

* Adds Tint, a statically typed UI language

* Update Tint latestVersion to 0.3.0

* Document consolidation validation and runtime handover

* Record agreed squash merge and history preservation

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Liam OBrien <celtic-coder@users.noreply.github.com>
Co-authored-by: root <root@DESKTOP-DL44R7B.localdomain>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael R. Crusoe <1330696+mr-c@users.noreply.github.com>
Co-authored-by: Breck Yunits <breck7@gmail.com>
Co-authored-by: Hesara Perera <hesarap3@gmail.com>
Co-authored-by: 12_Parsec <134395522+Hacker-lot@users.noreply.github.com>
Co-authored-by: cl4cnam <40176886+cl4cnam@users.noreply.github.com>
Co-authored-by: Zebulun Arendsee <trepanger@proton.me>
Co-authored-by: octalide <ereynolds@briar.systems>
Co-authored-by: IDDQD <40695473+notlibrary@users.noreply.github.com>
Co-authored-by: Alvaro Franco Martins <alvarought@gmail.com>
Co-authored-by: Mark <114660522+hawerz@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants