タグ付けされた質問 「compilation」

5
非常に基本的なコンパイラの書き方
gccコードをコンパイルしたような高度なコンパイラは、コードが記述された言語(C、C ++など)に従って機械可読ファイルにコンパイルします。実際、それらは対応する言語のライブラリと機能に従って各コードの意味を解釈します。私が間違っている場合は修正してください。 非常に基本的なコンパイラ(おそらくCで)を記述して静的ファイル(テキストファイルのHello Worldなど)をコンパイルすることにより、コンパイラをよりよく理解したいと思います。私はいくつかのチュートリアルと本を試しましたが、それらはすべて実用的なケースです。対応する言語に関連付けられた意味を持つ動的コードのコンパイルを扱います。 静的テキストを機械可読ファイルに変換する基本的なコンパイラーを作成するにはどうすればよいですか? 次のステップは、変数をコンパイラーに導入することです。言語の一部の機能のみをコンパイルするコンパイラを作成したいと想像してください。 実用的なチュートリアルとリソースをご紹介いただければ幸いです:-)
214 c  compiler  compilation  gcc 

1
違いの理解:従来のインタープリター、JITコンパイラー、JITインタープリター、およびAOTコンパイラー
従来のインタープリター、JITコンパイラー、JITインタープリター、AOTコンパイラーの違いを理解しようとしています。 インタープリターは、何らかのコンピューター言語で命令を実行する単なるマシン(仮想または物理)です。その意味で、JVMはインタープリターであり、物理CPUはインタープリターです。 Ahead-of-Timeコンパイルとは、コードを実行(解釈)する前に特定の言語にコンパイルすることを意味します。 ただし、JITコンパイラーとJITインタープリターの正確な定義についてはわかりません。 私が読んだ定義によると、JITコンパイルとは、コードを解釈する直前にコンパイルすることです。 それで、基本的に、JITコンパイルはAOTコンパイルであり、実行(解釈)の直前に行われますか? そして、JITインタープリターは、JITコンパイラーとインタープリターの両方を含み、解釈する直前にコードをコンパイルする(JITする)プログラムですか? 違いを明確にしてください。

9
コンパイラエラーの用語集がないために不満な初心者プログラマ
私の家族の友人が、プログラミング(C言語)を学ぶときに少し助けを求めました。私たちが話していたとき、彼はコンパイラー(GCC)がエラーを起こしたときに彼に与えるエラーメッセージを理解するのに苦労していることにフラストレーションを表明しました。彼は、使用されているすべての用語を理解していません。また、それらの組み合わせが理解できない場合もあります。「コンパイラのドキュメントに、エラーメッセージの詳細な説明が含まれていないのはなぜですか?」-そして、私は彼に良い答えがありませんでした。 私自身-より経験豊富なプログラマーとして-この状況ではめったにありませんが、これらのまれな出来事は起こります-私が以前に遭遇したことのないいくつかのエキゾチックなエラーメッセージ。私は検索エンジンでエラーメッセージを探すことで何とかやっていくことができますが、どうやらそれは彼のために常に機能するとは限りません-特に彼が遭遇するエラーはより一般的であり、彼が彼に関連するトラブルを抱えている複数の異なるケースで発生するため自分の。 それでは、初心者プログラマはコンパイラエラーメッセージを理解するという課題にどのように取り組むべきでしょうか?具体的には、CとGCCの組み合わせで?

6
長いコンパイルは過去のものですか?
コンパイルにかかる時間については、無数の戦争物語があります。xkcdでさえ言及しました。 今、私は長い間プログラミングをしておらず、ほとんどがJavaとPythonにさらされたばかりです(Pythonはインタープリター言語であり、コンパイルされた言語ではありません)。コンパイルに非常に時間がかかるプロジェクトに出会ったことがない可能性があることを認識していますが、まともなサイズのアプリであっても、瞬時に(通常はIDEによってバックグラウンドで処理されます)、または30非常に大規模なプロジェクトの場合は数秒程度です。コミックが行われるビジネス環境であっても、コードのコンパイルにそれほど時間がかかったことはありません。 コンパイル時間が長いプロジェクトにさらされたことはありませんか?これは過去の遺物であり、もはや現代では起きないことですか?コンパイルに長い時間がかかるのはなぜですか?


11
C ++コンパイラは、不要な括弧を削除/最適化しますか?
コードは int a = ((1 + 2) + 3); // Easy to read より遅く走る int a = 1 + 2 + 3; // (Barely) Not quite so easy to read または、「無駄な」括弧を削除/最適化するのに十分な最新のコンパイラーです。 非常に小さな最適化の懸念のように思えるかもしれませんが、C#/ Java / ...よりもC ++を選択することは、最適化(IMHO)のすべてです。

6
C ++のインライン関数。ポイントは何ですか?
私が読んだことによると、コンパイラーはインライン関数の関数呼び出しをその本体で置き換える義務はありませんが、可能であれば置き換えます。これは私に考えさせられました-それが事実である場合、なぜ私たちはインラインワードを持っていますか?デフォルトですべての関数をインライン関数にして、呼び出しを関数本体で置き換えることができるかどうかをコンパイラーに判断させてみませんか?

5
コンパイラの出力がオブジェクトコードと呼ばれるのはなぜですか?
Hackers&Paintersに掲載されているPaul Grahamによるエッセイプログラミング言語から: コンパイラに供給する高レベル言語はソースコードとも呼ばれ 、生成される機械語翻訳はオブジェクトコードと呼ばれます。 オブジェクトコードに関するWikipediaの記事から: オブジェクトコードまたはオブジェクトモジュールは、コンピューターコンパイラが生成するものです。 「コンパイラ」の定義から: 従来、コンパイルの出力はオブジェクトコードまたはオブジェクトモジュールと呼ばれていました。(ここでの「オブジェクト」という用語は、オブジェクト指向プログラミングとは関係がないことに注意してください。) では、用語オブジェクトは何に関連していますか?

