
このフレーム形成の記事は、Rubyに対するPythonの利点とPythonに対するRubyの利点に関する情報を1か所に集めることを目的としています。 両方の言語を使用した長年の経験に基づいて、言語自体と標準ライブラリの比較を制限しようとしました-Webフレームワーク、開発環境、および利用可能なライブラリの比較は、多くのコピーが私なしでここで壊れているため、この記事に
は含まれていません。
Pythonから始めましょう。アルファベット順に
- ドキュメントはRubyよりもはるかに優れています。 導入部、文学の余談、多数の例があります。 Rubyには、DLやWin32APIなどの多くのモジュールがありますが、これらはまったくドキュメント化されておらず、ドキュメント全体は非常に脆弱です。
- オペレーティングシステムのリアルスレッドが使用されます。 両方の言語がGIL(グローバルインタープリターロック)を使用しているという事実にもかかわらず、実際のスレッドを使用すると、Pythonコードは別のスレッドでブロッキング操作を実行できます-たとえば、シェルスクリプトまたはオペレーティングシステム関数の呼び出し-他のスレッドをブロックしません。 バージョン1.9より前のRubyでは、1つの実際のスレッドが使用され、言語スレッド間の切り替えがエミュレートされていました。 実際には、これは別のRubyスレッドでシェルスクリプト(ファイルのコピーなど)またはオペレーティングシステムの機能(メッセージボックスの表示など)を呼び出すと、このスクリプト内の他のすべてのスレッドが停止するという事実につながります。 バージョン1.9から、Rubyはオペレーティングシステムの実際のスレッドを使用しますが、現時点(バージョン1.9.3-p125)では、多くの欠点によりこれを利用することができません。別のスレッドのオペレーティングシステムウィンドウも残りを停止します-今回はGILが発生しないためです。
- Unicodeサポート-Rubyでは、バージョン1.9からのみ登場しましたが、移行プロセスはまだ完了していません。
- 名前付き関数の引数のサポート。 Rubyでは、このアプローチは最後の引数を辞書に渡すことでエミュレートできますが、これによりコードの量が増えます。

- オペレーティングシステムと対話するための非常に優れた組み込みctypesライブラリ。 rubyに組み込まれているruby dlライブラリは、文書化がはるかに難しく、使用がより困難です-著者はgem 'ffi'の使用を推奨しています。
- 関数はオブジェクトです-関数へのリンクは、別の関数に渡される変数、配列に配置できます。 rubyでは、関数の識別子自体が呼び出しであるため、関数への参照を渡すには、コードを複雑にする中間オブジェクト「proc」でラップする必要があります。

- デコレータのサポート-動作を変更するオブジェクトに注釈を追加する機能。 ルビーでは、これはイントロスペクションを使用してエミュレートできます-しかし、コードはより複雑になり、この非常にイントロスペクションを備えた自転車が必要になりますが、これもあまり高速ではありません。

- ネイティブJSONサポート。 Rubyで-バージョン1.9以降のみ
- ネイティブSQLiteサポート。 Rubyにはデータベースツールが組み込まれていません。
- 組み込みのGUI「Tk」は、すべてのプラットフォームで同様に十分にサポートされています。 RubyにもTkがありますが、Windowsのインストーラーはデフォルトではインストールしません。10.6以降のOSXでは、システムに同梱されているRubyで機能せず、再コンパイルする必要があります。
- Rubyでは、メインスレッドの外部でスローされた例外は、デフォルトの例外ハンドラーによって処理されません。
- 標準ライブラリのアーカイブの展開とパックのサポート。
- サポートされているすべてのプラットフォームに対するQtライブラリGUIの良好なサポート そして、Qtはご存知のように力です。
- 正規表現で名前付きキャプチャグループをサポートしました。 Rubyの場合-バージョン1.9以降のみ
- 一般的に、より一般的。 プログラムまたはライブラリにバインディングがある場合(VirtualBox、Qt、GTK)、ほとんどの場合、それはPythonです。
- 安定したバージョン2.6と2.7はほとんど違いがなく、主流であり、3.xへの移行は非常に遠い将来です。 Rubyは現在、互換性のないブランチ1.8から1.9に積極的に移行しています-非常に痛みがあり、痛みがあり、妨害を生成します。
Pythonの方が良い印象を受けましたか? Rubyの側面から見る
- 文字列を補間すると、文字列にRubyコードを含めることができ、その実行結果が文字列に自動的に置き換えられます。

