私は長い間、そして正直に耐えましたが、ついに我慢できませんでした。 一緒に理解できるかもしれませんか?
だから、誰かが_new_スクリプト言語を作成することに決めたとします。 そして、Rubyがそれを呼び出したとしましょう。 理解してみましょう-なぜこれを行う必要があるのですか? スクリプト言語に何を期待しますか? 私の意見では、これはすべて明らかですが、希望する人はもちろん、ホリロバトになることができます。 たとえば、次のような利点と欠点を描くことができます。
短所:
-調査する必要のある新しい構文。
-ネイティブコードと比較してパフォーマンスが低い。
長所:
-自動ガベージコレクション。
-構文糖;
-ランタイムタイピング;
-オブジェクトのランタイム拡張性。
そのようなもの。 したがって、スクリプト言語の作成者は、他の利点のために最初に_パフォーマンスを拒否します_。 これは非常に重要なアーキテクチャ上の決定であり、後で説明します。
新しいスクリプト言語を作成する場合、スクリプトと外部世界のVM接続(スクリプトを実行する仮想マシン)が必要です。 モジュール、ライブラリ、フレームワーク、その他の実装が必要です。この古代ロシア語の言葉を許してくれます。 特定のスクリプト言語の可能性について話すと、スクリプト崇拝者は次のまったく異なるトピックについて議論できます。
-言語自体の構文と利便性について(たとえば、組み込みのeval())。
-特定のライブラリによって実装されるいくつかの機能の便利な実装について(たとえば、正規表現や統合されたWebサーバー)。
-VMの「内部」での計算速度について(たとえば、配列の並べ替え)。
-VMから外部の世界(ライブラリ、OS)への呼び出しの速度について(たとえば、ファイルへの書き込み)。
だからここに。 最初の項目のみがスクリプト言語に関連しています。 彼だけ。
それ以外はすべて実装に関連しています。 言語そのものではありません。
スクリプトholivarschikが最初の点について話さない場合、彼は言語についてではなく、プラットフォームについて話していることに注意する必要があります。特定のOSまたは特定のVMでのスクリプト言語の特定の実装です。
最初の論文。 スクリプト言語の利点は、1つまたは別の機能を実装するライブラリが存在することではありません。 これはすべて、スクリプト言語の実装にのみ依存します。 たとえば、この記事をご覧ください。
habrahabr.ru/blogs/ruby/69314
これは、Rubyでのwwwサーバーの実装について説明しています。
しかし、実際にはRubyとは何ですか?
見て、JavaScriptでwwwサーバーを書いたところです。
var www_server = new WebServer( '127.0.0.1'、3456);
要求を受け入れ、ファイルを提供します。 信じて? そして、私はBBBサーバーのそのような実装を持っています。 JavaScriptが優れた言語であり、その上にWebサーバーを簡単に作成できることをご存知でしょうか? 知っていますか?
ところで、JavaScriptはDoom 4も簡単に実行できます。 ここを見てください:
var doom4 = new Doom4();
いいですね 次のボトルでは、javascriptの紹介を続けて、トピックに戻ります。
現在、特にRubyを採用しています。 申し訳ありませんが、私は自分の腕に落ちましたが、原則として他の言語でもかまいません。
ここでは、たとえば、Rubyの機能を読んで、少し馬鹿になります。
en.wikipedia.org/wiki/Ruby#.D0.92.D0.BE.D0.B7.D0.BC.D0.BE.D0.B6.D0.BD.D0.BE.D1.81.D1.82 .D0.B8_Ruby
」
簡潔でシンプルな構文を持ち、Hell、Eiffel、Pythonの影響下で部分的に開発されました。
JavaおよびPythonのスタイルで例外を処理できます。
実際にメソッドであるステートメントをオーバーライドできます。
完全にオブジェクト指向のプログラミング言語。
多重継承はサポートしていませんが、この言語のモジュールのメカニズムに基づいた「不純物」の概念を代わりに使用できます。
自動ガベージコレクターが含まれています。 外部ライブラリを含むすべてのRubyオブジェクトに対して機能します。
変数に完全にバインドされたクロージャーをサポートします。
」
エヘム。 JavaScriptにないものはどれですか? まあ、演算子のオーバーライドを除きます。 そして? すべてのノイズは何のためですか?
「Rubyには、一般的なプログラミング言語ではめったにない、または見つからない独自のソリューションが数多くあります。 メソッドは、クラスだけでなく、オブジェクトにも追加できます。 たとえば、文字列に任意のメソッドを追加できます。
JavaScript:
「Rubyのコンストラクトは値を返します。 例: "
体操。
アラート(a? "a": "b");
「配列の操作はRubyの強みの1つです。 これらは自動的にサイズ変更され、任意の要素を含めることができ、言語はそれらを処理するための強力なツールを提供します。
まあ、話すことは何もありません。 JavaScriptはRubyを単に立たせます。
難波の論文は2つです。 JavaScriptの構文と機能は、他のスクリプト言語よりも完全に優れており、「実装に依存していません」が、すでに言語の一部です。 競合他社のシンタックスシュガーがもたらす小さな利点は、eval()、JSON、引数、その他の優れたJavaScript機能によってすぐに圧倒されます。
私はスクリプト言語の専門家ではありません。 PHP、Ruby、Pythonでeval()を行う方法を教えてください。 特別なプロパティを持つnullはありますか? 関数に引数の配列として渡された引数を使用できますか? 次のように記述して、データとメソッドを含むオブジェクトを作成できますか?
var o = {animal: 'dog'、dead:false、kill:function(){if(!this.dead)this.dead = true; }}
例を書いてください。 そして、おそらく私は頑固に何かを理解せず、これらのスクリプト言語の秘密の能力に関する秘密の知識があり、悟りを開いている人はほとんどいませんか?
また、大きなリクエストは、JavaScriptで実行できないことの例です。 Ecma-262を基礎としてください。
JavaScriptではできない、他のスクリプトでこれを書くことができますか?
次に、これらの言語のスクリプトの実装について簡単に説明します。 JavaScriptブレークは既にあります。
最も興味深いのは、多数のスクリプトを一度に実行し始めるときです。 そして、自慢のスクリプティングマシンが素早くまたはゆっくりと死ぬことがわかりました。
少し分解すると、興味深い詳細が明らかになります。これらのスクリプト言語の開発者は、奇妙で神秘的な理由でパフォーマンスを発揮しました。 すぐに! 驚くべき新しい構文に関連するエロチックなファンタジーは非常に魅力的で、誰も簡単なアイデアを思い付きませんでした。最初から、多くのスクリプトを迅速に実行できる実装を提供する必要があります。
その結果、次のようになりました。
ルビー:
en.wikipedia.org/wiki/Ruby#.D0.92.D0.BE.D0.B7.D0.BC.D0.BE.D0.B6.D0.BD.D0.BE.D1.81.D1.82 .D0.B8_Ruby
「今日のRubyインタープリターには次のような欠点があります...:低速。 Ruby 1.8は、Web開発のプラクティスで使用される最も遅いプログラミング言語の1つです。
PHP
php.russofile.ru/ru/translate/unsort/optimizing/#01
「PHPスクリプトはZend Engineにロードされ、オペコードにコンパイルされます。 オペコードは、Zend Optimizerと呼ばれるオプションのオプティマイザーを使用して最適化できます。 スクリプトによっては、PHPスクリプトの実行速度を最大50%向上させることができます。
以前は、実行後にオペコードが破壊されていました。 „
叙情的な余談。 素晴らしいですね。 まあ、誰-コンパイルされたスクリプトをキャッシュできると全世界で誰が推測できたでしょうか? まあ、これは...ビルゲイツ、私は推測する必要があります。 または一度に2つのゲート。
あなたは、私がアイロンをかけていることを正確に理解していると思いますか? これについては、「以前」、「修正された欠陥がありました」、「以前は完全にたわごとでした」。 わからない-なぜくだらないパフォーマンスから始めるのか。 よく説明してください! お願い! 新しいスクリプト言語は何のために作成されますか?
さて、自宅で使用したり、学生の作品を書いたりするための、超おしゃれな新しいスクリプト言語を提供するとしましょう。 それから私は理解します-パフォーマンスは重要ではありません。
しかし、言語を使用してロードされたWebサイトのコンテンツを動的に生成することを提案する場合、パフォーマンスが最も重要な基準であると強く疑います。
したがって、次の論文はJavaScriptに関連するものではなく、これは他者との関係における毒の別の部分です。
論文難波無料。 新しいスクリプト言語の実装には、当初、それらを最大限に活用できる初期のアーキテクチャソリューションが含まれていませんでした:マルチスレッド実行、共有内部構造(実行コンテキストなど)のプール、予備コンパイル、中間バイトコードからのコンパイルの調整。 ただし、これらの言語のほとんどは、Webサーバーなど、負荷の高い部門にのみ提供されていました。
したがって、PHPを使用してWebリクエストを処理する方法を読むのはとても面白いです。 すぐにお聞きしたいのですが、多分私はベーシックを取るべきだったのでしょうか? また、スクリプト化されています。 そして、それもゆっくりと働きます...
たぶん、やや厄介で、時には厳しい結果になりました。
誰も私のコメントを個人的に受け取らず、気分を害しなかったと思います。
私はあなたと真実を見つけることができてうれしいです。