Неофициальные реализации Python

Введение

Примеры

  • IronPython

    Реализация с открытым исходным кодом для .NET и Mono, написанная на C #, под лицензией Apache License 2.0. Это полагается на DLR (Динамическое Языковое Время выполнения). Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.

    Отличия от CPython:

    • Тесная интеграция с .NET Framework.
    • Строки по умолчанию являются Unicode.
    • Не поддерживает расширения для CPython, написанные на C.
    • Не страдает от Глобальной блокировки интерпретатора.
    • Производительность обычно ниже, хотя это зависит от тестов.

    Привет, мир

     print "Hello World!"
    
     

    Вы также можете использовать функции .NET:

     import clr
    from System import Console
    Console.WriteLine("Hello World!")
    
     

    внешняя ссылка

    • Официальный веб-сайт
    • GitHub репозиторий
  • Jython

    Реализация с открытым исходным кодом для JVM, написанная на Java, по лицензии Python Software Foundation License. Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.

    Отличия от CPython:

    • Тесная интеграция с JVM.
    • Строки являются Unicode.
    • Не поддерживает расширения для CPython, написанные на C.
    • Не страдает от Глобальной блокировки интерпретатора.
    • Производительность обычно ниже, хотя это зависит от тестов.

    Привет, мир

     print "Hello World!"
    
     

    Вы также можете использовать функции Java:

     from java.lang import System
    System.out.println("Hello World!")
    
     

    внешняя ссылка

    • Официальный веб-сайт
    • Mercurial хранилище
  • Transcrypt

    Transcrypt - это инструмент для предварительной компиляции довольно обширного подмножества Python в компактный читаемый Javascript. Он имеет следующие характеристики:

    • Позволяет для классического ОО-программирования с множественным наследованием с использованием чистого синтаксиса Python, анализируемого собственным синтаксическим анализатором CPython
    • Полная интеграция с целым рядом высококачественных веб-ориентированных библиотек JavaScript, а не настольных Python
    • Модульная система на основе URL-адресов, позволяющая распространять модули через PyPi
    • Простая связь между исходным кодом Python и сгенерированным кодом JavaScript для легкой отладки
    • Многоуровневые исходные карты и дополнительная аннотация целевого кода со ссылками на источники
    • Компактные загрузки, КБ, а не МБ
    • Оптимизированный код JavaScript, использующий запоминание (кеширование вызовов) для необязательного обхода цепочки поиска прототипа
    • Перегрузка оператора может включаться и выключаться локально для облегчения чтения числовой математики

    Размер кода и скорость

    Опыт показывает, что 650 кБ исходного кода Python примерно соответствует тому же количеству исходного кода JavaScript. Скорость соответствует скорости рукописного JavaScript и может превзойти ее, если включена запись звонков.

    Интеграция с HTML

     <script src="__javascript__/hello.js"></script>
    <h2>Hello demo</h2>
    
    <p>
    <div id = "greet">...</div>
    <button onclick="hello.solarSystem.greet ()">Click me repeatedly!</button>
    
    <p>
    <div id = "explain">...</div>
    <button onclick="hello.solarSystem.explain ()">And click me repeatedly too!</button>
    
     

    Интеграция с JavaScript и DOM

    from itertools import chain
    
    class SolarSystem:
        planets = [list (chain (planet, (index + 1,))) for index, planet in enumerate ((
            ('Mercury', 'hot', 2240),
            ('Venus', 'sulphurous', 6052),
            ('Earth', 'fertile', 6378),
            ('Mars', 'reddish', 3397),
            ('Jupiter', 'stormy', 71492),
            ('Saturn', 'ringed', 60268),
            ('Uranus', 'cold', 25559),
            ('Neptune', 'very cold', 24766) 
        ))]
    
        lines = (
            '{} is a {} planet',
            'The radius of {} is {} km',
            '{} is planet nr. {} counting from the sun'
        )
    
        def __init__ (self):
            self.lineIndex = 0
    
        def greet (self):
            self.planet = self.planets [int (Math.random () * len (self.planets))]
            document.getElementById ('greet') .innerHTML = 'Hello {}'.format (self.planet [0])
            self.explain ()
    
        def explain (self):
            document.getElementById ('explain').innerHTML = (
                self.lines [self.lineIndex] .format (self.planet [0], self.planet [self.lineIndex + 1])
            )
            self.lineIndex = (self.lineIndex + 1) % 3
             solarSystem = SolarSystem ()
    
     

    Интеграция с другими библиотеками JavaScript

    Transcrypt может использоваться в сочетании с любой библиотекой JavaScript без особых мер или синтаксиса. В документации приведены примеры для aoact.js, riot.js, fabric.js и node.js.

    Связь между Python и кодом JavaScript

    питон

     class A:
        def __init__ (self, x):
            self.x = x
    
        def show (self, label):
            print ('A.show', label, self.x)
    
    class B:
        def __init__ (self, y):
            alert ('In B constructor')
            self.y = y
    
        def show (self, label):
            print ('B.show', label, self.y)
    
    class C (A, B):
        def __init__ (self, x, y):
            alert ('In C constructor')
            A.__init__ (self, x)
            B.__init__ (self, y)
            self.show ('constructor')
    
        def show (self, label):
            B.show (self, label)
            print ('C.show', label, self.x, self.y)
    
    a = A (1001)
    a.show ('america')
    
    b = B (2002)
    b.show ('russia')
    
    c = C (3003, 4004)
    c.show ('netherlands')
    
    show2 = c.show
    show2 ('copy')
    
     

    JavaScript

    var A = __class__ ('A', [object], {
        get __init__ () {return __get__ (this, function (self, x) {
            self.x = x;
        });},
        get show () {return __get__ (this, function (self, label) {
            print ('A.show', label, self.x);
        });}
    });
    var B = __class__ ('B', [object], {
        get __init__ () {return __get__ (this, function (self, y) {
            alert ('In B constructor');
            self.y = y;
        });},
        get show () {return __get__ (this, function (self, label) {
            print ('B.show', label, self.y);
        });}
    });
    var C = __class__ ('C', [A, B], {
        get __init__ () {return __get__ (this, function (self, x, y) {
            alert ('In C constructor');
            A.__init__ (self, x);
            B.__init__ (self, y);
            self.show ('constructor');
        });},
        get show () {return __get__ (this, function (self, label) {
            B.show (self, label);
            print ('C.show', label, self.x, self.y);
        });}
    });
    var a = A (1001);
    a.show ('america');
    var b = B (2002);
    b.show ('russia');
    var c = C (3003, 4004);
    c.show ('netherlands');
    var show2 = c.show;
    show2 ('copy');
    
     

    внешняя ссылка

    • Официальный сайт: http://www.transcrypt.org/
    • Repository: https://github.com/JdeH/Transcrypt

Синтаксис

Параметры

Примечания