Name | spasmlang JSON |
Version |
0.2.1
JSON |
| download |
home_page | None |
Summary | Simple Python Assembly Language |
upload_time | 2023-12-15 23:31:22 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | None |
keywords |
assembly
development
python
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# spasmlang
[![PyPI - Version](https://img.shields.io/pypi/v/spasmlang.svg)](https://pypi.org/project/spasmlang)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/spasmlang.svg)](https://pypi.org/project/spasmlang)
## Synopsis
`spasmlang` is a **s**imple **P**ython **as**se**m**bly **lang**uage. It is
essentially a high-level interface on top of the [bytecode][bytecode] package
that allows you to generate bytecode from a simple assembly-like syntax.
-----
**Table of Contents**
- [Installation](#installation)
- [Usage](#usage)
- [Examples](#examples)
- [License](#license)
## Installation
```console
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](#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:
```console
spasm example.pya # generates example.pyc
```
## Examples
This is how the classic "Hello, World!" program looks like, targeting the
CPython 3.12 bytecode:
```python
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)
```console
spasm example.pya
```
and then execute the generated module with e.g.
```console
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
```console
spasm greet.pya
```
and test it with
```console
$ python3.11 -c "from greet import greet; greet('spasmlang')"
Hello, spasmlang
```
## License
`spasmlang` is distributed under the terms of the
[MIT](https://spdx.org/licenses/MIT.html) license.
[bytecode]: https://github.com/MatthieuDartiailh/bytecode
Raw data
{
"_id": null,
"home_page": null,
"name": "spasmlang",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "assembly,development,python",
"author": null,
"author_email": "\"Gabriele N. Tornetta\" <phoenix1987@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/ee/c9/959230c40490feaf2069fe8bb8d670ff41b6df1a232a8e302b0f46b62c12/spasmlang-0.2.1.tar.gz",
"platform": null,
"description": "# spasmlang\n\n[![PyPI - Version](https://img.shields.io/pypi/v/spasmlang.svg)](https://pypi.org/project/spasmlang)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/spasmlang.svg)](https://pypi.org/project/spasmlang)\n\n\n## Synopsis\n\n`spasmlang` is a **s**imple **P**ython **as**se**m**bly **lang**uage. It is\nessentially a high-level interface on top of the [bytecode][bytecode] package\nthat allows you to generate bytecode from a simple assembly-like syntax.\n\n-----\n\n**Table of Contents**\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Examples](#examples)\n- [License](#license)\n\n\n## Installation\n\n```console\npip install spasmlang\n```\n\n\n## Usage\n\nThe `spasmlang` package provides a single class, `Assembly`, that allows you to\ngenerate bytecode from a simple assembly-like syntax. See the [examples](#examples)\nbelow for a taste of its API.\n\nYou can also use the `spasm` command-line utility to compile assembly files\ndirectly to Python bytecode:\n\n```console\nspasm example.pya # generates example.pyc\n```\n\n\n## Examples\n\nThis is how the classic \"Hello, World!\" program looks like, targeting the\nCPython 3.12 bytecode:\n\n```python\nfrom spasm import Assembly\n\nasm = Assembly()\nasm.parse(\n r\"\"\"\n push_null\n load_const print\n load_const \"Hello, World!\"\n call 1\n return_value\n \"\"\"\n)\nexec(asm.compile())\n```\n\nThis is how you can compile the file `example.pya` to `example.pyc` to create\na \"Hello, World!\" module, again targeting CPython 3.11:\n\n```\n# example.pya\n resume 0\n push_null\n load_name $print\n load_const \"Hello, spasm!\"\n precall 1\n call 1\n pop_top\n load_const None\n return_value\n```\n\nCompile the assembly code with (assuming that you have installed `spasmlang`\nwith CPython 3.11)\n \n```console\nspasm example.pya\n```\n\nand then execute the generated module with e.g.\n \n```console\npython3.11 -m example\n```\n\nThis example shows how to create a module that exports a `greet` function that\ntakes one argument, targeting CPython 3.11:\n\n```\n# greet.pya\n\ncode greet(who)\n resume 0\n load_global (True, \"print\")\n load_const \"Hello, \"\n load_fast $who\n format_value 0\n build_string 2\n precall 1\n call 1\n return_value\nend\n\n resume 0\n load_const .greet\n make_function 0\n store_name $greet\n load_const None\n return_value\n```\n\nAgain, compile the assembly code with\n\n```console\nspasm greet.pya\n```\n\nand test it with\n\n```console\n$ python3.11 -c \"from greet import greet; greet('spasmlang')\"\nHello, spasmlang\n```\n\n\n## License\n\n`spasmlang` is distributed under the terms of the\n[MIT](https://spdx.org/licenses/MIT.html) license.\n\n\n[bytecode]: https://github.com/MatthieuDartiailh/bytecode\n",
"bugtrack_url": null,
"license": null,
"summary": "Simple Python Assembly Language",
"version": "0.2.1",
"project_urls": {
"Documentation": "https://github.com/P403n1x87/spasmlang#readme",
"Issues": "https://github.com/P403n1x87/spasmlang/issues",
"Source": "https://github.com/P403n1x87/spasmlang"
},
"split_keywords": [
"assembly",
"development",
"python"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "899536ccc2ffdcbf37a1be7708a92d22ea8c9f756ef2cd25ddb0777fb3f61770",
"md5": "c8ce8a067748f1e2fc6413ce8e258dd4",
"sha256": "5ae9e1e966f76e2796ef5a5811cdfb846b4abf7e3f16533b92b97d8005495033"
},
"downloads": -1,
"filename": "spasmlang-0.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c8ce8a067748f1e2fc6413ce8e258dd4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 8454,
"upload_time": "2023-12-15T23:31:24",
"upload_time_iso_8601": "2023-12-15T23:31:24.138918Z",
"url": "https://files.pythonhosted.org/packages/89/95/36ccc2ffdcbf37a1be7708a92d22ea8c9f756ef2cd25ddb0777fb3f61770/spasmlang-0.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eec9959230c40490feaf2069fe8bb8d670ff41b6df1a232a8e302b0f46b62c12",
"md5": "bae69c1d26d491bca00bf10c342886f5",
"sha256": "87e91e98670fd9d94910f9bfb68ba6e9506e8d13a0bad1e2a78c84c0907b7bcc"
},
"downloads": -1,
"filename": "spasmlang-0.2.1.tar.gz",
"has_sig": false,
"md5_digest": "bae69c1d26d491bca00bf10c342886f5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 8849,
"upload_time": "2023-12-15T23:31:22",
"upload_time_iso_8601": "2023-12-15T23:31:22.479292Z",
"url": "https://files.pythonhosted.org/packages/ee/c9/959230c40490feaf2069fe8bb8d670ff41b6df1a232a8e302b0f46b62c12/spasmlang-0.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-15 23:31:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "P403n1x87",
"github_project": "spasmlang#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "spasmlang"
}