Lux Simple Lang (LSL)
  • LSL 92.3%
  • Python 5.1%
  • Assembly 1.1%
  • Cuda 0.9%
  • WebAssembly 0.4%
  • Other 0.1%
Find a file
Antonín Tomeček 4885d59d20
Some checks failed
targets / build (push) Has been cancelled
targets / native (macos-15, macos-arm64) (push) Has been cancelled
targets / native (macos-15-intel, macos-x86_64) (push) Has been cancelled
targets / native (windows-11-arm, windows-arm64) (push) Has been cancelled
targets / native (windows-2025, windows-x86_64) (push) Has been cancelled
targets / release-native (linux-aarch64.tar.gz, ubuntu-24.04-arm, linux-arm64) (push) Has been cancelled
targets / release-native (linux-x86_64.tar.gz, ubuntu-24.04, linux-x86_64) (push) Has been cancelled
targets / release-native (macos-arm64.tar.gz, macos-15, macos-arm64) (push) Has been cancelled
targets / release-native (macos-x86_64.tar.gz, macos-15-intel, macos-x86_64) (push) Has been cancelled
targets / release-native (windows-arm64.zip, windows-11-arm, windows-arm64) (push) Has been cancelled
targets / release-native (windows-x86_64.zip, windows-2025, windows-x86_64) (push) Has been cancelled
targets / run (baremetal-riscv64, ubuntu-24.04) (push) Has been cancelled
targets / run (linux-arm, ubuntu-24.04) (push) Has been cancelled
targets / run (linux-arm64, ubuntu-24.04-arm) (push) Has been cancelled
targets / run (linux-x86, ubuntu-24.04) (push) Has been cancelled
targets / run (linux-x86_64-gnu, ubuntu-24.04) (push) Has been cancelled
targets / run (macos-arm64, macos-15) (push) Has been cancelled
targets / run (macos-x86_64, macos-15-intel) (push) Has been cancelled
targets / run (wasm32-wasi, ubuntu-24.04) (push) Has been cancelled
targets / run (wasm32-wasi-threads, ubuntu-24.04) (push) Has been cancelled
targets / run (windows-arm64, windows-11-arm) (push) Has been cancelled
targets / run (windows-x86_64, windows-11-arm) (push) Has been cancelled
targets / run (windows-x86_64, windows-2025) (push) Has been cancelled
Release LSL 0.10.6
Desktop APIs for LuxOS on linux-x86_64-gnu: wider glib, gio (LSL values
instead of GVariant text, own objects on the bus, file monitors) and gtk
modules, new cairo and pango modules; gnu programs survive strip (LuxIR
0.4.3), readfile/readbytes read procfs, sysfs and pipes,
glib.setlocale(); strip/lstrip/rstrip(chars), find(s, start), eprint,
listdir. Release evidence in tests/release/0.10.6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:59:34 +02:00
.github/workflows GTK test without the accessibility bus; CI manual fallback for the gtk page 2026-10-23 10:16:30 +02:00
audit/0.9.1 docs: record 34 LSL 0.9.1 audit findings and reproductions 2026-10-11 20:07:42 +02:00
compiler LSL 0.10.6 release candidate: LuxIR 0.4.3, self-hosted release binaries 2026-10-23 20:37:11 +02:00
cuda Release LSL 0.7.7 2026-09-05 14:53:27 +02:00
docs LSL 0.10.6 release candidate: LuxIR 0.4.3, self-hosted release binaries 2026-10-23 20:37:11 +02:00
examples Release LSL 0.9.1 2026-10-11 17:58:15 +02:00
extensions Use platform syscall constants in tests and x11; cross-target test runner 2026-10-14 07:44:50 +02:00
runtime Development version 0.10.6: desktop APIs for LuxOS, procfs reads, Float C ABI, strip-safe ELF 2026-10-23 16:27:31 +02:00
stdlib Development version 0.10.6: desktop APIs for LuxOS, procfs reads, Float C ABI, strip-safe ELF 2026-10-23 16:27:31 +02:00
tests Release LSL 0.10.6 2026-10-23 20:59:34 +02:00
tools Development version 0.10.6: desktop APIs for LuxOS, procfs reads, Float C ABI, strip-safe ELF 2026-10-23 16:27:31 +02:00
vendor/qbe-1.3 Release LSL 0.9.0 BETA 2026-10-11 13:20:16 +02:00
.gitattributes Release LSL 0.9.0 BETA 2026-10-11 13:20:16 +02:00
.gitignore Ignore the generated Windows import definitions 2026-10-22 20:38:25 +02:00
.mailmap Correct author identity and add 0.9.0 BETA to release timeline 2026-10-11 13:28:48 +02:00
COMPLETION_PLAN.md Release LSL 0.9.0 BETA 2026-10-11 13:20:16 +02:00
LICENSE Initial commit: self-hosted LSL 0.7 compiler and stdlib 2026-07-20 18:35:52 +02:00
lsl LSL 0.10.6 release candidate: LuxIR 0.4.3, self-hosted release binaries 2026-10-23 20:37:11 +02:00
NATIVE_PERFORMANCE_PLAN.md Add Lux package dependency manifests 2026-07-23 15:51:21 +02:00
PERFORMANCE_PLAN.md Release LSL 0.6.9 2026-08-27 10:56:20 +02:00
PURE_LSL_PROGRESS.md Release LSL 0.9.0 BETA 2026-10-11 13:20:16 +02:00
README.md Target linux-x86_64-gnu: programs over glibc with GTK 3, GLib and D-Bus modules 2026-10-22 22:58:35 +02:00
release.json LSL 0.10.6 release candidate: LuxIR 0.4.3, self-hosted release binaries 2026-10-23 20:37:11 +02:00
TODO-historie.md Keep only open work in TODO and move finished items to TODO-historie 2026-10-12 09:07:24 +02:00
TODO.md Keep only open work in TODO and move finished items to TODO-historie 2026-10-12 09:07:24 +02:00

