-
Notifications
You must be signed in to change notification settings - Fork 4
Milestones
Target repo:
-
arx-proposalsorarx
Goal:
- approve the split between IRx runtime/core and Arx stdlib surface.
Issues:
Description: Define the architectural split:
- ASTx as representation only
- IRx as reusable runtime/core substrate
- Arx as user-facing stdlib and higher-level modules
Description: Freeze the first public module surface:
std.iostd.fsstd.processstd.str
And classify each function as:
irx-runtimeirx-ast-helperarx-stdlib
Description:
Choose stable backend/runtime symbol names such as rt_println, rt_read_line, rt_file_read_text, and rt_exit, keeping them generic enough for reuse beyond Arx.
Target repo:
irx
Goal:
- add a tiny reusable runtime layer in IRx for I/O, files, process, and argv support. IRx already lowers ASTx nodes to LLVM IR, produces executables via
clang, and today includes small built-ins likeputcharplusputsdeclarations, so this is the natural next layer. ([GitHub]2)
Issues:
Description: Create the internal package structure for runtime/core support, such as:
irx.runtimeirx.runtime.bindingsirx.runtime.linking
Description: Provide helpers to declare and reuse external runtime symbols in generated LLVM IR.
Description: Teach IRx how to compile/link with a tiny runtime object or library during executable generation.
Description: Implement C-backed runtime functions for:
rt_printrt_printlnrt_eprintrt_eprintlnrt_read_linert_read_char
Description: Implement:
rt_file_read_textrt_file_write_textrt_file_append_textrt_file_exists
Description: Implement:
rt_exitrt_argcrt_argv_get
Description: Allow IRx-generated programs to emit calls to the runtime ABI.
Description: Add end-to-end tests that compile and run tiny ASTx programs using the new runtime surface.
Target repo:
irx
Goal:
- validate the pattern of writing reusable helpers with ASTx nodes inside IRx, then compiling them with IRx. This fits your clarified design and preserves ASTx as representation while letting IRx host portable helper routines. ASTx explicitly positions itself as a language-agnostic AST library and notes integration with IRx for code generation. ([GitHub]1)
Issues:
Description: Create a small internal facility in IRx for defining helper functions/modules with ASTx nodes.
Description: Add one trivial but useful helper as proof of pattern, for example a wrapper routine over a runtime primitive or a tiny pure helper.
Description: Verify those helpers can be generated, compiled, linked, and executed.
Description: Write guidelines for when a helper belongs in:
- C runtime
- direct IR generation
- ASTx-authored helper layer
Target repo:
arx
Goal:
- expose the first user-facing stdlib modules in Arx. Arx is the language/compiler layer and is already the right place to own user-facing imports, module names, and defaults. ([GitHub]3)
Issues:
Description: Create the public module structure:
std.iostd.fsstd.processstd.str
Description: Expose:
printprintlneprinteprintlnread_lineread_char
Description: Expose:
read_textwrite_textappend_textexists
Description: Expose:
exitargcargv_get
Description: Expose:
leneqconcat
Whether these call runtime functions or IRx helper routines can be decided function by function.
Description: Make stdlib modules resolvable from normal Arx programs.
Description: Allow building without the standard library layer for testing, minimal programs, or alternative runtimes.
Description:
Prepare for future selection modes such as auto, bundled, or none.
Target repos:
irxarx
Goal:
- validate the full path from ASTx/IRx runtime to Arx user-facing stdlib.
Issues:
Description:
Minimal ASTx→IRx→executable example using rt_println.
Description:
Example using read_line and println.
Description:
Example using read_text and write_text.
Description:
Example using argc and argv_get.
Description: Run compiled/runtime-backed examples in CI for both IRx and Arx.
Description: Document the split:
- ASTx representation
- IRx runtime/core
- Arx stdlib surface
Target repos:
- mostly
arx, someirx
Goal:
- add the next practical layer once the architecture is stable.
Issues:
Description: Expose:
parse_intparse_floatto_string
Description: Expose:
absminmax
Description: Decide whether array/list semantics are mature enough for collection helpers.
Description: Review helpers added in Arx and migrate any backend-generic logic that could be reused by non-Arx consumers.
I would execute the roadmap in this order:
- ArxEP / architecture freeze
- IRx runtime substrate
- IRx AST-authored helper proof
- Arx stdlib MVP modules
- e2e examples and CI
- post-MVP expansion
That sequence keeps the reuse boundary clean and avoids baking Arx-specific assumptions too early.
Here is the split I would start with.
rt_printrt_printlnrt_eprintrt_eprintlnrt_read_linert_read_charrt_file_read_textrt_file_write_textrt_file_append_textrt_file_existsrt_exitrt_argcrt_argv_get
Candidates only after runtime works:
- simple wrappers
- normalization helpers
- small pure string helpers
- small conversions that do not depend on OS/libc details
std.io.printstd.io.printlnstd.io.eprintstd.io.eprintlnstd.io.read_linestd.io.read_charstd.fs.read_textstd.fs.write_textstd.fs.append_textstd.fs.existsstd.process.exitstd.process.argcstd.process.argv_getstd.str.lenstd.str.eqstd.str.concat
If you want the most practical starting batch, I would open these first:
- ArxEP: define stdlib layering across ASTx, IRx, and Arx
- Define MVP stdlib modules and function inventory
- Define runtime ABI naming convention
- Add runtime module skeleton to IRx
- Add runtime symbol declaration helpers
- Add runtime link integration in IRx build flow
- Add C runtime MVP for console I/O
- Add C runtime MVP for file operations
- Add C runtime MVP for process and argv
- Add Arx stdlib module layout
I would put:
- the architecture/design issue in
arx-proposalsif you want it formalized as an ArxEP, since that repo exists exactly for enhancement proposals and process/design discussions. ([GitHub]4) - implementation issues in
irxandarx - no ASTx issues unless you later discover a missing AST node needed to represent helper routines
I would avoid calling the IRx layer “IRx stdlib.” I would call it:
- IRx runtime/core
- Arx standard library
That wording keeps the boundary crisp and protects IRx’s reuse story.