git @ Cat's Eye Technologies SixtyPical / 2b9c457
Try to improve the description in the documentation, and notes. Chris Pressey 4 years ago
2 changed file(s) with 19 addition(s) and 3 deletion(s). Raw diff Collapse all Expand all
1818 * Cleaned up the internals of the reference implementation (incl. the AST)
1919 and re-organized the example programs in the `eg` subdirectory.
2020 * Most errors produced by the reference implementation now include a line number.
21 * Compiler supports multiple preludes, specifically both Commodore 64 and
22 Commodore VIC-20; the `loadngo.sh` script supports both architectures too.
2123
2224 0.12
2325 ----
22
33 _Version 0.13. Work-in-progress, everything is subject to change._
44
5 SixtyPical is a very low-level programming language, similar to 6502 assembly,
6 with static analysis through abstract interpretation.
5 **SixtyPical** is a 6502-assembly-like programming language with advanced
6 static analysis.
7
8 "6502-assembly-like" means that it has similar restrictions as programming
9 in 6502 assembly (e.g. the programmer must choose the registers that
10 values will be stored in) and is concomittantly easy for a compiler to
11 translate it to 6502 machine language code.
12
13 "Advanced static analysis" includes _abstract interpretation_, where we
14 go through the program step by step, tracking not just the changes that
15 happen during a _specific_ execution of the program, but _sets_ of changes
16 that could _possibly_ happen in any run of the program. This lets us
17 determine that certain things can never happen, which we can present as
18 safety guarantees.
719
820 In practice, this means it catches things like
921
1022 * you forgot to clear carry before adding something to the accumulator
1123 * a subroutine that you call trashes a register you thought was preserved
24 * you tried to read or write a byte beyond the end of a byte array
1225 * you tried to write the address of something that was not a routine, to
1326 a jump vector
1427
1629 based on common machine-language programming idioms, such as
1730
1831 * copying values from one register to another (via a third register when
19 there are no underlying instructions that directly support it)
32 there are no underlying instructions that directly support it); this
33 includes 16-bit values, which are copied in two steps
2034 * explicit tail calls
2135 * indirect subroutine calls
2236