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

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

2
コンパイラはどのように機能しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 注:これは以前に尋ねられたことがないことに驚いています。もしそれがあれば検索で見つけることができませんでした。 私はたくさんのウェブサイトを訪れ、たくさんの記事を読み、たくさんの説明を聞きました。それらのほとんどは良かったが、それらはすべて広すぎるか、複雑すぎるか、または単純に悪いものでした。だから私の質問は、コンパイラはどのように機能するのですか? これが難しい、幅広い質問であれば、教えてください。しかし、そうでない場合は、質問に答えてください。
16 compiler 

9
キャリアアドバイス:プログラミング言語の理論の博士号[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 私はプログラミング言語の理論に非常に興味があり、このトピックで博士号を適用しますが、大学院教育後のキャリアについてもっと知りたいです。教授であることに加えて、どのような職業に就くことができますか?

2
コンパイラはコンパイル時間を短縮するためにマルチスレッドを利用しますか?
コンパイラのコースを正しく覚えている場合、典型的なコンパイラの概要は次のとおりです。 字句解析プログラムは、ソースコードを文字ごとにスキャンします(またはスキャン関数を呼び出します)。 入力文字列は、妥当性について語彙素の辞書と照合されます 語彙素が有効な場合、対応するトークンとして分類されます パーサーは、トークンの組み合わせの構文を検証します。トークンごとのトークン。 理論的には、ソースコードを4分の1(または任意の分母)に分割し、スキャンおよび解析プロセスをマルチスレッド化することは可能ですか?マルチスレッドを利用するコンパイラは存在しますか?

5
スクラムは、新しいコンパイラバックエンドを実装するときに意味がありますか?
新しいプラットフォームに移植する必要がある既存の言語があります。既存のコンパイラのバックエンドを変更することで、おそらくこれを試みます。 バックエンドを書き直すのはかなりの作業です。INVEST基準に違反することなく、これを理にかなったストーリーに分解する方法はありません。 各ストーリーがどのように交渉可能であるかはわかりません-それらはすべて、動作するコンパイラに必要です。ストーリーの優先度はすべて同じであり、配信する順番は関係ありません。それらすべてを行う必要があります。 私が実装しているソフトウェアには、他の部分より優先度が低い部分があり、それを段階的に提供できることがわかります。ただし、Must Haveという重要なコアがあります。 私はスクラムを追いかけようと計画していますが、私はただ動きをしているだけですか? この種のプロジェクトに推奨されるプラクティスはありますか?

2
コンパイラーは、再帰ロジックを同等の非再帰ロジックに変換できますか?
私はF#を学んでおり、C#をプログラミングしているときの考え方に影響を与え始めています。そのために、結果が読みやすくなると感じたときに再帰を使用していましたが、スタックオーバーフローに巻き込まれることを想像できません。 これは、コンパイラーが再帰関数を同等の非再帰形式に自動的に変換できるかどうかを尋ねることになりますか?

6
コンパイラを作成するのにC ++を使用する理由
コンパイラを書くのになぜC ++が良い選択なのか疑問に思っていました。もちろん、多くのコンパイラはCまたはC ++で記述されているため、Cもこの目的に適していますが、今回はC ++に興味があります。正当な理由はありますか?インターネットでそれを探していましたが、正当な理由を見つけることができません。
15 c++  compiler 

1
コンパイラ開発に関するポッドキャスト(講義ではない)はありますか?
この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答やインタラクションを受け入れていません。 大学からの講義を含むポッドキャストがいくつかあります。「他の」ポッドキャストを探しています。 それでは、コンパイラ開発に関する講義以外のポッドキャストはありますか?
15 compiler 

3
静的型システムは、プロトタイプベースの言語の設計にどのように影響しますか?
プロトタイプベースの言語でWikipediaの記事は、次の段落が含まれています。 ほとんどすべてのプロトタイプベースのシステムは、インタープリター型および動的型付け言語に基づいています。ただし、静的に型付けされた言語に基づくシステムは技術的に実現可能です。 静的型システムは、どのように制限を課すか、プロトタイプベースの言語に複雑さをもたらしますか?そして、なぜ動的に型付けされたプロトタイプ言語があるのですか?

13
Cコンパイラの最初のバージョンが数十分間実行され、ステージ間でフロッピーディスクを交換する必要があったのは本当ですか?
この質問に触発されました。 パソコン用の非常に初期のバージョンのCコンパイラ(1980年頃だと思います)が2つまたは3つのフロッピーディスクに常駐していたので、プログラムをコンパイルするために最初に「最初のパス」でディスクを挿入する必要があると聞きました「最初のパス」、次に「2回目のパス」でディスクに変更し、それを実行してから、「3回目のパス」で同じことを行います。各パスは数十分間実行されたため、開発者はタイプミスでも多くの時間を失いました。 その主張はどれほど現実的ですか?実際の数字と詳細は何ですか?
15 history  compiler 

4
コンパイラーの仕事-必要な教育の量[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 主題としてのコンパイラ構築の質問に動機付けられ、これを尋ねると思いました。 少数の人々から、彼らが良い「コンパイラーチーム」を持っていると聞いたことがあります(どこで聞いたのか、思い出せません)。だから、そのようなチームでどのように仕事に就くのでしょうか。 ? 私は学部課程などにクラスがあることを知っていますが、大学院の学位が最低限のものになるでしょうか(少なくとも修士など)? 私は2か月でコンピューターサイエンスの修士号を開始し、2つのコンパイラクラスがありますが、コンパイラ開発の仕事を得るのに十分でしょうか、それにより多くの時間を投資する必要がありますか?

12
自分で構文エラーを修正しようとするコンパイラはありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 しばらく前に、コンテキストを分析して意図を推測することで構文エラーを修正しようとするコンパイラーがあったことを聞きました。 そのようなコンパイラは本当に存在しますか?明らかに実用的な価値はほとんどありませんが、遊んだり、学んだりすることは非常に興味深いでしょう。
15 syntax  compiler 

10
コンパイラの警告
多くのコンパイラには、潜在的なランタイム、ロジック、およびパフォーマンスエラーについてプログラマに警告する警告メッセージがあります。ほとんどの場合、すぐに修正できますが、修正不可能な警告はどうでしょうか。 修正不可能な警告にはどのように対処しますか?コードの一部を書き直しますか、それとも「長く、ハックレスな方法」で書き直しますか、または警告をすべて無効にしますか?ベストプラクティスは何ですか? 他の人のコードを編集していて、彼のコードに警告がある場合はどうなりますか? 次に例を示します。MozillaクラスのブラウザがjQueryに多数のJavaScript警告を検出したため、jQ開発者が修正しないのはなぜですか?jQueryに貢献する場合、それらを修正しますか?
15 compiler 

2
ジェネリックは最新のコンパイラにどのように実装されていますか?
ここで私が意味しているのは、テンプレートからT add(T a, T b) ...生成されたコードにどのように行くかということです。これを実現するいくつかの方法を考えました。汎用関数をAST Function_Nodeに格納し、それを使用するたびに、元の関数ノードに、すべてのT型が使用されています。例えばadd<int>(5, 6)のための一般的な機能のコピーを保存するaddと、すべてのタイプに置き換えてT コピーで持ちますint。 したがって、次のようになります。 struct Function_Node { std::string name; // etc. Type return_type; std::vector<std::pair<Type, std::string>> arguments; std::vector<Function_Node> copies; }; 次に、これらのコードを生成しFunction_Node、コピーの場所リストにアクセスすると、すべてのコピーcopies.size() > 0で呼び出しますvisitFunction。 visitFunction(Function_Node& node) { if (node.copies.size() > 0) { for (auto& node : nodes.copies) { visitFunction(node); } // it's a generic function so …

1
LLVMにツリーのようなIRではなく、アセンブリのようなIRがあるのはなぜですか?または:プロジェクトがclangのASTではなくLLVM IRをターゲットとするのはなぜですか?
なぜLLVMの中間表現(LLVM IR)はツリーのようではなくアセンブリのようですか? あるいは、言語の実装がclangのASTではなくLLVM IRをターゲットにしているのはなぜですか? そのように思える場合、私は一度に2つの異なる質問をしようとはしていません。私にとっては、クライアントとライブラリの両方のプログラマーが、LLVMのAPIは明らかに優れたソフトウェア設計であり、「なぜ?」 私が尋ねる理由は、IRがASTに似ていればLLVMがフロントエンドにより多くの機能を提供できるように見えることです。clangのASTベースのツールはどのフロントエンドにも使用できるからです。あるいは、LLVM IRを対象とする言語は、clangのASTを対象とする場合、より多くの機能を取得できます。 ClangにはASTを作成および操作するためのクラスと関数があり、LLVMプロジェクトに強く結び付けられている唯一のフロントエンドプロジェクトです。なぜclangのAST機能はLLVMの外部にあるのでしょうか。 私の頭上では、Rust(rustc)、D(ldc)、Haskell(GHC)はすべてLLVMをバックエンドとして使用できますが、Clang ASTは使用しません(私が知る限り、間違っている)。これらのコンパイラのすべての内部詳細はわかりませんが、少なくともRustとDは確かにclangのASTにコンパイルできるようです。Haskellも可能かもしれませんが、それについてはあまり確信が持てません。 これは歴史的な理由によるものですか(LLVMはもともと「低レベルの仮想マシン」であり、clangは後で登場します)?これは、他のフロントエンドがLLVMに供給するものを可能な限り制御したいからでしょうか?clangのASTが「非Cライク」言語に不適切である根本的な理由はありますか? 私はこの質問をマインドリーディングの練習にするつもりはありません。コンパイラー設計に興味はあるが、まだ流notではない私たちにとって役立つものにしたいだけです。LLVMおよびclangプロジェクトは公開で開発されているため、これらのプロジェクトの開発に精通している人が答えられるか、答えがコンパイルオタクにとって十分に明白であり、彼らが答えるのに十分自信があると感じることを望んでいます。 明らかではあるが不十分な回答を先取りするには: はい、アセンブリのようなIRを有するIR工芸誰により詳細に制御できます(おそらくX langは打ち鳴らすより良いコードベースとASTの形式を持っている)が、それが唯一の答えだ場合、その疑問は、なぜLLVMはない」となっのみ assembly-を持っています高レベルのツリーのようなIRと低レベルのアセンブリのようなIRではなくIRが好きですか?」 はい、プログラミング言語をASTに解析するのはそれほど難しくありません(少なくとも他のコンパイル手順と比較して)。それでも、なぜ個別のASTを使用するのですか?他に何もなければ、同じASTを使用すると、ASTで動作するツールを使用できます(ASTプリンターのような単純なものでも)。 はい、よりモジュール化することは良いことであることに強く同意しますが、それが唯一の理由である場合、他の言語実装がclangのASTではなくLLVM IRをターゲットとする傾向があるのはなぜですか? これらのプリエンプションは誤っているか、詳細を見落としている可能性があります。詳細がある場合、または私の仮定が間違っている場合は、お気軽にこれらの回答を行ってください。 より明確に答えられる質問に答えたい人のために:アセンブリのようなIR対ツリーのようなIRの長所と短所は何ですか?

3
コンパイラは他のクラスとそのプロパティをどのように知っていますか?
私はオブジェクト指向で、これまでのところ単一の「クラス」を作成するのに適した最初のプログラミング言語を書いています。しかし、の私は、クラスに持って言いたいとしましょうClassAとClassB。これら2つが互いに関係ない場合、すべてが良好です。ただし、たとえばClassA、ClassB次の2つの関連する質問が発生します。 -どのようにコンパイルするコンパイラを知っているだろうClassAということClassBにも存在し、それがない場合、どのようにそれはそれは性質を知っているんでは? これまでの私の考えは、各クラスを一度にコンパイルする(つまり、スキャン、解析、コード生成)代わりに、各「ファイル(実際にはファイルではなく、「クラス」)ごとに最初にスキャン+解析する必要がありますか? 、すべてのコードを生成しますか?

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