2016-10-26 3 views
3

私はしばらくの間、Cairo Graphicsを使用していました。より高水準の言語(つまり、Haskell、私もPythonを試しました)で使用したいと思います。それはうまく動作しますが、私は内部でどのように動作するかについて私の頭にはっきりとしたイメージがありません。Cairo Graphicsはc以外の言語では速度が遅いですか?例えばHaskellでは?

私のHaskellソースがコンパイルされるとき、オブジェクトファイルのカイロ関連部分は、cソースからコンパイルされたものと同じですか?

cairo_line_to (cr, 100, 100)は、HaskellのLineTo 100 100と同じマシンコードにコンパイルされますか?パフォーマンスは同じですか?

+0

最も簡単な方法は2つのバイナリを逆アセンブルすることです。私は、ハスケルのコンパイラがカイロのコードを遅くすることはできないはずだと思っています。 – unwind

+1

しかし... ...バイナリを逆アセンブルする - >私のリーグから少し外れた。 – nico7et8

+0

Haskellコンパイラは最適化されていない可能性もありますので、そこではパフォーマンスが低下する可能性があります。 – oldtechaa

答えて

9

Cライブラリを呼び出すほとんどの言語のFFIオーバーヘッドがあります。これは、C関数の呼び出しごとに小さな(通常は)一定のオーバーヘッドですが、大量の呼び出しを行うと加算されます。

これは、Cを呼び出すことに特有のものではありません。メモリ管理システムを越えていれば、その仕事をします。それで、現代のOpenGLは、一度に1つの三角形ではなく、巨大なブロックでグラフィックスメモリにデータを送る呼び出しを可能な限り行うことを推奨しています。

関連する問題