コンパイラの構造について学び、理解することの利点は何ですか?


10

私はソフトウェアエンジニアリングの学位を取得して3年目の学部生です。今年から、私の大学は「コンパイラー構築」と呼ばれる新しいコースを導入しました。これは、コンパイラーを構築する理論の基礎を教えます。

ソフトウェアエンジニアがコンパイラの構築について学ぶ上で、実際にどのような利点がありますか?


2
コンパイラコースを受講したことは後悔していませんが、これまでで最も厳しいものでした。ほとんどのCSciコースには、学習する必要のある重要な理論、または多くのプログラミングのいずれかがあり、両方ではありませんでした。コンパイラには両方ありました。
David Thornley、2011年

この1はあまりにも理論的なようだ:ocw.mit.edu/courses/electrical-engineering-and-computer-science/...
仕事

1
3年目もuniでやった。-コース全体で2番目に優れたモジュールでした(AIの後)。
TWith2Sugars 2011年

@ TWith2Sugars:なぜCCは最高の1つだと思いますか?
Nipuna 2011年

1
クラスのペニーは私のために数回落ちました-それに加えて、魅力的な講師とまともな仲間の学生は私が本当に楽しんだものにしました。私が覚えているその瞬間の1つは、最初から文法表現を開始し、講師が「これは2番目の用語まで意味をなさない」と言ったことでした。パーサー/トークン化機能を構築したという用語)。それは私にとってそれを素晴らしいモジュールにしました。
TWith2Sugars 2011年

回答:


12

コンパイラの構造を学ぶことには、実際的な側面があります。アプリ固有のコマンド言語を実装するためにパーサーを構築しなければならない場合がいくつかあります。アプリへの柔軟でスクリプト可能なインターフェイスを作成することができました。

また、なぜ一部の言語がそのように設計されているのか、そしてどの言語が完璧でないのかについて、より深い洞察を提供します。

カリキュラムの中で最も厳しいコースの1つである、厳しいコースです。私は夏のセッション中にそれを取り間違えました。夏のセッションでコンパイラコースを受講しないでください。脳が爆発します。


5
脳を爆発させるための+1。また、学期の終わりまでコンパイラの作成を延期しないでください!私は経験から知っています...
Jeremy Heiler、2011年

20

ああ、いいですね。それを後悔しないようにしてください。

プログラミング言語の魔法、それらの比較特性、高水準コードの実行形式への変換についての洞察を得ます。あなたは多くの言語機能をより良く理解し、何が可能で、どのようにそれらがどのように行われるかについてより広い視野を持つでしょう。あなたはそれをすべて異なる目で見るでしょう。

CSの基本的なことを学ぶために大学で過ごすのは賢明です。具体的なプログラミング言語、ツール、ライブラリはすべて行き来していますが、基盤は残っています。

また、コースが生き残った場合(深刻な場合)、プログラミングに適した頭脳を持つことを祝福するかもしれません。この理論を使って実際的なプロジェクトを完了し、履歴書にそれを記載してください。そうすれば、優れた雇用主の関心を非常に高めることができます。


2
さらに、これは、この辺りの定期的なトピックである、良い/悪い言語についての洞察を提供します。
JBRウィルキンソン、2011年

8

間違いなく!

たとえば、データベースクラスのように日常的に使用するトピックではない場合があります。コンパイラを理解することで、優れた基盤が得られます。

同様の例は、オペレーティングシステムクラスです。あなたはプログラマーであり、毎日OSがどのように機能するかを考えていないかもしれませんが、その基礎を持っていると、長期的にはあなたを助けるでしょう。


2
私の学部のOSコースは、並行性を本当に理解しなければならない最初の場所でした。それは非常に実用的でした。私の学部生のプログラミング言語コースは、パーサーを書いているときに最高でした。
justkt

何らかの理由で、私の3年目にOSモジュールを取り外し:(本当に同様にそれをやってみたかった。
TWith2Sugars

6

はい!このコースでは、プログラミング言語、データ型、関数の解析と、それを特定のCPUのマシンコードに変換する方法について、より深く理解できます。

これだけでは、日常的にはあまり実用的ではないかもしれませんが、実際にどのように機能するかを知っているという自信が得られます。これは、低レベルの最適化を行い、他の誰もが困惑している本当に厄介なバグを見つける必要がある場合に非常に役立ちます(ここでの経験と言えば)。


4

今日、ドメイン固有言語について多くの話題があります。そして、彼らは本当にすべての話題の価値があり、その真の可能性はまだ探求されていません。そのため、コンパイラの構築スキルは重要なだけでなく、将来不可欠になるでしょう。現在の問題がコンパイラーに直接関連していない場合でも、開発時間の約60%をeDSLコンパイラーの実装に費やしています。


eDSLコンパイラとはどういう意味ですか?
Nipuna

1
メタプログラミングをサポートする言語を使用しているので、私が実装する埋め込みドメイン固有の言語はそれぞれ、実際にはコンパイラマクロです。独自の型システムと多数の変換パスを備えたかなり複雑なものもあれば、ささいなものもありますが、すべてコンパイラーです。本当に必要でない限り、通訳には意味がありません。
SKロジック

1

プログラミングのキャリア全体で使用するツール(コンパイラー、インタープリター、パーサーなど)がどのように構築されているか、およびどのような制限があるかを理解するためのコースを受講することは価値があります。

これは、学術的な文脈でこれを実行する価値もあります。これは、現実の世界の多くの複雑さではなく、興味深い基礎を明らかにするものです。これは、レガシー言語やアーキテクチャ、つまり非常に複雑なものを扱う上で面倒で悩まされています。また、業界での作業よりも、コースの全体を作成する際に、コンパイラーのすべての側面で作業するようになる可能性が高くなります。

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