これはGCCのプラグインであり、Libpythonとリンクしています。(私は)、コンパイラ内から任意のPythonスクリプトを呼び出すことができることを願っています。目的は、PythonにGCCプラグインを作成できるようにすることです。
プラグインはフリーソフトウェアで、GPLV3(または後で)でライセンスされています。
それはまだ「実験的な概念実証段階」にあります。クラッシュとトレースバックを期待しています(私はGCCの内部に慣れていないので、誤解しているかもしれません)。
これを使用して、ドメイン固有のチェック、または静的分析などのコンパイラエラー/警告を追加することがすでに可能です。これの私の目標の1つは、CPYThonの拡張機能を書くときに人々が犯す一般的な間違いについてGCCを「教える」ことですが、GCCの参照カウントセマンティクスについてGCCを教えるために、またはLinuxカーネルのロック、またはAPIの信号安全性について教えることができます。
その他のアイデアには、コード構造の視覚化が含まれます。 gcc.CFGインスタンスが与えられた場合、 gccutils.render_to_dot(cfg)およびgccutils.invoke_dot(cfg) graphvizとeoGを使用してコントロールフローグラフの便利な視覚化をプロットし、ソースコードがGCCのGIMPLE内表現とインターリーブします。
ドキュメントは以下を見ることができます。
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-devやgcc-plugin-develなどの配布パッケージで利用できます。私は使用します:
作る
プラグインを構築し、テストを実行します
使用することもできます。
デモを作成します
新しいコンパイラエラーを示すため。
開発はX86_64であり、他のアーキテクチャとどの程度互換性があるかはわかりません。
まだインストーラーはありません。理論的には、これらの引数をGCCの呼び出しに追加できるはずです。
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py other_args
プラグインが起動するときにスクリプトを実行してもらいます。
プラグインは、GcCutils.pyやLibcpyCheckerなどのサポートモジュールを見つけることができるように、Sys.Pathの終わりまで独自のディレクトリに絶対パスを自動的に追加します。
正確なAPIはまだ流動的です。現在、さまざまなパスでソース内の各関数に対して呼び出されるコールバックを登録することにより、イベントに接続できます。
「GCC」モジュール内で、GCCのさまざまなタイプをPythonオブジェクトとして公開します。実行することでAPIを見ることができます。
GCCをインポートします ヘルプ(GCC)
スクリプト内から。
これは現在、3つのプロジェクトです。
gcc-python-* :GCCのプラグイン。エントリポイント( init_plugin )はgcc-python.cにあります。
libcpychecker and cpychecker.py :プラグイン用に書かれたPythonライブラリ(およびドライバースクリプト)は、CPYTHON拡張コードでバグを見つけるのを支援する新しいコンパイラ警告を作成しています。
cpybuilder :CPYTHON拡張機能のCソースコードをプログラム的に生成するための便利なモジュール。これを使用して、GCCプラグインの部分を生成し、CPYCheckerスクリプトのセルフテストでも生成します。 (私は最初、前者にCythonを使用しようとしましたが、「ツリー」タイプの階層を包むには、よりプログラム的なコントロールが必要でした)
コーディングスタイル:PythonとGCCにはそれぞれCの独自のコーディングスタイルガイドがあります。Python(PEP-7)をフォローすることを選択しました。
[Docs]ディレクトリ内にAPIドキュメントが表示されます。これは、rustructuredText形式で記述されています(実際には、このファイルと同様)。スフィンクスをインストールしている場合は、次のことを使用してこれらのドキュメントを再生できます。
HTMLを作成します
docsディレクトリ内。 Sphinxは、Fedora/Rhelボックスのpython-sphinxパッケージです。
より詳細なドキュメントはdocs/getting-involved.rst内で見ることができます。
楽しむ! David Malcolm <[email protected]>