| 1 | ## 0.1.8 |
| 2 | |
| 3 | ## 0.1.7 |
| 4 | |
| 5 | - news: rename the language to "ix" |
| 6 | - breaking: new CLI interface |
| 7 | - feat: language manual gets a pleasing redesign |
| 8 | - feat: allow any expression as a function body |
| 9 | - feat: add boolean `and` and `or` operator keywords |
| 10 | - feat: add `assert` keyword |
| 11 | - feat: add safety checks for array out of bounds |
| 12 | - feat(js): block expressions are lowered to comma chains if possible |
| 13 | - fix: coerce `break` operands and implicit breaks to result type |
| 14 | - fix: coerce results when `if` expression branches merge |
| 15 | - fix: ensure if branch results to a runtime value when the condition is not compile-time known |
| 16 | - fix: coerce return value to a runtime value |
| 17 | - fix: inferred array type uses item type for items instead of the container type. |
| 18 | - fix(js): stop printing redundant parenthesis on ternary expressions |
| 19 | |
| 20 | ## 0.1.6 |
| 21 | |
| 22 | - breaking: rename `@js` to `@extern`, considering future backends |
| 23 | - breaking: rename `noreturn` to `never` |
| 24 | - re-write most of the semantic analysis pass (#79) |
| 25 | - feat: implement function expressions |
| 26 | - feat: implement simple `comptime` evaluation |
| 27 | - feat: change all semantic analysis panics into handled errors |
| 28 | - fix: no longer analyzes contents past a block end |
| 29 | - feat: introduce cli subcommands |
| 30 | - feat: add `run` subcommand to execute the file in QuickJS instead of outputting source |
| 31 | - feat: add array index syntax via `x[1]` and `x.1` |
| 32 | - feat: add `len` property to arrays |
| 33 | - feat: allow instantiating `@extern` at compile time |
| 34 | - feat: implement tuples |
| 35 | - feat: implement multiline string literals |
| 36 | - feat: implement inferred return type |
| 37 | - fix: crash when printing unused struct declaration error |
| 38 | - fix: provide array result type to sema |
| 39 | - fix: crash when analyzing an empty array without a result type |
| 40 | - fix: binary operands with float and float would not resolve |
| 41 | - fix: assertion false-positive when using an extern global more than once |
| 42 | - fix: do not emit direct eval |
| 43 | |
| 44 | ## 0.1.5 |
| 45 | |
| 46 | - feat: clarify "defined runtime representation" and "can be represented at runtime" |
| 47 | - feat: implement inferred structs + result type semantics |
| 48 | - feat: add `--dump-state=./filename.json` to dump compiler state as JSON |
| 49 | - chore: remove group expressions, use single expression blocks instead |
| 50 | - fix(sema): fix passing structs as function params |
| 51 | - fix: diagnostic box drawing characters line up after line 9 |
| 52 | - fix: diagnostics on last line of file print correctly |
| 53 | - fix: diagnostics with the leading zero warning |
| 54 | |
| 55 | ## 0.1.4 |
| 56 | |
| 57 | - feat: implement basic struct types (#42) |
| 58 | - feat: implement basic array types (#67) |
| 59 | - feat: implement string identifiers (#54) |
| 60 | - feat: include a `README.html` alongside compiler with documentation and code samples. |
| 61 | - feat(transform): include a warning for leading zero in numbers |
| 62 | - feat(tokenizer): `$` is no longer valid in identifiers |
| 63 | - fix(sema): miscompilation using left side of all binary expression for both sides |
| 64 | - fix(sema): handle recursive function calls |
| 65 | - fix(sema): quit block analysis when hitting `noreturn` |
| 66 | - fix(sema): binary type resolution with opaque and numeric literals no longer crash |
| 67 | - fix(sema): false positive warning for numeric int ambiguity when it was always float |
| 68 | |
| 69 | ## 0.1.3 |
| 70 | |
| 71 | - feat(sema): coercion: numeric_literal -> float |
| 72 | - feat(sema): prevent passing non-runtime compatible types like `type` to opaque functions |
| 73 | - feat(sema): properly validate and coerce binary operations |
| 74 | - feat(sema): string concat with `+` |
| 75 | - feat(transform): lhs of assignments now validated |
| 76 | - feat(transform): mark useless discard |
| 77 | - feat(transform): parse string escapes properly |
| 78 | - feat(link): print string escapes properly |
| 79 | - feat: implement the `comptime` keyword (many comptime ops are not implemented) |
| 80 | - feat: add `@jsNew` to create JavaScript `new` expressions |
| 81 | - fix(parse): top-level if statements previously required semicolons |
| 82 | - fix(sema): properly coerce assignments |
| 83 | - fix(transform): empty block generated in top level code tripped sema assertion |
| 84 | - fix(link): emit parenthesis to preserve operator precedence |
| 85 | - fix(link): when main code has no side effects, do not emit any functions |
| 86 | |
| 87 | ## 0.1.2 |
| 88 | |
| 89 | - feat: semantic analysis can return formatted errors to the user |
| 90 | - feat: implement basic type coercions |
| 91 | - feat: type-check call parameters |
| 92 | - feat: type-check function return types |
| 93 | - feat: parsing of assignments within expressions is disallowed now |
| 94 | - feat: limit parsing to 4096 nested expressions / modules |
| 95 | - feat: added error for return outside of function |
| 96 | - feat: debug builds have `--report-trace` to print a stack trace per error |
| 97 | - fix: function arguments were not validated |
| 98 | - fix: unused warnings now properly work |
| 99 | - fix: empty files and functions no longer crash |
| 100 | |
| 101 | ## 0.1.1 |
| 102 | |
| 103 | - feat: `var` declarations / runtime memory |
| 104 | - feat: comptime binary operators |
| 105 | - feat: introduce `Report` and show error reports |
| 106 | - feat: show warnings for unused vars/lets/fns/params |
| 107 | - feat: add flag --dump-ir for enabling ir dumps |
| 108 | - fix: fix AIR generation for a block with a variable name |
| 109 | |
| 110 | ## 0.1.0 |
| 111 | |
| 112 | initial demo of compiler pipeline |