Lux Simple Lang (LSL)

LSL 0.10.1 je stabilní self-hostované vydání. Překladač běží na Linuxu (x86_64, ARM64, RISC-V 64), Windows (x64, ARM64) a macOS (Apple Silicon, Intel) a překládá programy pro Linux (x86_64, arm64, riscv64, také Android a Raspberry Pi), Windows (x86_64, arm64), macOS (Intel, Apple Silicon), WebAssembly (WASI, s vlákny i bez) a bare metal RISC-V. Frontend, backend LuxIR i runtime jsou napsané v LSL. Výchozí překlad vede přes analyzovaný AST a LuxIR do assembleru cíle; systémový assembler a linker (GNU binutils, pro Windows arm64 a macOS LLVM, pro WebAssembly WABT) vytvoří výsledný program bez libc. Nástroje pro každý cíl popisuje docs/binary-distribution.md. Spuštění už přeloženého programu je nepotřebuje.

Volitelný NVIDIA worker cuda/lsl-cuda-worker je samostatný proces napsaný v CUDA C++ (jen Linux x86_64); bez něj Tensor používá CPU fallback.

Self-hosted vydání

Od 0.9.0 nahrazuje přímý AST backend samostatný nativní LuxIR. Běžné CLI i compiler/lslc používají tuto cestu s bezpečným výchozím režimem. Privilegované operace vyžadují unsafe: nebo explicitní --unsafe.

0.9.1 přidává přiřazení více proměnným (a, b = 1, x, y = y, x), rozbalení ve for, global, blok lock, raw řetězce, blokové komentáře, printr, split() bez argumentu, math.round/trunc s počtem míst, ISO-8601 v time, streamovaný httpserver a běhové chyby ve formátu diagnostiky. Úplný seznam je v changelogu.

0.9.2 opravuje všech 34 nálezů auditu 0.9.1: správně zaokrouhlený převod textu na Float, numerické hranice v math, ochranu protokolu v httpserver (a nový worker pool), čistotu a lexer konfigurace a lineární práci se Stringy.

0.10.0 přináší přenositelný runtime napsaný v LSL, backend LuxIR 0.2.0, nové cíle (--target) a překladač pro ARM64 a RISC-V 64. Volání funkce jako samostatný příkaz vyžaduje call. Překlad je o 42–44 % rychlejší než v 0.9.2, překlad samotného překladače o 49 %; žádný měřený program neběží pomaleji. Podrobnosti jsou v docs/release-0.10.0.md a tests/release/0.10.0/.

Vydání si ponechává .env vedle skriptu, requests a offline manuály standardních knihoven. Proměnné prostředí mají před .env přednost; hodnoty ze souboru se čtou za běhu a nevkládají se do binárky.

0.10.1 přidává nativní překladač pro Windows (s přibaleným LLVM llvm-mc a lld) a macOS (Xcode Command Line Tools). Podrobnosti jsou v docs/release-0.10.1.md.

