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

ある言語(ソース言語)のコードを読み取り、それを別の言語(ターゲット言語)の同等のプログラムに変換するプログラムに関する質問。

10
コンパイラがCで記述されている言語は、Cよりも高速になりますか?
見撮影ジュリアのウェブページを、あなたは、いくつかのアルゴリズム(タイミングは、以下に示す)間でいくつかの言語のいくつかのベンチマークを見ることができます。もともとCで書かれたコンパイラーを備えた言語は、Cコードよりも優れているのでしょうか? 図:Cに対するベンチマーク時間(小さいほど良い、Cパフォーマンス= 1.0)。

5
一部のプログラミング言語が他のプログラミング言語よりも「高速」または「低速」なのはなぜですか?
プログラミング言語で構築された一部のアプリケーションまたはアルゴリズム、たとえばC ++ / Rustは、同じマシンで実行されているJava / Node.jsなどで構築されたものよりも高速または高速に動作することに気付きました。これに関していくつか質問があります。 なぜこれが起こるのですか? プログラミング言語の「速度」を支配するものは何ですか? これはメモリ管理と関係がありますか? 誰かが私のためにこれを壊してくれたら本当に感謝しています。

9
プログラミング言語のどのプロパティがコンパイルを不可能にしますか?
質問: 「プログラミング言語の特定のプロパティでは、コードに記述されたコードを実行するための唯一の方法は解釈によるものです。つまり、従来のCPUのネイティブマシンコードへのコンパイルは不可能です。これらのプロパティは何ですか?」 コンパイラ:Parag H. DaveおよびHimanshu B. Daveによる原則と実践(2012年5月2日) 本は答えについての手がかりを与えません。プログラミング言語の概念(SEBESTA)で答えを見つけようとしましたが、役に立ちませんでした。ウェブ検索もあまり役に立ちませんでした。手がかりはありますか?

10
Ruby / Pythonのような動的言語は、パフォーマンスのようなC / C ++に到達できますか?
Rubyのような動的言語用のコンパイラをビルドして、C / C ++と同等の性能を比較することは可能でしょうか?私がコンパイラについて理解していることから、Rubyを例にとると、Rubyがリフレクションを処理する方法、整数から大きな整数への自動型変換などの機能、および静的型付けの欠如が効率的なコンパイラを構築するため、Rubyコードのコンパイルは効率的ではありませんRubyの場合は非常に困難です。 Rubyやその他の動的言語をC / C ++に非常に近い性能を発揮するバイナリにコンパイルできるコンパイラを構築することは可能ですか?PyPy / RubiniusなどのJITコンパイラが最終的にパフォーマンスでC / C ++と一致する、または一致しないという根本的な理由はありますか? 注:「パフォーマンス」はあいまいになる可能性があることを理解しているので、それを明確にするために、パフォーマンスYでC / C ++でXを実行できる場合、Yに近いパフォーマンスでRuby / PythonでXを実行できますか?Xは、デバイスドライバーやOSコードからWebアプリケーションまですべてです。

12
コンパイラーが割り当て解除を自動的に挿入しないのはなぜですか?
Cのような言語では、プログラマはfreeへの呼び出しを挿入することが期待されています。コンパイラがこれを自動的に行わないのはなぜですか?人間は(バグを無視して)妥当な時間内にそれを行うので、不可能ではありません。 EDIT:今後の参考のために、ここで興味深い例があり、別の議論です。

4
コンパイラの時間の複雑さ
コンパイラの時間の複雑さに興味があります。考慮すべきコンパイラ、コンパイラオプション、変数が多数あるため、これは明らかに非常に複雑な質問です。具体的には、LLVMに興味がありますが、人々が持っていた考えや研究を始める場所に興味があります。かなりグーグルはほとんど何も明らかにしないようです。 私の推測では、指数関数的ですが、実際の時間にはほとんど影響しない最適化手順がいくつかあると思います。たとえば、数値に基づく指数関数は関数の引数です。 私の頭の上から、私はASTツリーの生成は線形であると言うでしょう。IR生成では、増加し続けるテーブルの値を検索しながらツリーをステップスルーする必要があるため、またはO (n log n )となります。コードの生成とリンクは、同様のタイプの操作になります。したがって、現実的に成長しない変数の指数関数を削除した場合、私の推測はO (n 2)になります。O (n2)O(n2)O(n^2)O (n ログn )O(nlog⁡n)O(n\log n)O (n2)O(n2)O(n^2) 私は完全に間違っている可能性があります。誰もそれについて何か考えがありますか?
54 compilers 

