Skip to main content

Simple Python Assembly Language

Project description

spasmlang

PyPI - Version PyPI - Python Version

Synopsis

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

Installation

pip install spasmlang

Usage

The 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.pyc

Examples

This 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.pya

and then execute the generated module with e.g.

python3.11 -m example

This 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.pya

and test it with

$ python3.11 -c "from greet import greet; greet('spasmlang')"
Hello, spasmlang

License

spasmlang is distributed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spasmlang-0.2.0.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spasmlang-0.2.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file spasmlang-0.2.0.tar.gz.

File metadata

  • Download URL: spasmlang-0.2.0.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.0

File hashes

Hashes for spasmlang-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0dc9ac27fe6e81ce5e74ef227d730abf0d7fcad5e3ea21d80941e8de67029e28
MD5 4952b9b772297f4a3af0d8f6d47e851f
BLAKE2b-256 15e94e4b09ca28689c3152dad4da47c7385753ab21af7f128139043b447d3ea4

See more details on using hashes here.

File details

Details for the file spasmlang-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: spasmlang-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.0

File hashes

Hashes for spasmlang-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7e8317d3bbd8654022e549692a80fda1ef29f7bb5c62b9b2df5d7ca6d48133cc
MD5 3c923caa0cdc1cfa11d6ea282064bac9
BLAKE2b-256 3a44ba6c0a592a8210ae65d4ff1d15c012dcb71cb5d86c5f8015e6023fd9dc1f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page