PythonとRubyを比較する

巴扎黑
巴扎黑オリジナル
2017-09-15 10:47:581467ブラウズ

この記事では、Python と Ruby の類似点と相違点、それぞれの長所と短所などを比較し、Python と Ruby のリソースと学習曲線を示します。これら 2 つの間で迷っている友人に非常に適しています。いいね

最近、バックエンド言語を学ぼうと思って、ruby と python のどちらを使うか迷ったのですが、同じ問題を抱えている方のお役に立てれば幸いです。

1. 類似点と相違点の比較選択

1. Python と Ruby の類似点:
• どちらも単純な構文を重視し、より一般的な表現を持っています。 Pythonはインデント、Rubyは基本的な表現です。すべてのシンボルが大幅に削減されました。
•これらはすべて動的データ型です。いずれも豊富なデータ構造を持っています。
•どちらもC言語拡張機能があり移植性があり、perlよりも移植性が優れています。組み込み言語としても使用できます。
•どちらもオブジェクト指向言語であり、大規模プロジェクトの開発ツールとして使用できます。
•すべてに豊富なライブラリがサポートされています。
•一部のツールが GNU ワールドに属していることを除き、最も寛容な著作権ライセンスも持っています。
•どちらもLisp固有のeval関数を持っており、関数をパラメータとして受け取ることもできます。
•グラフィカルインターフェイスを備えた専用のRubyエディタもあります。
•どちらも広範な C ライブラリでサポートされています。 qt、gtk、tk、SDL、FOXなど、RubyはSWIGインターフェースを実装する予定です。
•すべてに完全なドキュメントが付いています。

2. Pythonと比較したrubyの利点:
•正規表現とHTMLの埋め込み機能を備えています。 Python にも正規表現がありますが、Ruby ほど便利ではなく広く使用されています。 Python の埋め込み HTML プロジェクトはまだ始まったばかりです。 RubyにはApache Modモジュールもあります。 Ruby 自体も、rac や doctools などの多くの UNIX ツールを実装しています。 PythonよりLinuxに近い。
•Python よりも完全なオブジェクト指向構文。
•Ruby のライブラリ全体はクラス継承で構造化されています。
•基本的なデータ型と演算子はオーバーロードできます。
•Ruby の主要な関数は、関数ではなくオブジェクト メソッドの呼び出しを通じて実装されます。 Python もこの分野で開発されていますが、Ruby ほど徹底していません。
•Ruby クラスはより標準化された単一継承であり、インターフェイスなどの概念も実装されています。
•Pythonは条件文やループ文をリストで実装できますが、rubyは「ブロック」メソッドを使用してこの機能を実装するため、Pythonよりも柔軟で汎用性が高くなります。
•RubyにはLispと同様に徹底的な関数型の条件文やループ文などが存在します。文章がより表現力豊かになります。
• rac などのいくつかの UNIX ツールが付属しています。

3. Python と比較した Ruby の欠点:
•最大の欠点はまさに Ruby の能力によって引き起こされます。 Python のような単純さはありません。より複雑なオブジェクト指向構文、「ブロック」構文の導入、正規表現の導入、および一部の省略タグはすべて、言語の複雑さを増大させます。
•Python のインデント表現は、ruby の基本的な表現よりも目に心地よいです。ruby プログラムの終端は不快です。もちろん、Ruby は end メソッドが Python よりも高度であると考えています。
•Ruby には、Python の「イントロスペクション」機能や、プログラム ファイルからドキュメントを生成する機能がまだありません。
•Ruby は国際化をサポートしていません。国際化サポートは Ruby の計画に含まれています。なぜなら、RubyはPythonよりも歴史が浅いからです。
•Ruby には jython のようなものはありません。

4. Python と Ruby の間の言語の選択:

シンプルさが最善であるという観点からは、Python を選択するのが正しいです。 Python は、シンプルな言語を探している人に適しています。これにより、Python の人気が高まり、より多くのサポートが得られる可能性があります。しかし、より強力な構文機能を追求したい場合は、ruby が良い選択です。 Ruby と Python の考え方は非常に似ているので、まず Python から始めて、Python が十分に強力でない場合は Ruby を探してください。

ruby と python の比較は、Wubi と Pinyin 入力方式の比較に似ています。ピンインは、初心者向けの入力方法としても、長期的に使用する入力方法としても問題ありません。 Wubi は、より要求の厳しい状況に適しています。パフォーマンスを追求する場合は、Ruby を学ぶのもよいでしょう。プログラミング言語に興味があり、さまざまなプログラミングの概念を理解したい人は、Ruby を学ぶのも楽しいでしょう。

2. どちらも独自の特徴があります:

1. Python は構文の点でよりシンプルですが、Ruby はよりセクシーです

他のスクリプト言語と比較して、Python の構文はあまり多くのトリックがなく、比較的厳格です。実際、Guido の設計言語の方向性は、Python のコードの強制インデントからもわかります。厳格な構文は、Rails のようなフレームワークのような、より性的なものを扱うのが簡単ではないということです。また、Python は DSL のようなことはできません。しかし、厳格な構文のもう 1 つの側面は、より標準化されており、比較的多くの機能を備えているということです。ソフトウェア開発に適したエンジニアリング要件により、開発のための大規模なチームを組織することが容易になります。

