今日、私の親友が、最新の Go 言語と、Python の C 拡張機能のセットであるCythonの主な違いは何かと尋ねてきました。私はPythonについてあまり知識がありません.GoがCythonよりも優れている/劣っている理由を誰か教えてもらえますか?
6 に答える
Cython は、従来の意味での言語ではありません。これは、Python に似た構文 (実際には完全な Python 互換性を目指して努力しています) を取り、(Python C API を使用して) C コードを生成する Python 拡張機能を構築するためのプリプロセッサです。これを行うと、いくつかの特殊なケースの最適化を含めることができますが、C コードに組み込まれている Cython 固有の静的型情報を追加すると、これらの操作で Python ランタイムをバイパスして高速化できるため、真のメリットが得られます。
Go はコンパイル済みのプログラミング言語です。Go で最初にできることは、Python ランタイムを含まない実行可能ファイルを作成する/Python インタープリターを開始することです。これは Cython では不可能です。(技術的に不可能ではないかもしれませんが、Python を使用していない場合、Cython を使用する意味はありません)。Cython は C を生成するだけなので、コメント内の質問のほとんどは実際には当てはまりません。任意の C デバッガーを使用できます (ただし、Python 拡張機能であるという事実により、状況は少し複雑になります)。
gevent は、Cython をコアに使用する並行ライブラリです。かなり速いようです:http://nichol.as/asynchronous-servers-in-python
違いは?ほとんどすべて!
- 並行性とチャネル。
- インターフェイス。
- 静的型チェック。
- ...
サポートについてはどうですか。Google が提供する単一のコンパイラに依存しています。Go がフォールドまたは商用になったらどうなるでしょうか。
Cython を使用すると、Cython プロジェクトがフォールドした場合、いつでも Python に戻る (または C コードを移植する) ことができます。
更新: 私は今、Cython に腹を立てていると言わざるを得ません。 スレッドサポートの欠如は大きな打撃です。Cython はスレッドセーフですが、深刻なコストがかかります。グローバル インタープリター ロックは、関数の実行中ずっと保持されます。これにより、コードベース全体での同時実行が無効になります!
Cython の C に似た機能は文書化が不十分であり、初心者を混乱させます。私は認めます。
Cython の目的は、Sage 数学ソフトウェアをサポートすることです。Go's は、最先端の高価な $$ ハードウェアに関する Google の野心的な計画をサポートすることです。
要するに、私はこれらの言語のどちらも好きではなくなりました。C++ に戻ります (再び)。私のお気に入りはCythonです。
GO は、ゴルーチンとチャネルを導入します。言語に関するよくある質問を見る
私が go を試す主な理由は、並行処理をプログラムに簡単に導入できると考えられるからです。プロセッサの速度が低下し、ますます複数のコアが利用可能になるため、それが「次の大きなこと」になると思います. マルチコア プロセッサを利用したい場合は、同時に実行できるようにプログラムを作成する必要があります。
以前、Erlang を見ましたが、Prolog に慣れていたにもかかわらず、まだ少し奇妙に感じました。これは、(C または Pascal ファミリーの) 「平均的な」プログラミング言語とは大きく異なります。しかし、一度コツをつかめば、その同時実行機能は簡単に使用できます。ごくわずかな労力で、スタックを使用せず、複数のオプションがあるたびに新しい「スレッド/プロセス」を生成する並列パーサーを作成することができました。
これまでのところ、多少の矛盾はありますが、問題ないように見えます。また、高速であることもボーナスです。
したがって、Cython が同時実行を容易にしない限り、私は行くことをお勧めします...