Strojový výstup lsl version je 0.10.1. Příkaz lsl update sleduje podepsaný stabilní kanál (Linux x86_64 a aarch64). Web a manuály mají samostatný projekt LSL-Web; veřejná dokumentace je na lsl.lux-ai.cz. Starší manuály jsou v historii vydání:

  • LSL 0.10.1 — překladač nativně na Windows a macOS;
  • LSL 0.10.0 — přenositelný runtime v LSL, Windows, macOS, Linux ARM64/RISC-V, Android, WebAssembly a bare metal RISC-V;
  • LSL 0.9.2 — opravy všech nálezů auditu 0.9.1, přesný převod Float, worker pool pro httpserver;
  • LSL 0.9.1 — stabilní vydání LuxIR pipeline, nové jazykové konstrukce, streamovaný HTTP server a čitelné běhové chyby;
  • LSL 0.9.0 BETA — nový nativní backend LuxIR v LSL, oddělený frontend a ověřený self-host; Linux x86_64;
  • LSL 0.8.9 — .env, requests a manuály knihoven;
  • LSL 0.8.8 — bufferovaný stdin/stdout, rezerva haldy, nativní split a Int, oprava typů proměnných a diagnostika comprehension;
  • LSL 0.8.7 — rang jako hodnota a List.find;
  • LSL 0.8.6 — hromadné importy, editor lsl --tui, formátovaný manuál a lsl about;
  • LSL 0.8.5 — rychlejší compiler se stejným generovaným kódem;
  • LSL 0.8.4 — automatický GC, stabilní paměť a rychlejší dlouhoběžící programy;
  • LSL 0.8.3 — paměťová bezpečnost, typové deklarace, čas a X11;
  • LSL 0.8.2 — opravy safe, barevné chyby a grafická rozšíření;
  • LSL 0.8.1 — sorted, Set a dedup;
  • LSL 0.8.0 — správa knihoven, TUI, offline manuál, barevné výpisy a tematická nápověda;
  • LSL 0.7.8 — random v pure LSL, comprehensions, výchozí a pojmenované argumenty, lsl update;
  • LSL 0.7.7 — persistentní CUDA, Float64 device buffery, elementwise operace, transpozice, DeviceTensor a opravy dispatchingu;
  • LSL 0.7.6 — segregované volné seznamy: alokace O(1), oprava kolapsu alokátoru hlášeného v 0.7.5 jako gc+thread deadlock;
  • LSL 0.7.5 — per-request gc() v HTTP serveru: dlouhoběžící listener už nevyčerpá alokátor;
  • LSL 0.7.4 — oprava String.split: byte-přesné kousky pro víceb bajtové UTF-8 a lineární čas na velkých vstupech;
  • LSL 0.7.3 — konfigurovatelný body limit dynamického serveru (set_body_limit, výchozí bez limitu) a růst bufferu podle skutečně přijatých dat;
  • LSL 0.7.2 — HTTP request body pro dynamický server: body/body_text v handleru a Expect: 100-continue;
  • LSL 0.7.1 — stabilizace HTTP serveru, provenance, linkeru, veřejného ABI a úklidu dočasných artefaktů;
  • LSL 0.7.0 — HTTP/HTTPS server, capability sandbox a explicitní safe/unsafe hranice;
  • LSL 0.6.9 — opravy veřejného Any ABI, dynamických kolekcí, numeriky, konverzí a diagnostiky compileru;
  • LSL 0.6.8 — bezpečnostní hardening runtime, procesů, native izolace, I/O, parseru a standardní knihovny;
  • LSL 0.6.7 — statické PIE s ASLR, bezpečnější HTTP a process plugin transport, zpevněný native loader a paralelně izolované testy;
  • LSL 0.6.6 — výkonnostní patch s rychlejšími for/rang smyčkami;
  • LSL 0.6.5 — stabilní manuál; bitové operace, rychlé typované IntArray hot pathy, sdílená vlákna, SSE2 FloatArray kernely, registrový Int codegen a paměťově omezené round-trip převody Float;
  • LSL 0.6 — původní stabilní snapshot s Lux Stringy, aliasy modulů a skutečnými CUDA Runtime kernely;
  • LSL 0.5 — první veřejné self-hosted vydání.

Datovaný přehled změn je v changelogu.

Použití

./lsl --help
./lsl version
./lsl                              # interaktivní zdroj ze stdin, konec řádkem exit
./lsl program.lsl arg1 arg2
./lsl compile program.lsl program     # bezpečný výchozí režim
./lsl compile --unsafe raw.lsl raw    # výslovně privilegovaný překlad
./lsl config examples/config/system.lsl
./lsl install textkit
./lsl list
./lsl check textkit
./lsl search text
./lsl install --tui
./lsl man
./lsl help install
./lsl origin textkit
./lsl server --dir public --port 8080
./lsl sandbox --read input.txt program.lsl
./compiler/lslc program.lsl program