Ruby の構文は非常に柔軟です。Matz の Ruby 設計の出発点は、遊びのためのコーディングでもあります。そのため、十分なスキルがあれば、Ruby を使用して DSL を書くことができます。プログラマーにとって、ruby をプレイするのはとても楽しいことです。 Python コミュニティの誕生ではなく、Ruby コミュニティでの Rails の誕生は間違いなくプログラミング言語に直接関係しています。ただし、Ruby の柔軟な構文の裏には、プログラミング実装スタイルの多様性があり、これが大規模チームのコラボレーションと管理にとっての課題となります。

2. Python のパーサー実装はより成熟しており、サードパーティのライブラリは高品質です

Ruby 1.9 パーサーは大幅なパフォーマンスの向上と多くの新機能を実現しましたが、ソース コード実装の観点から見ると、基本的には Ruby 1.8 のソース コードにパッチを適用することによって機能が追加されます。 Ruby はソースコードの構造上、実装が古すぎるため拡張が難しく、パッチを当て続けるしかありません。これが、Ruby コミュニティで非常に多くの新しい Ruby パーサー実装が登場している理由です。これにより、Ruby の開発速度が大幅に制限されてきました。比較的に、Python パーサーはより成熟しており、安定しています。

サードパーティライブラリの数という点では、RubyはPythonに劣りませんが、PythonにはRubyよりもはるかに多くの高性能、高品質で実績のあるサードパーティライブラリがあります。あまり成熟していないため、Ruby の開発は大幅に制限されています。

3. Python は幅広い応用分野を持っていますが、Ruby は現在主に Web 分野に限定されています。サーバー バックエンドでのサーバー実装。 サーバー バックエンド さまざまな集中操作、全文検索、さまざまなテキスト処理、システム管理など。さらに、wxPython はデスクトップ アプリケーション分野で非常に成熟したクロスプラットフォーム GUI フレームワークでもあります。 。オペレーティング システムのカーネル API の呼び出しなど、一部の特殊なアプリケーションでは、Python を使用して inotify 機能を直接呼び出すことで、多数の小さなファイルのリアルタイム同期ソリューションを実現できます。 Linuxカーネル。つまり、Python はソフトウェア開発のスイス アーミー ナイフであり、何でもできます。

Ruby パーサーと Ruby クラス ライブラリの制約のため、現在、Ruby の応用は主に Web 開発の分野に限定されています。 Douban は初期に Ruby on Rails を検討したそうですが、Ruby では他のことができず Python では何でもできるため、最終的には Ruby を諦めて Python を選択したそうです。

4. Ruby は Web 分野の王様です

インターネット アプリケーションがソフトウェア開発のさまざまな分野にさらに浸透するにつれて、実際、Web 開発がソフトウェア業界全体の発展に占める割合が増加しています。 Ruby は他の分野では非常に限られていますが、Web 開発の分野では絶対的な王様です。 Rails フレームワークは、潜在的な競合他社よりもはるかに進んでいます。したがって、Ruby には何らかの問題があるかもしれませんが、Web 開発に関して言えば、Rails がほぼ唯一の選択肢であることは議論の余地がありません。

Python は非常に包括的ですが、Web 開発の分野では傑出したものではありません。Web フレームワークは数多くありますが、どれも主導権を握ることはできません。Django は Python コミュニティで比較的人気がありますが、欠点もあります。多くの側面。今日のインターネット アプリケーションは、多くの場合、複数の言語でプログラミングされています。Web 以外の Ruby の欠点は、他の言語で補うこともできます。

5. Python のパッケージ管理は Ruby ほど優れていません

Python のサードパーティ ライブラリは高品質で成熟していますが、Python コミュニティには、Ruby Gem のような優れたパッケージ管理ソフトウェアやパッケージ公開 Web サイトがありません。したがって、アプリケーションの構築は Ruby ほど便利ではなく、ユーザーフレンドリーでもありません。特にクラスライブラリのバージョンアップの際にはRuby Gemほど簡単ではないトラブルが多く発生します。

しかし、一般的に、Python と Ruby は非常によく似た 2 つのプログラミング言語です。両方のプログラミング言語を学習したとしても、それほど時間はかかりません。私が個人的に選択する場合は、まず Rails を使用して Web アプリケーションを構築し、次に状況に応じて Python または Java を選択してサーバーのバックエンド操作を処理します。つまり、未来はまだハイブリッド プログラミングの時代です。私たちはいくつかのプログラミング ツールについてもっと知り、必要に応じて活用する必要があります。

3. 「Ruby と Python の比較」の修正

1. ドキュメント、オープンソース プロジェクト、およびライブラリのサポートについては、桁違いの問題ではありません。なぜ横に並んでいるように見えるのでしょうか。

2. Python にはコアに正規表現モジュールが組み込まれていませんが、re 標準ライブラリのサポートはあります。その時の目的は、コアを可能な限り小さくすることでした。よくわかりませんが、標準ライブラリと組み込みの使用の違い、あるいは利点は何ですか?そして、Python で正規表現を使用するのは、呼び出し時に複数の import

を実行し、保存された無数の文字だけで、この問題を解決するのに十分です。

3. 埋め込み HTML 関数に関しては、Python で利用可能な C/Python デュアル実装の Cheetah テンプレートがあり、これがどれほど成熟しているかは Zope のおかげだと言われています。関数はRubyにありますか?