8
IDEでバックグラウンドのコンパイル/ビルドが行われないのはなぜですか?
今日、私はかなり複雑なコンピューターで開発しています。複数のコア、SSDドライブなどがあります。それでも、私がコンピューターをプログラミングしているほとんどの時間は喜んで何もしていません。せいぜいやや複雑なプロジェクトをコンパイルして実行/デプロイする必要がある場合でも、数秒かかります。どうして?私たちは「インスタントエイジ」の時代にどんどん住んでいるのに、どうしてVisual StudioでF5キーを押して、すぐにアプリケーションを起動/展開できないのでしょうか。 数秒はそれほど悪くないように聞こえるかもしれませんが、それでも認知的な摩擦と時間が加算され、率直に言ってプログラミングが楽しくなりません。それでは、どのようにコンパイルを瞬時に行うことができますか? さて、人々は異なるアセンブリのファイルを編集する傾向があります。VisualStudio / IDEが適切な場合はいつでも私が修正したすべてのもののコンパイル/ビルドを絶えず行っていたらどうでしょうか。本当に高度なものにしたい場合は、クラスごとのコンパイルを行うことができます。コンパイルは動作しないかもしれませんが、何もせずに何もしません(エラーウィンドウにエラーメッセージを追加する場合を除く)。 確かに今日のコンピューターはこのタスクに1つまたは2つのコアを割り当て、誰かがそれをうんざりさせたら、オプションで無効にすることができます。シームレスで実用的であるためには、おそらく1,000の技術的な問題と、いくつかの派手なシャドウコピーを解決する必要があることを知っていますが、プログラミングがよりシームレスになることは確かです。 このシナリオが不可能な実用的な理由はありますか?継続的にバイナリを作成することによる損耗は多すぎるでしょうか?展開/実行するまでアセンブリをメモリに保持できませんでしたか?

3
ファーストクラスのライブラリを出荷しています。知っておく必要がある落とし穴はありますか?
私は自分のキャリアで「ファーストクラスライブラリ公開」の成果を解き明かそうとしているWeb開発者です。コミュニティの経験を活用して、可能な限りスムーズに進むための提案や推奨事項があるかどうかを確認したいと思います。知っておく必要のある詳細や落とし穴はありますか?ビルドプロセスについて何か特別なことはありますか? 私がいる場所は次のとおりです。 ライブラリはユニットテストされており、約97%のコードカバレッジがあります。 APIは十分に文書化されており、インテリセンスサポートのxmlドキュメントが作成されています パブリック/プライベートクラスアクセサーが正確かつ正しいことを確認しました。すべてのゲッター/セッターについても同じことが言えます エラー処理は私が望んでいるほど優雅ではありませんが、私は締め切りに間に合っており、今のところ「それがうまくいく」ことを受け入れています わかりやすいログはありません。Debug.Writelineが広く使用されていました...最近、これが私の経験不足を反映していることがわかりました:( あなたのアドバイスは大歓迎です! ライブラリはレポートの生成に使用されます。標準の帽子-読み取り専用データベースに接続し、計算を実行し、データをフォーマットし、応答ストリームに出力します。 私は、辞めたプログラマーの一人を補うためのフリンジリソースとしてタップされ、このタスクは「歯を切る」プロジェクトとして私に与えられました。クラスライブラリは、プロダクションコードを記述するときに使用する社内の他のプログラマ向けにリリースされる予定です。

3
ビルド済みのバイナリパフォーマンスのコンパイルと使用?
使用する実際のマシンのソフトウェアコンポーネントのソースを手動でコンパイルした方が、おそらく多くの異なるアーキテクチャーの別のプラットフォームでソースをコンパイルした場合と比較して、パフォーマンスが向上します(より高速)?ダウンロードしたソースをコンパイルしていくつかの良い結果が得られました。これは、ソフトウェアの更新でよくあるプリコンパイルされたバイナリをダウンロードする代わりに、それをコンパイルしたためなのかと思います。

3
関数型プログラミング言語には、コンパイル時の最適化を行う機会がありますか?
私は「実世界のための関数型プログラミング」という本を読んでいました。まず、命令型プログラミング言語と関数型プログラミング言語の比較から始めました。そして、関数型プログラミングの「値」と「式」が命令型プログラミングの「変数」と「関数」とどのように異なるかを述べました。ディスカッションから私は次のようなアイデアを開発しました- 関数型プログラミング言語には、対応する命令型言語よりもコンパイル時間の最適化を行う機会が多くあります。 本当ですか?

4
「コンパイルして、CPUが間違った処理を実行しないようにしたかった」という文の意味は何ですか。
この記事を読んでいました。次の段落があります。 そして、Scalaは高速であることが判明しましたか?さて、あなたの高速の定義は何ですか?ほぼJavaと同じくらい高速です。CやAssemblyほど高速である必要はありません。PythonはRubyよりも大幅に高速ではありません。同時実行性を活用して、より少ないマシンでより多くのことを実行したいと考えました。それをコンパイルして、間違った処理を行っているCPUを焼き付けないようにしたかったのです。 最後の文の意味を探しています。インタプリタ言語はCPUにどのようにして「間違った」処理をさせるのでしょうか?

4
C#の定数
コンパイラが定数値をアセンブリメタデータに格納するのはなぜですか?それらは、アセンブリメタデータから中間言語コードに直接埋め込まれていますか?
9 c#  clr  compilation 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.