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

コンパイラは、あるプログラミング言語で記述されたソースコードを別のコンピュータ言語に変換するコンピュータプログラムです。

8
Itaniumプロセッサがコンパイラを書くのが難しいのはなぜですか?
よく知られているように、IntelのItanium 64ビットプロセッサアーキテクチャは、革新的なEPIC命令セットが優れたコンパイラを書くのが非常に難しく、IA64の優れた開発者ツールが不足しており、そのアーキテクチャ用のプログラムを作成する開発者が不足していたために失敗した、だから誰もハードウェアをあまりソフトウェアなしで使いたくなかったので、プラットフォームは失敗しました。馬蹄形の爪 優れたコンパイラ。 しかし、なぜコンパイラはそんなに難しい技術的な問題だったのでしょうか?コンパイラベンダーがEPICの明示的な並列処理を実装するのが難しいとしたら、そもそもなぜそれらに負担をかけるのでしょうか。この問題に対する優れた、十分に理解された解決策がまだ存在していなかったようではありません。代わりにその負担をインテルに負わせ、コンパイラ作成者にもっと簡単なターゲットを与えます。 Itaniumは1997年に登場しました。この時点までに、UCSD P-Codeバイトコードシステムは20年近く近く、Z-machineはわずかに若く、JVMはプログラミング言語の世界でホットな新星となりました。Intelが「単純なItaniumバイトコード」言語を指定せず、このバイトコードを最適化されたEPICコードに変換し、そもそもシステムを設計した人々としての専門知識を活用するツールを提供しなかった理由はありますか?
50 history  compiler 

4
最初のC ++コンパイラはどのようにC ++で作成できますか?
Stroustrupは、最初のC ++コンパイラであるCfrontがC ++で作成されたと主張しています(Stroustrup FAQ)。 しかし、最初のC ++コンパイラをC ++で作成することはどのように可能ですか? コンパイラーを構成するコードもコンパイルする必要があります。したがって、最初のC ++コンパイラーをC ++で作成することはできませんでしたか?

4
抽象構文ツリーはどのくらい正確に作成されますか?
私はASTの目標を理解しており、以前にツリー構造をいくつか構築したことがありますが、ASTを構築したことはないと思います。ノードはテキストであり番号ではないため、ほとんど混乱しています。そのため、コードを解析しているときにトークン/文字列を入力する良い方法は考えられません。 たとえば、ASTの図を見ると、変数とその値は等号のリーフノードでした。これは私にとって完全に理にかなっていますが、これをどのように実装しますか?私はケースバイケースでそれを行うことができると思うので、「=」につまずいたとき、ノードとしてそれを使用し、「=」の前に解析された値をリーフとして追加します。私はおそらく構文に応じて、たくさんの事柄のケースを作成しなければならないので、それは間違っているようです。 そして、私は別の問題に遭遇しました、ツリーはどのように横断されますか?高さを一番下に移動し、最下部に到達したらノードを上に移動し、隣のノードでも同じことをしますか? ASTで多数の図を見てきましたが、コードで簡単な例を見つけることができませんでした。おそらく役立つでしょう。