4. mod_ruby モジュールが登場したのは短期間です。作者が mod_python について聞いたことがないのであれば、彼は本当に無知です。私が 1 年前に mod_python3.2.8 ドキュメントを翻訳したとき、mod_python はすでに非常に成熟しており、ほぼすべての Python

WEB フレームワークで効率を向上させるために mod_python 上に構築することがサポートされていました。ただし、mod_rubyは年に数回しか更新されないそうです。 mod_python には gnu.org のような重量級アプリケーションもありますが、mod_ruby にもあるのでしょうか。

5. さらに、unix ツールについても言及します。 Red Hat

Linux のインストール プログラムは常に Python で書かれています。Ubuntu を使用している場合、システムのアップデートを促すプログラムも Python で書かれています。

6. rac と doctools、私の無知を許してください。検索した結果、rac についての中国語のコンテンツは yacc に似ていることがわかりました。 Google の観点から、RACC の使いやすさについては多くを言いません。 yacc ツールが日常のプログラミングにどれほど役立つのかよくわかりませんが、作者が言及していたので、名前だけ聞いたことがあり、使ったことのなかった Spark を探しました。グーグルの結果は、「racc

ruby」:「python

spark」=159,000:659,000です。 doctools については、何も言うことはありません。Google には 15,800 件のレコードしかなく、これが何に使われているのかまだわかりません。そこで、おそらく似ているものを見つけて比較したところ、Docutils と Google のレコードは 25,400 でした。

7. 「Python ライブラリよりも完全なオブジェクト指向構文」。オブジェクト指向の目的は何ですか?さらに、Ruby は Python に似ているのでしょうか? ほとんどの標準ライブラリは、一般的な名前を推測するだけで済み、直接使用する必要はありません。モジュールの内容が少なすぎて覚えにくいため、2 回目までは直接記述できますか?さらに、オブジェクト指向は特効薬でも最先端のソフトウェア エンジニアリングのアイデアでもありません。

8. 「Rubyライブラリ全体がクラス継承構造に基づいている」 個人的にはJavaのカスだと思っていますが、宝物として勉強させていただきました。おそらくこれは、Java プログラマーを救う Ruby の利点でもあります。

9. 「基本的なデータ型と演算子はオーバーロードできます。」 これは、Python での __add__ などのオーバーロードがカウントされるかどうかは、あまり明確ではありません。

10. 「Ruby の主な機能は、関数ではなくオブジェクトのメソッド呼び出しによって実現されます。」 この文の意味がわかりません。また、徹底を追求しすぎず、実践的という言葉の方が魅力的であることをおすすめします。

11. Python はプログラマに柔軟性を与えるために単一継承を厳密に必要としません。また、インターフェースに関しては、Python で同じ名前の関数が定義されていれば、同じインターフェースを持つものとみなされます。形而上学がここまで上がってきて、ちょっと混乱してしまいました。インターフェイスに関しては、Ruby のいわゆるインターフェイスは単なるミックスインですので、あまり自信を持ってはいけません。これは Python のいくつかの大規模なプロジェクトで実装されていますが、Python にとって明らかに意味がないため、これ以上使用されることはありません。

12. Lisp 関数型プログラミングに関しては、Python にはマップ、zip、フィルターなど、そしてもちろんラムダなど、多くの組み込みサポートがあります。サポートについて話すのではなく、実用性について話しましょう。 Python 愛好家の中には、関数型プログラミングがコードの可読性に影響を与えると今でも考えており、それを避けようとしている人もいます。したがって、何かをサポートすることを考える前に、まずそれが良いことなのかどうかを考えてください。

13. 「最大の欠点はまさにルビーの力によって引き起こされます。」あまりにもひどいのでノーコメントです。

14. ははは、Ruby は国際的にサポートされていません。当時、あの小さな日本人は何を思ったのでしょうか。彼は英語で CET-4 に合格しましたか?

15. jython に関しては、著者の原文が比較的古いためか、現在では jruby もあります。 Python には、jython、ironpython、pypy、pyrex など、多くの実装もあります。 Python の優秀性は、必ずしも他の言語で実装する必要はありません。もちろん、Java が Ruby を窮地から救ってくれることを期待するのは言うまでもありません。

さらに、Ruby のいくつかの欠点を回避しないでください:

16. Ruby にはローカライズされたスレッドがありませんが、マルチコア CPU をまったく利用できない疑似スレッドが使用されます。 CPython はローカライズされたスレッドを使用しますが、GIL を使用するため、マルチコア CPU を活用できません。しかし、スタックレスの登場により、この問題は完全に解決され、スタックレスは Python を並列コンピューティングの高みに引き上げました。このレベルの競合相手は Erlang であり、当然 Ruby をこじ開ける必要はありません。超軽量のスレッディング テクノロジにより、性能の悪いマシンでも数十万のスレッドを簡単に実行できます。 Twisted に基づく非同期プログラミングもオプションとして提供されます。

17. 私が Python を学び始めたとき、「Python は主流の動的言語の中で最も遅い」という話を聞きましたが、そう言った人は Ruby をまったく真剣に考えていなかったことが後でわかりました。 Ruby が主流の動的言語に含まれる場合、Python よりも桁違いに遅い言語が存在することになります。

