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

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

5
Google Closureは本当のコンパイラですか?
この質問は、このStack Overflow質問に関するコメントの議論に触発されました。Googleの閉鎖コンパイラのマニュアルは、次の(強調追加)を述べています: Closure Compilerは、JavaScriptのダウンロードと実行を高速化するためのツールです。JavaScript用の真のコンパイラです。ソース言語からマシンコードにコンパイルする代わりに、JavaScriptからより良いJavaScriptにコンパイルします。 ただし、ウィキペディアには、「コンパイラ」の次の定義があります。 コンパイラは、プログラミング言語(ソース言語)で記述されたソースコードを別のコンピューター言語に変換するコンピュータープログラム(またはプログラムのセット)です。言語リライタは、通常、言語。 それに基づいて、私はGoogle Closureはコンパイラではないと言うでしょう。しかし、Googleがそれが実際に「本当のコンパイラ」であると明示的に述べているという事実は、それ以上のものがあるのだろうかと思うようになります。Google Closureは本当にJavaScriptコンパイラですか?

6
より良い構文で、Cにトランスパイルする言語はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 CoffeeScriptは、Rubyに触発された、きれいな構文でJavaScriptに変換する言語です。Cにトランスパイルして、パフォーマンスを犠牲にすることなく、より読みやすいコードを可能にする同様の言語はありますか?そのようなものが存在しない場合、それを作成しない正当な理由はありますか?
19 c  syntax  compiler 

4
Chrome V8はどのように機能しますか?そして、そもそもなぜJavaScriptはJITコンパイルされなかったのですか?
私は通訳者/コンパイラを研究してきましたが、その後、JITコンパイル、特にGoogle ChromeのV8 Javascript Engineに出会いました。 私の質問は- どのように標準の解釈よりも速くできますか? そもそもJITコンパイルが使用されなかったのはなぜですか? 私の現在の理解 すべてのJavascriptプログラムはソースコードとして開始され、実行方法に関係なく、最終的にはマシンコードに変換されます。 JIT-CompilationとInterpretationは 両方ともこのパスに従う必要があります。どのようにJIT-Compilationを高速化することができますか(また、AOT-Compilationとは異なり、JITは時間制約があるため)。 JIT-Compilationは、ウィキペディアのJIT-Compilation Articleに基づいた比較的古いイノベーションのようです。 「最初に公開されたJITコンパイラは、一般的に1960年に McCarthyによってLISPで動作するとされています。」 「Smalltalkの(C。1983)たとえば、マシンコードへの変換は、オンデマンドで行われた。JITコンパイルの新たな側面を開拓し、その結果は後で使用するためにキャッシュされた。メモリが不足になった場合、システムはこのコードと再生成の一部を削除しますそれが再び必要になったとき。」 では、なぜJavascript が最初から解釈されたのですか? 私は非常に混乱しており、これについて多くの研究を行ってきましたが、満足のいく答えは見つかりませんでした。 とても明確で簡潔な回答をいただければ幸いです。また、通訳者、JITコンパイラなどについての追加説明が必要な場合は、それも歓迎します。

4
C / C ++の関数呼び出しのスタックフレームを理解していますか?
スタックフレームがどのように構築され、どの変数(パラメーター)がどの順序でスタックにプッシュされるかを理解しようとしていますか?一部の検索結果は、C / C ++コンパイラが関数内で実行された操作に基づいて決定することを示しました。たとえば、関数が渡されたint値を1だけインクリメントし(++演算子に類似)、それを返すことになっている場合、関数のすべてのパラメーターとローカル変数をレジスターに入れます。 どのレジスタが戻り値または値渡しパラメータに使用されるのか疑問に思っています。参照はどのように返されますか?コンパイラーはeax、ebx、ecx、edxをどのように選択しますか? 関数呼び出し中にレジスター、スタック、およびヒープ参照がどのように使用、構築、および破棄されるかを理解するには、何を知る必要がありますか?
19 c++  c  compiler  stack 

8
最初のエラーの後、CまたはC ++のコンパイルエラーを読みますか?
CおよびC ++コンパイラがエラーから回復して解析を続行しようとする理由を理解できませんでした。ほとんどの場合、最初のエラーは偽のエラーのストリームを生成し、最初のエラーが修正されるとすぐに消えます。数年の経験の後、私はすべてのファイルの最初のエラー以外のエラーを見ることを止めました。コンパイラを再実行し、エラーがなくなるまでもう一度実行します。それは一般的な習慣ですか?

