ホームページ >バックエンド開発 >PHPチュートリアル >perl、php、python、java、ruby の比較
プレビュー
◆ 言語の開発トレンドは動的と静的、ハードとソフトの組み合わせでなければなりません
◆ Perlは簡潔で曖昧、Pythonはエレガントで明確、Rubyは絶妙で柔軟、PHPは簡潔でシンプル
◆ 細部や仕様にこだわることが上品さなのかもしれません
◆ (RoR)とRubyを組み合わせると、Javaや.NETの象のような姿が一気に引き立つジャコウネコのようなものです
質問
◆ Perl、Python、Ruby、PHP の特徴は何ですか?
◆ 軽量ソリューションとして動的言語がよく使われるのはなぜですか?
◆ Ruby on Rails が人気があるのはなぜですか? ◆ プログラミング言語の開発傾向は何ですか?
説明
「残りの動的言語は 4 つあります。これらはバックグラウンド スクリプト言語に分類されます。」とコロンは言い、グラフを描きました -
引用符をよく聞いてください。 : 「最初にこれらの言語を C ファミリの静的言語として分類したことを覚えています。言語、非 C ファミリの静的言語、および動的言語。」コロンは次のように説明しました。今では、実践に焦点を当ててアプリケーションごとに分割されています。「
この分割は 3 層のアーキテクチャのように見えます。フロントエンド言語は、プラットフォーム言語とバックエンド スクリプト言語に対応します。」ビジネス ロジック層に対応し、システム言語はデータ層に対応します。」
「確かにいくつかの類似点がありますが、混同してはなりません。」とコロン氏は言いました。 [1]; ここでは、言語の適用範囲に応じた物理的な分割を示します。フロントエンド言語はユーザーと対話し、マシンと対話します。システム言語はシステム言語であり、フロントエンドにサービスを提供します。基盤となるシステム サービスが必要なのは、バックエンド言語です。「
コンマは、「バックエンド言語は、プラットフォーム言語とバックエンド スクリプト言語に分かれていますか?」と尋ねました。これは、プログラム (プログラム) とスクリプト (スクリプト) に基づいて分かれています。 「実際には、Perl、PHP、Python、Ruby はすべて独自の仮想マシンを持っています。この意味では、これらはプラットフォーム言語としても使用できます。しかし、実際のアプリケーションでは、それらは使用できます。」 Java プラットフォームや .NET プラットフォームと同じ統合力やコアの役割はなく、通常は軽量ソリューションとして使用されます。「
疑問符は、「これらはすべて動的言語であるためです。」コロン氏は、「理論的には動的言語は大規模なアプリケーションにも対応できますが、実際には主に接着言語として、または中小規模のアプリケーションに使用されます。流行の言葉を使えば、当面は。結局のところ、これらは依然として主流の脇役、または非主流の主役であり、操作効率、型安全性、利用可能なリソース、開発ツール、および技術サポートの点で Java や C# との間には依然として一定のギャップがあります。どちらも「草の根」言語であり、オープンソース コミュニティの強力なサポートにより、影響力という点では後者と同じではありません。」
感嘆符は次のように推測しました。「おそらく近い将来、動的言語もそうなるでしょう。主流の主人公。 ”
”時代は変化するものであり、予測することは困難です。しかし、一つ確かなことは、言語の発展傾向は動的と静的、ハードとソフトの組み合わせでなければならないということです。コロン氏は、「JavaやC#に代表される静的言語には動的言語の枝が接ぎ木される一方で、Javaや.NETに代表されるプラットフォームと動的言語間のインターフェースも徐々に変化していく」と主張した。拡大する。たとえば、JRuby を使用すると、Jython、IronRuby、IronPython などと同様に、Ruby と Java が相互に呼び出すことができます。動的言語の最もアクティブな段階は LAMP、L-A-M-P であることにも言及する価値があります。 "
引用符は続きます: "L は Linux、A は Apache、M は MySQL、P は PHP です。これら 4 つのコンポーネントは、完全なオープンソース ネットワーク開発プラットフォームを形成します。
Colon 氏は次のように付け加えました。「P は、Perl、Python、さらには Ruby を指すこともあります。 "
コンマジョーク: "Ruby の "R" の末尾が "P" よりも余分にあるのは残念です。 「
」自分自身を正当化するために、単に P を「プログラミング言語」の略にしている人もいますが、現在ではすべての言語が含まれています。外国人はこの種の頭字語のゲームを好むが、特に LAMP にはオープンソースの世界では明るい光を意味する「光」という意味があるため、さらに誇りに思っているに違いない。 「コロン氏は笑顔で言いました。「ネットワーク アプリケーションは動的言語の成長にとって最も肥沃な土壌であると前述しましたが、LAMP はこの土壌上に構築されたプラットフォームです。ネットワーク プラットフォームとしての LAMP は、オープン性と柔軟性、迅速な開発、簡単な導入、高い構成可能性、セキュリティと信頼性、低コストにより、Java プラットフォームと .NET プラットフォームの 3 分の 3 を占め、特に中小企業の間で人気があります。 ~規模の企業。 LAMP では、Linux がオペレーティング システム、Apache が Web サーバー、MySQL がデータベース システムであり、現在私たちが最も懸念しているのは、PHP、Perl、Python、Ruby の「P 言語ファミリー」です。 "
疑問符の提案: 「動的言語としてのそれらの共通点は、前回の授業でよく議論されました。それらの性格について話してもらえますか?」
"それらの性格は非常に独特です。Perl は簡潔で曖昧ですが、Python はエレガントです。明確で、Ruby コンパクトで柔軟性があり、PHP は簡潔でシンプルです。まず兄貴分である Perl を見てみましょう。これは他のものの優れた部分を利用しており、C 言語の構造、sed の正規表現、AWK の連想配列、Lisp のリスト、および Unix シェルのコマンドを組み合わせています。それに、これも言語から拝借したんですが、どれだか分かりますか?」とコロンが突然売り切れてしまいました
カンマ推測: 「これは、ある種の OOP 言語であるはずです。」
「Perl には確かに多くの C++ シャドウがありますが、そのオブジェクト モデルは 5.0 以降にのみ導入されました。これは典型的な中途半端なハウスであり、あまり自然ではありません。」これは自然な発展であるというよりも、OOP トレンドの影響による不本意な適応です。「本当の根深い参照は自然言語です。」とコロンは答えました。著者のラリー・ウォールは言語学者であり、プログラミング言語は自然言語と同じくらいシンプルで自然で、読み書きが容易で、表現が多様であるべきであり、Perl にも多くのモットーや哲学があると考えています。厳格で型にはまった顔からは、強烈な人間主義的な雰囲気が漂っています。「
」という感嘆符は沈黙していました。雰囲気 - しばらく見ているとめまいがします。」
みんな笑った。
「誰かがわずか 1 行の Perl コードで RSA アルゴリズムを実装しました。それを見たとき、あなたは気を失いませんでしたか?」コロンは冗談を言いました、「Perl のさまざまな魔法のシンボルは、テキストを切断するための鋭いハサミのようなものです。これがその最大の利点です。Perl元々は Unix システム管理のために Wall によって使用されており、CGI での普及もこの恩恵を受けました。そのため、「インターネット上のダクトテープ」という言葉もあります。スイスアーミーナイフとして知られており、簡潔で複雑、実用的で強力ですが、Perl は柔軟性と自由度がありすぎて、プログラムの可読性と一貫性に影響を及ぼします。対照的に、Python は、その OO 設計と豊富なクラス ライブラリのためだけでなく、よりプログラマーであるという理由から、Perl に対する強力な挑戦者であると考えられています。 Python には Zen と呼ばれる一連の哲学があり、その多くは Perl とは正反対です。たとえば、Perl は 1 つのことにはさまざまな方法があると信じていますが、Python は 1 つのことが最善であると信じています。一方向では、Perl は言語の表現力を追求し、Python は単純さと優雅さを追求します。Perl は暗黙的なヒントを好み、Python は明示性を重視します。Perl は構文とセマンティクスが豊かで、Python は構文とセマンティクスがシンプルです。 Python で最も慣れていない点は、おそらく空白文字に対する感度です。「
引用符は非常に奇妙です。」慣例とは少し異なり、これは Python の一貫した標準と簡潔なスタイルと非常に一致しています。一方で、構文の点で優れたコーディング スタイルが保証されます。他方では、各コード ブロックに左中括弧や begin/ が必要なくなりました。ところで、もう 1 つのエレガントな言語である Haskell も、空白文字に敏感です。さらに、その優雅さは、多くの点に注意を払う必要があります。 Python には自己参照が多すぎると人々は不満を述べていますが、これは Python が明示的な表現を支持していることの表れでもあります。一般に、Python の主な問題はそのパフォーマンスの低さです。「Ruby はどうだろう。」 「Java を置き換えると言われています。」「軽々しく『置き換える』とは言わないでください。Java は C++ を置き換えていませんし、Ruby の置き換えはせいぜい再配布に過ぎませんが、Ruby は置き換えられません。」とコロン氏は警告しました。実際、Perl の表現力と Python の読みやすさを組み合わせた素晴らしい言語です。Ruby の背後にある最も特徴的な考え方は、言語自体の機能を超えて、プログラマーがどのように感じるかに注意を払うことです。武器はその鋭さよりも重要です。上品に言えば、プログラマーにはもっと人間的な配慮が与えられるべきです。コード ブロック (ブロック) と反復子 (イテレーター) を例に挙げます。これらは Ruby の最初のものではありませんが、その構文は最も目に心地よいものです。同様の例はたくさんあります。 Ruby のメタプログラミング機能は特に強力で、柔軟性の高さを反映していますが、誰もがこのスタイルを好むわけではありません。 Ruby には 2 つの主な弱点があります。1 つは Python に似ており、パフォーマンスを向上させる必要があることです。もう 1 つは、スレッドがカーネル空間ではなくユーザー空間によって管理されており、マルチコアまたはマルチ CPU を完全に活用できないことです。 。 Ruby の人気を実際に高めたのは、Web アプリケーション フレームワーク Ruby on Rails (RoR) の成功でした。これにより、Groovy 言語と Java プラットフォーム上の Groovy on Grails フレームワークも誕生しました。 RoR が追求する CoC (Convention over Configuration) と DRY (Don'trepeat Yourself) 原則と MVC アーキテクチャには新しいアイデアはないようですが、Ruby と組み合わせると、Java と を即座に起動するジャコウネコのようなものです。 NET. 象のような姿。 "
コンマは少し懐疑的です: 「フレームワークによって実際に言語が普及しました。フレームワークは本当に重要ですか?」
"Web アプリケーションに動的ページがほとんどない場合、またはビジネス ロジックが複雑でない場合、フレームワークの価値はそれほど高くありません。かつての CGI プログラミングは、Java のサーブレットと同じように、HTML コードを Perl やその他のコードに埋め込むものでしたが、PHP は、初期の JSP と同様に、単純に PHP コードを HTML コードに挿入しました。 MVC、3 層アーキテクチャ、ORM はありません。しかし、「コロンは移行トーンを引きずりました」ビジネスロジックが複雑になり、開発者の数が増えると、手作業によるワークショップスタイルのプログラミングが拡張され始め、生産性を向上させるためにフレームワークの組み立てラインの導入が一般的になります傾向。 ”
Period 氏は困惑しています:「Perl、Python、PHP には多くのフレームワークがあるはずですが、Java にも非常に多くのフレームワークがあります。なぜ RoR が目立つのでしょうか?」
Colon 氏は次のように分析しています。 0 とアジャイル アジャイル開発の概念が普及したとき、AJAX と Ruby を組み合わせた RoR が優れた対応策となりました。これまでは Web アプリケーション フレームワークが数多くありましたが、RoR が登場する前には、Perl や Pylon の軽量パッケージ ソリューションはあまりありませんでした。 Python では CakePHP、PHP では CakePHP を模倣する必要があります。したがって、RoR のタイミングは早いとも言えず、PHP も普及しすぎています。 Java エンタープライズ ソリューションに関しては、フレームワークとその組み合わせが多すぎるため、最も一般的な軽量 SSH (Struts+Spring+Hibernate) の組み合わせが使用されている場合でも、選択がより困難になります。 「RoR よりも保守が複雑です。」
感嘆符はますます心配になりました。「これを見てください、Java はまだ危険です!」
「言うのは時期尚早です」とコロンは反対しました。「まず第一に、RoR はそうしました。現時点では、アプリケーションの広さと深さの点で Java と比較することはできません。第 2 に、Java にはパフォーマンスやセキュリティなどの点で多くの利点があり、これらは大規模で重要なアプリケーションにとって特に重要です。中小規模の Web アプリケーションでは、RoR は PHP に大きく遅れをとっています。「
疑問符が話題を続けました。「なぜ PHP は人気があるのですか?」
「それはシンプルで焦点が絞られているからです」とコロン氏はシンプルに答えました。当初から汎用言語として位置づけられていた Ruby とは異なり、PHP は初期の Perl と同様、インターネット専用に生まれました。ただし、PHP は主にファイル ストリームを処理する点が異なります。ソケット ストリームの処理。PHP は単純な構文を備えており、ネットワーク開発者の間で人気があることは理解できますが、変数名では大文字と小文字が区別されます。 -insensitive; 関数の命名規則は一貫性がありません; Perl と同様に、そのオブジェクト モデルは固有のものではなく、スレッドのサポートが不十分です。その機能はわずかに薄いなどです。 "
突然思い出した引用: "最初の授業で、PHP はデスクトップ アプリケーションにも使用できるとおっしゃっていました。"
"PHP、Perl、Python、Ruby だけではありません。同様に、VB、Delphi、JavaScript もバックエンド言語として使用できます。現代のプログラミング言語は、独自の専門知識を備えているだけでなく、より多くの生存領域を追求するために、一般化と多用途性を目指して発展しています。想像してみてください、現代のプログラマはこんな感じではないでしょうか?」 この時点で、コロンは話題を止めました。ここに一つ。各プログラミング言語には独自の固有の規則と哲学があり、それらがプログラミング パラダイムとともに言語のプログラミング スタイルを形成していることがわかります。理解が深まるほど、プログラミング言語の感覚が強くなり、思考と言語がシームレスに統合され、必然の王国から徐々に自由の王国へと移行していきます。 「
コンマには、人間と剣がひとつに融合した状態なのか?」という憧れが詰まっています。 「コロンは意図的に彼の言葉を拾い上げました。「さあ、皆さん、このレッスンについてスピーチを書いてください。 「
全員が少し考えてから、一斉に書きました——
感嘆符——最良の言語はなく、最も適切な言語があるだけです。
コンマ——悪い言語はない、悪いプログラマがあるだけです。
疑問符 - どの言語も万能ではありません。1 つの言語だけを知ることは絶対に不可能です。
引用符 - 言語に対する宗教的信念を廃止し、言語についての哲学的思考を確立します。
期間 - プログラミングは、言語間の最適なバランスを見つけるプロセスです。脳とコンピューター
それを読んだ後、コロンは非常に満足し、「とても素晴らしいです! どの言葉も絶妙で、どの文も完璧です。」と 5 つのお世辞を言いました。
皆さんは喜んで報酬を受け取り、去っていきました。
中断
[1] 3 層アーキテクチャが 2 つあり、1 つは 3 層アーキテクチャです。これらはしばしば同じ意味で使用されますが、実際には異なります。前者は論理的にのみ分割され、後者は物理的にも分割され、異なるレベルのモジュールが異なるホスト上で実行されます
[ 2. ] ダクトは「コンベヤーパイプ」または「導管」を意味するため、多くの場所で「コンベヤーベルト」または「コンベヤーベルト」と翻訳されます。そのため、これは Perl がシステム上でトランスポートの役割を果たすことを意味すると当然のことと考えられています。ただし、「ダクト タイプ」は特に「ダクト タイプ」を指し、Perl の粘着力の比喩として使用されます。このタイプの糸は緑色の糸とも呼ばれます。 Ruby 2.0 はネイティブ スレッド (ネイティブ スレッド) をサポートすると言われています
[4] PHP は 5.3.0 で名前空間をサポートし、6.0 では Unicode をサポートする予定です
まとめ
◆ Java プラットフォームとの比較および .NET プラットフォームを使用すると、動的言語は軽量で柔軟性が高く、開発効率が高くなります。ただし、統合の凝集性は十分ではなく、運用効率、型安全性、利用可能なリソース、開発ツール、技術サポートにおいて一定のギャップもあります。 、影響を与えるため、通常は軽量のソリューションとして使用されます
。◆ LAMP は、Linux、Apache、MySQL、および PHP、Perl、Python、Ruby などのスクリプト言語で構成されるネットワーク開発プラットフォームです。オープンで柔軟、迅速な開発、簡単な導入、高度な構成可能、安全で信頼性の高い、低コストです。 、などの利点があります。
◆ Perl は、簡潔、複雑、強力、柔軟、自由、難解で表現力豊かですが、標準化、可読性、一貫性、整頓性、保守性が不十分です。
◆ Python はエレガントで標準化されており、簡潔かつ明確で、学習と使用が簡単で、豊富なクラス ライブラリを備えていますが、空白文字に対する感度が若干劣るのが気に入らない人もいます。
◆ Ruby の構文は、Perl の表現力と Python の読みやすさを兼ね備えた絶妙で柔軟性の高いものです。プログラマーのエクスペリエンスに特に配慮していますが、パフォーマンスとスレッド モデルはまだ改善の必要があります。
◆ PHP はシンプル、具体的、実用的で人気がありますが、他の 3 つの言語と比較すると、構文と機能が若干不足しています。
◆ RoR は、軽量のパッケージ スタイルの Web アプリケーション ソリューションであり、優れた設計 (MVC アーキテクチャと CoC、DRY 原則) に加えて、適切なタイミング (web2.0 とアジャイル) に優れた言語 (Ruby) で構成されています。の開発が人気でした)。
◆ 静的言語と動的言語は、言語機能から実行環境まで徐々に統合されています。
◆ プログラマーは、プログラミング言語と同様に、独自の専門知識を持つだけでなく、汎用性と汎用性を目指して開発する必要があります。
◆ プログラミング言語の規約、哲学的概念、プログラミング パラダイムは、言語のプログラミング スタイルを形成します。