REXX Language implementation
\crexx{} is built as a small set of separate tools with visible boundaries. That is deliberate: users can inspect the generated assembly, assemble it directly, link modules, disassemble bytecode, or package a program for native deployment.
\begin{wrapfigure}{l}{0.4\textwidth} \includegraphics[scale=0.3]{charts/buildflow.pdf} \end{wrapfigure} \fussy
The common flow is:
rxc compiles .rexx source to .rxas assembly.rxas assembles .rxas assembly to .rxbin bytecode.rxvm, rxvme, rxbvm, or rxbvme executes one or more .rxbin files.rxlink optionally combines modules into a linked image with a shared
constant pool.rxcpack can package a linked image as C data for native executable builds.The crexx driver wraps the usual compile, assemble, run, link, and package
steps for day-to-day use.
Source files are UTF-8 text and normally use the .rexx extension. The
compiler output is RXAS assembly:
rxc hello.rexx
The assembler output is RXBIN bytecode:
rxas hello.rxas
RXBIN is the module format consumed by the VM, linker, disassembler, and packager.
The compiler separates source discovery from binary discovery:
.rexx files.rxbin, optional .rxas, and .rxplugin filesUse rxc -s path to add a source import root and rxc -i path to add a binary
import root. The crexx driver exposes the same distinction for compilation.
The runtime library path is separate. Use crexx -l... or the VM’s own library
loading rules when a compiled program must load bytecode or plugins at runtime.
rxlink combines one or more .rxbin modules into a linked image with one
shared constant pool. This reduces duplicate constants and resolves module and
interface-provider relationships up front while preserving the module records
needed by the VM loader.
Use rxlink for release-style deployable images and for native packaging.
Native packaging uses rxlink before rxcpack. The linked image is serialized
to C data and linked with the VM runtime library by the platform C toolchain.
The generated executable contains the program image and the runtime pieces
selected by the build.
Static and dynamic plugin choices depend on how the project was built. Do not assume every distribution contains every optional native plugin.