18. ルビーって人気あるの? PHPに行くつもりですか? PHP は良いのですが、WEB プログラミングにしか使えないのが問題で、もう少しシステムを必要とするものは C を使わなければなりません。そして今、Ruby はこの道をたどっているようです。ある日、誰かが「Ruby はクライアント プログラミングに使用できる」というニュースを発表し、誰もが好奇心をそそられました。さらに、現在のRORが何かを置き換えることができるかどうかはまだ不明です。 Java

WEB開発から救出された人全員がRubyに行ったわけではありません。

4. 「Ruby か Python?」についてコメントする》

PythonとRubyの設計思想は確かに大きく異なりますが、この問題に関しては、どちらが優れているかについてはコメントしません。効率に関して言えば、Ruby を Python と比較するべきではありません。 Ruby は疑似スレッドであり、マルチコア CPU を活用する可能性はありませんので、そのまま渡します。そしてPythonはネイティブを使用します

スレッド、一部のモジュールがスレッドセーフではないため、マルチコア CPU のアプリケーションを制限するために GIL が追加されました。私の最近のテストでは、Twisted の非同期スレッドを使用した後、マルチコア CPU の計算能力を十分に活用できました。実行効率は桁違いですが、自分で試してみればわかります。

Java と Python を比較すると、著者の創造性がわかります (笑)。オープンソース プロジェクトはダーウィンの自然選択と非常に一致しています。Ruby にオープンソース プロジェクトがないことが利点なのでしょうか。また、PythonではWEB

フレームワーク以外で重複が多すぎるプロジェクトを見たことがありません。たとえば、pypcap は基本的に pcapy を排除しました。

リソースに関して言えば、Ruby にはまだ長い道のりがあるので、どちらの側も強いという点については、あまり並置しないでください。 Java コミュニティの人々が Ruby を学ぶ傾向にあるのですが、個人的には、Java に慣れている開発者の視野が狭すぎるだけだと思います。言語はツールであり、オブジェクト指向もツールです。Python も関数型プログラミングをサポートしているとは限りません。なぜ著者はそれについて言及しなかったのですか。さらに、Python の実践の多くは開発効率を第一の目標としており、さまざまな形式に限定されず、知識が限られた多くの人々から広く批判されている C++ の多重継承も Python でサポートできます。問題は、あなたが気に入らないものをサポートすることではなく、できるだけ多くの人に好きなものを使ってもらうことです。さらに、Ruby 開発者が常に OO では不十分だと考えている Python の例は、Python がシーケンスの長さを取得する場合に len(x) メソッドを使用することです。この質問に関して、Ruby 開発者が x.length を OO とみなすことができると考えている場合、Python は x.__len__() を直接使用して長さを取得することもできます。メソッドを使用してプロパティをカプセル化する Java の観点から見ると、どちらがより OO なのでしょうか (笑)。

Ruby は日本人の作品です(笑)、これについては詳しく説明しません。日本が嫌いな中国人はたくさんいます。ここでは非技術的なことは使わずに、技術的なレベルでのみ Ruby を軽蔑することができます。 。

Ruby on

rails に関しては、Ruby コミュニティはほぼすべてのエネルギーをこれに集中しています。しかし、これはRubyの単純さを示すだけです。多くのRORの模倣者がRORをはるかに超える無数の高度な機能をリリースしていることは事実によって証明されています。RORを置き換えるのは単なる先入観から来ています。今、Ruby が突然 ROR を失ったらどうなるでしょうか?筆者の言うzendに関しては、RORに比べれば卵で石を叩くようなものです。私はPythonのWEBフレームワークを2つ学習しており、普段はPythonとRubyのほうに色々と注目していますが、これまで一度も勉強したことがありません。 zendのことは聞きましたが、それが作者の作品かどうかはわかりませんが、ははははははありません。 WEB フレームワークで競争する必要がある場合は、django、Quixote、mod_python などを使用して比較できます。 ROR模倣品の代表格であるDjangoは現在も成長を続けていますが、すでにRORを上回る機能を多数備えており、性能もRORよりはるかに優れていることは言うまでもありません。 Quixote を使用する douban.com は、Python と Ruby を使用したすべての Web サイトの中で最大のトラフィックを持ち、同じハードウェア構成の ROR と比較して 2 倍以上の速度を示します。これは、WEB サーバーなどのさまざまな等価損失を除去した後で知っておく必要があります。 、これは桁違いに速いものです。 mod_pythonについてはwww.gnu.orgがこれを使っているそうです。 Ruby が依然としてオープンソースでありたいのであれば、Ruby は常に Python の影の中に存在することになります。

起動の早さに関しては人それぞれ事情が違うのでコメントしません。柔軟性が何をもたらすかについては、意見の問題ですので、コメントしません。著者は Python を始めるのがいかに難しいかについて語っていますが、Ruby がどれほど簡単であるかは実際にはわかりません。初めて Python を学んだとき、11 日目に Python で字句パーサーを作成しました。これは今でも私のブログで公開されています。したがって、初級の難易度に関しては、他人の意見を聞かずに、みんなで自分の力で挑戦してみるのが良いでしょう。

RORで生成されるディレクトリには色々なものがあり、全てを理解するのに時間がかかるとありますが、これはまさにIDE症候群です。 Python では、TurboGears が典型的な例です。アプリケーション全体がどのように動作するかを理解したい場合は、コアの Cherrypy から学習を開始できます。その後、TurboGears を使い始めると、何も分からなくなります。この観点からすると、ROR に選択肢はありません。また、現在RORで利用できるWEBサーバーへの接続手段であるscgiも当時はPythonの作品であり、Pythonの陰に隠れていた存在でした。

