E01: lab0
主講人: jserv / 課程討論區: 2018 年系統軟體課程
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
返回「進階電腦系統理論與實作」課程進度表
預期目標
- 英文閱讀
- C 語言程式設計基礎
- 準備 GNU/Linux 開發工具
- 學習使用 Git 與 GitHub
- 學習效能分析
- 研究自動測試機制
Introduction to Computer Systems (ICS) 的第一份作業
CMU Introduction to Computer Systems (ICS) 準備了 C Programming Lab 作為檢閱學生 C 語言程式設計的認知:
- Explicit memory management, as required in C.
- Creating and manipulating pointer-based data structures.
- Working with strings.
- Enhancing the performance of key operations by storing redundant information in data structures.
- Implementing robust code that operates correctly with invalid arguments, including NULL pointers.
實驗目標為實作 queue
- first in, first out (FIFO)
- last in, first out (LIFO)
- 使用一致的 coding style 很重要,我們可透過 clang-format 這個工具來調整作業程式要求的風格為以下:
- 你可以想像 Apple 和 Google 的工程師隨便安置程式碼,然後不用管合作的議題嗎?
- 即便一個人寫作業,其實是三人的參與:過去的你、現在的你,以及未來的你
- 當首次執行
make
後,Git pre-commit hook 將自動安裝到現行的工作區 (workspace),之後每次執行 git commit
時,Git hook 會檢查 C/C++ 原始程式碼的風格是否一致:
- 我們介紹 Git hooks 是為了日後銜接 Continuous integration (CI),專業程式設計必備的準備工作
- 任何人都可以寫出機器看得懂的程式碼 (在檔案總管裡面對 EXE 檔複製貼上即可),但我們之所以到資訊工程系接受訓練,為了寫出人看得懂、可持續維護和改進的程式
- 下圖展示 Git pre-commit hook 偵測到開發者的修改並未遵守一致的 coding style,主動回報並提醒開發者:
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
自動評分系統
qtest
執行檔內有包裝許多測試這次作業可用的工具,執行 qtest
後可打 help
即有各指令解說
qtest 使用範例:
如果什麼都沒做,當然是零分,參考輸出:
開發環境設定
- 依據 GNU/Linux 開發工具共筆 的指引,設定好 git, GitHub 帳號, vim (或其他你偏好的編輯器), perf, gnuplot
- 安裝以下開發工具
作業要求
- 在 GitHub 上 fork lab0-c
- 詳細閱讀 C Programming Lab (英文閱讀正是我們想強化的議題),依據指示著手修改
queue.[ch]
和連帶的檔案,測試後用 Git 管理各項修改。
- 除了修改程式,也要編輯「作業區」,增添開發紀錄和 GitHub 連結,提及如何逐步達到要求,以及如何改善效能
- 解釋自動評分系統運作的原理
- 提及
qtest
的行為和裡頭的技巧
- 截止日期:
- Oct 7, 2018 (含) 之前
- 越早在 GitHub 上有動態、越早接受 code review,評分越高