6

今日、私の親友が、最新の Go 言語と、Python の C 拡張機能のセットであるCythonの主な違いは何かと尋ねてきました。私はPythonについてあまり知識がありません.GoがCythonよりも優れている/劣っている理由を誰か教えてもらえますか?

4

6 に答える 6

9

Cython は、従来の意味での言語ではありません。これは、Python に似た構文 (実際には完全な Python 互換性を目指して努力しています) を取り、(Python C API を使用して) C コードを生成する Python 拡張機能を構築するためのプリプロセッサです。これを行うと、いくつかの特殊なケースの最適化を含めることができますが、C コードに組み込まれている Cython 固有の静的型情報を追加すると、これらの操作で Python ランタイムをバイパスして高速化できるため、真のメリットが得られます。

Go はコンパイル済みのプログラミング言語です。Go で最初にできることは、Python ランタイムを含まない実行可能ファイルを作成する/Python インタープリターを開始することです。これは Cython では不可能です。(技術的に不可能ではないかもしれませんが、Python を使用していない場合、Cython を使用する意味はありません)。Cython は C を生成するだけなので、コメント内の質問のほとんどは実際には当てはまりません。任意の C デバッガーを使用できます (ただし、Python 拡張機能であるという事実により、状況は少し複雑になります)。

于 2009-11-17T13:55:04.330 に答える
5

gevent は、Cython をコアに使用する並行ライブラリです。かなり速いようです:http://nichol.as/asynchronous-servers-in-python

于 2010-09-23T14:27:18.423 に答える
4

違いは?ほとんどすべて!

  • 並行性とチャネル。
  • インターフェイス。
  • 静的型チェック。
  • ...
于 2009-11-16T18:57:22.330 に答える
2

サポートについてはどうですか。Google が提供する単一のコンパイラに依存しています。Go がフォールドまたは商用になったらどうなるでしょうか。

Cython を使用すると、Cython プロジェクトがフォールドした場合、いつでも Python に戻る (または C コードを移植する) ことができます。

更新: 私は今、Cython に腹を立てていると言わざるを得ません。 スレッドサポートの欠如は大きな打撃です。Cython はスレッドセーフですが、深刻なコストがかかります。グローバル インタープリター ロックは、関数の実行中ずっと保持されます。これにより、コードベース全体での同時実行が無効になります!

Cython の C に似た機能は文書化が不十分であり、初心者を混乱させます。私は認めます。

Cython の目的は、Sage 数学ソフトウェアをサポートすることです。Go's は、最先端の高価な $$ ハードウェアに関する Google の野心的な計画をサポートすることです。

要するに、私はこれらの言語のどちらも好きではなくなりました。C++ に戻ります (再び)。私のお気に入りはCythonです。

于 2010-12-14T09:43:06.450 に答える
1

GO は、ゴルーチンとチャネルを導入します。言語に関するよくある質問を見る

于 2009-11-16T17:15:24.143 に答える
1

私が go を試す主な理由は、並行処理をプログラムに簡単に導入できると考えられるからです。プロセッサの速度が低下し、ますます複数のコアが利用可能になるため、それが「次の大きなこと」になると思います. マルチコア プロセッサを利用したい場合は、同時に実行できるようにプログラムを作成する必要があります。

以前、Erlang を見ましたが、Prolog に慣れていたにもかかわらず、まだ少し奇妙に感じました。これは、(C または Pascal ファミリーの) 「平均的な」プログラミング言語とは大きく異なります。しかし、一度コツをつかめば、その同時実行機能は簡単に使用できます。ごくわずかな労力で、スタックを使用せず、複数のオプションがあるたびに新しい「スレッド/プロセス」を生成する並列パーサーを作成することができました。

これまでのところ、多少の矛盾はありますが、問題ないように見えます。また、高速であることもボーナスです。

したがって、Cython が同時実行を容易にしない限り、私は行くことをお勧めします...

于 2009-11-17T10:50:17.713 に答える