Rubyの今後の発展については何とも言えませんが、苦肉の策なのでリスクは依然としてかなり高いです。 Python に関しては、本当に順調に発展していくだろうと思っていましたが、Micro$oft の追加により、Python の将来がどの程度大きくなるのかを予測することが難しくなりました。話を戻して、著者が常々嫌っていたPythonの多様性についてですが、私の考えでは、RubyがPythonを超えられるものはほんの一握りであり、PythonがRubyを超えるものは当然Rubyにとっては超えられない差です。したがって、プログラミング言語の多様性を考慮すると、誰もが Ruby を学ぶことはお勧めできません。選択肢が 1 つ減り、ある程度の人気が集まるのは常に良いことです。

5. Python と Ruby、どちらを選ぶべきですか?

実際、Python と Ruby は非常に近いものであり、他のほとんどの言語よりもはるかに近いため、好きなものを使用できます (正直に言うと、これもナンセンスですが)。構文にはいくつかの違いがありますが、そのほとんどは糖衣構文です (私は Python をほとんど忘れているので、間違っていたら遠慮なく批判してください) が、主な違いは依然として です。設計コンセプト: 柔軟性と明示的。慣れていれば、この 2 つの生産性に違いはないと思います。 *比較は言語自体に限定されることに注意してください。

1. Ruby の case は多くのものに一致します: 範囲/配列、オブジェクト、正規表現。Python には case/switch がなく、if/else の使用はより厳密です

2。トラブル。 Ruby の終わりはかなり醜いので、誰もがワンライナーになることを余儀なくされています (冗談)

3. Ruby は Python よりも OO であるように感じます。 もちろん、これは Python が を提唱していないためでもあるかもしれません。オブジェクトの内部構造を変更する「トリック」の使用。錯覚

