Python Language
Неофициальные реализации Python
Поиск…
IronPython
Реализация с открытым исходным кодом для .NET и Mono, написанная на C #, лицензированная под лицензией Apache 2.0. Он полагается на DLR (Dynamic Language Runtime). Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.
Различия с CPython:
- Тесная интеграция с .NET Framework.
- Строки по умолчанию Unicode.
- Не поддерживает расширения для CPython, написанные на C.
- Не страдает от Global Interpreter Lock.
- Производительность обычно ниже, хотя это зависит от тестов.
Привет, мир
print "Hello World!"
Вы также можете использовать функции .NET:
import clr
from System import Console
Console.WriteLine("Hello World!")
внешняя ссылка
Jython
Реализация Open-source для JVM, написанная на Java, лицензированная в соответствии с лицензией Python Software Foundation. Он поддерживает только версию 2.7, версия 3 в настоящее время разрабатывается.
Различия с CPython:
- Тесная интеграция с JVM.
- Строки - это Юникод.
- Не поддерживает расширения для CPython, написанные на C.
- Не страдает от Global Interpreter Lock.
- Производительность обычно ниже, хотя это зависит от тестов.
Привет, мир
print "Hello World!"
Вы также можете использовать функции Java:
from java.lang import System
System.out.println("Hello World!")
внешняя ссылка
Transcrypt
Transcrypt - это инструмент для предварительного компиляции довольно обширного подмножества Python в компактный, читаемый Javascript. Он имеет следующие характеристики:
- Позволяет классическое программирование OO с множественным наследованием с использованием чистого синтаксиса Python, проанализированного собственным парсером CPython
- Бесшовная интеграция со вселенной высококачественных веб-ориентированных библиотек JavaScript, а не настольных Python-приложений
- Иерархическая система на основе URL-адресов, позволяющая распределять модули через PyPi
- Простая связь между источником Python и сгенерированным кодом JavaScript для легкой отладки
- Многоуровневые исходные коды и необязательная аннотация целевого кода с исходными ссылками
- Компактные загрузки, скорее, чем kB, а не MB
- Оптимизированный код JavaScript, используя memoization (кеширование вызовов), чтобы опционально обходить цепочку поиска прототипа
- Перегрузка оператора может быть включена и выключена локально, чтобы облегчить считываемую численную математику
Размер и скорость кода
Опыт показал, что 650 kB исходного кода 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 без специальных мер или синтаксиса. В примерах документации приведены для ao react.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/
- Репозиторий: https://github.com/JdeH/Transcrypt