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

タグcompiler-constructionは、コンパイラーのプログラミングに関する質問、またはコンパイラーの詳細な内部動作に関する質問に適用する必要があります。特定のコンパイラの*使用*またはコンパイルエラーに関する質問には使用しないでください。

30
コンパイラの書き方を学ぶ[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか? Stack Overflowのトピックとなるように質問を更新します。 5年前休業。 この質問の答えはコミュニティの努力です。この投稿を改善するには、既存の回答を編集してください。現在、新しい回答や相互作用を受け入れていません。 優先言語:C / C ++、Java、Ruby。 単に教育目的で独自のコンパイラを作成する方法について、役立つ本/チュートリアルを探しています。私はC / C ++、Java、Rubyに最も精通しているので、これら3つのうちの1つを含むリソースを好みますが、適切なリソースであればどれでもかまいません。


16
アプリケーションバイナリインターフェイス(ABI)とは何ですか?
私はABIが何であるかを明確に理解したことがありません。ウィキペディアの記事を紹介しないでください。理解できたらここまでそんなに長い投稿はしないでしょう。 これは、さまざまなインターフェイスに関する私の考え方です。 テレビのリモコンは、ユーザーとテレビの間のインターフェースです。これは既存のエンティティですが、それ自体では役に立ちません(機能を提供しません)。リモコンのこれらの各ボタンのすべての機能は、テレビに実装されています。 インターフェース:それは間の「既存のエンティティ」層であり、 functionalityかつconsumerその機能の。インターフェイス自体は何もしません。背後にある機能を呼び出すだけです。 ユーザーが誰であるかに応じて、さまざまなタイプのインターフェースがあります。 コマンドラインインターフェイス(CLI)コマンドは既存のエンティティであり、コンシューマがユーザーであり、機能は背後にあります。 functionality: 私たちがこのインターフェースを説明しているいくつかの目的を解決する私のソフトウェア機能。 existing entities: コマンド consumer: ユーザー グラフィカルユーザーインターフェイス(GUI)ウィンドウ、ボタンなどは既存のエンティティであり、コンシューマがユーザーであり、機能は背後にあります。 functionality: このインターフェイスについて説明している問題を解決するソフトウェア機能。 existing entities: ウィンドウ、ボタンなど consumer: ユーザー アプリケーションプログラミングインターフェイス(API)関数(またはより正確には)のインターフェイス(インターフェイスベースのプログラミングの場合)は既存のエンティティであり、コンシューマーはユーザーではなく別のプログラムであり、機能はこのレイヤーの背後にあります。 functionality: このインターフェイスについて説明している問題を解決するソフトウェア機能。 existing entities: 関数、インターフェイス(関数の配列)。 consumer: 別のプログラム/アプリケーション。 Application Binary Interface(ABI)ここからが私の問題の始まりです。 functionality: ??? existing entities: ??? consumer: ??? ソフトウェアをさまざまな言語で作成し、さまざまな種類のインターフェース(CLI、GUI、API)を提供しましたが、ABIを提供したことがあるかどうかはわかりません。 ウィキペディアは言う: ABIは次のような詳細をカバーします データ型、サイズ、および配置。 関数の引数の受け渡し方法と戻り値の取得方法を制御する呼び出し規約。 システムコール番号、およびアプリケーションがオペレーティングシステムに対してシステムコールを行う方法。 他のABIは次のような詳細を標準化します C ++名のマングリング、 例外の伝播、および …

6
コンパイル/リンクプロセスはどのように機能しますか?
コンパイルとリンクのプロセスはどのように機能しますか? (注:これはStack OverflowのC ++ FAQへのエントリになることを目的としています。このフォームでFAQを提供するという考えを批評したい場合は、これをすべて開始したメタへの投稿がそのための場所になります。回答その質問はC ++チャットルームで監視され、FAQのアイデアが最初から始まっているため、アイデアを思いついた人があなたの答えを読む可能性が非常に高くなります。

12
コンパイルされた言語と解釈された言語
私は違いをよりよく理解しようとしています。私はオンラインで多くの説明を見つけましたが、実際的な影響よりも抽象的な違いに向かう傾向があります。 私のプログラミング経験のほとんどは、CPython(動的、解釈済み)、およびJava(静的、コンパイル済み)での経験があります。ただし、他の種類のインタープリター型およびコンパイル型言語があることは理解しています。コンパイルされた言語で記述されたプログラムから実行可能ファイルを配布できるという事実は別として、各タイプに利点/欠点はありますか?インタプリタ言語はインタラクティブに使用できると人々が主張することをよく耳にしますが、コンパイルされた言語にもインタラクティブな実装があると思いますよね?

4
隣接するintのJavaスイッチが、ケースを追加するとより速く実行されるように見えるのはなぜですか?
メインプログラムロジックの多くのポイントで呼び出されるホット関数で実行されるため、高度に最適化する必要があるいくつかのJavaコードに取り組んでいます。このコードの一部には、double変数10を任意の非負int exponentのsに乗じることによって乗算することが含まれます。(編集:なく最速、下記アップデート2参照)を一つの早道乗算値を取得するには、にあるswitchにexponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... same pattern with long literals case 18: return d*1000000000000000000L; default: throw …


7
Clang vs GCC-どちらがより良いバイナリを生成しますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 この質問を改善する 私は現在GCCを使用していますが、最近Clangを発見し、切り替えについて考えています。ただし、決定的な要素が1つあります- gcc -O3生成されるバイナリの品質(速度、メモリフットプリント、信頼性)。 ClangはGCCよりも優れたコンパイル速度と低いコンパイル時のメモリフットプリントを誇りますが、結果として得られるコンパイル済みソフトウェアのベンチマーク/比較に本当に興味があります。


12
Goはどのようにすばやくコンパイルするのですか?
私はGodを使ってGoのウェブサイトをあちこち調べましたが、Goの異常なビルド時間の説明を見つけることができません。それらは言語機能(またはその欠如)の製品、高度に最適化されたコンパイラ、または何か他のものですか?私は囲碁を宣伝するつもりはありません。気になるだけです。

27
ファイルまたはアセンブリを読み込めませんでした…パラメータが正しくありません
最近、C#ソリューションで次の例外に遭遇しました。 エラー2ファイルまたはアセンブリ 'Newtonsoft.Json、Version = 3.5.0.0、Culture = neutral、PublicKeyToken = b9a188c8922137c6'またはその依存関係の1つを読み込めませんでした。パラメータが正しくありません。(HRESULTからの例外:0x80070057(E_INVALIDARG)) これは私のコードにもアセンブリの名前にも依存しません(Newtonsoft.Jsonこの場合のように)。 ソリューションからこのdllを削除すると、コンパイラーは同じ例外内の別のDLLについて通知します。だから私は何かが私のPCでオフ/オンになっていると思います:)

13
独自の言語でコンパイラを書く
直感的には、言語用のコンパイラFoo自体をFooで作成することはできないようです。より具体的には、言語の最初のコンパイラFooはFooで作成できませんが、後続のコンパイラはで作成できますFoo。 しかし、これは本当ですか?最初のコンパイラーが「それ自体」で書かれた言語について読んだことについて、漠然とした記憶があります。これは可能ですか?可能な場合、どのようにですか?

4
GHCコアの読み取り
コアはGHCの中間言語です。リーディングコアは、プログラムのパフォーマンスをよりよく理解するのに役立ちます。Coreを読むためのドキュメントやチュートリアルを誰かに頼まれましたが、あまり見つかりませんでした。 GHCコアを読むために利用できるドキュメントにはどのようなものがありますか? これが私がこれまでに見つけたものです: HaskellをCと同じ速さで書く:厳格さ、遅延、再帰を利用する Cと同じくらい速いHaskell:高レベルで作業して低レベルのパフォーマンスを実現 RWH:第25章プロファイリングと最適化 CUFPでの高性能Haskell講演(スライド65-80)


1
GCCとg ++はどのようにブートストラップされますか?
これはしばらくの間私を悩ませてきました。GCCとg ++はどのようにコンパイルされますか? すべてのリビジョンが以前にビルドされたリビジョンでコンパイルされると思います。これは本当ですか?もしそうなら、最も古いg ++とGCCのバージョンがアセンブリで記述されたことを意味しますか?

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