4. Python にはリスト内包表記がありますが、Ruby にはありません:(

5. Python には実際のキーワード引数があり、Ruby はそれをシミュレートするためにハッシュを使用します。もちろん実際の使用には違いはありません

6. Python には非常に面倒ですが、Ruby にはそのような面倒なことはありません

7. Ruby には object.methods などの組み込みメソッドがたくさんあります。 、Python はこの情報を特別な辞書に保存します

8. Ruby のブロック関数は非常に強力で、Python のラムダは単一の値しか返せません

9。Ruby のオープン クラスは広範囲に宣言されており、次のようなトリックを実行できます。 2日前。Pythonは組み込みクラスを直接変更できないようで、そうすることに反対しています

10。Pythonはクラスメソッドを宣言する必要があります。Rubyは組み込みです

11。 Rubyにはモナドメソッドがあり、これはオブジェクトを個別にカスタマイズできることを意味します

12。Rubyにはmethod_missingメカニズムがあり、Pythonは未定義のメソッドをインターセプトできます

13. Ruby は単一継承 + mixin を使用し、Python は多重継承を使用しますが、Python には mixin もあります

14. Ruby には、一連の Python の setter/getter を記述する必要がなくなります。メソッドは同じです 独自のセッター/ゲッターを作成する必要があります

15. RubyとPythonは両方ともダックタイピングを使用しますが、Pythonには明示的なインターフェイスメカニズムもあります(zope3からカーネルに組み込まれているのでしょうか?)

16. Ruby の関数呼び出し括弧は省略できます。はい、キーボードを少し押すだけです。Python はデフォルトで括弧やパラメーターなしで関数自体への参照を返します

17。専門家の説明を待つ必要がありますが、これは Python で一般的に使用されるものではないと思います。おそらくプログラムのロジックがわかりにくくなります

18。 19. Ruby には正規表現が組み込まれており、さらに便利です

20.ジェネレーターへの値の入出力にはPythonのyieldが使用されます。

21. Python ライブラリの命名規則が少し矛盾しているように感じます。おそらく、Python の三重引用符は非常に美しいものです。 Ruby の < ;<-XX…XX は醜すぎます。%q{…} を使用して複数行のテキストを折り返すこともできます (qiezi より)

23。 Ruby のクラス ライブラリの設計では、メソッドにエイリアスを追加するのが好きです。記憶を促進します。

もう 1 つ: Ruby の公式 Web サイトでは、いくつかの基本的な比較も提供しています。

6. 2 つの言語のリソースと学習曲線の比較:

不適切な比喩を使用した全体的な印象: Python が Java である場合、Ruby は .net です。 Java の世界は非常に複雑で多様であることは承知していますが、どのような要件であっても、さまざまなアイデアを使用して実装されており、どれを選択するかは常に困難です。同じことが現在の Python にも当てはまり、Python は Java よりも開発の難易度がはるかに低いため、Java よりも Python 関連のプロジェクトがたくさんあります。

リソースの点では、どちらのコミュニティも非常に強力です。興味深いことに、Java コミュニティは現在、Ruby に同化される危険にさらされています。少なくとも私が購読している Javablog 集合体の一部では、Java よりも Ruby について話しています。 Ruby のコミュニティはより集中していますが、Python のコミュニティはより分散しています。 Ruby の方が日本人ユーザーが多いのではないかと常々思っているのですが、私は日本語が理解できないので、それを確かめるのは難しいです。英語を母国語としない創業者にとって、理解するのが難しいのではないか、最新のニュースを入手するのが難しいのではないかなど、常に少し不安を感じています。現時点ではこの心配は無用だと思われますが、しかし何が起こるか誰にも分かりません!

Ruby が突然人気になった理由は、Rails アーキテクチャと切り離すことができません。 Ruby を検討するときは、Ruby on Rails を考慮する必要があります。 Rails は、開発効率が非常に高い優れた Web 開発フレームワークを提供します。 Python には同様のアーキテクチャ実装が多数ありますが、世界を統一できるアーキテクチャはありません。 Python の zend は完成していますが、Web サーバーに偏っており、Rails と比較することはできません。

Ruby は Python よりも使いやすいです。 Ruby には言語機能という観点から見ると、ブロックなどの興味深いものがたくさんありますが、それらを大規模に適用するとプログラムが混乱してしまいます。 Python 構文は単純さを重視しますが、柔軟性が高く単純すぎるため、従来のプログラマーにとっては驚くような表現が目に入ることがよくあります。これを利点と見なすべきか欠点と見なすべきかはわかりませんが、少なくとも構文が柔軟すぎるため、プログラマごとにコーディング スタイルに過度の違いが生じやすく、学習コストが増加する可能性があると思います。

使い始めの初期段階では Ruby の方が簡単ですが、ある程度の複雑さのレベルに達すると、Ruby の難易度は急激に上がります。 Python を始めるのは簡単ではありませんが、複雑になってもそれほど苦痛ではありません。 Rails には、始めるのは簡単ですが、とっつきにくいという問題があります。 Railsによって生成されるディレクトリの目的は何ですか? O/R マッピングはどのように実装されますか? Web からデータベースにデータを転送する方法。これらはすべて、Ruby プログラマーが遅かれ早かれ直面する問題です。 Python の場合はそうではありません。これらを理解していなければ、おそらく使い始めることができません。 VB、Delphi、.net のいずれであっても、高度に統合された高速開発ツールにはこのような特徴があります。半年未満でプロジェクト ディレクトリ内のすべてのファイルの目的を明確に説明できる開発者がどれだけいるでしょうか。各ファイルの構文は?経験豊富なユーザーでも明確に説明できない人も多いと思います。

構造的な観点から見ると、この 2 つは実際には大きく異なりますが、最終的な結果は非常に似ています。 Ruby は純粋な OO 言語ですが、Python は関数と OO が混合されたものです。 Ruby では関数型スタイルのコーディングも使用できますが、実際にはシミュレートされます。結局のところ、両者は見た目が似ているため、この違いは通常のプログラマーには大きな影響を与えません。

一般的に、初めて開発に挑戦する非専門家には Ruby が適しています。プロのプログラマーの場合は、やはり Python を選択することをお勧めします。

今後の開発に関しては、Pythonの開発は予測可能であり、比較的安定していると思います。 Python はすでに個人ではなくコミュニティに属していますが、Ruby はさまざまな理由により、Ruby の作者の迷路の意志が依然として Ruby の開発に大きな影響を与えるでしょう。 Sun は Java を管理していますが、Sun の強力なリソースと調整のための jcp 組織のおかげで、Java は非常に順調に開発されていますが、Ruby がこれを達成できるかどうかを証明するには時間がかかります。

7. Python から Ruby へ

Python は非常に優れた言語です。Python から Ruby に移行すると、いくつかの文法の違いに気づくでしょう。

類似点

Python と同様に、Ruby には対話型プロンプト (irb と呼ばれます) があり、コマンド ラインから (pydoc の代わりに ri コマンドを使用して) ドキュメントを読むことができます。終了する特別なシンボルはありません。 Python の 3 つの引用符と同じように、テキストでは複数の行を使用できます。リストでは [] を使用し、Dict では {} を使用します (Ruby では配列は「ハッシュ」と呼ばれます)。は同じであり、長い配列に追加されますが、このように結合したい場合は、配列を含む配列が生成されます。オブジェクトはすべてオブジェクトであり、変数が動的に変換されます。 name はオブジェクト ポインタへの単なるポインタです。キーワードは異なりますが、例外は同じように機能します。

違い

Python とは異なり、文字列を使用できます。かわった 。定数を使用できます (定数の値は異なる方法で変化します)。必須の記述要件がいくつかあります (例: クラス名は大文字で始まり、変数名は小文字で始まります)。コンテナ(配列)は1つだけあり、変更可能です。引用符内の文字列制限は異なります。ここには新しいクラスのスタイルはありません。クラスのスタイルは 1 つだけです。プロパティに直接アクセスすることはできません。Ruby では、これはメソッド呼び出しを通じて行われます。メソッド呼び出しで () を使用することはオプションの戦略です。ここでは、プライベートやその他の制限されたアクセスなどのキーワードを使用して、Python で隠されている名前を置き換えます。 「mixin」は多重継承の代替として使用されます。既存のクラスをいつでも変更して、新しいメソッドを追加できます。 True と False の代わりに true と false を使用します (None の代わりに nil を使用します)。真理値を判定する場合、false と nil のみが false とみなされます (0、0.0、""、および [] を含む)。 elif の代わりに elsif を使用します。 import の代わりに require を使用します。ただし、使い方は同じです。通常のスタイルを使用してドキュメントに注釈を付け (docstring を置き換え)、ドキュメントを生成します。

8. Python と Ruby を 3 つの側面から比較します。

1. それぞれに適したアプリケーション

2. 開発環境と実行環境

3. プロジェクトは最終的に移植される予定なので、移植性はどうですか? Windows CE Symbina などのモバイル プラットフォーム

[1. それぞれが適用できるアプリケーション]

レビューした結果は、両方の言語で良い評価を得ているようで、ネットワーク開発におけるパフォーマンスは非常に良好です。迅速なアプリケーション開発に非常に適しており、開発効率が非常に高くなります。

Python:

プロジェクトに関連するいくつかのアプリケーションの説明を抽出しました

クロスプラットフォーム開発:

Python は、中立的な方法で一連の異なるプラットフォームをサポートします。ユーザーが使用するシステムに異なるプラットフォームが含まれている場合は、開発に Python を使用します。アプリケーションはさらに優れており、その適応性により、システムは他のツールを使用できるようになります。プラットフォームを頻繁に切り替えるユーザーにとって、Python は理想的な選択肢です。

エンド ユーザーにソフトウェア サービスを提供する場合、Python は、同時に異なるアプリケーション ソフトウェアを使用してプログラミングする時間と費用を回避するための代替手段でもあります。

インターネット プログラミング:

Python には、ネットワーク スロット上で基本的なプロトコル レベルの通信を実行できる標準モジュールが付属しています。たとえば、POP サーバーから電子メールを読みたい場合、Python にはそれを実行できるライブラリ モジュールが付属しています。さらに、Python は XML、HTML、および CGI ライブラリ ファイルもサポートしているため、ユーザー入力要件を解析し、Web サーバーを通じて最高品質の結果を生成するために使用できます。

プログラマーは、Python の組み込みインタープリターを備えた Apache、Unix、および Windows Web サーバー用のモジュールをコンパイルすることもできます。 CGI プログラムの機能に基づいて、Python ステートメントを個別にロードすることなく簡単に実行できます。

Python ネットワーク プログラミングについては、「Python ネットワーク プログラミングの基礎」という良い本があります

この本は、Python 言語を使用したネットワーク プログラミングの基礎知識を包括的に紹介しており、主な内容には、ネットワークの基本知識と、Web サービスの高度な操作が含まれています。 、HTML とスレッドの解析、非同期通信など)この本は非常に実用的で、合計約 175 の例と 6,600 行を超えるコードが記載されており、読者が Python 言語を包括的かつ迅速に学習し、ネットワーク プログラムを作成するのに役立ちます。