4
C ++でのレクサーの作成
C ++でレクサーを作成する方法に関する優れたリソース(書籍、チュートリアル、ドキュメント)は何ですか?優れたテクニックとプラクティスは何ですか? 私はインターネットを見ましたが、みんなlexのようなlexerジェネレーターを使うように言っています。私はそれをしたくありません。手で字句解析器を書きたいです。
18 c++  compiler  lexer 

2
Java AOTコンパイラはどのように機能しますか?
Javaアプリをネイティブ実行可能ファイルに変換することを主張するツール(Excelsior JETなど)がいくつかあります(*.exe)。ただし、これらのツールは実際にはシェルまたはコマンドラインから起動/実行するネイティブラッパーを作成しているにすぎないことを理解していますjava。 その理解が間違っている場合、それがどうなるかわかりません。実行中のJVM(javaプロセス)が本質的に高性能インタープリターであり、Javaクラスファイルからバイトコードをオンザフライでロードする場合、Javaアプリ(JVMへの入力として機能するバイトコードファイルのコレクション)がどのようになるかわかりません本当に実行可能ファイルに変換されます。 これは、JVMプロセスがすでにバイトコードファイルのセットを入力として受け取るネイティブ実行可能ファイルであるためです。これらのバイトコードファイルとJVMプロセスを単一の統合されたネイティブ実行可能ファイルにマージすることは、JVMを完全に書き直し、JVM仕様から脱線しなければ不可能だと思われます。 だから私は尋ねる:これらのツールは実際に Javaクラスファイルをネイティブの実行可能ファイルにどのように「変換」するのか?
18 java  compiler  aot 

3
コンパイルターゲットとは正確には何ですか?
私はこの言葉を聞き続け、すべてのグーグル検索はコンパイラに関する記事に私を導きます。コンパイルターゲットという用語の意味を理解したいだけです:| 更新:コンテキストを与えるために:Webアセンブリは、C、C ++、Rustなどの他の言語のコンパイルターゲットであると言われました。
17 compiler 

