サーチ…


IronPython

C#で書かれた.NETとMonoのオープンソース実装で、Apache License 2.0でライセンスされています。 DLR(動的言語ランタイム)に依存しています。これはバージョン2.7のみをサポートし、バージョン3は現在開発中です。

CPythonとの違い:

  • .NET Frameworkとの緊密な統合。
  • 文字列はデフォルトでUnicodeです。
  • Cで書かれたCPythonの拡張をサポートしていません。
  • グローバルインタープリタロックに悩まされません。
  • パフォーマンスはテストに依存しますが、通常はパフォーマンスは低下します。

こんにちは世界

print "Hello World!"

.NET関数を使用することもできます。

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

外部リンク

Jython

Javaで書かれたJVM用のオープンソース実装で、Python Software Foundation Licenseでライセンスされています。これはバージョン2.7のみをサポートし、バージョン3は現在開発中です。

CPythonとの違い:

  • JVMとの緊密な統合。
  • 文字列はUnicodeです。
  • Cで書かれたCPythonの拡張をサポートしていません。
  • グローバルインタープリタロックに悩まされません。
  • パフォーマンスはテストに依存しますが、通常はパフォーマンスは低下します。

こんにちは世界

print "Hello World!"

Java関数を使用することもできます。

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

外部リンク

トランスクリプト

Transcryptは、Pythonの相当な部分集合をコンパクトで読みやすいJavascriptにプリコンパイルするためのツールです。それには以下の特性があります:

  • CPythonのネイティブパーサーによって解析された純粋なPython構文を使用して、複数の継承を持つ古典的なOOプログラミングを可能にする
  • デスクトップ指向のPythonスクリプトではなく、高品質のウェブ指向のJavaScriptライブラリとのシームレスな統合
  • PyPi経由のモジュール配布を可能にする階層的なURLベースのモジュールシステム
  • 簡単なデバッグのためのPythonソースと生成されたJavaScriptコードとの単純な関係
  • マルチレベルのソースマップと、ソースコードを含むターゲットコードのオプションのアノテーション
  • コンパクトなダウンロード、MBのではなくkB
  • オプションでプロトタイプのルックアップチェーンをバイパスするためのmemoization(コールキャッシング)を使用した最適化されたJavaScriptコード
  • 演算子のオーバーロードをローカルでオン/オフに切り替えることで、数値計算が容易になります。

コードサイズと速度

経験によると、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コードの関係

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');

外部リンク



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow