「ランタイム」とは何ですか?


404

「Cランタイム」、「Visual C ++ 2008ランタイム」、「。NET共通言語ランタイム」などについて聞いたことがあります。

  • ランタイム」とは正確には何ですか?
  • それは何で出来ていますか?
  • それは私のコードとどのように相互作用しますか?あるいはもっと正確に言えば、私のコードはどのように制御されますか?

Linuxでアセンブリ言語をコーディングするとき、INT命令を使用してシステムコールを作成できました。では、ランタイムとは、低レベルの関数をより抽象的で高レベルの関数にラップする一連のプレハブ関数にすぎないのでしょうか。しかし、これはランタイムの定義ではなく、ライブラリの定義のように見えませんか?

「ランタイム」と「ランタイムライブラリ」は異なるものですか?

追加1

最近、ランタイムはJVMなどのいわゆる仮想マシンと共通点があるのではないかと考えています。そのような考えにつながる引用は次のとおりです。

このコンパイルプロセスは、抽象化のいくつかの層に分割するのに十分に複雑であり、これらには通常、コンパイラー、仮想マシン実装、およびアセンブラーの3つのトランスレーターが含まれます。--- コンピューティングシステムの要素(はじめに、ハードウェアランドへの道)

追加2

エキスパートCプログラミング:ディープCシークレット」という本。第6章ランタイムデータ構造は、この質問への参照として役立ちます。


ランタイムには、runtime libraryいくつかの制御コードといくつかの状態(OSによって提供)が含まれています。
マーティンヨーク

43
素晴らしい質問です。いつもこれに疑問を投げかけました。
contactmatt 2012

INTを関数とは呼びません。詳細については、stackoverflow.com / questions / 1817577 /…をご覧ください。
Koray Tugay

2
:私は役に立つかもしれ姉妹サイト上の他の記事を見つけましたprogrammers.stackexchange.com/questions/294346/...
CloudyTrees

私はいつもそれを下位レベルのインフラストラクチャへのサンドボックスのように扱います。Unixキット、すべての低レベルGUIライブラリなどにタスクマネージャ/プロセスがあります。これらはすべてランタイムの一部です。物事が構築される基盤。
JGFMK

回答:


262

ランタイムとは、プログラムの実行中に実行されるソフトウェア/命令、特に明示的に記述しなかったがコードを適切に実行するために必要な命令を表します。

Cのような低水準言語のランタイムは(もしあれば)非常に小さいです。動的なメッセージパッシングを可能にするObjective-Cなどのより複雑な言語では、実行時間がはるかに長くなります。

ランタイムコードはライブラリコードですが、ライブラリコードはより一般的な用語であり、任意のライブラリによって生成されるコードを表します。ランタイムコードは、特に言語自体の機能を実装するために必要なコードです。


103

ランタイムとは、コードが実行されるライブラリ、フレームワーク、またはプラットフォームを指す一般的な用語です。

CおよびC ++ランタイムは関数のコレクションです。

.NETランタイムには、中間言語インタープリター、ガベージコレクターなどが含まれています。


4
C ++標準ライブラリには関数が含まれているだけでなく、Matt Ballを参照すると、CおよびC ++の「ランタイム」はランタイムライブラリであり、.NETランタイムはランタイムライブラリであり、ランタイムシステムです。
smerlin

1
私の質問は、静的ライブラリもランタイムであるということですか?私はその用語が主に共有オブジェクトに使用されていると思いませんか?Linuxでlibcを検討してください。そして、プラットフォームとフレームワークはどうですか?それらもライブラリに分解されていますか?
アミールザデー

3
しかし、私のコードはどのようにて「ライブラリ、フレームワーク、またはプラットフォーム」で実際に実行できますか CPUまたはその他の処理装置で実行する必要があります。より明確にするために、追加の詳細レベルを提供できますか?
n611x007 2012年

CおよびC ++ランタイムは関数のコレクションです。->どんな機能?
Koray Tugay

3
@KorayTugay:coutまたはなどの標準ライブラリの関数printf
SLak、2015

80

ウィキペディアのとおり:ランタイムライブラリ / ランタイムシステム

コンピュータープログラミングでは、ランタイムライブラリは、コンピュータープログラムのランタイム(実行)中に、プログラミング言語に組み込まれた関数を実装するためにコンパイラーによって使用される特別なプログラムライブラリです。これには、多くの場合、入力と出力、またはメモリ管理のための関数が含まれています。


ランタイムシステム(ランタイムシステムまたは単にランタイムとも呼ばれます)は、一部のコンピューター言語で記述されたコンピュータープログラムの実行をサポートするように設計されたソフトウェアです。ランタイムシステムには、基本的な低レベルコマンドの実装が含まれており、より高レベルのコマンドを実装することもでき、型チェック、デバッグ、さらにはコード生成と最適化さえサポートする場合があります。ランタイムシステムの一部のサービスには、アプリケーションプログラミングインターフェイスを介してプログラマがアクセスできますが、他のサービス(タスクのスケジューリングやリソース管理など)にはアクセスできない場合があります。


Re:edit、「runtime」、「runtime library」は、同じものの2つの異なる名前です。


69
ウィキペディアは引用の良い情報源ではありません。信頼できる情報源を探すのに適した場所ですが、それ自体は信頼できると見なすべきではないため、そこからの引用は信頼できません。(ウィキペディアの作成者であるウェールズ氏の声明に従って)。
マーティンヨーク

5
最初の引用の「実行時」(おそらく実行時ライブラリについて)は何を指しますか?簡単な[誤]解釈は次のようになります。「プログラムの実行中に、コンパイラーは並行してライブラリー(それ自体)を使用して(実行時に追加コードを生成して)「約束された」(言語仕様により) )プログラムの機能」。これは誤りであるか、実行時システムのdefで簡単に曲げられる可能性があります。
n611x007 2012年

2
Lokiが去ったところから続けるために、特にどちらの記事にも参照がない場合(引用ではないので、これは私が言ったほうがいいと思います)
arsaKasra

1
@MartinYorkは、百科事典が権威がないだけでなく、ドキュメントではなく説明に焦点を合わせています。それらは非常に異なる場合があります。
Roy Prins

59

ランタイムまたは実行環境は、コードを実行し、で存在する言語の実装の一部であるランタイム。実装のコンパイル時の部分は、C標準では変換環境と呼ばれています

例:

  • Javaランタイムは仮想マシンと標準ライブラリで構成されています

  • 一般的なCランタイムは、ローダー(オペレーティングシステムの一部)と、コンパイラーによって実行可能ファイルに組み込まれていないC言語の部分を実装するランタイムライブラリで構成されます。ホスト環境では、これには標準ライブラリのほとんどの部分が含まれます


2
ありがとう、これがこのトピックの最良の答えだと思います。
Koray Tugay

1
「実行環境」という名前を付けて感謝しますが、前者のエイリアスとして「ランタイム」だけを使用することは悪い考えだと思います(多くのプログラマーが行っている私の観察から)、「ランタイム環境」の方が正確です。「実行時間」は「プログラムが実行される時間」を意味するという@MichałTrybusに同意します。
WloHu

32

私の理解では、ランタイムとはまさにその意味、つまりプログラムが実行される時間です。ランタイム / 実行時またはコンパイル時に何かが発生したと言えます

ランタイムランタイムライブラリは(そうでない場合は)2つの別個のものである必要があると思います。「Cランタイム」は私には正しくないようです。「Cランタイムライブラリ」と呼んでいます。

他の質問への回答:ランタイムという用語は、実行時にプログラムの環境とコンテキストも含めるように拡張できると思います。

  • 他のプロセス、オペレーティングシステムと使用されているライブラリの状態、他のプロセスの状態など、プログラムの実行時に「環境」と呼ぶことができるすべてのもので構成されます。
  • それは一般的な意味であなたのコードと相互作用しません、それはあなたのコードがどのような状況で機能するか、実行中に何が利用できるかを定義するだけです。

この答えは、事実や定義ではなく、私の意見を拡張したものです。


29

マットボールは正しく答えました。例を挙げて説明します。

Turbo-Borland C / C ++(1991年のバージョン3.1)コンパイラーでコンパイルされたプログラムを実行して、Win 98/2000などの32ビットバージョンのウィンドウで実行できるようにすることを検討してください。

これは16ビットのコンパイラです。また、すべてのプログラムに16ビットポインターがあることがわかります。OSが32ビットの場合、なぜですか?コンパイラが16ビットの実行環境をセットアップし、OSの32ビットバージョンがそれをサポートしているためです。

一般にJRE(Javaランタイム環境)と呼ばれるものは、実行する必要があるすべてのリソースをJavaプログラムに提供します。

実際、ランタイム環境は仮想マシンのアイデアの頭脳産物です。仮想マシンは、ハードウェアとプログラムが実行する必要のあるものとの間の生のインターフェースを実装します。ランタイム環境はこれらのインターフェースを採用し、プログラマーが使用できるように提示します。コンパイラー開発者は、プログラムの実行環境を提供するためにこれらの機能を必要とするでしょう。


仮想マシンは、ハードウェアとプログラムが実行する必要のあるものとの間の「生の」インターフェースを実装します。->これについてはよくわかりません。
Koray Tugay

7

コードが実行される正確な場所でランタイムを実行すると、コードが実行する重要な多くのことがわかります。

ランタイムには、オペレーティングシステムのサブシステム(ファイルサービス、IOサービス、ネットワークサービスなど)を使用して、メモリの割り当て、メモリの解放を行う責任があります。

実際にコードを実行するまで、コードは「WORKING IN THEORY」と呼ばれます。そしてランタイムはこれを達成するのを助ける友人です。


3

ランタイムは、プログラムライフの現在のフェーズ(ランタイム/コンパイル時間/ロード時間/リンク時間)を表す場合と、ランタイムライブラリを意味する場合があり、実行環境とインターフェースする基本的な低レベルアクションを形成します。または、実行環境と同じランタイムシステムを意味する場合もあります。

Cプログラムの場合、ランタイムとは、C環境で要件として期待されているスタックやヒープなどをセットアップするコードです。それは本質的に言語によって約束された環境をセットアップします。(ランタイムライブラリコンポーネントcrt0.libまたはCの場合はそのようなものを持つことができます)


3

私は、ことがわかった次のフォルダ構造がどのような理解するための非常に洞察力のコンテキストになりruntimeます:

Mozilla XulRunnerのランタイム

ソース」があり、「SDK」または「ソフトウェア開発キット」があり、次にがあることがわかりますRuntime。実行されるもの-実行時。内容は次のとおりです。

ランタイムのフォルダーの内容

win32 zipには、.exe -sおよび.dll -sが含まれています。

だから例えば。Cランタイムは次のようなファイルになります-Cランタイムライブラリ、.so-sまたは.dll -s-ランタイムで実行され、その(またはその内容または目的)の定義によって特別に作成されます。 C言語(「紙」上)、選択したC実装によって実装されます。そして、その実装のランタイムを取得し、それを使用して構築します。

つまり、少し分極化して、新しいCベースのプログラムのユーザーが必要とする実行可能なファイルです。Cベースのプログラムの開発者としてもそうですが、CコンパイラとCライブラリヘッダーも必要です。ユーザーはそれらを必要としません。


1
文脈ランタイムへの別の一つは、この関係のない記事であるPythonの神話あなたがの区別見ることができるのセクション神話6、ランタイムおよびプログラミング言語の神話6の最初の段落では、
n611x007

3

ランタイムとは、基本的に、プログラムがマシンのハードウェアおよびオペレーティングシステムと対話することを意味します。Cには独自のランタイムはありませんが、オペレーティングシステム(基本的にはramの一部)にランタイムを要求してそれ自体を実行します。


1

上記の回答を読んで私の理解が正しければ、ランタイムは基本的にガベージコレクション、メモリ割り当て、基本的にコードが記述されているライブラリ/フレームワークによって間接的に呼び出されるすべてのプロセスなどの「バックグラウンドプロセス」です。アプリケーションの実行中にコンパイル後に発生するプロセス。


-1

MSDNドキュメントのこれらのセクションは、ほとんどの質問を扱います:http : //msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

これがお役に立てば幸いです。

ありがとう、ダミアン


3
実際にはそうではありません。彼は.Netについて尋ねているだけではありません。
SLak

@マット:もう一度。しかし、彼のランタイムの2/3は.Netでサポートされており、彼のタグの1/2は.Netを処理しており、リンクが役立つと思いました。
Damian Schenkelman、

「言語の3/4が.NETをサポートしている」と言います。.NETは多くのサポートを行うわけではなく、ミドルウェアレベルでUNIXとWindowsの間の亀裂を強力に保つように設計されています。
マットジョイナー

@MattJoiner-2010年もそうだったかもしれませんが、今日では.NETスタンダードや.NET Coreなどのオープンソース実装では記念碑的に真実ではありません
rory.ap

-2

実行時とは、実行中に作成されるオブジェクトの種類がわからないインスタンスです。オブジェクトの作成は、特定の条件または計算作業に基づいています。対照的に、コンパイル時間は、実行前に必要なオブジェクトがユーザーによって定義されるインスタンスです。


-3

ランタイムは、設計時およびコンパイル時/リンク時とは多少逆です。歴史的には、マシンタイムが高くつく遅いメインフレーム環境に由来します。


1
これは質問に答えず、さらに複雑にします。
cglotr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.