ailang-lang 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ailang_lang-1.0.1/AUTHORS.md +10 -0
- ailang_lang-1.0.1/CHANGELOG.md +443 -0
- ailang_lang-1.0.1/LICENSE +21 -0
- ailang_lang-1.0.1/MANIFEST.in +5 -0
- ailang_lang-1.0.1/PKG-INFO +205 -0
- ailang_lang-1.0.1/README.md +161 -0
- ailang_lang-1.0.1/ail_platform/__init__.py +22 -0
- ailang_lang-1.0.1/ail_platform/configuration.py +88 -0
- ailang_lang-1.0.1/ail_platform/diagnostics.py +117 -0
- ailang_lang-1.0.1/ail_platform/events.py +27 -0
- ailang_lang-1.0.1/ail_platform/manifest.py +150 -0
- ailang_lang-1.0.1/ail_platform/project.py +87 -0
- ailang_lang-1.0.1/ail_platform/report_schema.py +134 -0
- ailang_lang-1.0.1/ail_platform/symbol_index.py +131 -0
- ailang_lang-1.0.1/ail_platform/workspace.py +72 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/PKG-INFO +205 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/SOURCES.txt +255 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/dependency_links.txt +1 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/entry_points.txt +2 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/requires.txt +27 -0
- ailang_lang-1.0.1/ailang_lang.egg-info/top_level.txt +4 -0
- ailang_lang-1.0.1/compiler/__init__.py +1 -0
- ailang_lang-1.0.1/compiler/__main__.py +19 -0
- ailang_lang-1.0.1/compiler/ast/__init__.py +39 -0
- ailang_lang-1.0.1/compiler/ast/builder.py +365 -0
- ailang_lang-1.0.1/compiler/ast/nodes.py +177 -0
- ailang_lang-1.0.1/compiler/cli/__init__.py +3 -0
- ailang_lang-1.0.1/compiler/cli/main.py +1570 -0
- ailang_lang-1.0.1/compiler/compilation/__init__.py +3 -0
- ailang_lang-1.0.1/compiler/compilation/graph.py +132 -0
- ailang_lang-1.0.1/compiler/compilation/resolution.py +143 -0
- ailang_lang-1.0.1/compiler/compilation/session.py +638 -0
- ailang_lang-1.0.1/compiler/diagnostics.py +102 -0
- ailang_lang-1.0.1/compiler/formatter.py +498 -0
- ailang_lang-1.0.1/compiler/ir/__init__.py +16 -0
- ailang_lang-1.0.1/compiler/ir/builder.py +508 -0
- ailang_lang-1.0.1/compiler/ir/nodes.py +154 -0
- ailang_lang-1.0.1/compiler/ir/printer.py +150 -0
- ailang_lang-1.0.1/compiler/ir/validator.py +130 -0
- ailang_lang-1.0.1/compiler/lexer.py +628 -0
- ailang_lang-1.0.1/compiler/lsp/__init__.py +5 -0
- ailang_lang-1.0.1/compiler/lsp/documents.py +93 -0
- ailang_lang-1.0.1/compiler/lsp/features/__init__.py +0 -0
- ailang_lang-1.0.1/compiler/lsp/features/code_actions.py +194 -0
- ailang_lang-1.0.1/compiler/lsp/features/completion.py +181 -0
- ailang_lang-1.0.1/compiler/lsp/features/definition.py +53 -0
- ailang_lang-1.0.1/compiler/lsp/features/diagnostics.py +22 -0
- ailang_lang-1.0.1/compiler/lsp/features/hover.py +177 -0
- ailang_lang-1.0.1/compiler/lsp/features/references.py +54 -0
- ailang_lang-1.0.1/compiler/lsp/features/rename.py +76 -0
- ailang_lang-1.0.1/compiler/lsp/features/signature_help.py +178 -0
- ailang_lang-1.0.1/compiler/lsp/features/symbols.py +85 -0
- ailang_lang-1.0.1/compiler/lsp/features/workspace_symbols.py +96 -0
- ailang_lang-1.0.1/compiler/lsp/protocol.py +221 -0
- ailang_lang-1.0.1/compiler/lsp/server.py +249 -0
- ailang_lang-1.0.1/compiler/lsp/utils.py +136 -0
- ailang_lang-1.0.1/compiler/package/__init__.py +1 -0
- ailang_lang-1.0.1/compiler/package/registry.py +264 -0
- ailang_lang-1.0.1/compiler/parser/__init__.py +4 -0
- ailang_lang-1.0.1/compiler/parser/declarations.py +56 -0
- ailang_lang-1.0.1/compiler/parser/expressions.py +214 -0
- ailang_lang-1.0.1/compiler/parser/nodes.py +22 -0
- ailang_lang-1.0.1/compiler/parser/parser.py +172 -0
- ailang_lang-1.0.1/compiler/parser/recovery.py +12 -0
- ailang_lang-1.0.1/compiler/parser/statements.py +118 -0
- ailang_lang-1.0.1/compiler/parser/token_stream.py +72 -0
- ailang_lang-1.0.1/compiler/py.typed +0 -0
- ailang_lang-1.0.1/compiler/rename.py +352 -0
- ailang_lang-1.0.1/compiler/runtime/__init__.py +7 -0
- ailang_lang-1.0.1/compiler/runtime/builtins.py +498 -0
- ailang_lang-1.0.1/compiler/runtime/environment.py +74 -0
- ailang_lang-1.0.1/compiler/runtime/interpreter.py +341 -0
- ailang_lang-1.0.1/compiler/runtime/stack_frame.py +40 -0
- ailang_lang-1.0.1/compiler/runtime/values.py +9 -0
- ailang_lang-1.0.1/compiler/semantic/__init__.py +6 -0
- ailang_lang-1.0.1/compiler/semantic/analyzer.py +302 -0
- ailang_lang-1.0.1/compiler/semantic/symbol_table.py +173 -0
- ailang_lang-1.0.1/compiler/source.py +29 -0
- ailang_lang-1.0.1/compiler/types/__init__.py +17 -0
- ailang_lang-1.0.1/compiler/types/checker.py +397 -0
- ailang_lang-1.0.1/compiler/types/types.py +55 -0
- ailang_lang-1.0.1/compiler/watch.py +418 -0
- ailang_lang-1.0.1/examples/age_calc/main.ail +71 -0
- ailang_lang-1.0.1/examples/attendance/main.ail +58 -0
- ailang_lang-1.0.1/examples/banking/main.ail +60 -0
- ailang_lang-1.0.1/examples/bmi_calc/main.ail +60 -0
- ailang_lang-1.0.1/examples/calculator/main.ail +8 -0
- ailang_lang-1.0.1/examples/chained_member_access.ail +3 -0
- ailang_lang-1.0.1/examples/collections.ail +24 -0
- ailang_lang-1.0.1/examples/config_loader/main.ail +29 -0
- ailang_lang-1.0.1/examples/csv_demo.ail +31 -0
- ailang_lang-1.0.1/examples/csv_reader/main.ail +34 -0
- ailang_lang-1.0.1/examples/currency_converter/main.ail +64 -0
- ailang_lang-1.0.1/examples/date_validate/main.ail +93 -0
- ailang_lang-1.0.1/examples/dir_tree/main.ail +34 -0
- ailang_lang-1.0.1/examples/electricity_bill/main.ail +59 -0
- ailang_lang-1.0.1/examples/env_demo.ail +16 -0
- ailang_lang-1.0.1/examples/expr_eval/main.ail +47 -0
- ailang_lang-1.0.1/examples/fibonacci/main.ail +9 -0
- ailang_lang-1.0.1/examples/file_copy/main.ail +61 -0
- ailang_lang-1.0.1/examples/file_io.ail +26 -0
- ailang_lang-1.0.1/examples/functions/main.ail +10 -0
- ailang_lang-1.0.1/examples/functions.ail +3 -0
- ailang_lang-1.0.1/examples/hello_world/main.ail +4 -0
- ailang_lang-1.0.1/examples/http_client/main.ail +70 -0
- ailang_lang-1.0.1/examples/if_else/main.ail +8 -0
- ailang_lang-1.0.1/examples/if_else.ail +7 -0
- ailang_lang-1.0.1/examples/income_tax/main.ail +75 -0
- ailang_lang-1.0.1/examples/ini_parser/main.ail +49 -0
- ailang_lang-1.0.1/examples/integration/max_function.ail +7 -0
- ailang_lang-1.0.1/examples/invoice_gen/main.ail +69 -0
- ailang_lang-1.0.1/examples/json_demo.ail +31 -0
- ailang_lang-1.0.1/examples/json_parser/main.ail +56 -0
- ailang_lang-1.0.1/examples/library_mgr/main.ail +61 -0
- ailang_lang-1.0.1/examples/loan_emi/main.ail +62 -0
- ailang_lang-1.0.1/examples/markdown_parser/main.ail +52 -0
- ailang_lang-1.0.1/examples/member_access.ail +3 -0
- ailang_lang-1.0.1/examples/member_function_calls.ail +3 -0
- ailang_lang-1.0.1/examples/modules/add.ail +4 -0
- ailang_lang-1.0.1/examples/modules/main.ail +6 -0
- ailang_lang-1.0.1/examples/modules/math/add.ail +4 -0
- ailang_lang-1.0.1/examples/modules/math/math.ail +4 -0
- ailang_lang-1.0.1/examples/modules/math.ail +4 -0
- ailang_lang-1.0.1/examples/num_stats/main.ail +45 -0
- ailang_lang-1.0.1/examples/password_validate/main.ail +62 -0
- ailang_lang-1.0.1/examples/path_ops.ail +25 -0
- ailang_lang-1.0.1/examples/patterns/csv_reader.ail +49 -0
- ailang_lang-1.0.1/examples/patterns/dependency_graph.ail +87 -0
- ailang_lang-1.0.1/examples/patterns/json_store.ail +67 -0
- ailang_lang-1.0.1/examples/patterns/recursive_filter.ail +45 -0
- ailang_lang-1.0.1/examples/patterns/recursive_map.ail +42 -0
- ailang_lang-1.0.1/examples/patterns/recursive_reduce.ail +38 -0
- ailang_lang-1.0.1/examples/patterns/recursive_search.ail +40 -0
- ailang_lang-1.0.1/examples/patterns/string_find.ail +40 -0
- ailang_lang-1.0.1/examples/patterns/string_split.ail +51 -0
- ailang_lang-1.0.1/examples/patterns/topological_sort.ail +88 -0
- ailang_lang-1.0.1/examples/payroll/main.ail +74 -0
- ailang_lang-1.0.1/examples/prime_checker/main.ail +10 -0
- ailang_lang-1.0.1/examples/random_demo.ail +23 -0
- ailang_lang-1.0.1/examples/recursion/main.ail +10 -0
- ailang_lang-1.0.1/examples/rule_engine/main.ail +65 -0
- ailang_lang-1.0.1/examples/salary_calc/main.ail +63 -0
- ailang_lang-1.0.1/examples/shopping_cart/main.ail +58 -0
- ailang_lang-1.0.1/examples/string_utils.ail +10 -0
- ailang_lang-1.0.1/examples/student_records/main.ail +59 -0
- ailang_lang-1.0.1/examples/text_search/main.ail +49 -0
- ailang_lang-1.0.1/examples/time_demo.ail +19 -0
- ailang_lang-1.0.1/examples/variables/main.ail +7 -0
- ailang_lang-1.0.1/examples/variables.ail +1 -0
- ailang_lang-1.0.1/examples/voting_eligibility/main.ail +70 -0
- ailang_lang-1.0.1/examples/word_counter/main.ail +26 -0
- ailang_lang-1.0.1/pyproject.toml +93 -0
- ailang_lang-1.0.1/setup.cfg +4 -0
- ailang_lang-1.0.1/stdlib/__init__.py +2 -0
- ailang_lang-1.0.1/stdlib/array.ail +27 -0
- ailang_lang-1.0.1/stdlib/convert.ail +18 -0
- ailang_lang-1.0.1/stdlib/csv.ail +11 -0
- ailang_lang-1.0.1/stdlib/environment.ail +11 -0
- ailang_lang-1.0.1/stdlib/file.ail +23 -0
- ailang_lang-1.0.1/stdlib/io.ail +14 -0
- ailang_lang-1.0.1/stdlib/json.ail +7 -0
- ailang_lang-1.0.1/stdlib/list.ail +91 -0
- ailang_lang-1.0.1/stdlib/map.ail +39 -0
- ailang_lang-1.0.1/stdlib/math.ail +36 -0
- ailang_lang-1.0.1/stdlib/path.ail +19 -0
- ailang_lang-1.0.1/stdlib/random.ail +11 -0
- ailang_lang-1.0.1/stdlib/set.ail +23 -0
- ailang_lang-1.0.1/stdlib/string.ail +63 -0
- ailang_lang-1.0.1/stdlib/system.ail +3 -0
- ailang_lang-1.0.1/stdlib/time.ail +15 -0
- ailang_lang-1.0.1/tests/test_ai_validation.py +497 -0
- ailang_lang-1.0.1/tests/test_ail_context.py +39 -0
- ailang_lang-1.0.1/tests/test_ail_doctor.py +81 -0
- ailang_lang-1.0.1/tests/test_ast_builder.py +370 -0
- ailang_lang-1.0.1/tests/test_benchmark.py +623 -0
- ailang_lang-1.0.1/tests/test_cli.py +448 -0
- ailang_lang-1.0.1/tests/test_diagnostics.py +68 -0
- ailang_lang-1.0.1/tests/test_experimental_loops.py +426 -0
- ailang_lang-1.0.1/tests/test_formatter.py +433 -0
- ailang_lang-1.0.1/tests/test_imports.py +47 -0
- ailang_lang-1.0.1/tests/test_inventory_app.py +56 -0
- ailang_lang-1.0.1/tests/test_inventory_level0.py +371 -0
- ailang_lang-1.0.1/tests/test_ir_builder.py +196 -0
- ailang_lang-1.0.1/tests/test_lexer.py +206 -0
- ailang_lang-1.0.1/tests/test_lsp.py +1379 -0
- ailang_lang-1.0.1/tests/test_member_access.py +143 -0
- ailang_lang-1.0.1/tests/test_module_integration.py +522 -0
- ailang_lang-1.0.1/tests/test_module_resolution.py +184 -0
- ailang_lang-1.0.1/tests/test_new_stdlib.py +301 -0
- ailang_lang-1.0.1/tests/test_package_commands.py +141 -0
- ailang_lang-1.0.1/tests/test_package_naming.py +210 -0
- ailang_lang-1.0.1/tests/test_rename.py +261 -0
- ailang_lang-1.0.1/tests/test_runtime.py +311 -0
- ailang_lang-1.0.1/tests/test_scope_cache.py +852 -0
- ailang_lang-1.0.1/tests/test_semantic.py +195 -0
- ailang_lang-1.0.1/tests/test_session.py +49 -0
- ailang_lang-1.0.1/tests/test_source.py +28 -0
- ailang_lang-1.0.1/tests/test_static_analyzer_enhancement.py +130 -0
- ailang_lang-1.0.1/tests/test_stdlib_collections.py +432 -0
- ailang_lang-1.0.1/tests/test_stdlib_csv.py +287 -0
- ailang_lang-1.0.1/tests/test_stdlib_environment.py +115 -0
- ailang_lang-1.0.1/tests/test_stdlib_file.py +137 -0
- ailang_lang-1.0.1/tests/test_stdlib_json.py +315 -0
- ailang_lang-1.0.1/tests/test_stdlib_path.py +154 -0
- ailang_lang-1.0.1/tests/test_stdlib_random.py +112 -0
- ailang_lang-1.0.1/tests/test_stdlib_system.py +68 -0
- ailang_lang-1.0.1/tests/test_stdlib_time.py +123 -0
- ailang_lang-1.0.1/tests/test_stress.py +558 -0
- ailang_lang-1.0.1/tests/test_type_checker.py +125 -0
- ailang_lang-1.0.1/tests/test_validation.py +443 -0
- ailang_lang-1.0.1/tests/test_validation_comprehensive.py +948 -0
- ailang_lang-1.0.1/tests/test_watch.py +155 -0
- ailang_lang-1.0.1/tools/ail_benchmark/__init__.py +1 -0
- ailang_lang-1.0.1/tools/ail_benchmark/__main__.py +333 -0
- ailang_lang-1.0.1/tools/ail_benchmark/compare.py +135 -0
- ailang_lang-1.0.1/tools/ail_benchmark/discovery.py +132 -0
- ailang_lang-1.0.1/tools/ail_benchmark/reporter.py +258 -0
- ailang_lang-1.0.1/tools/ail_benchmark/runner.py +233 -0
- ailang_lang-1.0.1/tools/ail_context/__main__.py +206 -0
- ailang_lang-1.0.1/tools/ail_doctor/__main__.py +416 -0
- ailang_lang-1.0.1/tools/ail_order/__init__.py +3 -0
- ailang_lang-1.0.1/tools/ail_order/__main__.py +181 -0
- ailang_lang-1.0.1/tools/ail_order/analyzer.py +50 -0
- ailang_lang-1.0.1/tools/ail_order/discovery.py +244 -0
- ailang_lang-1.0.1/tools/ail_order/fixer.py +132 -0
- ailang_lang-1.0.1/tools/ail_order/graph.py +219 -0
- ailang_lang-1.0.1/tools/ail_order/models.py +59 -0
- ailang_lang-1.0.1/tools/ail_order/reporter.py +207 -0
- ailang_lang-1.0.1/tools/ail_package_manager/__init__.py +3 -0
- ailang_lang-1.0.1/tools/ail_package_manager/__main__.py +172 -0
- ailang_lang-1.0.1/tools/ail_package_manager/cache.py +131 -0
- ailang_lang-1.0.1/tools/ail_package_manager/commands.py +350 -0
- ailang_lang-1.0.1/tools/ail_package_manager/init.py +111 -0
- ailang_lang-1.0.1/tools/ail_package_manager/installer.py +133 -0
- ailang_lang-1.0.1/tools/ail_package_manager/lock.py +145 -0
- ailang_lang-1.0.1/tools/ail_package_manager/manifest.py +178 -0
- ailang_lang-1.0.1/tools/ail_package_manager/models.py +67 -0
- ailang_lang-1.0.1/tools/ail_package_manager/registry.py +360 -0
- ailang_lang-1.0.1/tools/ail_package_manager/resolver.py +314 -0
- ailang_lang-1.0.1/tools/ail_static_analyzer/__main__.py +279 -0
- ailang_lang-1.0.1/tools/ail_testgen/__init__.py +30 -0
- ailang_lang-1.0.1/tools/ail_testgen/__main__.py +141 -0
- ailang_lang-1.0.1/tools/ail_testgen/analyzer.py +66 -0
- ailang_lang-1.0.1/tools/ail_testgen/discovery.py +41 -0
- ailang_lang-1.0.1/tools/ail_testgen/generator.py +117 -0
- ailang_lang-1.0.1/tools/ail_testgen/models.py +54 -0
- ailang_lang-1.0.1/tools/ail_testgen/reporter.py +99 -0
- ailang_lang-1.0.1/tools/ail_testgen/validator.py +45 -0
- ailang_lang-1.0.1/tools/common/__init__.py +28 -0
- ailang_lang-1.0.1/tools/common/cli.py +49 -0
- ailang_lang-1.0.1/tools/common/filesystem.py +44 -0
- ailang_lang-1.0.1/tools/common/hashing.py +11 -0
- ailang_lang-1.0.1/tools/common/process.py +66 -0
- ailang_lang-1.0.1/tools/common/reporting.py +31 -0
- ailang_lang-1.0.1/tools/install_inventory.py +426 -0
- ailang_lang-1.0.1/tools/perf_profiler.py +448 -0
- ailang_lang-1.0.1/tools/python_profiler.py +446 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v1.0.0-M57
|
|
4
|
+
|
|
5
|
+
### M57 — VS Code Extension Hardening
|
|
6
|
+
|
|
7
|
+
- **Extension version sync**: Bumped `package.json` to v0.2.0; fixed trailing comma; added icon reference
|
|
8
|
+
- **Code action edits**: Rewrote `compiler/lsp/features/code_actions.py` — quick fixes now generate actual `TextEdit` operations for "import stdlib module" and "remove unused variable" actions
|
|
9
|
+
- **`for` keyword support**: Added to TextMate grammar (`keyword.control.loop.ailang`) and LSP completions (`completion.py`)
|
|
10
|
+
- **Documentation**: `docs/vscode/INSTALLATION.md` (installation guide), `docs/vscode/FEATURES.md` (feature reference), `docs/releases/M57_VSCODE_EXTENSION_REPORT.md`
|
|
11
|
+
- **Extension CHANGELOG**: Updated `extensions/vscode-ailang/CHANGELOG.md` with v0.2.0 entry
|
|
12
|
+
- **Test results**: 103/103 LSP tests passing, zero regressions
|
|
13
|
+
|
|
14
|
+
## v1.0.0-M56
|
|
15
|
+
|
|
16
|
+
### M56 — External Adoption Closure (Package Naming + Package Manager Commands)
|
|
17
|
+
|
|
18
|
+
- **Snake-case package naming**: Resolved naming deadlock — `manifest.py` now accepts `^[a-z][a-z0-9_]*$` (snake_case). Kebab-case accepted with deprecation warning for backward compatibility
|
|
19
|
+
- **Resolver normalization**: `compiler/compilation/resolution.py` tries both kebab-to-underscore and underscore-to-kebab variants when resolving package directories in `lib/`
|
|
20
|
+
- **`ail new` generates `ail.toml`**: Previously only created `main.ail` + README; now creates `ail.toml` and `ail.lock` with snake_case-normalized package name
|
|
21
|
+
- **`ail add`**: Implemented in `tools/ail_package_manager/commands.py` — parses `name@version`, `--path`, `--git`/`--tag`/`--branch`; edits `ail.toml` [dependencies] section
|
|
22
|
+
- **`ail remove`**: Removes dependency lines from `ail.toml` by matching `"<name>"` prefix
|
|
23
|
+
- **`ail update`**: Delegates to `tools.ail_package_manager.installer.install()` for re-resolution
|
|
24
|
+
- **`ail list`**: Reads `ail.toml` dependencies and `lib/` directory to show install status
|
|
25
|
+
- **CLI wiring**: All four commands added to `compiler/cli/main.py` dispatch table, help text, and `tools/ail_package_manager/__main__.py` argparse
|
|
26
|
+
- **Documentation**: `docs/PACKAGE_NAMING_POLICY.md`, `docs/QUICKSTART.md`, `docs/PACKAGES.md`, `docs/research/M56_EXTERNAL_ADOPTION_CLOSURE.md`
|
|
27
|
+
- **Test results**: 32 new tests (19 naming + 13 commands), all passing. Total: 176/176 tests across LSP + naming + commands + CLI
|
|
28
|
+
|
|
29
|
+
## 0.10.0
|
|
30
|
+
|
|
31
|
+
### DX-015 — Repository Rename Tool (`ail rename`)
|
|
32
|
+
|
|
33
|
+
- **`ail rename old_name new_name`**: Repository-wide identifier rename with semantic awareness
|
|
34
|
+
- **Symbol graph scanning**: Parses all `.ail` files via the compiler pipeline to find function declarations, function calls, variable declarations, variable references, parameters, and import path segments matching the old name
|
|
35
|
+
- **`--dry-run`**: Preview changes without modifying files
|
|
36
|
+
- **`--diff`**: Show unified diff of all changes
|
|
37
|
+
- **`--strings`**: Also rename matching string literal values (e.g., map keys)
|
|
38
|
+
- **`--no-verify`**: Skip compiler verification after rename
|
|
39
|
+
- **Atomic file rewriting**: Changes applied from end to start to preserve offsets; temporary `.rename.tmp` file used per file
|
|
40
|
+
- **Rollback bundle**: Every rename creates `.ail/rename/<timestamp>/` with a `manifest.json` and `.orig` backups of every modified file; on failure, all files are automatically restored
|
|
41
|
+
- **Compiler verification**: After successful rename, `ail build` runs on the entry point to detect any compilation errors
|
|
42
|
+
- **Safe identifier validation**: `new_name` must pass `str.isidentifier()` to prevent invalid identifiers
|
|
43
|
+
- **Implementation**: `compiler/rename.py` — ~260 LOC, no modifications to compiler pipeline, parser, or runtime
|
|
44
|
+
|
|
45
|
+
### DX-016 — Watch Mode (`ail watch`)
|
|
46
|
+
|
|
47
|
+
- **`ail watch [<entry>]`**: Automatic incremental recompilation on file changes
|
|
48
|
+
- **Filesystem watcher**: Uses `watchdog` library for cross-platform file monitoring (Windows `ReadDirectoryChangesW`, macOS `FSEvents`, Linux `inotify`)
|
|
49
|
+
- **`--poll`**: Polling-mode fallback for network filesystems, Docker, WSL
|
|
50
|
+
- **`--json`**: Machine-readable JSON output for AI tooling integration
|
|
51
|
+
- **`--no-initial`**: Skip the initial full build on startup
|
|
52
|
+
- **Incremental compilation**: `CompilationSession.incremental_recompile()` — on file change, only the changed module and its transitive dependents are re-parsed, re-analyzed, and recompiled. Unchanged modules use their existing ASTs
|
|
53
|
+
- **Dependency invalidation**: `get_transitive_dependents()` computes the full affected set via BFS on the import graph
|
|
54
|
+
- **Cross-module semantic reanalysis**: Only affected modules are deep-analyzed; cross-module export registration for all modules is fast (top-level names only)
|
|
55
|
+
- **SHA-256 change detection**: `FileCache` stores per-file hashes; events that don't change content (editor atomic-save artifacts) are filtered out
|
|
56
|
+
- **Debounce (200ms)**: Threading.Timer-based debounce prevents redundant compiles during AI burst edits
|
|
57
|
+
- **Polling fallback**: Configurable `--poll-interval` (default 500ms), runs in background thread
|
|
58
|
+
- **Implementation**: `compiler/watch.py` — ~370 LOC; `CompilationSession` extended with 6 incremental methods
|
|
59
|
+
|
|
60
|
+
### Test Results
|
|
61
|
+
|
|
62
|
+
- **251 total tests** (220 existing + 31 new), all passing
|
|
63
|
+
- DX-015 (ail rename): 19 tests — scan, change computation, apply, rollback, dry-run, diff, string scanning, import scanning, verification
|
|
64
|
+
- DX-016 (ail watch): 12 tests — file hash, cache, incremental compiler initial build, incremental recompile after change, cache update
|
|
65
|
+
- Zero regressions: all existing CLI, session, lexer, parser, AST, IR, semantic, runtime, type-checker tests pass
|
|
66
|
+
|
|
67
|
+
## 0.8.0
|
|
68
|
+
|
|
69
|
+
### DX-006 — AILang Dependency Ordering Assistant (`ail order`)
|
|
70
|
+
|
|
71
|
+
- **Tool implementation**: `tools/ail_order/` — analyzes .ail files for dependency ordering issues
|
|
72
|
+
- **Function discovery**: `discovery.py` extracts function names, calls, and line numbers from source files
|
|
73
|
+
- **Graph analysis**: `graph.py` computes topological levels and detects forward references/cycles
|
|
74
|
+
- **Automatic fix mode**: `fixer.py` reorders functions while preserving comments and formatting
|
|
75
|
+
- **Report generation**: `reporter.py` produces Markdown and JSON reports for CI/LSP integration
|
|
76
|
+
- **CLI integration**: `ail order` command added to compiler CLI with `--json`, `--fix`, `--quiet`, `--stdout` flags
|
|
77
|
+
- **Detection capabilities**:
|
|
78
|
+
- Forward reference violations (function called before definition)
|
|
79
|
+
- Circular function dependencies
|
|
80
|
+
- Unreachable functions (not reachable from main)
|
|
81
|
+
- Duplicate function declarations
|
|
82
|
+
- **Project analysis**: Full directory analysis with cross-file insights and report generation
|
|
83
|
+
- **12 acceptance tests**, 8 regression tests, 8 AI validation tests — all passing
|
|
84
|
+
|
|
85
|
+
## 0.4.0
|
|
86
|
+
|
|
87
|
+
### DX-007 — AILang Language Server
|
|
88
|
+
|
|
89
|
+
- **Architecture document**: `docs/architecture/LSP_ARCHITECTURE.md` — JSON-RPC, workspace model, document lifecycle, diagnostics pipeline, feature modules, performance goals, testing strategy
|
|
90
|
+
- **Shared AST utilities**: New `compiler/lsp/utils.py` consolidating 5× duplicated helpers (`walk_ast`, `find_node_at_offset`, `position_to_offset`, `node_range`, `find_references`, `find_enclosing_call`, `callee_name`, `member_access_name`, `find_definition_target`) into a single source of truth
|
|
91
|
+
- **Code duplication eliminated**: `definition.py`, `hover.py`, `references.py`, `rename.py`, `signature_help.py` all refactored to import from `utils.py` — 300+ lines of duplicated code removed
|
|
92
|
+
- **Workspace Symbol Search**: `workspace/symbol` implemented — cross-file symbol search with case-insensitive query matching across functions, variables, and imports
|
|
93
|
+
- **Code Actions foundation**: `textDocument/codeAction` — quick fix scaffolding for import errors, undefined stdlib references, and unused variable warnings
|
|
94
|
+
- **Server capabilities extended**: `workspaceSymbolProvider: true` and `codeActionProvider: true` added to initialize response
|
|
95
|
+
- **103 tests**, all passing (up from 99) — 4 new tests for workspace symbols and code actions
|
|
96
|
+
|
|
97
|
+
## 0.5.0
|
|
98
|
+
|
|
99
|
+
### DX-008 — AILang Formatter
|
|
100
|
+
|
|
101
|
+
- **Architecture document**: `docs/architecture/FORMATTER_ARCHITECTURE.md` — canonical style, CLI flags, token-based formatting, comment handling, idempotency requirement, acceptance criteria
|
|
102
|
+
- **`ail fmt` CLI**: `--diff` (show changes), `--quiet` (errors only), directory-wide formatting, single-file formatting, stdin mode
|
|
103
|
+
- **Token-based formatting**: All 17 token types handled with canonical style rules (4-space indent, space around operators/`:`, newline after `{`, same-line `} else {`)
|
|
104
|
+
- **String-aware comment handling**: Inline comments inside string literals preserved (not misidentified as comments)
|
|
105
|
+
- **Lexer compatibility**: Reuses existing lexer with zero modifications
|
|
106
|
+
- **Repo-wide idempotency**: `--check` mode verifies formatting on all `.ail` files; verified idempotent across the entire repository
|
|
107
|
+
- **82 tests**: 71 formatter tests + 11 CLI tests, all passing
|
|
108
|
+
- **Zero semantic changes**: no modifications to compiler, runtime, or language specification
|
|
109
|
+
|
|
110
|
+
### M19 — Documentation Canonicalization
|
|
111
|
+
|
|
112
|
+
- **Consolidated PROJECT_VISION.md + PROJECT_PHILOSOPHY.md** into `VISION_AND_DIFFERENTIATION.md`
|
|
113
|
+
- **Expanded PROJECT_CONSTITUTION.md** with Documentation Rule (§3) and Canonical First Rule (§4)
|
|
114
|
+
- **Created `PRODUCT_ROADMAP.md`** at repository root as the single canonical roadmap
|
|
115
|
+
- **Moved benchmark methodology** from whitepaper section into `ENGINEERING_BENCHMARK_PLAN.md`
|
|
116
|
+
- **Eliminated 7 obsolete/archive files** — ROADMAP.md, PRODUCT_ROADMAP.md (old), etc.
|
|
117
|
+
- **Canonical First Rule** added to AGENTS.md workflow and Constitution
|
|
118
|
+
- **Cross-references updated** across all affected documents
|
|
119
|
+
|
|
120
|
+
### Quality Gates
|
|
121
|
+
|
|
122
|
+
- **854 tests**, all passing (772 existing + 82 new formatter)
|
|
123
|
+
- DX-008 (ail fmt): PASS — 82 tests
|
|
124
|
+
- Documentation canonicalization: PASS — no broken links
|
|
125
|
+
|
|
126
|
+
## 0.7.0
|
|
127
|
+
|
|
128
|
+
### Engineering Optimization Program (Evidence-Driven Stdlib Evolution)
|
|
129
|
+
|
|
130
|
+
- **Evidence Analysis**: Reviewed B2–B7 benchmark data. Identified stdlib gaps as #1 friction source (42% of B2 errors).
|
|
131
|
+
- **`file.listdir(path)`**: New stdlib API returning sorted directory entries. Python `os.listdir()` backend. Available via `import file; file.listdir(path)`.
|
|
132
|
+
- **`list.sum(values)`**: New stdlib API returning sum of numeric list items. 3+ independent app pattern threshold met (STDLIB_GAP_ANALYSIS.md).
|
|
133
|
+
- **`list.find_by_key(values, key, value)`**: New stdlib API for finding first map in list with matching property. 3+ app threshold met.
|
|
134
|
+
- **`convert.to_number(value)`**: Fixed — was a no-op identity function. Now correctly converts string/int to integer (same semantics as `to_int`).
|
|
135
|
+
- **`docs/HYPOTHESIS_STATUS.md`**: Created — tracks all 7 engineering hypotheses with evidence status (3 Supported, 1 Partially Supported, 2 Inconclusive, 1 Not Yet Tested).
|
|
136
|
+
- **AGENTS.md updated**: Removed `convert.to_number` no-op pitfall. Updated missing stdlib list to reflect available APIs.
|
|
137
|
+
- **STDLIB_REFERENCE.md updated**: Added documentation for all 4 new/changed APIs. Updated "Known Missing Operations" section.
|
|
138
|
+
|
|
139
|
+
### Measured Improvement
|
|
140
|
+
|
|
141
|
+
| Metric | Before (v0.6.x) | After (v0.7.0) | Improvement |
|
|
142
|
+
|--------|:-:|:-:|:-:|
|
|
143
|
+
| B2 L2 (CSV pipeline) | 3 iterations | 1 iteration | **67%** |
|
|
144
|
+
| B2 total | 7 iterations | 5 iterations | **29%** |
|
|
145
|
+
| B2–B6 total | 18 iterations | 16 iterations | **11%** |
|
|
146
|
+
| AILang vs Python ratio | 1.38× | 1.23× | **11% closer** |
|
|
147
|
+
|
|
148
|
+
### Quality Gates
|
|
149
|
+
|
|
150
|
+
- All new APIs verified: `file.listdir`, `list.sum`, `list.find_by_key`, `convert.to_number` — build+run confirmed
|
|
151
|
+
- Existing test suite: 18 stdlib tests pass, zero regressions
|
|
152
|
+
- ENGINEERING_EVIDENCE_REPORT.md: updated with before/after comparison
|
|
153
|
+
- HYPOTHESIS_STATUS.md: created with evidence references
|
|
154
|
+
- All P0 APIs implemented (no scope changes)
|
|
155
|
+
|
|
156
|
+
## 0.6.2
|
|
157
|
+
|
|
158
|
+
### B2–B7 — Engineering Benchmark Execution
|
|
159
|
+
|
|
160
|
+
- **B2 Feature Implementation**: 3 levels (sum_even, CSV pipeline, file diff) in AILang + Python — AILang 2.3× more iterations, all compile-time errors
|
|
161
|
+
- **B3 Bug Fix**: 5 bugs (off-by-one, undefined-id, map guard, comparison, infinite recursion) — AILang 1.2× more iterations, 80% first-fix compile rate
|
|
162
|
+
- **B4 Refactoring**: Rename + extract function — parity (1.0×), zero regressions in both languages
|
|
163
|
+
- **B5 Upgrade**: Signature change + CLI conversion — parity (1.0×), zero regressions
|
|
164
|
+
- **B6 Maintenance**: Multi-step feature addition with edge-case handling — parity (1.0×)
|
|
165
|
+
- **B7 AI Context**: Structured guide (AGENTS.md + Playbook) saves 3× iterations (1 vs 3 compile-fix cycles)
|
|
166
|
+
- **15 benchmark artifacts** created: 5 bug-fix files, naive-without-guide comparison, 2 task specs, 10 code modifications
|
|
167
|
+
- **Key stdlib gaps identified**: no `!=` operator, no `listdir`, `convert.to_number` is no-op
|
|
168
|
+
- **Evidence published**: `ENGINEERING_EVIDENCE_REPORT.md` with method, datasets, raw results, summary table, and cost model
|
|
169
|
+
|
|
170
|
+
### Quality Gates
|
|
171
|
+
|
|
172
|
+
- **ENGINEERING_EVIDENCE_REPORT.md**: PASS — all 6 benchmarks documented with measurements
|
|
173
|
+
- B2–B7 artifacts: PASS — all build+run verified
|
|
174
|
+
|
|
175
|
+
## 0.6.1
|
|
176
|
+
|
|
177
|
+
### B1.1 — AI Provider Integration & Calibration
|
|
178
|
+
|
|
179
|
+
- **Provider abstraction**: `benchmarks/providers/base.py` — `AIProvider` abstract base class with `complete(prompt)`, `count_tokens(text)`, and `ProviderResult` data model capturing all measurements (request, prompt, response, timing, interaction, cost)
|
|
180
|
+
- **4 provider implementations**:
|
|
181
|
+
- `OpenAIProvider` — GPT-4o, GPT-4, GPT-3.5 (requires `openai` + `tiktoken`)
|
|
182
|
+
- `AnthropicProvider` — Claude 3, Claude 3.5 (requires `anthropic`)
|
|
183
|
+
- `GoogleProvider` — Gemini 1.5, Gemini 2.0 (requires `google-generativeai`)
|
|
184
|
+
- `LocalProvider` — Ollama, vLLM, llama.cpp via OpenAI-compatible API (requires `openai`)
|
|
185
|
+
- **Provider factory**: `create_provider(name, model, ...)` with registry and auto-detection from environment variables
|
|
186
|
+
- **Calibration module**: `benchmarks/calibration/` — runs identical prompts (short_response, code_understanding, token_counting) across all configured providers to validate measurement infrastructure. Generates immutable calibration reports.
|
|
187
|
+
- **B1 extended**: Three priority modes for token measurement — (1) AIProvider for accurate tokenizer + comprehension prompt, (2) manual `ai_results` dict, (3) approximate 4-char heuristic. B1 version bumped to 0.2.0.
|
|
188
|
+
- **CLI**: `python -m benchmarks calibrate` and `python -m benchmarks list-providers`
|
|
189
|
+
- **Optional dependencies**: Added `[openai]`, `[anthropic]`, `[google]`, `[local]`, `[all]` extras to pyproject.toml
|
|
190
|
+
- **37 new tests**: ProviderResult serialization, interface contract, factory, mocked provider implementations (all 4), token estimation, cost estimation, B1 provider integration, calibration execution, schema stability
|
|
191
|
+
- **81 tests total** in benchmarks/tests/ (44 existing + 37 new)
|
|
192
|
+
|
|
193
|
+
### Quality Gates
|
|
194
|
+
|
|
195
|
+
- **935 tests**, all passing (898 existing + 37 new provider/calibration)
|
|
196
|
+
- Provider interface: PASS — all ABC methods implemented, serialization roundtrip verified
|
|
197
|
+
- Calibration: PASS — runs against mock providers, reports errors correctly, serializable output
|
|
198
|
+
|
|
199
|
+
## 0.6.0
|
|
200
|
+
|
|
201
|
+
### B1 — Engineering Benchmark Framework
|
|
202
|
+
|
|
203
|
+
- **Generic measurement framework**: `benchmarks/framework/` — runner, metrics, environ, reporting, dataset modules — reusable by B2-B7
|
|
204
|
+
- **3 canonical datasets**: small (compiler only), medium (stdlib + docs), current_repo (full repository)
|
|
205
|
+
- **Dataset scanning**: Deterministic metadata generation with SHA-256 content hash and repeatability hash
|
|
206
|
+
- **Repository metrics**: Full structural analysis (files, LOC, function count, variable count, import count, dependency depth, symbol density, comment ratio, nesting depth, cyclomatic complexity)
|
|
207
|
+
- **AI comprehension metrics**: Token estimate, context window utilization, comprehension accuracy (placeholder for future AI integration)
|
|
208
|
+
- **Immutable historical results**: Each run stored in `benchmarks/results/<benchmark>/run_<timestamp>/` with measurements, environment snapshot, and human-readable report
|
|
209
|
+
- **Summary aggregation**: `benchmarks/results/summary.json` with all runs across all datasets
|
|
210
|
+
- **CLI**: `python -m benchmarks {setup,b1,list,test}`
|
|
211
|
+
- **44 tests**: 4 runner, 8 dataset, 13 metrics, 9 reporting, 10 B1 integration — all passing
|
|
212
|
+
- **Run IDs**: Timestamp-based, sortable, unique
|
|
213
|
+
- **.gitignore**: `benchmarks/results/` excluded (runtime artifacts); datasets remain version-controlled
|
|
214
|
+
|
|
215
|
+
### Quality Gates
|
|
216
|
+
|
|
217
|
+
- **898 tests**, all passing (854 existing + 44 new B1 framework)
|
|
218
|
+
- B1 smoke test: PASS against small, medium, current_repo datasets
|
|
219
|
+
- All 3 datasets scan, validate, and produce metrics
|
|
220
|
+
|
|
221
|
+
## 0.3.1
|
|
222
|
+
|
|
223
|
+
### DX-006 — AILang Package Manager
|
|
224
|
+
|
|
225
|
+
- **Manifest parser**: `ail.toml` parsing via `tomllib` with full validation (package name, semver, dependency format)
|
|
226
|
+
- **`ail init`**: Project initialization — creates `ail.toml`, `main.ail` stub, and `ail.lock`
|
|
227
|
+
- **Local package support**: `path=` dependencies resolved, copied to `lib/<name>/`, full transitive dependency support
|
|
228
|
+
- **Git package support**: `git=` dependencies shallow-cloned, tag/branch/rev checkout, transitive support
|
|
229
|
+
- **Dependency resolver**: Recursive resolution with topological sort and circular dependency detection
|
|
230
|
+
- **Lock file**: `ail.lock` with TOML format, versioned schema, `input_hash` staleness detection, fast replay
|
|
231
|
+
- **Checksum verification**: SHA-256 integrity hashing for all installed packages
|
|
232
|
+
- **Installation engine**: Full orchestration with `--no-lock`, `--offline`, `--frozen-lockfile` flags
|
|
233
|
+
- **Exit codes**: Per TOOLING_ARCHITECTURE.md conventions (0=success, 1=failure, 3=internal error)
|
|
234
|
+
- **Acceptance tests**: 8/8 tests passing covering init, parse, install, and lock file generation
|
|
235
|
+
- **Documentation**: PACKAGE_MANAGER_DESIGN.md approved, tool README created
|
|
236
|
+
|
|
237
|
+
### M16 — Documentation Architecture Cleanup
|
|
238
|
+
|
|
239
|
+
- **ADR collision resolved**: Separate ADR files renumbered ADR-001/002/003 → ADR-010/011/012
|
|
240
|
+
- **Status duplication eliminated**: PROJECT_PHASE.md, ROADMAP.md, CURRENT_MILESTONE.md archived; DEVELOPMENT_STATUS.md now canonical
|
|
241
|
+
- **AI guidance consolidated**: MASTER_ENGINEERING_PROMPT.md, FOR_FUTURE_AI.md archived; AGENTS.md canonical
|
|
242
|
+
- **v0.1.0 sprint reports archived**: 21 files moved to `docs/archive/v0.1.0/`
|
|
243
|
+
- **`generated/` added to `.gitignore`**: 9 tracked generated files removed from git tracking
|
|
244
|
+
- **Documentation Ownership Matrix created**: 15 document types with canonical owners
|
|
245
|
+
- **Cross-references updated**: RELEASE_PROCESS.md, AI_MODEL_GUIDE.md, PROJECT_MEMORY.md
|
|
246
|
+
|
|
247
|
+
## 0.1.0
|
|
248
|
+
|
|
249
|
+
### Standard Library v1.0
|
|
250
|
+
|
|
251
|
+
- **json** — `parse(text)`, `stringify(value)` using Python `json` backend
|
|
252
|
+
- **csv** — `parse(text)`, `parse_header(text)`, `stringify(rows)` using Python `csv` backend
|
|
253
|
+
- **time** — `now()`, `timestamp()`, `sleep(ms)`, `format(ts)`
|
|
254
|
+
- **environment** — `get(name)`, `cwd()`, `args()`
|
|
255
|
+
- **random** — `int(min, max)`, `float()`, `choice(collection)`
|
|
256
|
+
- **file** — `exists(path)`, `read(path)`, `write(path, content)`, `append(path, content)`, `remove(path)`
|
|
257
|
+
- **path** — `join(a, b)`, `basename(path)`, `dirname(path)`, `extension(path)`, `normalize(path)`
|
|
258
|
+
- **collections** — `array`, `list`, `map`, `set` with `new`, `get`, `set`, `add`, `contains`, `remove`, `clear`, `keys`, `len`
|
|
259
|
+
- **string** — `concat`, `equals`, `uppercase`, `lowercase`, `length`, `contains`, `starts_with`, `ends_with`, `trim`
|
|
260
|
+
- **math** — `add`, `sub`, `mul`, `div`, `abs`, `min`, `max`
|
|
261
|
+
- **io** — `write`, `writeln`, `println`
|
|
262
|
+
- **convert** — `to_string`, `to_int`, `to_bool`, `to_number`
|
|
263
|
+
- **system** — `exit`
|
|
264
|
+
|
|
265
|
+
### Performance, Memory & AI Validation (Phase 5B)
|
|
266
|
+
|
|
267
|
+
- **Stress tests**: 5000 LOC, 10000 LOC, 50 modules, 100 modules
|
|
268
|
+
- **Compile-time benchmarks**: 100/500/1000/5000 LOC with <60s thresholds
|
|
269
|
+
- **Memory benchmarks**: LOC-based with <500MB threshold at 5000 LOC
|
|
270
|
+
- **Determinism**: IR SHA-256 hash verification across 3 compiles
|
|
271
|
+
- **AI validation**: 23 programs generated from public docs, 100% first-pass success
|
|
272
|
+
- **Defect fix**: `convert.to_string` was a no-op; added `__native_to_string` builtin
|
|
273
|
+
|
|
274
|
+
### Developer Ecosystem Foundation (Phase 6)
|
|
275
|
+
|
|
276
|
+
- **10 documentation guides** created: Installation, Getting Started, Language Tour, Stdlib Reference, Compiler Architecture, Contributor Guide, Testing Guide, Release Process, Roadmap, Documentation Index
|
|
277
|
+
- **README rewritten** with badges, quick start, full stdlib table, project status
|
|
278
|
+
- **CURRENT_MILESTONE.md** updated to reflect Phase 6 completion
|
|
279
|
+
|
|
280
|
+
### Quality Gates
|
|
281
|
+
|
|
282
|
+
- 360 tests, all passing
|
|
283
|
+
- black, ruff, mypy all clean
|
|
284
|
+
|
|
285
|
+
## 0.1.1
|
|
286
|
+
|
|
287
|
+
### Documentation Consolidation (Phase 7)
|
|
288
|
+
|
|
289
|
+
- **Canonical specification**: Created `LANGUAGE_SPEC.md` at repository root — single source of truth (860 lines, 16 sections)
|
|
290
|
+
- **Fixed LANGUAGE_TOUR.md**: Corrected `else` keyword documentation, removed false "no reassignment" claim, removed wildcard import docs, removed `import "string"` path syntax, updated grammar section to reference canonical spec
|
|
291
|
+
- **Archived specifications**: Moved all 9 obsolete design specification files to `archived/specifications/` with ARCHIVED_README.md
|
|
292
|
+
- **Updated cross-references**: INDEX.md, CONTRIBUTING.md, PHASE_5B_REPORT.md, PHASE_6_REPORT.md, MASTER_ENGINEERING_PROMPT.md all now point to canonical spec
|
|
293
|
+
- **CLI improvements**: Fixed PHASE_6_REPORT.md to reference `ail` CLI instead of `python -m compiler`
|
|
294
|
+
- **All quality gates pass**: 374 tests (up from 360), black/ruff/mypy clean
|
|
295
|
+
|
|
296
|
+
### Validation & Ecosystem Audit (Phase 8)
|
|
297
|
+
|
|
298
|
+
- **Documentation validation**: 144 code examples tested across 4 documents; all compile and run correctly
|
|
299
|
+
- **Standard Library validation**: All 16 modules tested with edge cases and invalid inputs
|
|
300
|
+
- **Application validation**: 5/5 large applications compile and execute (Expense Tracker, Inventory, Contact Manager, Banking Ledger, Student Management)
|
|
301
|
+
- **Stress validation**: 28/28 tests pass (large LOC, deep nesting, multi-module, determinism)
|
|
302
|
+
- **Benchmark validation**: 25/25 tests pass (determinism, compile time, memory, IR hash)
|
|
303
|
+
- **AI validation**: 23/23 AI-generated programs compile on first pass (100%)
|
|
304
|
+
- **Defect fixes**: Fixed AssertionError crash in AST builder, CLI crash on malformed input, invalid list literal in STDLIB_REFERENCE.md; corrected false float literal and map literal claims in LANGUAGE_SPEC.md
|
|
305
|
+
- **408 tests** (up from 374)
|
|
306
|
+
|
|
307
|
+
### VS Code Extension (Phase 9)
|
|
308
|
+
|
|
309
|
+
- **Extension structure**: `extensions/vscode-ailang/` with `package.json`, TextMate grammar, snippets, language configuration
|
|
310
|
+
- **Syntax highlighting**: 15+ token categories (keywords, builtins, stdlib modules, strings, numbers, operators, comments, functions)
|
|
311
|
+
- **Language configuration**: Bracket matching, auto-closing pairs, auto-indentation, folding markers, comment toggling
|
|
312
|
+
- **9 snippets**: `main`, `fn`, `if`, `ifelse`, `import`, `return`, `recur`, `let`, `comment`
|
|
313
|
+
- **Validation**: 12 test `.ail` files covering all syntax features
|
|
314
|
+
|
|
315
|
+
### Official Formatter (Phase 10)
|
|
316
|
+
|
|
317
|
+
- **`ail fmt` command**: Format files in-place, `--check` for CI, `--stdin` for pipelines
|
|
318
|
+
- **Single canonical style**: 4-space indentation, same-line braces, spaces around operators, preserved comments
|
|
319
|
+
- **Deterministic and idempotent**: Formatting is stable across multiple runs
|
|
320
|
+
- **27 formatter tests** + 7 CLI tests
|
|
321
|
+
- **Operator precedence parenthesization**: Automatic for correct precedence rendering
|
|
322
|
+
|
|
323
|
+
### Dogfooding & Real-World Validation (Phase 11)
|
|
324
|
+
|
|
325
|
+
- **56 AILang applications**: 27 in `apps/`, 29 in `phase11/` — all compile and run
|
|
326
|
+
- **Stdlib addition**: `string.substring(value, start, end)` added
|
|
327
|
+
- **`env_args` fix**: Now returns user args only (strips CLI plumbing)
|
|
328
|
+
- **23 phase11 apps fixed**: Arg index bugs corrected for new `env_args` contract
|
|
329
|
+
- **6 new apps built**: find, payroll, library_mgmt, a_star, expr_eval, markdown_parser
|
|
330
|
+
- **Linter de-chaining**: Fixed chained member-access-on-call patterns in linter
|
|
331
|
+
- **Language freeze declared**: v0.1.x specification frozen — no new keywords, grammar, or syntax changes
|
|
332
|
+
|
|
333
|
+
### Governance & Philosophy (Phase 11/12)
|
|
334
|
+
|
|
335
|
+
- **`GOVERNANCE.md`**: Formal proposal process, evidence bars, review process, versioning, backward compatibility, rejected-forever list, freeze policy
|
|
336
|
+
- **`LANGUAGE_EVOLUTION.md`**: Permanent record of all 28 feature requests with dispositions
|
|
337
|
+
- **`PROJECT_CONSTITUTION.md`**: Immutable rules for development
|
|
338
|
+
- **`VISION_AND_DIFFERENTIATION.md`**: Evidence-driven vision, engineering hypothesis, differentiation strategy
|
|
339
|
+
|
|
340
|
+
### Public Release Preparation (Phase 12)
|
|
341
|
+
|
|
342
|
+
- **Repository audit**: Removed 9 obsolete/temporary artifacts
|
|
343
|
+
- **GitHub readiness**: LICENSE (MIT), SECURITY.md, CODE_OF_CONDUCT.md, SUPPORT.md, issue templates, PR template
|
|
344
|
+
- **`RELEASE_CHECKLIST.md`**: Formal release checklist for v0.1.1
|
|
345
|
+
- **Documentation audit**: All docs reviewed for broken links, stale examples, version consistency
|
|
346
|
+
- **Example validation**: All examples build, run, and produce documented output
|
|
347
|
+
- **Installation validation**: Verified from clean environment on Windows
|
|
348
|
+
- **VS Code extension**: Verified installation, highlighting, snippets
|
|
349
|
+
- **CI/CD**: All workflows verified
|
|
350
|
+
|
|
351
|
+
### RC1 Fixes
|
|
352
|
+
|
|
353
|
+
- **`system.exit()` implemented**: Added `system_exit()` native builtin that calls Python's `sys.exit(code)` to properly terminate the process
|
|
354
|
+
- **`string.substring` documented**: Added to STDLIB_REFERENCE.md and stdlib tables in README.md and LANGUAGE_SPEC.md
|
|
355
|
+
- **Documentation synchronized**: Updated LANGUAGE_TOUR.md to include string module examples and substring workaround
|
|
356
|
+
- **Error code constants**: Centralized PAR001, PAR002, PAR003, LEX001, LEX002, LEX003 constants in diagnostics.py
|
|
357
|
+
- **Test count corrected**: Updated README.md to show 507 passing tests
|
|
358
|
+
|
|
359
|
+
## 0.3.0
|
|
360
|
+
|
|
361
|
+
### Developer Experience
|
|
362
|
+
|
|
363
|
+
- **DX-004 — Benchmark Runner** completed and accepted (auto-discovery, suite modes, configurable repetition, baseline save/compare, regression detection, CI-friendly exit codes, fault-tolerant execution)
|
|
364
|
+
- **DX-005 — Test Generator** completed and accepted (auto-discovery, coverage analysis, three-stage pipeline, intermediate TestCase model, pure Python generators, `--force`/`--dry-run`/`--app` flags, `tests/generated/` separation, dual MD+JSON reports)
|
|
365
|
+
- **tools/common/ — extensions**: Added `hashing.py` (SHA-256 file hashing), `discover_apps()`, `list_py_files()`; `run_ail_build()`/`run_ail_run()` already present
|
|
366
|
+
|
|
367
|
+
### Quality Gates
|
|
368
|
+
|
|
369
|
+
- **772 tests**, all passing (up from 658)
|
|
370
|
+
- DX-004 (ail benchmark): PASS — 11 acceptance + 4 regression + 4 AI validation
|
|
371
|
+
- DX-005 (ail testgen): PASS — 9 acceptance + 4 regression + 4 AI validation
|
|
372
|
+
|
|
373
|
+
## 0.2.1
|
|
374
|
+
|
|
375
|
+
### Static Analyzer Performance Optimization
|
|
376
|
+
|
|
377
|
+
- **Replaced 4-pass scan** with single `scan_lines` pass, eliminating redundant function-end detection
|
|
378
|
+
- **Replaced character-by-character** `scan_line_calls_inner` with `collect_calls_inner` using `find_substring` builtin
|
|
379
|
+
- **Replaced `count_calls_file`** (character-by-character scan of all lines) with `build_calls_from_cache` (derives call statistics from per-function cache)
|
|
380
|
+
- **Result:** 3× speedup on hotel_management (252s → 84s), 3× on self-analysis (71s → 24s); self-analysis and large-file analysis now complete (previously never finished)
|
|
381
|
+
|
|
382
|
+
### Standard Library Additions (ADR-003)
|
|
383
|
+
|
|
384
|
+
- **`string.find(value, needle)`** — substring search, returns position index or -1
|
|
385
|
+
- **`string.find_from(value, needle, start_pos)`** — substring search with start offset
|
|
386
|
+
- **`string.split(value, delim)`** — split string into list by delimiter
|
|
387
|
+
- Evidence: 8+ independent reimplementations across the app ecosystem satisfied ADR-008 threshold
|
|
388
|
+
|
|
389
|
+
### Documentation
|
|
390
|
+
|
|
391
|
+
- **ADR-003** — Decision record for `string.find`/`string.split` stdlib additions
|
|
392
|
+
- **v0.2.1 Release Validation Report** — formal checkpoint with 658 tests, benchmark validation, DX acceptance, before/after performance
|
|
393
|
+
- **PROJECT_PHASE.md** — documents Platform & Developer Experience Engineering phase
|
|
394
|
+
- **PROJECT_CONTEXT.md** regenerated — reflects new stdlib APIs, updated version and test counts
|
|
395
|
+
|
|
396
|
+
### Quality Gates
|
|
397
|
+
|
|
398
|
+
- **658 tests**, all passing (up from 624)
|
|
399
|
+
- DX-001 (ail context): PASS — 8 acceptance tests, AI validation
|
|
400
|
+
- DX-002 (ail doctor): PASS — 9 acceptance tests
|
|
401
|
+
- DX-003 (ail static_analyzer): PASS — 8/8 acceptance tests (directory analysis timeout resolved with configurable `--timeout`)
|
|
402
|
+
|
|
403
|
+
## 0.2.0
|
|
404
|
+
|
|
405
|
+
### DX Tool #001 — ail context Developer Experience Tool
|
|
406
|
+
|
|
407
|
+
- **Standalone tool**: `tools/ail_context/` generates `generated/PROJECT_CONTEXT.md` for AI consumption
|
|
408
|
+
- **Single-file context**: All project knowledge consolidated into one LLM-optimized document (~6.5KB)
|
|
409
|
+
- **15 sections**: Project overview, philosophy, architecture, constraints, milestone, ADRs, stdlib, benchmarks, testing, frozen components
|
|
410
|
+
- **Acceptance tested**: 9 functional tests, 6 performance tests, 6 content validation tests, 3 AI validation tests
|
|
411
|
+
- **Zero changes**: No modifications to compiler, runtime, or language specification
|
|
412
|
+
|
|
413
|
+
### Runtime Optimization #001 — Lexical Variable Lookup Cache
|
|
414
|
+
|
|
415
|
+
- **`Environment.resolve()`** now caches binding locations per-environment in `_resolve_cache: dict[str, Environment]`, eliminating recursive chain walks on repeated variable lookups
|
|
416
|
+
- **~6× speedup** on the static analyzer benchmark (373s → 19.5s, the primary bottleneck workload identified by Python profiling)
|
|
417
|
+
- **52–64% cache hit rate** across all 5 benchmark apps (dice_roller, hangman_game, inventory_mgmt, kanban, static_analyzer)
|
|
418
|
+
- **Negative caching removed**: initial design cached `NameError` sentinels, but `assign` can create new bindings in ancestor environments, making negative entries stale. Only positive results are cached
|
|
419
|
+
- **`get_cache_info()` introspection** added to `Environment` and `Runtime` for testing
|
|
420
|
+
- **`_CacheStats` instrumentation** added to `Environment` (hits/misses/negative_hits counters) — no semantic effect, used exclusively for profiling
|
|
421
|
+
- **102 regression tests** in `tests/test_scope_cache.py` covering basic resolution, shadowing, recursion, reassignment, modules, edge cases, cache introspection, stress, and correctness invariants
|
|
422
|
+
- **624 tests total** (522 existing + 102 new), all passing
|
|
423
|
+
- **Memory overhead**: ~11 KB for the static analyzer workload (98 cache entries across 18 environments)
|
|
424
|
+
- **No semantic changes** — all existing AILang programs remain fully compatible
|
|
425
|
+
- **Runtime frozen** after this release. No further optimizations planned until community feedback identifies new bottlenecks
|
|
426
|
+
|
|
427
|
+
## 0.1.2
|
|
428
|
+
|
|
429
|
+
### Compiler QA — Bug Fix Sprint #001
|
|
430
|
+
|
|
431
|
+
- **BUG-001 fixed**: Empty `return;` no longer crashes with `AssertionError` — produces "Return statement requires an expression" diagnostic instead
|
|
432
|
+
- **BUG-002 fixed**: Missing initializer `let x = ;` no longer crashes with `AssertionError` — produces "Variable declaration requires an initializer expression" diagnostic instead
|
|
433
|
+
- **BUG-003 fixed**: Module name resolution for bare identifiers (`map.set` as a value, not just in call position)
|
|
434
|
+
- `_resolve_name` now checks `self._modules` for bare module names before falling through to `NameError`
|
|
435
|
+
- Module functions are now registered in module environments at initialization time
|
|
436
|
+
- **BUG-004 fixed**: Float literal `3.14` no longer produces cryptic "Identifier node missing token" — emits a clear "Float literals are not supported. Use integer division, e.g. 22 / 7" diagnostic at the lexer level (LEX004)
|
|
437
|
+
- **Regression tests added**: `test_ast_rejects_empty_return`, `test_ast_rejects_missing_initializer` in `test_ast_builder.py`; `test_regression_module_function_as_value` in `test_validation.py`; `test_lexer_rejects_float_literal` in `test_lexer.py`
|
|
438
|
+
- **BUG-005 fixed**: Block-level variable shadowing now works — `_execute_block` creates a new `StackFrame` for each block scope, so `let x` inside an `if`/`else` block properly scopes to that block instead of leaking to the enclosing function
|
|
439
|
+
- **BUG-006 fixed**: Deep recursion `count(1000)` no longer crashes — `Runtime.__init__` raises Python's recursion limit from 1000 to 10000 to accommodate AILang function call overhead
|
|
440
|
+
|
|
441
|
+
### Quality Gates
|
|
442
|
+
|
|
443
|
+
- **522 tests**, all passing (up from 521)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 AILang Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|