Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Mar 23:07

Changelog

  • 358ad9d Add #line directives to generated C for source-level error reporting
  • 34a8885 Add -fwrapv -fno-strict-aliasing to compiled output compiler flags
  • 952e493 Add -i interactive REPL mode with readline support
  • 1549ed8 Add .fth test files to improve test coverage
  • f7fb8e1 Add .gitignore entries for binaries and unlicensed draft standard
  • 43704cd Add ?DUP-IF and ?DUP-0=-IF control flow extensions
  • 43774f5 Add ABORT, ABORT", and QUIT for Forth 2012 CORE compliance
  • 142d861 Add ALIGN, ALIGNED, 2!, 2@ for Forth 2012 CORE compliance
  • b0bce60 Add ATEXIT word to register exit handlers via C atexit()
  • 5eb629c Add BASE, DECIMAL, and BASE-aware number parsing
  • e4d1aaf Add Breakout game example with SDL2 bindings
  • a2385a9 Add CODE words for FILE-STATUS, RENAME-FILE, FLUSH-FILE
  • 445a44e Add CODE words for N>R and NR>
  • 51814d2 Add Dhrystone v1.1 benchmark example with C vs ccforth vs Gforth comparison
  • 4fc6b9a Add Double-Number word set: D+ D- DNEGATE DABS D2* D2/ D< M+ D0< D0= D= D>S DMAX DMIN 2CONSTANT 2VARIABLE 2LITERAL D. D.R M*/
  • a9e0709 Add Exception word set: CATCH and THROW (interpreter-only for now)
  • 9e13018 Add FIND, >BODY, >NUMBER, ENVIRONMENT?, and input words
  • 5931d30 Add File-Access word set: OPEN-FILE, CREATE-FILE, CLOSE-FILE, READ-FILE, WRITE-FILE, DELETE-FILE, FILE-POSITION, FILE-SIZE, REPOSITION-FILE, RESIZE-FILE, READ-LINE, WRITE-LINE, SOURCE-ID, R/O, W/O, R/W, BIN
  • acd2139 Add Floating-Point word set: F+ F- F* F/ FNEGATE FABS FMAX FMIN FLOOR FROUND FSQRT F0< F0= F< FDUP FDROP FSWAP FOVER FROT F@ F! D>F F>D FDEPTH >FLOAT REPRESENT FLITERAL F. FLOAT+ FLOATS FALIGN FALIGNED FVARIABLE FCONSTANT
  • bb7f44c Add Forth 2012 test suite for compiled output and fix locals codegen
  • 803b209 Add Game Boy DMG emulator example with CPU, ALU, PPU in pure Forth
  • cbbb8c0 Add GitHub Actions CI workflow
  • 12b9b3e Add GitHub Release automation via GoReleaser
  • 711d331 Add INCLUDE-FILE and INCLUDED for file inclusion (interpreter-only)
  • a2080a4 Add INTERPRETER word for conditional CODE definitions
  • cdb7a78 Add LIT+OP fusion in emitter for immediate arithmetic
  • ccda302 Add Locals word set: (LOCAL), {: :}, and TO for local variables
  • a461a34 Add Memory-Allocation word set: ALLOCATE, FREE, RESIZE
  • 26c86f8 Add PLACE and VOCABULARY non-standard extensions
  • 3edd5a7 Add Performance section to README
  • 9199f66 Add Programming-Tools word set and CODE for inline C
  • 9c52e5b Add README.md and remove implementation plan
  • f9240a9 Add S+ string concatenation
  • 7057200 Add SLURP-FID and SLURP-FILE for reading entire files
  • 5223d39 Add SYSTEM for executing shell commands
  • 00e9f4b Add Search-Order word set: FORTH-WORDLIST, GET-ORDER, SET-ORDER, GET-CURRENT, SET-CURRENT, WORDLIST, SEARCH-WORDLIST, DEFINITIONS, FORTH
  • a2cc5f3 Add String word set: CMOVE, CMOVE>, /STRING, -TRAILING, BLANK, COMPARE, SEARCH, SLITERAL
  • 5596150 Add TRY/IFERROR/RESTORE/ENDTRY exception extensions
  • 5b52378 Add TestBenchmarkSuite for per-category benchmark measurement
  • c89f52d Add WORDS.md per-word reference organised by Forth 2012 word sets
  • d61bfce Add Whetstone benchmark example with C vs ccforth vs Gforth comparison
  • 43649d0 Add [: / ;] quotations (anonymous closures)
  • 5cf0d12 Add ]] / [[ postpone state brackets
  • b38ebc4 Add animated Towers of Hanoi terminal demo
  • c3336a3 Add benchmark comparison table (compiled vs interpreter vs Gforth)
  • 3957b7e Add benchmark infrastructure for measuring codegen performance
  • 7cddf6a Add command-line argument and environment variable words
  • 1cb7b1d Add comparison+branch fusion in emitter
  • ad80f18 Add compilable ROLL, 2ROT, DU<, CS-ROLL
  • 06347ca Add double-cell arithmetic: M* UM* UM/MOD SM/REM FM/MOD S>D */ */MOD
  • b63a81d Add end-to-end Forth test programs exercising all built-in words
  • c8db8b0 Add examples section to README and raytrace example README
  • abd5ce3 Add expected output .txt files for all benchmarks
  • 8b33e47 Add interactive Mandelbrot viewer example with SDL2
  • 6bc52f8 Add interpreter-mode end-to-end tests
  • c3f27b2 Add more peephole optimization patterns
  • 352d222 Add peephole: eliminate SWAP before commutative operations
  • b7d45c0 Add pi spigot algorithm integration test
  • 9cc1078 Add pictured numeric output: <# # #S #> HOLD SIGN U. and BASE-aware .
  • c04c987 Add primitiveC entries for 2>R, 2R>, 2R@
  • 355e695 Add ray tracer example rendering 3 spheres on a checkerboard ground plane
  • 305a458 Add right-click zoom out and scroll wheel zoom to mandelbrot viewer
  • d6ba876 Add static inline hint to all generated C functions
  • 4259d7d Add struct words, CELL constant, EXECUTE for primitives in compiled code
  • 80978da Add tail call optimization for RECURSE in compiled code
  • 90148dd Add terminal-based animated Mandelbrot viewer
  • 5d9d0b3 Add typed local variable specifiers (W: D: F: C: W^ D^ F^ C^)
  • 8dcfc43 Add { ... } Gforth-compatible locals syntax
  • b60640c BYE fix, benchmark tuning, peephole patterns, compiler flags, Forth 2012 tests
  • 60b5192 Buffer stdout in compiled output to reduce syscall overhead
  • 7d4c4f1 Compile CATCH/THROW to C with setjmp/longjmp
  • 6b7659d Convert benchmarks to Go benchmark framework
  • 8fc72e5 Define 14 words in Forth instead of Go, fix peephole across branch targets
  • 843df84 Document name mangling rules for words and locals in generated C
  • efd578d Embed C runtime into binary for self-contained compiler output
  • 18ce7a0 Emit DO/LOOP as C local variables instead of rstack array
  • 021dd96 Emit VALUE/FVALUE/2VALUE as C static globals in compiled code
  • 5a07964 Fix -Cflags to split by whitespace so multiple flags work correctly
  • 3c40f44 Fix -Wformat-truncation warning in rt_represent
  • 58f7bfc Fix CODE word comment placement in mandelbrot sdl.fth
  • b071233 Fix EXIT locals cleanup, mid-body locals in loops, add EXCEPTION and #!
  • 456d495 Fix Facility word set status: Complete, not Partial
  • 3335168 Fix STATE to return a memory address per Forth 2012
  • 8849b93 Fix examples: move uninitialized typed locals after | separator
  • 2b83b9d Fix execution token (xt) system to use real values
  • 86d470b Fix locals: maxLocals for unused locals, shadowing for duplicate names, add 0<= 0>=
  • 6b66aa0 Fix macOS ARM RESIZE test failure and add Windows platform support
  • f7b5d29 Fix multiple { } locals blocks in a single word definition
  • dfad586 Fix sieve benchmark in interpreter: increase memory from 1MB to 4MB
  • 7156c20 Fix tail-call optimization for RECURSE with locals
  • c7678cc Fix undefined behavior in PUSH/RPUSH/FPUSH macros
  • a551fe1 Implement Floating-Point extensions, Facility, and Extended-Character word sets
  • 26dffef Implement UTIME word (Gforth compatible)
  • 39f18c2 Make all benchmarks gforth-compatible, update benchmark table
  • f556612 Make execution tokens function pointers in compiled output
  • 5517a40 Migrate rt_* functions from runtime.c to CODE words in core.fth
  • ba7aa0e Move 27 more interpreter primitives to Forth definitions in core.fth
  • 3da2f04 Move end-to-end tests to testdata/end-to-end/ and forth2012-test-suite into testdata/
  • 3dc24fc Move expected test output to .txt files alongside .fth sources
  • b858ef0 Move mem[] to BSS to reduce compiled binary size
  • a36a028 Move ~50 primitiveC entries to CODE words in core.fth
  • 493f434 Omit Xt suffix from C function names for uniquely-named words
  • 8525379 Port Whetstone double-precision benchmark to Forth
  • 6327bcb Refactor interpreter to line-based parsing and pass Forth 2012 test suite
  • ae96447 Rename module from github.com/user/ccforth to github.com/ncw/ccforth
  • 8036389 Replace HEX/FALSE/TRUE/ERASE/PAD/CS-PICK/UNUSED with Forth definitions
  • 77ccf45 Replace TestBenchmarkComparison with BenchmarkGforth
  • cf59f2b Replace gb_term.h with Forth terminal logic and thin CODE wrappers
  • 07f9ed4 Replace usleep with nanosleep in MS to fix implicit declaration warning
  • 04b9e9a Rework VALUE/FVALUE/2VALUE to use memory-backed storage
  • 13a48e0 Rewrite >NUMBER in pure Forth and detect untranslatable primitives
  • 3e35dca Rewrite UNESCAPE in pure Forth
  • defbede Step 10: Implement pkg/compiler/peephole.go
  • a85ff3e Step 11: Create runtime/runtime.h and runtime/runtime.c
  • c94531e Step 12: Implement pkg/codegen
  • a448673 Step 13: Implement cmd/ccforth/main.go
  • 9857478 Step 14: Add VARIABLE, CONSTANT, CREATE, ALLOT, DOES>
  • 405b5ac Step 15: Write forth/core.fth and bootstrap loader
  • 81a7895 Step 16: Add POSTPONE, COMPILE,, LITERAL, [']
  • ccc14de Step 17: End-to-end integration tests
  • fd79367 Step 18: Add string words
  • d82374e Step 19: Add EVALUATE support
  • 3e2cca4 Step 1: Set up project scaffolding
  • d5253e2 Step 2: Implement pkg/scanner
  • 317e96d Step 3: Implement pkg/memory
  • 8293a6c Step 4: Implement pkg/dictionary
  • dbcd37e Step 5: Implement pkg/interpreter — core with primitives
  • e162da2 Step 6: Add : and ; to interpreter
  • 12c90bd Step 7: Add control flow words to interpreter
  • 77383b2 Step 8: Implement pkg/compiler/emitter.go
  • f6d4d9e Step 9: Implement control flow C emission
  • 6a1ca07 Update Game Boy example to use built-in ARG instead of constructor hack
  • 5aa7224 Update README to reflect Forth 2012 test suite and newly implemented words
  • d99782e Update WORDS.md for newly compilable words
  • 44169ac Update benchmark table with fresh numbers after -march=native -flto
  • a1aa24b Update hanoi example to use UTIME instead of custom CLOCK-MS
  • b34adad Upgrade default C compiler optimization from -O2 to -O3
  • fe126f3 Use ATEXIT in Game Boy example to move exit handler from C to Forth
  • 081a359 Use Forth local names in generated C instead of _local0, _local1
  • 2c46a8b Use floored division for / MOD /MOD */MOD / M/ (Gforth-compatible)
  • 1818c7f Use real pointers everywhere + malloc-based ALLOCATE in compiled output
  • baf348c Use real values for transcendental function tests in float_math.fth
  • 55233fe Use typed local specifiers in examples
  • 345c77e Wire peephole optimizer into codegen pipeline
  • d3b77f7 ccforth is a hybrid FORTH interpreter/compiler written in Go.