コンパイラーの仕事-必要な教育の量[終了]


15

主題としてコンパイラ構築の質問に動機付けられ、これを尋ねると思いました。

少数の人々から、彼らが良い「コンパイラーチーム」を持っていると聞いたことがあります(どこで聞いたのか、思い出せません)。だから、そのようなチームでどのように仕事に就くのでしょうか。 ?

私は学部課程などにクラスがあることを知っていますが、大学院の学位が最低限のものになるでしょうか(少なくとも修士など)?

私は2か月でコンピューターサイエンスの修士号を開始し、2つのコンパイラクラスがありますが、コンパイラ開発の仕事を得るのに十分でしょうか、それにより多くの時間を投資する必要がありますか?


2
オープンソースコンパイラプロジェクト(llvmなど)に参加することは大きな利点です。
SKロジック

Ditta @ SK-Logic現在、IB CSファイナル用のコンパイラを書いています。コンパイラーの作成経験を積むことがおそらく最良の方法です。

1
コンパイラとランタイムの最大の名前の1つに学位がないことを指摘します。Anders Hejlsberg ... Turbo Pascal、Delphi、C#、TypeScriptの背後にある脳
マシュー・ホワイトド

回答:


17

コンパイラの開発は非常にハードコアです。つまり、多くの忍耐、情熱、そして確かな知識が必要です。忍耐、情熱、確かな知識を、あらゆる学位を持っていると混同しないでください。strlen()4行のCコードでも認識できなかった修士号を取得した応募者を見てきました。

間違いなくそれらのクラスに出席し、実践的な知識を身につけます。コンパイラーの開発さえ好きではないかもしれませんが、経験を積むことで、他の非常に興味深い開発ジョブを手に入れることができます。


応答していただきありがとうございます。独学で学問的なCSのバックグラウンドを持たない人にチャンスを与えますか?
ジェッティ

3
MIT OCWのコースをチェックアウトするだけです
セグフォルト

3
@Jetti:長年にわたってオープンソースコンパイラに多大な貢献をしてきた人に、その背景を問わずチャンスを与えたいと思います:)
Matthieu M.

@ジェッティ:一度彼らが本当の知識を持っている証拠を持ってくるなら、私は間違いなくそうするでしょう。たとえば、コードジェネレーターを最適化するコンパイラのテストを書いた場合、平均的な大学卒業生以上の価値があります。
sharptooth

コンパイラが独自の言語で記述されている場合、さらに興味深いものになります。
ott--

5

最初のステップは、優れたCSバックグラウンドを持つことです-潜在的には、より良いが、少なくともBSc名誉学位を取得していること。コンパイラー(一般的には言語翻訳者)および関連する手法(字句解析、構文解析)がコンピューターサイエンスの基礎をよく研究しているという点で、実際にはこれにはある程度の正当化があります。

実質的な産業用(オープンソースを含む)コンパイラの開発は、もちろん学業上の資格の不足を軽減すると考えていますが、候補者の背景に大きく依存しています。ここでのコンパイラ開発は、解析用のインタープリターと関連ツールも対象とすることに注意してください。

ソフトウェアエンジニアリングの一般的な能力が必要です。優れたコンパイラ(科学計算、ゲーム開発など)を必要とするアプリケーションのドメイン知識、または高レベル言語での一般的なプログラミング背景を超えるアセンブリ言語プログラミングの経験もプラスです。コンパイラが実装する言語の専門家レベルの知識もプラスです。

免責事項:私はコンパイラ開発者であり、候補者の面接に関与しています。


5

最近では、FlexYACC、およびいくつかの同様のツールのようなツールにより、コンパイラの構築が非常に簡単になりました。興味をそそられるので趣味のようにアプローチしたい場合は、これらのツールが役立ち、1か月で適切なコンパイラフロントエンドを構築できます。

Dragon Bookは、コンパイラーの構成を独学で学びたい人にとって、これまでで最もお気に入りの本の1つです。そして、あなたが先に進むにつれて、オープンソースのコンパイラコードを読むことに時間を費やします。


5

コンパイラーでのキャリアについて真剣に考えているなら、少なくとも言語理論、特に型理論、形式意味論、計算可能性理論の形式教育が必要だと思います。これらの分野は、アカデミックな環境以外では学ぶのが難しいでしょう。ほとんどの場合、コンパイラの構築自体は、賢い開発者が自分で基本を学ぶことができるテーマです。ただし、セキュリティと最適化のために広範なセマンティック分析とインストルメンテーションを使用する最先端のコンパイラで作業する場合は、おそらくこの分野で少なくとも修士論文が必要になるでしょう。


1
これは、「製品エンジニアリングの役割」というよりも、研究開発の役割のように聞こえます。私はarmccとLLVM(2つの製品品質のC / C ++コンパイラー)のプロダクトエンジニアでしたが、これらのトピックを必要としたことはありませんでした。
dune.rocks
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.