lsl i compiler/lslc jsou LSL-generované statické PIE ELF soubory. Výstup compileru má ASLR, oddělené segmenty bez současného zápisu a spouštění, neproveditelný stack a žádný dynamický interpreter ani závislost na libc. Bez argumentů lsl na terminálu zobrazí >>>, sbírá jednu společnou translation unit do řádku exit a pak ji přeloží/spustí. Pipe skončí prostým EOF a nepotřebuje exit:

printf 'print 6 * 7\n' | ./lsl

Víceřádkový heredoc má pouze shellový delimiter, ne ještě LSL exit:

./lsl <<'EOF'
load time
print time.time()
EOF

Slovo EOF je libovolný marker shellu, nikoli součást LSL. Interaktivní TTY používá místo shellového markeru samostatný řádek exit nebo Ctrl-D.

Příprava zdrojů a test

Pro překlad jsou potřeba GNU binutils (as, ld). Vývojová příprava používá navíc Git a Python 3; spuštění hotových LSL programů je nevyžaduje. release.json připíná konkrétní commity LuxIR a LSL-Web. V Git checkoutu spusťte přípravu, která potřebuje Git a síť, nebo lokální Git checkouty přes --luxir-checkout a --web-checkout:

python3 tools/release/prepare_sources.py
python3 tools/release/build_release.py
./compiler/lslc compiler/pure/lslc_qbe.lsl /tmp/lslc-next ./build/luxir/luxir
cmp compiler/lslc /tmp/lslc-next
LUXIR_SOURCE="$PWD/build/dependencies/LuxIR/lsl/luxir.lsl" ./tests/lsl-test qbe ./compiler/lslc
./tests/lsl-test qbe-fast ./compiler/lslc
LUXIR_SOURCE="$PWD/build/dependencies/LuxIR/lsl/luxir.lsl" ./tests/lsl-test qbe-fixed-point ./compiler/lslc

prepare_sources.py exportuje připnuté offline Markdown manuály do build/manual-source a zpřístupní je přes docs/developer_guides. Soubor SOURCE.json obsahuje původ, commit a hashe kapitol. Web se nevyvíjí v tomto repozitáři. Backend se připravuje v build/dependencies/LuxIR a používá se jako build/luxir/luxir; produkční překlad nemá automatický fallback na C QBE.

Vydaný zdrojový archiv už obsahuje připnuté zdroje LuxIR v build/dependencies/LuxIR, skutečný adresář offline manuálů docs/developer_guides včetně SOURCE.json, runtime build/qbe/runtime.o a backend build/luxir/luxir jako kopie kanonických artefaktů, bez symlinků. Neobsahuje Git metadata závislostí. prepare_sources.py zde nespouštějte; reprodukce se provede offline přímo:

python3 tools/release/build_release.py

Plný runner agreguje pozitivní corpus se zachováním source spans a dále ověřuje diagnostiku, konfiguraci, runtime, instalované zdroje a fixed point. LUXIR_SOURCE zapíná také fixed point samostatného backendu. Kompletní release preflight přidává izolovanou migraci instalace, reinstalace, rollbacky a cílené nativní kontroly. Pro migrační gate navíc potřebuje funkční starší balík 0.8.9 s instalátorem a jeho sousedními nástroji; výchozí cesta je ~/.local/bin/lsl-install, jinou lze předat výslovně:

python3 tools/release/verify_release.py --luxir-source build/dependencies/LuxIR/lsl/luxir.lsl --old-installer /cesta/k/lsl-0.8.9/bin/lsl-install

Běžný self-host přes build_release.py ani původní runner starší nainstalované LSL nepotřebují. Pro offline preflight musí být starší balík předem dostupný; skript jej nestahuje.

Podrobný vývojový postup je v docs/compiler-development.md.

Instalace

Při přechodu z 0.7.8 použijte jednou lsl-install z nového archivu: starý updater má chybu čtení tar hlavičky. Installer 0.8.3 zachová předchozí generaci a atomicky přepne instalaci. Postup.

./compiler/pure/lsl-install /tmp/lsl-prefix
/tmp/lsl-prefix/bin/lsl program.lsl

Bez argumentu installer používá /usr/local (podle oprávnění procesu). Installer, build nástroje i test runner jsou LSL-generované ELF soubory. Instalovaný compiler hledá standardní moduly relativně k vlastnímu /proc/self/exe, takže funguje z libovolného pracovního adresáře.

Zdrojové knihovny

Grafické moduly gfx, x11, wayland, display, input, ui a css nejsou od 0.8.2 součástí základní instalace. Použijte například lsl install ui a lsl install display; závislosti se stáhnou automaticky. Zdrojové kopie pro vývoj jsou v extensions/, publikované balíčky v repozitáři LSL-Packages.

