• ベストアンサー

rubyのインタプリタについて

プログラムを作って実行しました。すると5秒ぐらい経過して出力が現れ終了しました。このプログラムをまた実行するとつぎは1秒ぐらいで終了しました。rubyはインタプリタ言語なので機械語に一旦翻訳して実行していると聞いたのですがそれではなぜ上記のように5秒かかっていたものが次の実行時には1秒ぐらいですんでしまったのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yukimican
  • ベストアンサー率70% (112/159)
回答No.1

rubyの内部構造は知りませんが、 内部で使用している(組み込み)ライブラリ等が キャッシュされているのではないでしょうか?

mamoko7
質問者

お礼

なるほど、そういうことですか。ありがとうございます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

#1の方の書かれているように、ライブラリがOSのディスクキャッシュに残っていたためと思われます。 一旦大きなアプリケーション(OfficeとかAcrobatReaderとか)を起動したりすると、キャッシュから追い出されてまた5秒かかるようになると思います。

mamoko7
質問者

お礼

なるほど、ありがとうございます。

関連するQ&A

  • コンパイラ、インタプリタ、クロスコンパイラについて

    インタプリタについて質問があります。 色々と調べたところ、perl、php、rubyなど、ソースをインタプリタで実行する言語の利点は以下なのだと思います。 ソフトを作っている環境と実行環境の間でcpuやos等が異なる場合は、 ソースは互いに異なる機械語に翻訳されるので、翻訳は実行環境で行わなければならない。 その際、コンパイラの場合はわざわざ手動で翻訳を実行しなければならないが、 インタプリタの場合は勝手に実行時に翻訳してくれるので楽。 1.それで質問なのですが、 コンパイラは環境に対応した機械語を出すらしいですが、 何故そんな事ができるのでしょうか。 コンパイラが、自身が置かれた環境を分析して、それに対応した機械語を出すのでしょうか? それとも、そもそも環境毎に対応したコンパイラを使うという事でしょうか? 2.また、世の中にはクロスコンパイラというものがあると聞きました。 クロスコンパイラがあれば、ソフトを作っている環境でそのままコンパイルできるので、 インタプリタはいらないのではないでしょうか? クロスコンパイラの短所や長所などを教えてほしいです。 3.翻訳後の話として、機械語はcpuやosによって違うという話ですよね。 つまり、機械語にコンパイル済みのソフトを配布する際は環境毎に対応したソフトを それぞれ配布しなければならないのですよね。 しかし、ネット上でダウンロードできるフリーのソフトなんかは、 特定のOS向け、あるいはOS別に違うファイルを配布、というのはよく見かけますが、 cpuやその他の環境毎に配布物を分けているのは見たことがありません。 機械語は、本当にos以外にも依存するものなのでしょうか?

  • インタプリタはロードモジュールを作成する?

    情報システムを勉強し始めた初心者です。 私の持っているテキストには以下のように書いてあります。 ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 ・「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。 つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。 しかし、以下のような問題がありました。 問題: インタプリとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。 答え: 間違い。インタプリタではなく、コンパイラの説明になっている。 つまり、インタプリタはロードモジュールを作成しないということなのでしょうか? どなたかご教授お願いいたします。

  • コンパイラとインタプリタとアセンブラの違いって何?

    言語プロセッサの説明で「コンパイラ、インタプリタ、アセンブラ」などがあると書かれていたのですが、 コンパイラもインタプリタもアセンブラもどれも説明が「機械語に翻訳する」と書かれていました。 何が違うのでしょうか? 違いをわかりやすく教えてください。 いろいろなプログラミング言語があるというところまでは理解できましたが、プログラミングはわかりません。(涙) これから勉強します。

  • Rubyの実行のしかた

    Ruby(プログラミング)初心者です。 Rubyの実行の仕方について質問させて下さい。 コマンドプロンプト(マックなのでターミナルですが)で ruby Test.rb と打ち込んで実行しているのですが、これは普通なのでしょうか? 新しい言語で、しかもインタプリタ形式だからワンステップずつ実行できると聞いていたのですが、これだと何とも古くてコンパイルしたのと変わらない様な気がします。

  • Perlソースコードをコンパイルすることはできないのでしょうか?

    Perlはインタプリタ言語とされますが、実行の際には機械語に翻訳されているのでしょうから、機械語のコードをオブジェクトファイルとして保存して、そのまま使うことはできないのでしょうか? そうすれば実行するときに翻訳する必要がなく、実行速度が多少上がるのではないかな、と思いました。 直接関係のない関連事項でも、宜しくお教えください

    • ベストアンサー
    • Perl
  • .NET frameworkについて

    .NET frameworkとはJVMとほとんど同じような気がするのですが、いろんな言語が使えること以外に何かメリットあるのでしょうか? それと、たとえば、VC.NETで作ったプログラムはコンパイラで中間コードになって、実行時に.NET frameworkでインタプリタみたいに機械語に直して実行しているのでしょうか?

  • rubyでプログラムを作っていますがうまくいきません。

    rubyでプログラムを作っています。 予想通りの動きができないです。 常駐ソフトを起動したり終了したりするプログラムをrubyで作りたいと思っています。 バッチファイルで作れば問題ないのですが、今回のプログラムを他で作っているrubyのプログラムに使いたいからrubyで作りたいんです。 そこでとりあえずrubyでソフトを起動したり終了したりする小さいプログラムを作って試しています。 ですが全然ひらめかないのでぜひご教授をお願いします。 利用環境 Windows XP Home Edition Cygwinをインストールしrubyを実行しています。

  • rubyの誤差

    rubyのプログラムで例えば -------------------------- t=0.00 100.times do t += 0.01 print t, "\n" end -------------------------- のようなプログラムを実行したとき 0.01 0.02 0.03 ......... 0.80 0.81 0.820000000000001 0.830000000000001 ......... 0.990000000000001 1.0 と出力されたのですが、00000000000001の部分を正常に出力するにはどうすればいいのでしょうか?また、このように出力されることが丸め誤差なのでしょうか? どなたか教えてください。

    • ベストアンサー
    • Ruby
  • Pythonのプログラムの実行の考え方について

    pythonの教科書のサンプルの実行についてお尋ねします。 テキストのサンプルには普通、インタープリターで書いてあるものと、プログラムをファイルに書き出してそれをコマンドで一気に処理するもの(こちらの方が他の言語の実行に近いか)の2通りがあります。 インタープリター向きに記述されたものをファイルに書き出してpythonコマンドで、インタープリターと同じように実行するにはどのような書き換えが必要になるのでしょうか。結果を出力するときにインタープリターでは配列名を入力するだけでその内容が出力されたりしますが、ファイルではそれができないのでコマンドを指定するとかになると思いますが、他になにかあるでしょうか。 ファイルに書き出したプログラムの実行ですが、Pythonコマンドを実行しても実行形式の出力がないのでコンパイルではないわけですが、これはバッチとかシェルスクリプトと同じような意味になるのでしょうか。1行1行実行していくということですが。とするとインタープリターと同じになるのかなと思うのですが。 実行形式が単体のファイルとして出力されて単体として実行できるというのは従来のプログラム(C,Fortranなど)ですが、Pythonはそれがないわけですね。Ruby, Perlに近いものなのでしょうか。速度が求められる科学技術計算ではライブラリを導入して高速化できるということですが、どの程度かなと思いますが。その中間的なものがJavaなのかなと思いますが(半分実行ファイルみたな)。 たぶんベタな質問と思いますが、よろしくお願いします。

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m

専門家に質問してみよう