spasmlang is a simple Python assembly language. It is
essentially a high-level interface on top of the bytecode package
that allows you to generate bytecode from a simple assembly-like syntax.
Table of Contents
pip install spasmlangThe spasmlang package provides a single class, Assembly, that allows you to
generate bytecode from a simple assembly-like syntax. See the examples
below for a taste of its API.
You can also use the spasm command-line utility to compile assembly files
directly to Python bytecode:
spasm example.pya # generates example.pycThis is how the classic "Hello, World!" program looks like, targeting the CPython 3.12 bytecode:
from spasm import Assembly
asm = Assembly()
asm.parse(
r"""
push_null
load_const print
load_const "Hello, World!"
call 1
return_value
"""
)
exec(asm.compile())This is how you can compile the file example.pya to example.pyc to create
a "Hello, World!" module, again targeting CPython 3.11:
# example.pya
resume 0
push_null
load_name $print
load_const "Hello, spasm!"
precall 1
call 1
pop_top
load_const None
return_value
Compile the assembly code with (assuming that you have installed spasmlang
with CPython 3.11)
spasm example.pyaand then execute the generated module with e.g.
python3.11 -m exampleThis example shows how to create a module that exports a greet function that
takes one argument, targeting CPython 3.11:
# greet.pya
code greet(who)
resume 0
load_global (True, "print")
load_const "Hello, "
load_fast $who
format_value 0
build_string 2
precall 1
call 1
return_value
end
resume 0
load_const .greet
make_function 0
store_name $greet
load_const None
return_value
Again, compile the assembly code with
spasm greet.pyaand test it with
$ python3.11 -c "from greet import greet; greet('spasmlang')"
Hello, spasmlangspasmlang is distributed under the terms of the
MIT license.