Python Language
Implémentations non officielles de Python
Recherche…
IronPython
Implémentation open source pour .NET et Mono écrite en C #, sous licence Apache 2.0. Il s'appuie sur DLR (Dynamic Language Runtime). Il ne supporte que la version 2.7, la version 3 est en cours de développement.
Différences avec CPython:
- Intégration étroite avec .NET Framework.
- Les chaînes sont Unicode par défaut.
- Ne prend pas en charge les extensions pour CPython écrites en C.
- Ne souffre pas de Global Interpreter Lock.
- Les performances sont généralement inférieures, même si cela dépend des tests.
Bonjour le monde
print "Hello World!"
Vous pouvez également utiliser les fonctions .NET:
import clr
from System import Console
Console.WriteLine("Hello World!")
Liens externes
Jython
Implémentation open source pour JVM écrite en Java, sous licence Python Software Foundation. Il ne supporte que la version 2.7, la version 3 est en cours de développement.
Différences avec CPython:
- Intégration étroite avec JVM.
- Les chaînes sont en Unicode.
- Ne prend pas en charge les extensions pour CPython écrites en C.
- Ne souffre pas de Global Interpreter Lock.
- Les performances sont généralement inférieures, même si cela dépend des tests.
Bonjour le monde
print "Hello World!"
Vous pouvez également utiliser les fonctions Java:
from java.lang import System
System.out.println("Hello World!")
Liens externes
Transcrypt
Transcrypt est un outil permettant de précompiler un sous-ensemble assez étendu de Python en Javascript compact et lisible. Il présente les caractéristiques suivantes:
- Permet une programmation OO classique avec héritage multiple en utilisant la syntaxe Python pure, analysée par l'analyseur natif de CPython
- Intégration transparente avec l'univers des bibliothèques JavaScript orientées Web de haute qualité, plutôt qu'avec les bibliothèques Python orientées bureau
- Système de module hiérarchique basé sur URL permettant la distribution de modules via PyPi
- Relation simple entre le source Python et le code JavaScript généré pour un débogage facile
- Mappages multiniveaux et annotation facultative du code cible avec les références source
- Téléchargements compacts, Ko plutôt que MB
- Code JavaScript optimisé, utilisant la mémorisation (mise en cache des appels) pour éventuellement contourner la chaîne de recherche du prototype
- La surcharge de l'opérateur peut être activée ou désactivée localement pour faciliter la lecture mathématique lisible
Code taille et vitesse
L'expérience a montré que 650 ko de code source Python se traduit approximativement par la même quantité de code source JavaScript. La vitesse correspond à la vitesse de JavaScript manuscrit et peut la dépasser si la mémorisation des appels est activée.
Intégration avec 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>
Intégration avec JavaScript et 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 ()
Intégration avec d'autres bibliothèques JavaScript
Transcrypt peut être utilisé en combinaison avec toute bibliothèque JavaScript sans mesures ni syntaxe spéciales. Dans la documentation, des exemples sont donnés pour ao react.js, riot.js, fabric.js et node.js.
Relation entre Python et le code JavaScript
Python
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');
Liens externes
- Site officiel: http://www.transcrypt.org/
- Dépôt: https://github.com/JdeH/Transcrypt