README
¶
gpython
gpython is a part re-implementation, part port of the Python 3.4 interpreter in Go. Although there are many areas of improvement, it stands as an noteworthy achievement in capability and potential.
gpython includes:
- lexer, parser, and compiler
- runtime and high-level convenience functions
- multi-context interpreter instancing
- easy embedding into your Go application
- interactive mode (REPL) (try online!)
gpython does not include many python modules as many of the core modules are written in C not python. The converted modules are:
- builtins
- marshal
- math
- time
- sys
Install
Download directly from the releases page
Or if you have Go installed:
go install github.com/go-python/gpython
Objectives
gpython started as an experiment to investigate how hard porting Python to Go might be. It turns out that all those C modules are a significant barrier to making gpython a complete replacement to CPython.
However, to those who want to embed a highly popular and known language into their Go application, gpython could be a great choice over less capable (or lesser known) alternatives.
Status
gpython currently:
- Parses all the code in the Python 3.4 distribution
- Runs Python 3 for the modules that are currently supported
- Supports concurrent multi-interpreter ("multi-context") execution
Speed hasn't been a goal of the conversions however it runs pystone at about 20% of the speed of CPython. A π computation test runs quicker under gpython as the Go long integer primitives are likely faster than the Python ones.
@ncw started gpython in 2013 and work on is sporadic. If you or someone you know would be interested to take it futher, it would be much appreciated.
Getting Started
The embedding example demonstrates how to easily embed and invoke gpython from any Go application.
Of interest, gpython is able to run multiple interpreter instances simultaneously, allowing you to embed gpython naturally into your Go application. This makes it possible to use gpython in a server situation where complete interpreter independence is paramount. See this in action in the multi-context example.
If you are looking to get involved, a light and easy place to start is adding more convenience functions to py/util.go. See notes.txt for bigger ideas.
Other Projects of Interest
- grumpy - a python to go transpiler
Community
You can chat with the go-python community (or which gpython is part)
at [email protected]
or on the Gophers Slack in the #go-python channel.
License
This is licensed under the MIT licence, however it contains code which was ported fairly directly directly from the CPython source code under the PSF LICENSE.
Documentation
¶
There is no documentation for this package.
Directories
¶
| Path | Synopsis |
|---|---|
|
compile python code
|
compile python code |
|
examples
|
|
|
embedding
command
|
|
|
multi-context
command
|
|
|
testparser
command
|
|
|
Function objects
|
Function objects |
|
Read Eval Print Loop
|
Read Eval Print Loop |
|
cli
Read Eval Print Loop for CLI
|
Read Eval Print Loop for CLI |
|
web
command
|
|
|
Package stdlib provides the bootstrap code to wire in all the stdlib (python) modules into a gpython context and VM.
|
Package stdlib provides the bootstrap code to wire in all the stdlib (python) modules into a gpython context and VM. |
|
binascii
Package binascii provides the implementation of the python's 'binascii' module.
|
Package binascii provides the implementation of the python's 'binascii' module. |
|
builtin
Built-in functions
|
Built-in functions |
|
glob
Package glob provides the implementation of the python's 'glob' module.
|
Package glob provides the implementation of the python's 'glob' module. |
|
marshal
Implement unmarshal and marshal
|
Implement unmarshal and marshal |
|
math
Math module -- standard C math library functions, pi and e
|
Math module -- standard C math library functions, pi and e |
|
os
Package os implements the Python os module.
|
Package os implements the Python os module. |
|
string
Package string provides the implementation of the python's 'string' module.
|
Package string provides the implementation of the python's 'string' module. |
|
tempfile
Package tempfile provides the implementation of the python's 'tempfile' module.
|
Package tempfile provides the implementation of the python's 'tempfile' module. |
|
Evaluate opcodes
|
Evaluate opcodes |