Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Python Interpreter written in Rust

License

NotificationsYou must be signed in to change notification settings

coolcoder613eb/RustPython

 
 

Repository files navigation

A Python-3 (CPython >= 3.5.0) Interpreter written in Rust 🐍 😱 🤘.

Build StatusLicense: MITContributorsGitter

Usage

To test RustPython, do the following:

$ git clone https://github.com/RustPython/RustPython$ cd RustPython$ cargo run demo.pyHello, RustPython!

Or use the interactive shell:

$ cargo runWelcome to rustpython>>>>> 2+24

Goals

  • Full Python-3 environment entirely in Rust (not CPython bindings)
  • A clean implementation without compatibility hacks

Documentation

Currently the project is in an early phase, and so is the documentation.

You can read theonline documentation for the latest code on master.

You can also generate documentation locally by running:

$ cargo doc# Including documentation for all dependencies$ cargo doc --no-deps --all# Excluding all dependencies

Documentation HTML files can then be found in thetarget/doc directory.

Code organization

  • parser/src: python lexing, parsing and ast
  • vm/src: python virtual machine
    • builtins.rs: Builtin functions
    • compile.rs: the python compiler from ast to bytecode
    • obj: python builtin types
  • src: using the other subcrates to bring rustpython to life.
  • docs: documentation (work in progress)
  • py_code_object: CPython bytecode to rustpython bytecode convertor (work in progress)
  • wasm: Binary crate and resources for WebAssembly build
  • tests: integration test snippets

Contributing

To start contributing, there are a lot of things that need to be done.

Most tasks are listed in theissue tracker.Check issues labeled withgood first issue if you wish to start coding.

Another approach is to checkout the sourcecode: builtin functions and object methods are often the simplestand easiest way to contribute.

You can also simply runcargo run tests/snippets/whats_left_to_implement.py to assist in finding anyunimplemented method.

Testing

To test rustpython, there is a collection of python snippets located in thetests/snippets directory. To run those tests do the following:

$cd tests$ pipenv shell$ pytest -v

There also are some unittests, you can run those will cargo:

$ cargotest --all

Using another standard library

As of now the standard library is under construction.

You can play aroundwith other standard libraries for python. For example,theouroboros library.

To do this, follow this method:

$cd~/GIT$ git clone git@github.com:pybee/ouroboros.git$export PYTHONPATH=~/GIT/ouroboros/ouroboros$cd RustPython$ cargo run -- -c'import statistics'

Compiling to WebAssembly

At this stage RustPython only has preliminary support for web assembly. The instructions here are intended for developers or those wishing to run a toy example.

Setup

To get started, installwasm-bindgenandwasm-pack. You will also need to havenpm installed.

Build

Move into thewasm directory. This contains a custom library crate optimized for wasm build of RustPython.

cd wasm

From here run the build. This can take several minutes depending on the machine.

wasm-pack build

Upon successful build, cd in the the/pkg directory and run:

npm link

Now move back out into the/app directory. The files here have been adapted fromwasm-pack-template.

Finally, run:

npm installnpm link rustpython_wasm

and you will be able to run the files with:

node_modules/.bin/webpack-dev-server

Open a browser console and see the output of rustpython_wasm. To verify this, modify the line inapp/index.js

rp.run_code("print('Hello Python!')\n");

To the following:

rp.run_code("assert(False)\n");

and you should observe:Execution failed in your console output, indicating that the execution of RustPython has failed.

Code style

The code style used is the default rustfmt codestyle. Please format your code accordingly.

Community

Chat with us ongitter.

Credit

The initial work was based onwindelbouwman/rspython andshinglyu/RustPython

Links

These are some useful links to related projects:

About

A Python Interpreter written in Rust

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C70.3%
  • Rust24.9%
  • Python4.6%
  • JavaScript0.2%
  • EJS0.0%
  • CSS0.0%

[8]ページ先頭

©2009-2025 Movatter.jp