単に:
git clone https://github.com/Omyyyy/pycom.git
cd pycom
pip install -e .
pycom.py.egg-info注:最後のコマンドが作成するフォルダーには触れないでください。それ以外の場合は機能しません。
インストール手順に正しく従った場合、これはすべてのディレクトリで機能します。
pycom (フラグ) [ソースファイル]
-i| |
--info(ブール値):
-r| |
--run(bool):
-rd| |
--runandelete(bool):
-o| |
--output[出力] (文字列):
-fm| |
--fastmath(bool):
-c| |
--check(bool):
Python バージョン 3.10 以降
g++ コンパイラの最新バージョン
Boost C++ ライブラリ。ここからダウンロード: https://www.boost.org/users/history/version_1_79_0.html (フォルダーを usr/gcc/include/ に配置)
まず、テスト用の依存関係をインストールします
pip install -r test-requirements.txt
次に、でテストを実行できます
# Unit tests
pytest tests
# Integration tests
pytest integration
Pycom は実質的に Python コードのコンパイラであり、「中間表現」として C++ を使用してネイティブ実行可能ファイル (Python 解釈の 20 ~ 30 倍の速度) に変換します。多くの標準ライブラリと組み込み関数とともに、ほとんどすべての Pythonic 構文をサポートしています。現在サポートされているものとサポートされていないものを確認するには、以下の 例のセクションを確認してください。
Python は遅いです。多くの最適化と新しい実装により速度が大幅に改善されましたが、Python コードからスタンドアロンの実行可能ファイルとして実行できるネイティブ コードを生成することは、実際には行われていません。その結果、Python コードは C/C++ のレベルの速度と移植性に達したことはありません。Pycom はこれに取り組むことを目指しています。
Pycom (現在) はすべてのバージョンのすべての Python 機能をサポートしていないため、単純なアプリケーションを実行したい場合にのみ使用してください (繰り返しますが、例を確認してください) 。
Pycom がサポートし、得意とすること:
反復回数の多いループ:
for i in range(1, 1000001):
if i % 3 == 0:
print(i)
def is_prime(n):
if n == 1:
return 0
for i in range(2, n):
if n%i == 0:
return 0
return 1
def main():
total = 0
for i in range(1, 101):
total += is_prime(i)
print(total)
基準 | CPython | パイコム | --fastmath を使用した Pycom | ピーピー |
---|---|---|---|---|
3 と 5 の倍数 | 9.383秒 | 0.133秒 | 0.106秒 | 0.495秒 |
素数 | 17.127秒 | 4.441秒 | 3.994秒 | 4.577秒 |
スタック操作 | 8.857秒 | 2.132秒 | 1.992秒 | 3.113秒 |
(これらはすべて の下にあります
./benchmarks)
if、
else、
for、
whileなど。
f''文字列
if...
elseなど)
throwand
finallyキーワード_
n = 3、これは Python の任意のサイズの整数ではなく、C++ 64 ビット整数として解釈されます。無限サイズの整数を宣言するには、次を使用します
n: int = 3
if __name__ == "__main__":タイプのものをサポートできません。
main()関数はすでにエントリポイントです
print("Hello, World") # This will compile
def printhello():
print("Hello!")
def main():
printhello()
# Will compile
def printhello():
print("Hello!")
printhello()
# Will not compile
不便ですし、後者もいつかサポートされるかもしれませんが、今のところはこんな感じです。また、
main()関数がある場合、エントリ ポイントとして値を返すことはできません。コンパイラはエラーをスローします。
私はこれらの例外と癖を取り除き、Pycom と CPython を完全に同一にするように努めますが、現時点では非常に実験的であり、改善の余地がかなりあります。