# Welcome to PyPy's documentation!

Welcome to the documentation for PyPy, a fast, compliant alternative implementation of the Python language.

- If you want to find out more about what PyPy is, have a look at our What is PyPy? or consult the PyPy website.

- If you're interested in trying PyPy out, check out the installation instructions.

- If you want to help develop PyPy, please have a look at contributing and at the repo on https://github.com/pypy/pypy and get in touch (Contact)!

All of the documentation and source code is available under the MIT license, unless otherwise specified. Consult source LICENSE.

## Getting Started

- What is PyPy?
- Goals and Architecture Overview
- Downloading and Installing PyPy
- Building PyPy from Source
- Translating on Windows
- Frequently Asked Questions

## Using PyPy

- Differences between PyPy and CPython
  - Differences related to garbage collection strategies
  - Missing `sys.getrefcount`
  - Subclasses of built-in types
  - Mutating classes of objects which are already used as dictionary keys
  - Ignored exceptions
  - Object Identity of Primitive Values, `is` and `id`
  - Permitted ABI tags in extensions
  - C-API Differences
  - Performance Differences
  - Miscellaneous
  - Extension modules
- Writing extension modules for pypy
  - CFFI
  - CTypes
  - cppyy
  - RPython Mixed Modules
- Garbage collector documentation and configuration
  - Incminimark
  - Semi-manual GC management
  - Fragmentation
  - gc.get_stats
  - GC Hooks
  - Environment variables
- JIT hooks
  - `dont_trace_here()`
  - `get_jitcell_at_key()`
  - `get_stats_asmmemmgr()`
  - `residual_call()`
  - `set_compile_hook()`
  - `set_abort_hook()`
  - `set_trace_too_long_hook()`
  - `enable_debug()`
  - `disable_debug()`
  - `get_stats_snapshot()`
  - `JitInfoSnapshot`
  - `JitLoopInfo`
- Resetting the JIT
  - `releaseall()`
  - `set_param()`
- Application-level Stackless features
  - Introduction
  - Theory
  - Application level interface
- The `__pypy__` module
  - Generally available functionality
  - Fast String Concatenation
  - Interacting with the PyPy debug log
  - Transparent Proxy Functionality
  - Additional Clocks for Timing
  - Extended Signal Handling
  - Integer Operations with Overflow
  - Functionality available on py.py (not after translation)
- PyPy's sandboxing features
  - Introduction
  - Overview
  - Howto
- Software Transactional Memory
  - What pypy-stm is for
  - Getting Started
  - Python 3, CPython, and others
  - User Guide
  - Implementation
  - See also
- Remote Debugging
  - From the commandline
  - API
  - Security

## Development

- Contributing Guidelines
  - Getting involved
  - Your first contribution
  - Architecture
  - Building
  - Testing
  - Tooling & Utilities
  - Demos
  - graphviz & pygame for flow graph viewing (highly recommended)
- PyPy's Configuration Handling
  - Main Assumption
  - API Details
  - The usage of config objects in PyPy
- Potential Project List
  - Getting involved
  - Simple tasks for newcomers
  - Mid-to-large tasks
  - Explicit typing in RPython
  - Make bytearray type fast
  - Implement copy-on-write list slicing
  - NumPy rebooted
  - Improving the jitviewer
  - Convert RPython to Python3
  - Improve performance
  - Improve warmup
  - Translation Toolchain
  - Various GCs
  - STM (Software Transactional Memory)
  - Introduce new benchmarks
  - Interfacing with C
- Project Documentation
- Source Code Documentation
- PyPy's Release Process
  - Release Policy
  - How to Create a PyPy Release
  - Release Steps

## Further resources

- Historical release notes
- Changelogs
- Contributors
- Glossary

## Contact

#pypy on irc.libera.chat

  Many of the core developers are hanging out here. You are welcome to join and ask questions (if they are not already answered in the FAQ). You can find logs of the channel here.

Development mailing list

  Development and conceptual discussions

Commit mailing list

  Updates to code and documentation

Development bug/feature tracker

  Filing bugs and feature requests

Meeting PyPy developers

  The PyPy developers are organizing sprints and presenting results at conferences all year round. They will be happy to meet in person with anyone interested in the project. Watch out for sprint announcements on the development mailing list.

Twitter handle #pypyproject

Watch us on twitch

# Indices and tables

- Index

- Module Index

- Search Page