9
「Syntax」と「Syntactic Sugar」の違いは何ですか
バックグラウンド Syntactic SugarのWikipediaページには次のように記載されています。 コンピューターサイエンスでは、構文シュガーは、読みやすく、表現しやすいように設計されたプログラミング言語内の構文です。これにより、人間が使用する言語が「より甘く」なります。物事をより明確に、より簡潔に、または一部の人が好む代替スタイルで表現できます。 私は、Syntactic SugarとSyntaxの違いが本当に理解できません。 私は、甘いバージョンがより明確で簡潔になり、おそらくいくつかの定型的なものがなくなる可能性があるという点に感謝します。しかし、ある程度のレベルでは、すべての構文が本質的にそれを行って、コードがコンパイルされるものを抽象化することを感じています。 同じウィキペディアのページから: コンパイラー、静的アナライザーなどを含む言語プロセッサーは、しばしば「デシュガー化」と呼ばれるプロセスの前に、シュガー化されたコンストラクトをより基本的なコンストラクトに拡張します。 思考演習として、このステートメントで「頻繁に」「常に」を意味する場合:コンパイラが次の段階に進む前に構文を「デシュガー」するかどうかだけでは、内臓を知らないコーダーはコンパイラの何がSugar'd Syntaxとは何かを知っている(または気にしている)? このサイトに関する非常に関連した質問「構文糖の厳密な定義?」始まる答えがあります: 私見私はあなたがフレーズがBSであり、「本当のオペレーティングシステム」で「本当のツール」を使用して「本当のプログラマー」について話す人々によって使用される可能性が高いので、構文糖の定義を持つことができるとは思わない おそらく、この言語を使用しているコーダーに大きな違いはないことを私に示すかもしれません。おそらく、違いはコンパイラの作者にしか認識できないのでしょうか?言語を使用するコーダーがSyntactic Sugarの内部にあるものを知ることが役立つ場合がありますか?(しかし、実際には、主題に関するどんな言説でも、炎の餌としてこの用語を使用する傾向がありますか?) 質問の核心 だから...質問の短いバージョン: SyntaxとSyntactic Sugarの間に本当の違いはありますか? 誰が重要ですか? 思考のための余分な食べ物 トピックの矛盾に関するボーナス: ウィキペディアのページに例を示します。 たとえば、C言語では、a[i]表記法は*(a + i) 上記のリンクされた質問に関する別の答えは、同じ例について語っています: 考えてみてくださいa[i] == *(a + i)。実質的な方法で配列を使用するCプログラムについて考えてください。 そしてそれを要約します: []表記は、この抽象化を容易にします。構文糖衣ではありません。 同じ例の反対の結論!