Ruby:

オブジェクト指向プログラミングを便利かつ迅速に実行できる強力なオブジェクト指向スクリプト言語。Smalltalk、Eiffel、C++ などの正式なオブジェクト指向言語を使用して小規模なプロジェクトを開発するのは少し面倒に思えることがあります。もちろん、Ruby は通常のプロセス指向プログラミングにも使用できます。

Ruby は、高レベルと低レベルの両方の多くのネットワーク プロトコルをサポートしています。 Ruby は、ネットワーク層に固執することなく、TCP、UDP、SOCKS、およびその他の多くのプロトコルを使用して対話できるようにするいくつかの基本クラスを提供します。これらのクラスは、サーバーへの読み取りと書き込みを簡単に行うためのヘルパー クラスも提供します。ネットワークプログラミングも素晴らしいです。

【2.開発環境、実行環境】

Python: 対照的に、強力な統合開発環境はありません。オープンソース ソフトウェアは有料ソフトウェアよりも使いやすいという人もいます。

最も一般的に使用されるもの:

Python 独自のアイドル: Python IDE の中で最高ではありません...

PythonWin: 非常に使いやすい (Windows を使用するのと同じくらい快適)。コードのマージ、構文タグの強調表示、コードの自動補完機能を含む便利なエディターが備わっています。 PythonWin には、一部の IDE と同様、いかなる種類のフォーム デザイナも含まれていませんが、監視、コード検査、対話型デバッグ ウィンドウ、ブレークポイント、およびデバッガに必要なその他の機能を備えた優れたデバッガが提供されています。最も重要なことは、PythonWin は安定していますが、Win95r2 システムで使用すると、時々奇妙に「応答を停止」することがあります。インターフェイスの点では、PythonWin は比較的シンプルですが、非常に魅力的で、埋め込み可能およびドッキング可能な要素をうまく利用しています (私は、他の多くの IDE でも使用されている、「どこにでも多くのウィンドウがある」という Idle スタイルを好みます)。 PythonWin は、ActiveState の Python ドキュメントの HtmlHelp バージョンと PythonCOM も統合します。

eclipseのpydevプラグイン、eclipse+pydev

Pydevは優れたPython環境であるEclipseをベースにしており、改善速度が非常に速いです。

UliPad が提供する機能の一部:

ドキュメント作成やプログラミング開発に使用できるエディター。 Python プログラミング言語を使用して開発されており、ユーザー インターフェイスは wxPython に基づいています。一般的なエディターの共通機能を完成させることに加えて、開発者が新しい機能を簡単に開発できるように、便利で柔軟なフレームワークを実装することを主な目的としています。さらに、プログラミング経験のあるユーザーは、日常業務の特殊な問題に対処するプラグインをコンパイルして、日常業務に密接に統合することもできます。強力なプログラミング言語である Python を使用しているため、ニーズに合わせてソフトウェアを簡単に変更できます。