8
プログラミング言語の「速度」を決定するものは何ですか?
プログラムが2つの異なる言語で記述されているとします。それらを言語Xと言語Yとします。コンパイラーが同じバイトコードを生成する場合、なぜ言語Yの代わりに言語Xを使用する必要がありますか?1つの言語が他の言語よりも高速であることを定義するものは何ですか? 「Cが最も速い言語であり、ATSはCと同じくらい速い言語である」というようなことを人々がよく目にするので、これを尋ねます。プログラミング言語の「高速」の定義を理解しようとしていました。


5
デッドコードがコンパイラによって検出できないことの証明
私はさまざまなトピックの冬のコースを教えることを計画しています。そのうちの1つはコンパイラーになります。今、私はこの問題に出くわしましたが、四半期を通じて与えるべき課題を考えていましたが、私は困惑しているので、代わりに例としてそれを使用するかもしれません。 public class DeadCode { public static void main(String[] args) { return; System.out.println("This line won't print."); } } 上記のプログラムでは、のためにprintステートメントが実行されないことは明らかですreturn。コンパイラーは、デッドコードに関する警告またはエラーを出すことがあります。たとえば、上記のコードはJavaでコンパイルされません。ただし、javacコンパイラは、すべてのプログラムでデッドコードのすべてのインスタンスを検出するわけではありません。コンパイラーがそれを実行できないことをどのように証明しますか?


2
バッチコンパイラとは
私はコンパイラのコースから次の引用を持っています(グラフの色付けのコンテキストで): 遅いため、グラフの色付けはバッチコンパイラで使用される傾向がありますが、線形スキャンはJITコンパイラで使用される傾向があります。 オンラインで明確な定義を見つけることができませんでした。それでは、コンパイラをバッチコンパイラにする理由は何ですか?
28 compilers 

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

6
2つの言語間でソースコードを「翻訳」できるプログラムはありますか?
2つの言語間でソースコードを「翻訳」できるプログラムはありますか(翻訳者が必要なライブラリにアクセスできると仮定します)? ある場合、それらはどのように機能しますか(使用される技術、必要な知識など)?それらはどのように実行可能に構築されますか? そうでない場合、開発を妨げる制限は何ですか?これはAIの完全な問題ですか(自然言語の翻訳は1つとしてリストされています)? EDIT 変換は、言語に同じ表現力があり、同じ種類の問題を解決でき、変換されるコードが宛先言語で表現できる場合にのみ予想されます。(たとえば、シェルスクリプトからMATLABへの変換は想定されていません)。

2
JITコンパイラは通常のコンパイラとどう違うのですか?
Java、Ruby、Pythonなどの言語用のJITコンパイラーについては、多くの誇大宣伝がありました。JITコンパイラはC / C ++コンパイラとどのように違いますか。また、C / C ++コンパイラは単にコンパイラと呼ばれますが、Java、Ruby、またはPython用に記述されたコンパイラはなぜJITコンパイラと呼ばれますか?
22 compilers 

1
プログラムを終了するためのコンパイラを完全に最適化していますか?
Andrew W. Appelの著書「MLのModern Compiler Implementation」では、第17章で、計算可能性理論は新しい最適化変換を発明することが常に可能であることを示し、完全に最適化するコンパイラーが停止する問題を解決することを証明することに進むと述べています:プログラム出力を生成せず、停止しないQは、最適な表現であるOpt(Q)に簡単に置き換えることができ、「L:goto L」です。したがって、完全に最適化されたコンパイラは、停止する問題を解決できます。 だから私の質問はこれです:プログラムを終了するための完全に最適化されたコンパイラは存在しますか?私の唯一の考えは次のとおりです。プログラムは終了することが保証されていますが、それはまだ任意に複雑である可能性があり、具体的な最適化コンパイラCの場合、おそらくCを入力として受け取り、何らかの形でより悪いプログラムを生成するプログラムを構築できますある種のコーナーケース。 また、自分自身をプログラムの終了に制限することの意味は何ですか?

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