Concepts / Interfacing Python with Other Languages

Interfacing Python with Other Languages

Python is a language specification; a Python implementation is the software that executes code written in that language.

  • Programming

One Language, Several Runtimes

When people say that they are using Python, they may be referring to two related but different things. Python is a language specification: a set of rules for writing Python code. A Python implementation is software that reads and executes code written according to those rules. This distinction explains how several different programs can implement the same language while targeting different platforms and use cases.

implemented byPython specificationRules for writing codePython implementationSoftware that executes code
What is the difference between the rules that define Python and the software that executes Python code?

The specification describes what Python code means. An implementation supplies the executable software that makes that meaning run on a platform.

Following Code to the Machine

A useful way to trace Python is to start with Python code, place the language specification beside it as the set of rules being followed, and then identify the implementation that executes the code. The implementation is the platform-facing part of this path. Different implementations can connect the same language specification to different operating systems, runtimes, or optimization strategies.

executesdefines behaviorruns onPython codeCode written by a developerPython specificationRules for the codeCPythonReference implementationComputerExecution platform
Where does CPython fit between Python source code, the language specification, and the computer that runs the program?

Identifying the Two Layers

A learner installs Python from python.org and runs python in a terminal. Which part is the language specification, and which part is the implementation?

Identify the rules: The Python language specification is the set of rules that describes how Python code is written and behaves.

Identify the software: The program being run in the terminal is an implementation. In this situation, the implementation is CPython.

Separate their roles: The specification defines the language, while CPython is the software that executes code written in that language.

The language specification and CPython are related but not interchangeable: one defines the rules, and the other executes the code.

CPython as the Reference Point

CPython is the reference implementation and the most widely used Python interpreter. When you install Python from python.org and run python in a terminal, you are using CPython. It is written in the C programming language, which explains the C in its name. The source material also describes CPython as the Classical Python interpreter because it is the original reference implementation: the implementation against which other implementations are measured and that first receives new language features and changes.

written inimplementsCImplementation languagePythonLanguage being implementedCPythonReference implementation
What does the C in CPython indicate about how the implementation is built?

CPython is described as fast and efficient because it is written in C, a compiled, statically typed language. It is also portable across Windows, macOS, Linux, and many other operating systems. Its reference status, broad portability, performance, and large ecosystem make it the normal starting choice for most Python projects.

Choosing an Implementation

Multiple implementations exist because one implementation cannot optimize every goal equally. CPython is the general default and reference point. Jython is designed for Java integration. IronPython is designed for .NET integration. PyPy focuses on an alternative implementation strategy and performance optimization through just-in-time compilation.

implemented byimplemented byimplemented byimplemented byPythonspecificationShared language rulesCPythonReference implementationJythonJava integrationIronPython.NET integrationPyPyJIT optimization andresearch
How do different Python implementations connect the same language specification to different platforms or execution environments?
ImplementationPrimary roleWhen it may fit
CPythonReference and general-purpose implementationMost Python projects and the default starting point
JythonJava platform integrationA project that must integrate deeply with Java
IronPython.NET platform integrationA project that needs Python integration in a .NET environment
PyPyAlternative implementation with JIT compilationPerformance-critical workloads or interpreter research

The implementations differ mainly in the platform or priority they emphasize.

Bridging Java and .NET

Jython and IronPython are platform-specific implementations. Jython runs Python on the Java platform, within the Java Virtual Machine. Python code can instantiate Java classes, call their methods, and pass data back and forth. IronPython provides the corresponding connection for the .NET runtime, allowing Python code to interact with .NET libraries and classes, including libraries written in C#, the primary language of .NET.

runs throughexecutes withinaccessesruns throughexecutes withinaccessesPython codeApplication logicIronPythonPython on .NETJythonPython on the JVM.NET runtimeHost runtimeJava VirtualMachineJava runtime.NET librariesClasses and librariesJava librariesClasses and methods
How does Python code move between a Python implementation and Java or .NET libraries and runtimes?

Selecting a Platform Bridge

An organization has an existing Java codebase and wants to use Python while remaining integrated with Java libraries. Which implementation matches that requirement?

Identify the host ecosystem: The existing codebase and libraries belong to the Java platform.