UliPad は、コードのカラーリング、スマート補完、コードのデバッグ、Python クラスの参照、コード スニペット、Ftp 関数、ディレクトリの参照、その他の強力な機能をサポートしています。Doc ディレクトリ内のドキュメントは非常に充実しており、Python を書くのに非常に役立ちます。 !

システム要件:

python 2.4+

wxPython 2.6+

最後の選択は UliPad で、これは非常に優れています。

Ruby:

Ruby には優れた高度なデバッガが備わっています。

netbeans の Ruby プラグインまたは Eclipse の Ruby プラグインを使用できます

Eclipse で開発環境をインストールする一般的なプロセス:

1 Ruby 1.8.6 ワンクリック インストーラーをインストールします。 。

2. Eclipse Platform Runtime Binary 圧縮パッケージを特定のディレクトリに解凍します。

3. Ruby 開発ツールの圧縮パッケージの内容を Eclipse の対応するディレクトリに解凍します。

動作環境については、公式 Web サイトから対応するバージョンをダウンロードしてインストールするだけです。Windows でのインストールは比較的簡単で、ダブルクリックして実行するだけです。

【3.移植性】

Python:

オープンソースの性質により、Python は多くのプラットフォームに移植されています (さまざまなプラットフォームで動作できるようにするための変更が加えられています)。システムに依存する機能の使用を慎重に回避すれば、すべての Python プログラムは、以下にリストされているプラ​​ットフォームのいずれでも変更なしで実行できます。これらのプラットフォームには、Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、 PlayStation、シャープ ザウルス、Windows CE、さらには PocketPC まで!

Python が実行されると、まず .py ファイル内のソース コードが Python バイト コードにコンパイルされ、次に Python 仮想マシンがこれらのコンパイルされたバイト コードを実行します。このメカニズムの基本的な考え方は Java および .NET と一致しています。ただし、Python 仮想マシンと Java または .NET 仮想マシンの違いは、Python 仮想マシンがより高度な仮想マシンであることです。ここでいう高度とは、通常の意味での高度ではありません。Python の仮想マシンが Java や .NET よりも強力であるという意味ではありません。Java や .NET と比較して、Python の仮想マシンが実際のマシンから遠く離れていることを意味します。あるいは、Python の Virtual Machine はより抽象度の高い Virtual Machine であるとも言えます。

オブジェクト指向の解釈型コンピューター プログラミング言語をインストールできます。これは、10 年以上の開発の歴史があり、成熟していて安定しています。 Python はスクリプト言語の中で最も豊富で強力なクラス ライブラリを備えており、ほとんどの日常的なアプリケーションをサポートするのに十分です。Python をインストールすると、Python で開発された多くのプログラムもサポートできます。プログラム。一般の携帯電話ユーザーの場合、Python プラットフォームをインストールするだけで十分です。これにより、携帯電話は Python で開発されたより多くのプログラムをサポートできるようになります。現在、Symbian 携帯電話上では Python で開発されたプログラムが数多くあり、それらはどれも比較的実用的です。

Ruby:

主に Linux 上で開発されていますが、多くの種類の Unix、Dos、Windows95/98/Me/NT/2000/XP、MacOS、BeOS、OS/2 およびその他のシステム上で実行できます。

Ruby と携帯電話の開発に関する情報は非常に少ない Windows CE 上で動作するバージョンもありますが、関連する情報はまだ非常に少ないようで、インストールの失敗やコンパイルの失敗の例が多数あります。日本語ページに少しだけ日本語の紹介があります。

【まとめ】

それでは、友人の提案で Python と Ruby について以下の参考意見を述べさせていただきました。

1. Python はわかりやすい言語としても知られています。それは、作者が設計したときの一般的な指針となる考え方は、特定の問題に対して、それを解決する最善の方法は 1 つだけであるというものだったからです。 Python 言語が明確な言語であることのもう 1 つの意味は、その作成者が意図的に非常に制限的な構文を設計し、悪いプログラミング習慣 (if ステートメントの右に次の行をインデントしないなど) がコンパイルできないようにしていることです。これにより、プログラマーは意図的に良いプログラミング習慣を身に付けることが強制されます。 Python は、他の部分の設計においても明確で一貫したスタイルを遵守しているため、Python は読みやすく、保守しやすく、多くのユーザーに人気のある言語となっています。

同じ問題に対して Python を使用して複数の人が書いたコードは非常に似ています。しかし、Ruby にはさまざまな設計思想があり、Ruby で作成されたプログラムは柔軟性が高すぎるため、人によって作成されるプログラムは大きく異なる場合があります。

2. Ruby の英語ドキュメントは極めて不足しており、ましてや中国語ドキュメントも不足しています。 Python コミュニティは比較的成熟しており、情報が豊富です。

最後に、Python の Web サイトをいくつか紹介します
•http://www.python.org/ – Python の公式 Web サイト
•http://python.cn/ – Python 中国語コミュニティ
•http://www.codeplex .com /Wiki/View.aspx?ProjectName=IronPythonPython Dot Net の Web サイト用

いくつかの Ruby Web サイト
•www.ruby-lang.org/zh_CNRuby 中国語公式 Web サイト
•http://www.rubystudy.com/ bbs/tag.php ?name=RubyRuby 中国語学習交流コミュニティ
•http://ruby-lang.guo.cc/Ruby オンラインリファレンスマニュアル

以上がPythonとRubyを比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。