Skip to content

IronPython Implementation Details

IronPython is an implementation of Python that runs on the .NET framework, enabling integration with C# and the .NET ecosystem.

Overview

  • Platform: .NET Framework / .NET Core
  • Use Case: .NET ecosystem integration
  • Performance: Good, with .NET runtime optimization
  • Compatibility: Python 2.7 (current), Python 3.x planned

Architecture

.NET-Based Execution

# IronPython code can use .NET classes directly
from System import String
from System.Collections.Generic import List

# Create .NET list
dotnet_list = List[int]()
dotnet_list.Add(1)
dotnet_list.Add(2)

# Behaves like Python but backed by .NET List<T>

Data Structure Implementation

List vs .NET List

# Python list in IronPython backed by .NET List<T>
my_list = [1, 2, 3]

# Characteristics:
# append: O(1) amortized (like .NET List<T>)
# access: O(1) (like .NET List<T>)
# insert: O(n) (like .NET List<T>)

Dict vs .NET Dictionary

# Python dict backed by .NET Dictionary
my_dict = {'key': 'value'}

# Characteristics:
# lookup: O(1) average
# insertion: O(1) average
# Uses .NET hash function

Performance Characteristics

Startup

Like other .NET applications:

# Startup times
CPython: ~50-100ms
PyPy: ~200-500ms
Jython: ~1-3 seconds
IronPython: ~500ms-1 second  (.NET Framework/Runtime load)

# After initial load, fast execution

Runtime Performance

.NET JIT compilation:

# Warm-up period like other JIT systems
# Initial runs interpreted
# Hot paths compiled to machine code

def compute(n):
    total = 0
    for i in range(n):
        total += i
    return total

# First few calls: interpreted
# Later calls: .NET JIT compiled and fast

.NET Integration Benefits

Using .NET Libraries

# Direct access to .NET libraries
import clr
clr.AddReference("System.Windows.Forms")

from System.Windows.Forms import Application, Form, Button

# Create Windows Forms GUI in Python!
class MyForm(Form):
    def __init__(self):
        self.Text = "Python on .NET"
        self.button = Button()
        self.button.Text = "Click me"

Calling C# Code

# Import C# assembly
import clr
clr.AddReference("MyLibrary.dll")

from MyLibrary import MyClass

obj = MyClass()
result = obj.SomeMethod()

Cross-Platform Considerations

.NET Framework vs .NET Core

.NET Framework (Windows-only):
- Full library access
- Mature ecosystem
- Windows dependent

.NET Core (Cross-platform):
- Windows, Linux, macOS
- Modern runtime
- Growing ecosystem

Comparison with CPython

Feature CPython IronPython
Startup Fast Moderate (load .NET)
Loops Interpreted JIT compiled
C Extensions Yes No
.NET Integration No Yes
Platform All Windows/Linux/Mac (via .NET Core)

When IronPython Excels

.NET Ecosystem Integration

# Use .NET libraries from Python
# Examples: WPF, ASP.NET, Entity Framework

# Much more seamless than CPython
# No need for P/Invoke or ctypes

Windows Desktop Applications

# Develop Windows Forms or WPF apps in Python
# Direct integration with .NET UI frameworks

Enterprise .NET Environments

# Use Python in environments with .NET investment
# Leverage existing C# libraries
# Share code between Python and C#

When CPython is Better

Cross-Platform

# CPython available on all major platforms
# IronPython requires .NET (Windows, or .NET Core)

Data Science

# NumPy, pandas, scikit-learn, etc. require CPython
# No viable alternatives on .NET platform

Standard Environment

# CPython is standard
# Most tutorials, packages, tools assume CPython

Practical Considerations

Installation

# Install from:
# - Windows: Package manager or direct download
# - .NET Core: Cross-platform

ipy --version  # Run IronPython

Running Programs

# Run Python script on IronPython
ipy my_script.py

# Access .NET from Python
import clr

Current Status

Feature Status Notes
Python 2.7 Complete Fully supported
Python 3.x Planned In development, not yet released
.NET Framework Supported Windows only
.NET Core Supported Cross-platform
Performance Good JIT compilation after warm-up

Complexity Characteristics

Standard operations have same complexity as .NET collections:

Operation Complexity Notes
List append O(1) amortized Amortized; resizing on overflow
Dict lookup O(1) avg, O(n) worst Hash collisions cause O(n)
Set membership O(1) avg, O(n) worst Hash collisions cause O(n)
Insert at index O(n) Requires shifting

Similar to CPython, but backed by .NET types.

Performance Comparison Example

# IronPython performance characteristics
# After JIT warm-up

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# First call: slow (interpretation)
result = fibonacci(20)

# Calls 2-100: Profiling
for _ in range(100):
    result = fibonacci(20)

# Call 101+: JIT compiled (much faster than CPython)