6
インタープリターはマシンコードを生成しますか?
コンパイラーとインタープリターのトピックを集中的に研究しています。基本的な理解が正しいかどうかを確認したいので、次のことを想定しましょう。 「Foobish」という言語があり、そのキーワードは <OUTPUT> 'TEXT', <Number_of_Repeats>; したがって、コンソールに10回印刷する場合は、次のように記述します。 OUTPUT 'Hello World', 10; こんにちはWorld.foobish-file。 次に、選択した言語(この場合はC#)でインタープリターを作成します。 using System; namespace FoobishInterpreter { internal class Program { private static void Main(string[] args) { analyseAndTokenize(Hello World.foobish-file)//Pseudocode int repeats = Token[1]; string outputString = Token[0]; for (var i = 0; i < repeats; i++) { Console.WriteLine(outputString); } } …

6
FacebookがPHPコードをC ++に変換するのはなぜですか?[閉まっている]
FacebookはPHPで始まり、速度を上げるために、PHPをC ++コードとしてコンパイルするようになりました。もしそうなら、なぜそうしないのですか: C ++でプログラムするだけですか?PHPをc ++コードに移植する魔法のコンパイラボタンを押すと、間違いなくいくつかのエラー/バグがあるはずですよね? この印象的なコンバーターが非常にうまく機能するのであれば、なぜPHPにこだわるのでしょうか?RubyやPythonなどを使用しないのはなぜですか?注-これら2つをランダムに選択しましたが、ほとんどの人がこれらの言語でのコーディングは「喜び」だと言っているためです。それでは、なぜ素晴らしい言語で開発してから、魔法のc ++コンパイルボタンを押してみませんか?
42 c++  php  compiler  facebook 

13
ランダムな見知らぬ人からのソースコードをコンパイルすることはどれくらい安全ですか?[閉まっている]
求職者がスキルを証明するために送信するコードをレビューするとします。明らかに、彼らが送信する実行可能ファイルを実行したくない。それほど明確ではありませんが、コードのコンパイル結果を実行したくないのです(たとえば、Javaではコメント内の実行可能なコードを非表示にできます)。 コードをコンパイルするのはどうですか?私のコンパイラを悪用する巧妙な文字シーケンスがコードに含まれていて、コンパイラがマシンを危険にさらしている場合はどうでしょうか? 「コンパイラーの脆弱性」をGoogleで検索すると、コンパイラーの最適化とコードの発行、および発行されたコードが元のソースコードの意図どおりに安全であるかどうかがヒットします。 コンパイラーは通常、いくつかの巧妙なコードをコンパイルするときにユーザーマシンを危険にさらさないように検証されていますか?見知らぬ人からのコードをコンパイルすることはどれくらい安全ですか?

5
自分の言語を最初にCコードにコンパイルするのが理にかなっているのはいつですか?
独自のプログラミング言語を設計するとき、gccなどの既存のコンパイラを使用してマシンコードを作成できるように、ソースコードを取得してCまたはC ++コードに変換するコンバーターを記述するのはいつ意味がありますか?このアプローチを使用するプロジェクトはありますか?

4
C、C ++などのJITコンパイラ
CやC ++などのコンパイル言語用のジャストインタイムコンパイラはありますか?(頭に浮かぶ最初の名前はClangとLLVMです!しかし、私は彼らが現在それをサポートしているとは思いません。) 説明: このソフトウェアは、CやC ++などのコンパイルされたマシン言語でも、ランタイムプロファイリングフィードバックと、実行時のホットスポットの積極的に最適化された再コンパイルの恩恵を受けると思います。 プロファイルに基づく最適化も同様の仕事をしますが、異なる環境ではJITがより柔軟になります。PGOでは、リリースする前にバイナリを実行します。リリース後、実行時に収集された環境/入力フィードバックは使用されません。そのため、入力パターンが変更された場合、パフォーマンスの低下が発生します。しかし、JITはそのような状況でもうまく機能します。 ただし、JITコンパイルのパフォーマンス上の利点がそれ自体のオーバーヘッドを上回るかどうかについては議論の余地があると思います。

6
ネストされた関数呼び出しをインライン化できる場合、プログラムはなぜ呼び出しスタックを使用するのですか?
コンパイラに次のようなプログラムを取らせてはいけません。 function a(b) { return b^2 }; function c(b) { return a(b) + 5 }; それを次のようなプログラムに変換します。 function c(b) { return b^2 + 5 }; これにより、コンピュータがc(b)の返信先アドレスを覚える必要がなくなりますか? プログラムを格納し、コンパイルをサポートするために必要なハードディスク領域とRAMの増加が(それぞれ)呼び出しスタックを使用する理由だと思います。あれは正しいですか?

9
セルフホスティングコンパイラが新しい言語の通過儀礼と見なされるのはなぜですか?
尊敬に値するために、言語がセルフホスティングコンパイラを使用するか、少なくとも持っていることを人々が期待していると、今では多くの場所で聞いています。 これがなぜなのか興味があります。コンパイラは書くべき非常に重要なソフトウェアのようであり、すべての言語がそれらを作成するのに適しているわけではないと思います。より良い結果をもたらす何かに努力を費やす方が理にかなっていますか?


2
プログラムの64ビットバージョンを作成するのが難しいのはなぜですか?
私の短時間のプログラミングでは、プログラムの完全なソースがある限り、32ビットまたは64ビットのマシンでC ++、Javaなどをコンパイルするのは簡単でした。 しかし、多くのソフトウェアは64ビットでリリースされていません。最も厄介なことに、Unityエンジンの64ビットリリースはまだありません。 64ビットマシン用に一部のプログラムをコンパイルするのが難しいのはなぜですか?

5
解釈とコンパイル:有用な区別?
ここでは、インタプリタ言語とコンパイル言語の実装について多くの質問があります。区別が実際に意味をなすかどうか疑問に思っています。(実際には、質問は通常言語に関するものですが、それらの言語の最も一般的な実装について本当に考えています)。 現在、厳密に解釈される実装はほとんどありません。つまり、コードを一度に1行ずつ解析して実行する人はほとんどいません。さらに、マシンコードにコンパイルする実装も一般的ではなくなりました。ますます、コンパイラはある種の仮想マシンをターゲットにしています。 実際、ほとんどの実装は同じ基本戦略に集中しています。コンパイラーは、JITを介してネイティブコードに解釈またはコンパイルされるバイトコードを生成します。コンパイルと解釈の伝統的なアイデアのミックスです。 したがって、私は尋ねます:最近、解釈された実装とコンパイルされた実装の間に便利な区別はありますか?

10
コンパイラーとインタープリターにバグはありますか?(ユーザーとして)バグに対処するにはどうすればよいですか?[閉まっている]
コンパイラの作業が本質的にソースコードをマシンレベルのコードに変換することである場合、コンパイラに不具合、つまり障害のある「翻訳」が存在する可能性があります 通訳についても同じことが言えます。必要なコンテンツを出力できない場合がありますか? コンパイラ/インタープリターのバグを聞いたことはありませんが、存在しますか?

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