3
仮想マシンのCPUコアが増えるとコンパイル時間が遅くなるのはなぜですか?
[編集#2] VMWareの誰かがVMWare Fusionのコピーを見つけたら、VirtualBoxとVMWareの比較と同じようにできるとうれしいです。どういうわけか、VMWareハイパーバイザーはハイパースレッディング用に調整されると思う(私の回答も参照) 私は何か奇妙なものを見ています。Windows 7 x64仮想マシンのコア数を増やすと、全体的なコンパイル時間が減少する代わりに増加します。コンパイルは通常、並列処理に非常に適しています(中間部分(依存関係のマッピング後)で、各.c / .cpp / .cs / whateverファイルでコンパイラインスタンスを呼び出して、リンカーが取得する部分オブジェクトを構築することができます)以上。ですから、実際には、コアの数でコンパイルが非常にうまくいくと想像していました。 しかし、私が見ているのは: 8コア:1.89秒 4コア:1.33秒 2コア:1.24秒 1コア:1.15秒 これは、単に特定のベンダーのハイパーバイザー実装(私の場合はtype2:virtualbox)による設計成果物なのか、ハイパーバイザー実装をより単純にするためにより多くのVMに広がるものなのでしょうか?非常に多くの要因があるので、私はこの振る舞いについて賛否両論を立てることができるようです-だから誰かが私よりもこのことを知っているなら、あなたの答えを読んでみたいです。 どうもありがとう [ 編集:コメントのアドレス指定 ] @MartinBeckett:コールドコンパイルは破棄されました。 @MonsterTruck:直接コンパイルできるオープンソースプロジェクトが見つかりませんでした。素晴らしいと思いますが、今は私の開発環境を台無しにすることはできません。 @Mr Lister、@ philosodad:VirtualBoxを使用して8つのハードウェアスレッドがあるため、エミュレーションなしの1:1マッピングである必要があります @Thorbjorn:VM用に6.5GBと小さなVS2012プロジェクトがあります-ページファイルをゴミ箱に入れたり出したりすることはほとんどありません。 @All:誰かがオープンソースのVS2010 / VS2012プロジェクトを指すことができれば、それは私の(独自の)VS2012プロジェクトよりも良いコミュニティリファレンスかもしれません。OrchardとDNNは、VS2012でコンパイルするために環境を調整する必要があるようです。VMWare Fusionを使用している人にもこれが表示されるかどうかを確認したい(VMWareとVirtualBoxの区分化の場合) テストの詳細: ハードウェア:Macbook Pro Retina CPU:コアi7 @ 2.3Ghz(クアッドコア、ハイパースレッディング= Windowsタスクマネージャーで8コア) メモリー:16 GB ディスク:256GB SSD ホストOS:Mac OS X 10.8 VMタイプ:VirtualBox 4.1.18(タイプ2ハイパーバイザー) …

6
最初に来たのは、コンパイラーですか、それともソースですか?
コンパイラの誕生に興味があります。プログラミングはどのように始まりましたか?ある特定のコマンドセットを認識するハードウェアを最初に構築したのですか、それとも言語を定義してからその周辺のハードウェアを構築したのですか?また、関連するメモでは、最初のプログラミング言語は何でしたか?

6
FortranコンパイラはCコンパイラよりも実際に高速なコードを生成しますか?
大学で勉強していたとき、Fortranコンパイラは同等のプログラムのCコンパイラよりも速いコードを生成するという考えをよく耳にしました。 主な理由は次のとおりです。Fortranコンパイラはコード1行あたり平均1,1プロセッサ命令を発行しますが、Cコンパイラはコード1行あたり平均1,6プロセッサ命令を発行します -正確な数字は覚えていませんが、アイデアは、Cコンパイラが著しく多くのマシンコードを出力し、そのためより遅いプログラムを生成するというものでした。 そのような比較はどの程度有効ですか?FortranコンパイラーはCコンパイラーよりも高速なプログラムを生成する、またはその逆と言えますか?なぜこの違いが存在するのですか?

4
アセンブリからマシンコードへの移行方法(コード生成)
コードを機械コードにアセンブルするステップを視覚化する簡単な方法はありますか? たとえば、メモ帳でバイナリファイルを開くと、マシンコードのテキスト形式の表現が表示されます。私はあなたが見る各バイト(シンボル)がそのバイナリ値に対応するASCII文字であると仮定しますか? しかし、アセンブリからバイナリにどのように移行するのでしょうか。舞台裏で何が起こっているのでしょうか??

4
ネイティブマシンコードを簡単に逆コンパイルできないのはなぜですか?
Java、VB.NET、C#、ActionScript 3.0などのバイトコードベースの仮想マシン言語では、インターネットからデコンパイラーをダウンロードしてバイトコードを1回実行するだけの簡単さについて時々耳にします。多くの場合、数秒で元のソースコードからそれほど離れていないものを見つけます。おそらく、この種の言語はそれに対して特に脆弱です。 私は最近、ネイティブバイナリコードに関して、これが元々どの言語で書かれていたのか(したがって、どの言語に逆コンパイルしようとするのか)を少なくとも知っているのに、なぜこれについて聞いていないのだろうと思い始めました。長い間、ネイティブマシン言語が典型的なバイトコードよりも非常にクレイジーで複雑だからだと考えていました。 しかし、バイトコードはどのように見えますか?次のようになります。 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 そして、ネイティブマシンコードは(16進数で)どのように見えますか?もちろん、次のようになります。 1000: 2A 40 F0 14 1001: 2A 50 F1 27 1002: 4F 00 F0 F1 1003: C9 00 00 F2 そして、指示はやや似たような心構えから来ています。 1000: mov EAX, 20 …

4
コンパイラ[関連]の仕事を募集するのがなぜそんなに難しいのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 先週、数人の大学生と私は、3つの主要な大学(2つは米国、1つは英国)でのキャリアフェアに参加しました。そこでは、インターンシップから私たちのチームにとっては、初級から上級までです。 驚いたことに、話をした学生の80%が、「Ansroidアプリを構築したい」という一連の質問に、彼らが何に興味を持っているのかと尋ねると答えました。(そして、他の20%?「iPhoneアプリ」!)一部の人は、「コンパイラをビルドしたくない、...、それは退屈だ」と公言しさえしました。彼らは言って、私は引用した。 それでは、最近の(若い?)「開発者」にとても魅力的なモバイルアプリについてはどうでしょうか。そして、同じ理由で、コンパイラーはなぜ彼らにとって「退屈な」トピックなのでしょうか?(私はこれら2つが相互に排他的であるとは限りません。1つは確かに携帯電話用のコンパイラを構築できますが、それはポイントの横にあります) より多くの才能、または単に興味のある候補者を引き付けるために、もしあれば、私たちは何ができますか?

1
機能性中間体の欠点
JavaScriptに似た言語のオプティマイザーを作成しているため、中間コード表現を選択する必要があります。最近の明らか/典型的な選択は、静的単一割り当て(SSA)です。 ただし、CのModern Compiler Implementationは、機能的な中間形式についても説明します。これは基本的に、中間表現の純粋な機能を実現することを意味します(ローカル変数のみについては純粋で、ヒープデータはCPSではなく、変更可能であり、単純なletブロックおよびテールコールのみです)。推論しやすいという点でいくつかの利点があります。 おそらくそれは簡単ではないか、誰もがすでにそのような表現を使用しているので、私の質問は、機能的な中間形式がSSAと比較してどのような不利な点ですか?

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