Skip to content

Laundry list of todos #7

@ivankra

Description

@ivankra

Sketches of some ideas/improvements that may (or may not) be worth implementing. Moved out of repo's TODO.md.


  • [high] split off data files into a separate repo
  • [high] break up update.py into separate scripts build/gen-*.py
    • checkout and update repos, update loc (or move loc into dockerfiles/make dist.py's responsibility)
    • check for broken links
  • [high] benchmarking workflow on github actions
    • Tool to merge results from different run if same rev
  • [high] test262
  • [med] harness/probe.py engine... [-- script...] - probe print/console.log/262 against multiple engines; also make it usable for probing against conformance/ tests directly.
  • [med] Fully static builds with musl: generalize build system to target triples, dist/{x86_64,aarch64}-[unknown-]linux-{gnu,musl}/, but DOCKER_ARCH={amd64,arm64}. Also dist/wasm32-[unknown-]wasi/ under native DOCKER_ARCH.
    • do something about libicu-dev, COPY build/libicu-static.sh ./ && ./libicu-static.sh? jsz-icu mixin image?
    • Generic ways to pass extra CFLAGS: wrapper, clang's CCC_OVERRIDE_OPTIONS
  • [med] Wasm builds (dist/wasm/*). Explore how easy is it to build C/C++ engines with WASI SDK / Emscripten and produce something runnable with minimal extra code. Make the extra glue code generalizable/reusable across engines. Try different Wasm runtimes to run them: wazero, wasmtime etc
    • kiesel's wasm build; hermes_sandbox
  • conformance.json: {'metadata':{...}, 'tests':{'es5':{'JSON.js':'OK', ...}, ...}, 'summary': {...}}
  • Benchmark riscv64 on scaleway
  • COPY --from: fix properly or drop (hako, jscript, apple's container bug). Drop REV pinning logic too, replace by direct --build-arg REV=.
  • -march=x86-64-v3 - benchmark builds, add to engines which show improvements (some get broken or already include it, need to go over each engine)
  • warmup_cmd= for jscript, jscript9, starlingmonkey to allow more time for setup during testing.
  • engines/*.md: rename "Standard" to "(Target) Specification"
  • narcissus: vendor-in, add console.log() and multiple scripts command-line args
  • v8_exp, jsc_exp, graaljs_exp etc - wrappers with full experimental flags. Probe flags in Dockerfile directly
  • REV=... REPO=... make -> avoid using ~/.cache/iid/ stamp files if these are set or something
  • make conformance -> force run, make conformance.txt -> don't rebuild if file exists. DIRECT=1 flag
  • jszvu: esvu/jsvu equivalent
    • build from source on user's machine: docker, podman, buildah, macOS containerization
    • or fetch github build artifact
    • check builds from BASE=debian:stable and other releases
    • check compatibility of builds with non-debian distros; vs engines official builds
    • test running outside /dist, fix/document exceptions
    • version handling
  • bench
  • REPL scripts: add continuation prompts, check if continuation is needed by a lightweight stack based parser
  • make repl target in engine dirs
  • runtimes, parsers and transpilers
    • expand and add transpilers
    • test parsers on conformance test suite, report results
    • node, bun, deno
    • node_0.x - nvm install 0.x
    • cjs/gjs
  • conformance
    • align filenames with test262
    • ensure every test has ": (OK|failed|exception)", check for all to detect dumb echos
    • verify unexpected OKs
    • ES1: this/inheritance/hoisting tests
    • ESnext permalinks
    • default strict mode fixes, bun/deno
    • record tested revision+date+version at the top of Conformance section in engine/*.md
    • run.sh 'engine [--flags]' <paths relative to conformance directory or absolute paths or ./relative-to-cwd>
    • look at ant failure to run benchmarks despite passing ES1-ES5 tests, add missing tests
  • compat-table subpage to serve conformance results from the repo. Original + transposed layout, toggleable loadable details, make it fast

  • get rid of console_log, just probe always
  • qucikjs_262 config -> get rid of it, always probe for -N
  • folder: -> "dirs" section. --report-{dirs,runs,scenarios,rusage} metrics->rusage
  • binary_name in metadata; always set in test262/run if no metadata
  • two common exceptions patterns -> hardcode
  • "Test262: ..." messages -> handle in annotator, TEST262_ERROR/ABORT
  • test262.py -O <dir> flag
  • test262.py --shuffle -i <file with list of tests>
  • https://github.com/test262-fyi/eshost/blob/master/lib/agents/
  • hub: add conformance to PATH, motd, git pull fix
  • generic prelude
    • 262 evalScript/gc + print
    • maybe put in config.yml defaults - harness/prelude.js
  • per-engine harness overrides?
  • test262probe -> probe.py and inline consts
  • inline Executor?
  • quickjs fix Test262Error
  • quickjs/libjs validate
  • make compare262; general compare262 against eshost/test262-harness
  • rename_map - scenario_id ".quickjs.sloppy.mjs"
  • uses:$262. -> references:$262.,
    • make it filterable -> harness preprocessing needs to cache ref list
    • Tags.add_references(code)
    • *Error; Intl; other major JS class name: Date, String, Array, Temporal...
    • ignore comments
  • includes: -> transitive! make filterable
  • annotate es3/es5 only tests? propose "es3" / "es5" feature tags to test262 repo
  • rewrite compat-table/gen and rename tests to align with test262

URLs to check

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions