You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: pages/blog/arx-project-update-a-new-monorepo/index.md
+23-24Lines changed: 23 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,7 +36,7 @@ The main repository now brings together the three core packages of the compiler
36
36
*`packages/irx` — IRx, the intermediate representation, semantic/lowering layer, backend, and runtime integration
37
37
*`packages/arx` — Arx, the language frontend and user-facing compiler tooling
38
38
39
-
The repository now describes these as lockstep-released ecosystem packages, with one shared release workflow across `astx`, `pyirx`, and `arxlang`. ([GitHub][1])
39
+
They are lockstep-released ecosystem packages, with one shared release workflow across `astx`, `pyirx`, and `arxlang`.
40
40
41
41
That matters because language features usually do not live in only one place. A new syntax feature in Arx may need AST support in ASTx, semantic or lowering support in IRx, and user-facing compiler behavior in Arx. Keeping these packages together makes it easier to evolve the compiler pipeline coherently.
42
42
@@ -48,7 +48,7 @@ Arx has a Python-like feel, with indentation-based blocks and familiar control-f
48
48
49
49
The goal is not to copy any single language. The goal is to combine readable syntax, explicit types, native compilation, and data-oriented abstractions.
50
50
51
-
Arx uses LLVM for native code generation and aims to provide native list, tensor, and dataframe abstractions backed internally by IRx runtime support. The public documentation also describes Arrow-backed numeric tensors with compiler-known shapes and Arrow-backed named-column dataframes as key features. ([GitHub][1])
51
+
Arx uses LLVM for native code generation and provides support for tensors, dataframes, and series backed by Arrow C++ data containers.
52
52
53
53
That combination is the core of the project’s identity: Arx is not only trying to be a general-purpose compiler experiment. It is moving toward a language where data containers, Arrow interoperability, and native execution are part of the foundation.
54
54
@@ -91,7 +91,7 @@ This is still early, but it establishes a foundation for object-oriented pattern
91
91
92
92
### Lists, tensors, dataframes, and Arrow-backed containers
93
93
94
-
Arx exposes `list[...]` and `tensor[...]` as distinct public collection forms. The README documents fixed-shape tensors such as `tensor[i32, 2, 2]`, runtime-shaped tensor parameters such as `tensor[i32, ...]`, and current tensor element types including fixed-width numeric types such as `i8`, `i16`, `i32`, `i64`, `f32`, and `f64`. ([GitHub][1])
94
+
Arx exposes `list[...]` and `tensor[...]` as distinct public collection forms. It supports fixed-shape tensors such as `tensor[i32, 2, 2]`, runtime-shaped tensor parameters such as `tensor[i32, ...]`, and fixed-width numeric tensor element types such as `i8`, `i16`, `i32`, `i64`, `f32`, and `f64`.
95
95
96
96
```arx
97
97
fn pick(grid: tensor[i32, 2, 2]) -> i32:
@@ -116,11 +116,11 @@ fn sum_values() -> i32:
116
116
return total
117
117
```
118
118
119
-
The project also has builtin support for `range(...)`, and for-in loops can iterate over list-valued expressions such as ranges, list literals, and list variables. ([GitHub][1])
119
+
The project also has builtin support for `range(...)`, and for-in loops can iterate over list-valued expressions such as ranges, list literals, and list variables.
120
120
121
121
### Builtins and standard library direction
122
122
123
-
Arx now ships a bundled pure-Arx standard library under the reserved `stdlib` namespace. Compiler-provided builtins are kept separate from the public standard library, and builtin functions such as `range(...)` are available automatically. ([GitHub][1])
123
+
Arx now ships a bundled pure-Arx standard library under the reserved `stdlib` namespace. Compiler-provided builtins are kept separate from the public standard library, and builtin functions such as `range(...)` are available automatically.
124
124
125
125
```arx
126
126
import math from stdlib
@@ -129,11 +129,11 @@ fn main() -> i32:
129
129
return math.square(4)
130
130
```
131
131
132
-
This separation is important. Builtins are compiler-provided, while `stdlib`is where regular Arx library code can grow.
132
+
This separation is important. Builtins are compiler-provided, while `stdlib`should be imported.
133
133
134
134
### Testing support
135
135
136
-
Arx also has an `arx test` subcommand. The runner searches for test files, discovers zero-argument `test_*` functions returning `none`, and executes each test in its own compiled subprocess. ([GitHub][1])
136
+
Arx also has an `arx test` subcommand. The runner searches for test files, discovers zero-argument `test_*` functions returning `none`, and executes each test in its own compiled subprocess.
137
137
138
138
```bash
139
139
arx test
@@ -147,19 +147,17 @@ For a young language, this is a very practical feature. It makes it easier to wr
147
147
148
148
A lot of the data-oriented foundation lives in IRx.
149
149
150
-
IRx lowers ASTx nodes to LLVM IR using `llvmlite`, provides a visitor-based code generation pipeline, and can produce runnable executables through `clang`. Its documentation describes support for arithmetic, variables, functions, returns, structured control flow, fatal assertions, and system-level expressions. ([IRx][2])
150
+
IRx lowers ASTx nodes to LLVM IR using `llvmlite`, provides a visitor-based code generation pipeline, and can produce runnable executables through `clang`. Its supports arithmetic, variables, functions, returns, structured control flow, fatal assertions, and system-level expressions.
151
151
152
-
IRx also has runtime feature support for native integrations. The docs describe a builtin array runtime backed by Arrow for low-level array and interoperability work, Arrow C Data import/export boundaries, and Arrow C++ source support for native runtime builds. ([IRx][2])
153
-
154
-
Alongside that one-dimensional array substrate, IRx exposes an initial internal `Tensor` layer for homogeneous N-dimensional values, backed by Arrow C++ `arrow::Tensor`. The current tensor support is focused on fixed-width numeric element types and readonly Arrow C++ backed storage. ([IRx][2])
152
+
Alongside an one-dimensional array substrate, IRx exposes an initial internal `Tensor` layer for homogeneous N-dimensional values, backed by Arrow C++ `arrow::Tensor`. The current tensor support is focused on fixed-width numeric element types and readonly Arrow C++ backed storage.
155
153
156
154
This is still early, but it is also one of the strongest signals about where Arx is going: a language where data containers and Arrow-backed runtime support are part of the compiler architecture, not an afterthought.
157
155
158
156
## arxpm: project management for Arx
159
157
160
158
Another important piece of the ecosystem is `arxpm`.
161
159
162
-
`arxpm` is the Arx project manager and workspace tool. It owns `.arxproject.toml` rendering, project layout inference and validation, default target selection, Python environment provisioning via `uv`, and user-facing workflow commands. ([GitHub][3])
160
+
`arxpm` is the Arx project manager and workspace tool. It owns `.arxproject.toml` rendering, project layout inference and validation, default target selection, Python environment provisioning via `uv`, and user-facing workflow commands.
163
161
164
162
Current commands include:
165
163
@@ -184,15 +182,15 @@ This is a big deal for usability. A language does not become comfortable only be
184
182
185
183
There is also an early VS Code extension: `vscode-arx`.
186
184
187
-
For now, it is intentionally simple. It is a highlight-only extension with TextMate syntax highlighting for Arx files and basic language configuration, including line comments, brackets, auto-closing pairs, and surrounding pairs. The README explicitly says it has no language server, commands, or runtime extension code yet. ([GitHub][4])
185
+
For now, it is intentionally simple. It is a highlight-only extension with TextMate syntax highlighting for Arx files and basic language configuration, including line comments, brackets, auto-closing pairs, and surrounding pairs. The README explicitly says it has no language server, commands, or runtime extension code yet.
188
186
189
187
That is a good first step. Syntax highlighting already makes writing and reading Arx code more pleasant, and keeping the extension small makes it easier to keep in sync while the language is still evolving.
190
188
191
189
## Douki: structured docstrings with YAML
192
190
193
191
Another project in the ecosystem is Douki.
194
192
195
-
Douki is a developer tool for structured YAML docstrings in Python. It keeps docstrings synchronized with function signatures and validates them against a schema, without adding a runtime dependency to the package using it. ([GitHub][5])
193
+
Douki is a developer tool for structured YAML docstrings. It keeps docstrings synchronized with function signatures and validates them against a schema, without adding a runtime dependency to the package using it. For now, douki just supports Python, but soon it will supports arx source files as well.
196
194
197
195
It supports workflows such as:
198
196
@@ -207,15 +205,15 @@ This fits naturally with the Arx ecosystem because documentation discipline matt
207
205
208
206
The Arx ecosystem also has an early Jupyter kernel: `arxlang-jupyter-kernel`.
209
207
210
-
This first version is a wrapper-style Jupyter kernel. Each cell is compiled with the Arx CLI, executed as a native binary, and then stdout/stderr are returned to Jupyter. ([GitHub][6])
208
+
This first version is a wrapper-style Jupyter kernel. Each cell is compiled with the Arx CLI, executed as a native binary, and then stdout/stderr are returned to Jupyter.
211
209
212
210
This is very early, but it is an exciting direction. If Arx grows toward scientific computing, dataframes, tensors, Arrow integration, and machine learning workflows, notebooks are a natural environment for experimentation, teaching, demos, and data exploration.
213
211
214
212
## Why this matters for data science users
215
213
216
-
Arx is not trying to replace Python tomorrow. Python has a massive ecosystem, and tools like NumPy, pandas, PyArrow, Polars, scikit-learn, Jupyter, and PyTorch are already deeply established.
214
+
Arx is not trying to replace Python. Python has a massive ecosystem, and tools like NumPy, pandas, PyArrow, Polars, scikit-learn, Jupyter, and PyTorch are already deeply established.
217
215
218
-
But Arx can explore a different point in the design space.
216
+
Instead, Arx explores a different point in the design space: a language with native Arrow-backed data containers, compiler-aware data operations, and future Python bindings so Arx libraries can be used from existing Python workflows.
219
217
220
218
What would it look like to have a language where Arrow data types are first-class? What would it look like to have tensors, tables, and dataframes represented directly in the language and compiler pipeline? What would it look like to combine readable syntax, native compilation, and Arrow-backed runtime structures from the beginning?
221
219
@@ -241,7 +239,7 @@ Some ideas for the future include:
241
239
242
240
* Python bindings to use Arx libraries from Python
243
241
* Arx bindings to use Python libraries from Arx
244
-
* a scientific computing library for Arx, possibly `sciarx`
242
+
* a scientific computing library for Arx (`sciarx`)
245
243
* a machine learning library for Arx
246
244
* expanded support for Apache Arrow data types
247
245
* expanded support for Arrow compute functions
@@ -266,9 +264,10 @@ Arx is not production-ready yet, and that is okay. This is the stage where the f
266
264
267
265
And honestly, that is one of the most fun stages of a language project.
0 commit comments