Máte-li nainstalované x11, před přechodem na 0.8.3 spusťte lsl update x11. Nové X11 používá monotónní čas a podporuje LSL 0.8.2 i 0.8.3; stará knihovna předpokládala číselný návrat clock(). Příklad hry je v examples/snake.lsl.

lsl update bez názvu knihovny aktualizuje samotné LSL. lsl update --check pouze ověří dostupnou verzi, lsl update --rollback obnoví předchozí instalaci. Podepsaný updater podporuje ~/.local bez sudo a /usr/local s explicitním sudo /usr/local/bin/lsl update --system. Checkout se nepřepisuje. Podrobnosti: aktualizace LSL.

./lsl install textkit
./lsl update textkit
./lsl install --config libraries.conf
./lsl origin textkit

Knihovna se stáhne z produkčního registru https://lsl.lux-ai.cz/packages, ověří zveřejněným SHA-256, zkušebně přeloží, zapíše ověřitelný .origin provenance sidecar a atomicky uloží do ~/.local/lib/lsl/stdlib. update NAME vyžaduje existující knihovnu a používá stejnou ověřenou atomickou cestu. Config obsahuje jeden název na řádek; prázdné řádky a řádky začínající # se ignorují. Built-in moduly mají vždy přednost. LSL_REGISTRY může změnit základní URL; vzdálená URL musí používat HTTPS. Registr je zatím nepodepsaný, takže hash ze stejného serveru nenahrazuje budoucí podpisový trust model. Podrobnosti jsou v docs/packages.md.

Implementované jádro

  • Int, Bool, None a boxed IEEE-754 Float;
  • UTF-8 String s code-point len, indexací, slicingem, chr a ord;
  • List, Tuple, Set, RealArray, Dictionary a neboxované IntArray/FloatArray/packed ByteArray;
  • functions, recursion, first-class Function pointers a callbacks;
  • classes/instances, jednoduchá dědičnost class Child(Parent), přepisování metod, origin.method() a public/private module class lowering;
  • recursive modules, safe, try/else, explicitní paměťově privilegované unsafe:, Error, check, last_error;
  • statické aliasy modulů (load tensor as t), first-class interpolované Lux Stringy, knihovní BigInt, rozšířený modul math a vestavěné sqrt;
  • conservative stack/global-root mark-sweep GC s reusable free-list;
  • JSON, strict config.lconf dependency codec pro zdroje apt/lux/lsl, čistý config evaluator, LuxOS/Debian modul system pro balíčky, služby, uživatele, atomické soubory, mounty a generace/rollback, wall/monotonic time a sleep, filesystem, argv, environment, přímé os.run("ls -al") bez shellu, process/capture, HTTP(S) přes validovaný curl config na stdin, verzované JSON-stdin process plugin ABI bez shellu a skutečný NVIDIA CUDA worker se sum/dot/AXPY/matmul kernely a binárním Float64 transportem;
  • syscall-only statický HTTP server, HTTPS přes systémový nginx/OpenSSL a capability sandbox s namespaces, cgroup/prlimit limity a čistým prostředím;
  • strukturované compile errors: kód, soubor, řádek, sloupec, výřez, caret a help.

tests/selfhost_conformance.lsl produkuje přesně tests/selfhost_conformance.out. Config příklad produkuje přesně tests/config_expected.json.

Dokumentace

Zdroj compileru

Výchozí vstup je compiler/pure/lslc_qbe.lsl, veřejná binárka compiler/lslc. Lexer, parser, modulový linker, sémantická analýza, LuxIR emitter a runtime jsou v compiler/pure/; standardní moduly v stdlib/. Samostatný LuxIR backend se připravuje z připnutého projektu. lslc_direct.lsl a původní strojový backend zůstávají pro kompatibilitu interních API a regresní testy.

Známá omezení vydání a plán další práce jsou v TODO.md a výše uvedeném benchmarku; starší vývojové záznamy jsou v PURE_LSL_PROGRESS.md. CUDA LSL používá bundlovaný izolovaný NVIDIA CUDA Runtime worker s CPU fallbackem, nikoli přímý in-process CUDA driver ABI. FloatArray kernely jsou ručně vektorizované přes SSE2 a thread_spawn/thread_join poskytují sdílená vlákna s atomickými builtiny. CUDA 0.7.7 přidává persistentní kontext, device buffery a dense Float64 Tensor operace. Obecná autovektorizace, uživatelské GPU kernely, další dtype a obecné foreign shared-object ABI zůstávají mimo veřejný kontrakt.

Licence: MIT, viz LICENSE.