電腦語言工程(SMA 5502)
Computer Language Engineering (SMA 5502), Fall 2005
2005秋季課程
6.035是一門電腦系統與結構的主要課程。本課程對高級程式設計語言的實務作業進行了分析。主題涵蓋了:編譯器的基礎概念、功能與結構,基本的程式優化技術,理論與實踐的交互作用以及使用工具來建構軟體。本課程側重於一個多人進行專題,是以JAVA®編寫並並產生MIPS可執行機器碼之編譯器設計與實務執行。這門課程擁有8個工程設計學分。
課程重點
本課程的課堂講稿部份包含所有的課堂講稿以及其中的部分影片。專題部分包含獨立的專題作業。此外,測驗部分包含實際的練習。
課程描述
6.035是一門電腦系統與結構的主要課程。本課程對高級程式設計語言的實務作業進行了分析。主題涵蓋了:編譯器的基礎概念、功能與結構,基本的程式優化技術,理論與實踐的交互作用以及使用工具來建構軟體。本課程側重於一個多人進行專題,是以JAVA®編寫並並產生MIPS可執行機器碼之編譯器設計與實務執行。這門課程擁有8個工程設計學分。
這門課程同時也作為新加坡-麻省理工學院聯合專案Singapore-MIT Alliance(SMA)之部分教學,其課程號為SMA 5502(電腦語言工程)。
技術需求
教學大綱
必備先修課程和條件
6.170並且精通JAVA®
課程模式
6.035的講座、問題集和考試圍依編譯器專題而構建,這一專題被分為五個階段。每階段建構編譯器的一個獨立部分。每階段(除第一階段)包含一系列的講座、一個程式設計作業以及一份問題集或一場隨堂測試。
一個階段剛開始時將提供程式設計作業。之後會有一系列講座來介紹內容。該階段的剩餘時間將被用於專題,因此將不再上課。每個組應當與你們的助教安排一個“專題回顧”周會來討論設計決定、專題進程和小組狀態。一個階段在專題作業的截止日期結束。這份時程表略述了進度,報告4“專題回顧”在專題細節上有所延伸。除了專題,還將有三場隨堂測試和四次論文作業,其中包括一次和教員一對一的論文討論。
關於專題
6.035的主要課程工作是設計並完成一個編譯器。在課程的每階段將建構編譯器的一部分。這五部分分別是掃描器和解析器、語義檢查器、代碼生成器、資料流程優化器和指令優化器。所有五次作業都是小組專題。
前幾年裏我們提供這一編譯器專題的兩個版本,一個18單元的版本和一個12單元的版本。所有專題組成員應當註冊具有相同單元數的版本。所有學生應當註冊6.035(12單元)。想挑戰高難度專題的學生可以在附加日期註冊6.907(6單元)。在6.907的附表中不需要有教授的簽名。額外6個單元的分數只以專題為基準。
12單元版本的專題是出於健康考慮:你將在只有無咖啡因咖啡(毫無幫助)的情況下得到一次實作建構一個簡單而完整的編譯器的經歷。在18單元版本的專題中,你將被提供一杯香濃、熱氣騰騰的濃縮咖啡來使你經歷一些在真實世界中建構適用於工業級的編譯器時所遇到的問題。
我們為有興趣的學生提供更有難度的專題和六個額外的單元以使其能有機會對在建構編譯器時所涉及的論題有更深入的理解。這應當被視為獲得18單元版本課程的原因而不只是得到額外6個單元。
兩個版本專題的截止日期相同
專題回顧
每個組需要與助教規劃一個周會來討論專題狀態。這是一個使學生有機會闡明專題執行細節的關鍵會議。助教對每名學生的能力和貢獻的回饋將反映在學生參與情況中。
助教辦公時間
助教將會訂定其每週辦公時間,並會於那時間出現在其辦公室內。這將提供額外的與助教面談的時間。這些時間將在以後公佈。如果你想在其他時間見助教,請打電話或發電子郵件以安排一個面會。
計分
.不會有補考。如果你因一個合理的原因而無法參加測試,(請)在測試前與一位教師進行說明。
.在傍晚前提交專題報告。對於晚交的專題作業將會有扣減10%分數的處罰。然而,在下一專題的截止日期前,目前的專題必須被完成。
.對於每份專題作業,所有組員將會得到相同的分數。然而,如果我們感到一個組的某位成員對他/她的部分有較高貢獻或沒能承擔責任,我們將據此調整他/她的成績。因此,你讓助教知道小組進度以及你對專題的貢獻是重要的。
課程的總體成績將根據下列比例分配:
計分標準
活動 |
百分比 |
編譯器專題 |
58%
|
論文討論 |
12%
|
隨堂測試 |
30%
|
確保你瞭解你的最終成績是如何被計算的。關於專題成績如何計算的附加細節將在專題部分說明。
閱讀並討論論文
今年6.035的新特色之一是我們希望你去閱讀我們提供的論文,並與一位教授或助教對論文進行一對一討論。本章將介紹我們希望就這一新特色所能完成的事,以及當你閱讀論文並與我們討論時我們希望你能做到的事。
.我們希望達成的是使論文成為交流當前研究結果的主要方法。不像教科書等標準指導資料,論文通常由進行研究的個人或小組在研究完成後僅僅很短時間內完成。因此論文趨向於反映個人進行研究的觀點,並且該觀點可能與同一領域內的他人觀點有所區別。如果論文在研究完成後很快去寫,則研究的要點和該領域內的整體結構可能尚未可知。這樣的論文可能會忽略他人日後發現的一些概念,而這些概念在適當環境下對理解該文是至關重要的。
我們給你閱讀的一些論文將特別表現幾年前研究員對其所進行的研究的一些觀點。這裏強調的並不是新的成果,而是理解在某個領域的總體背景下研究的重要性,這些領域依靠研究而取得極大發展。
因此我們相信,當你閱讀一篇論文時,在頭腦裏保持你自己的觀點並根據你的知識來解釋論文發表後領域的發展十分重要。別忘了欣賞論文裏任何體現作者心得之處!
.我們希望你做到的是:首先,我們希望你閱讀論文並對兩方面的討論作好準備:現實狀況和你對研究的看法。許多論文表述了一門做事的技術(在本課程中,典型的有編譯器建構或程式設計語言)以及作者之後嘗試將該技術應用於特定實驗資料而獲得一些實驗結果。我們希望你知道實驗結果是論文的客觀真相這一事實。我們希望你知道事實並能表述它們。一旦你理解了事實,你需要深化對研究的看法並能進行討論,並潛在地為該看法辯護。這裏是一些可能幫你形成看法的問題:
1.你是否喜歡研究?你是否發現有趣的技術?
2.研究的背景是什麼?在進行研究前該領域的情況是什麼?如何用研究來改變這些事?
3.是否有東西使你對論文感到驚訝?你在閱讀論文時是否獲得一些你能加以推廣或應用到其他領域的心得?
4.實驗結果是否能讓你評估被提議的技術?你是否希望看到不同的資料或一個重新設計的實驗?是什麼限制或目標使作者進行這樣的實驗?
5.作者是否理解他們研究的更廣泛的分枝?他們對研究是何看法?你是否有不同的看法?
6.論文完成後情況是如何變化的?研究是否隨著時間變得更為有趣和相關?其他人是否在進行基於該研究的研究?還是所有努力對未來的發展顯得不相關?
7.在未來研究有多重要?
最後,寫一份150到200字的論文總結來為一對一的討論會作準備。
未完成
“未完成”僅僅在異常情況下才會出現,並且僅當“未完成”的情況為其他部份的工作已完成到某種程度時。引用麻省理工課程目錄的話來說:“‘未完成’的成績僅適用於所要求作業的一小部分沒有被完成,而需完成作業才可獲得合格成績”。
合作工作的方針
〈與學術誠信相關的系所指導〉要求我們告知你我們在學術行為上的期望。對於家庭作業或第一個專題作業,你被允許與任何人討論問題要求和背景內容。然而,你真正提交的方案應該是你自己獨立的工作。對於專題作業的其餘部分,你可以與任何人討論背景內容,問題要求,解決方法和設計,但你不能看到任何人為6.035所寫的任何代碼,包括之前學生所寫的代碼。真正的編碼應該僅僅是你組裏的工作。所有測驗要求獨立完成。過去,許多學術違規事例因對部分學生的糟糕判斷,這些學生發現他們較晚才開始做作業或感到他們不能完成一項任務。請牢記長期的學術違規將對你的事業造成巨大傷害,這些傷害比你在6.035裏得到糟糕成績要大得多。請現在就思考這一問題,從而在本學期裏當你發現你自己暫時地疲勞、壓力大、絕望和嘗試去違犯合作工作的方針時不會放棄自己的前途。處理學術違規事件需要課程教員大量的無建設性的努力。如果我們在本學期需處理到任何一件這樣的情況,我們將會很不愉快。除此之外,我們將盡最大可能以大學的立場將此行為起訴。
這部分提供一些與課程主題相關的網站連結
‧在Java®中的現代編譯器實實務操作Modern Compiler Implementation in Java®
‧Jlex掃描器生成器JLex Scanner Generator
‧CUP解析器生成器:手冊CUP Parser Generator: Manual
‧Java® 1.5.0文檔(語言和工具)Java® 1.5.0 Documentation (Language and Tools)
‧CVS-並行版系統CVS - Concurrent Versions System
‧GNU製作GNU Make
‧Apache™螞蟻Apache™ Ant
‧AT&T組合語言程式語法AT&T Assembler Syntax

Prof. Martin Rinard

Prof. Saman Amarasinghe
翻譯人員张海旻
繁體編輯洪曉慧
簡體編輯陈盈
檔案後製處理李思壯