- ネイティブのopensslサポート。 pythonの場合-あまり便利ではなく、文書化が不十分なpyopenssl実装でActivePythonを使用するか、より便利なm2cryptoを自分でインストールします。これは、特にWindowsでのインストールが容易ではありません。
- 内部DSLの作成のサポート:ブロック、instance_eval、括弧なしの関数呼び出し。
- シェルコマンドを呼び出してその結果を取得するための便利なメカニズムは、2文字だけです。 スペースを含むパスで正しく動作します-Pythonのサブプロセスモジュールについては言えません。スペースで正しく動作するには、コマンドとその引数を文字列ではなくリストで渡す必要があります。
- 相対パスにモジュールを含める機能。 Pythonは技術的には可能ですが、多くのコードといくつかの不快な特殊効果があります。

- WindowsのネイティブOLEサポート。 Pythonには優れたpyWin32モジュールがありますが、手動でインストールするか、ActivePythonをバンドルされている場所にインストールする必要があります。
- コレクションの外部でインデックスを作成するとnilが返され、場合によっては非常に簡潔なコードを作成できます。
- 予期されるエラーを抑制するための便利な構文。

- 適切なerbテンプレートエンジンが標準ライブラリに含まれています。
- 自動削除で一時フォルダーを作成する機能。 Pythonでは、このような機会はバージョン3.2でのみ現れました-これは非常に遠い未来です。
- 言語構成スイッチがあります。 しかし、Pythonでは-いいえ。
- バージョン1.9から、正規表現の名前付きキャプチャグループを自動的に変数に変えることができます。

- 日時の操作のサポートが向上しました。 Python標準ライブラリはUTCでも動作しません。
- 特殊効果なしでWindowsでファイルの内容を読み取る。 Pythonでは、ファイルはデフォルトで「テキストモード」で開きます。このモードでは、自動的に改行が変換され、マジックEOFシンボルに達すると読み取りが中断され、不快なバグが発生する可能性があります。
- スレッドには、外部からスレッドをシャットダウンできるexitメソッドがあります。 Pythonでは、フローを「外部」で停止することはできません-停止フラグを使用して独自の自転車を作成する必要があります。
結論
リストを確認して、タスクの言語を選択します。 Rubyは伝統的にテキスト処理、DSL、シェルオートメーションの処理に優れています(レーキとand望を見てください)。 Python-マルチスレッド、GUI、動くものすべてへのバインディング、業界最高のドキュメントとサポート。 Rubyを使用する場合、可能であれば、バージョン1.9.xを使用することをお勧めします-1.8.xと比較すると、変更するには多すぎるためです。 質問、コメント、炎? コメントへようこそ。
PS「ただし、<比較ポイント>の場合は<言語>を好むので、<理由>」という形式のコメントを予期しています。 フェルトペンは、味と色が異なります。実際の経験と仕事の鐘楼から、さらに現場の建設からはほど遠いことを伝えます。 この記事では、専門的であるとはいえ主観的な見方のみに基づいて「強み」と「弱み」として置いた
違いについて説明します。 この記事が、開発者が自分のタスクに使用する言語をもう少し意識的に選択できるようになる基礎になっていることを願っています。
PPS「<比較ポイント>で<言語>のコードのスペルが間違っています-これは別の方法で行われます」などのコメントを予測します。 例は誇張されており、アプリケーションのベストプラクティスを考慮せずに、言語の
同じ機能を比較しています。 記事の膨張を防ぐためだけに。 コンパクトになりたい。