Select the matching implementation: Jython is the Python implementation designed for Java integration.

Trace the integration: Python code runs within the Java Virtual Machine and can instantiate Java classes, call methods, and pass data back and forth.

Jython matches the requirement because it connects Python code directly with the Java platform and its libraries.

PyPy and Self-Implementation

PyPy is an implementation of Python written in Python itself, more precisely in a restricted subset called RPython. RPython is translated into C and compiled. This design is not a claim that Python runs without any implementation. Instead, it expresses the interpreter's parsing and execution logic in a Python-based language before translating that logic into a compiled form.

development changetranslated and compiledincludesCPythonInterpreter logic in CC changesRecompile and testPyPyInterpreter logic inRPythonTranslation to CCompiled implementationJIT compilerPerformance optimization
What changes when an implementation of Python is written in Python, and what are the resulting benefits and trade-offs?

The main development benefit is that PyPy's interpreter logic can be changed using a dynamic language rather than a language such as C or Java. The source describes this as making experimentation faster and the codebase more accessible to the broader Python community. PyPy also includes a just-in-time compiler. For certain workloads, especially long-running programs with tight loops, this can make Python code significantly faster than it is in CPython.

Mistakes in Implementation Choices

  • Treating Python and CPython as exactly the same thing

    Python is the specification, while CPython is one implementation of that specification.

    Fix: Use Python to refer to the language and CPython to refer to the reference implementation written in C.

  • Choosing Jython or IronPython only because they are alternative Python names

    These implementations exist to connect Python with specific host ecosystems.

    Fix: Choose Jython for deep Java integration and IronPython for integration with the .NET environment.

  • Assuming that PyPy is always faster

    The source describes PyPy's performance advantages for certain workloads, especially long-running programs with tight loops.

    Fix: Benchmark performance-critical code with PyPy before deciding.

  • Relying on implementation-specific features when portability matters

    Such dependencies reduce the ability to move the code between implementations.

    Fix: Write standard Python code that does not rely on implementation-specific features.

Making the Choice

Start with CPython in most cases because it is the reference implementation, the most widely used implementation, and the one with the largest ecosystem of third-party libraries. Move to a different implementation when the project has a clear requirement: use Jython for deep Java integration, IronPython for .NET integration, or PyPy when measured performance benefits justify the change. Keeping code standard and portable preserves the ability to reconsider the implementation later.

MEDIUM

A team needs to use Python inside an existing .NET environment. Another team is investigating interpreter design and wants a Python-based implementation with possible speed improvements for long-running tight-loop workloads. Choose an implementation for each team and explain the reason.

Hints
  • Match the first team to the implementation designed for .NET integration.
  • Match the second team to the implementation written in RPython that includes a JIT compiler.
  • State the requirement before naming the implementation.

A Requirement-First Decision

A project has no special Java or .NET requirement and no measured performance problem. Which implementation should be the starting point?

Check for platform integration: There is no stated need for Java or .NET integration, so Jython and IronPython are not required by the problem.

Check for a measured performance need: There is no measured performance requirement, so PyPy's performance-focused alternative is not required by the problem.

Use the default reference point: CPython is the reference implementation, the most widely used implementation, and the usual starting choice.

Start with CPython and reconsider only if the project develops a specific integration or performance requirement.

Key Takeaways

  1. Python is a language specification; a Python implementation is the software that executes Python code.
  2. CPython is the C-written reference implementation and the most widely used Python interpreter.
  3. Jython and IronPython connect Python with Java and .NET platforms, respectively.
  4. PyPy is written in RPython, translated into C, and includes a JIT compiler that may improve performance for certain workloads.
  5. Use CPython by default, choose a platform-specific implementation for integration needs, and benchmark PyPy when performance is the reason for switching.

Key Takeaways

  • A language specification defines rules; an implementation executes code that follows those rules.
  • CPython is the reference implementation, is written in C, and is the normal default choice.
  • Jython and IronPython place Python within Java and .NET ecosystems so Python code can use their libraries and runtimes.
  • PyPy uses RPython, translation to C, and JIT compilation to support experimentation and possible speed improvements.
  • The best implementation depends on the project requirement, and performance claims should be tested with the real workload.