overview contents show-all home
#+TITLE:  課程 / course
#+AUTHOR: 謝宇恆 / XIE Yuheng

* ===================================
* 題解
** 小小語言設計家
   * 用匯編語言來實現一個簡單的程序語言的解釋器
     我期望
     相比 用匯編語言做一些平凡的練習程序
     在這門課上你能學到更多的東西
** 學習
   * 耐心
     恆久的努力
     認真弄清最簡單的例子
     勤奮地練習
   * 快速形成自己的模型[數學模型]來理解所觀察到的事物
     而不是急着去看他人對這些事物的說明
     當形成了自己的理解之後 再去看他人對這些事物的說明
     然後 在這種交流當中
     謙虛而勇敢地修改自己之前對事物的認識
* 流程
** 下載
   * fasm 匯編器
   * 小蟬的代碼
** fasm 匯編器
   * 嘗試用 fasm 編譯一些簡單的例子程序
     以瞭解其使用方式
** 小蟬解釋器
   * 用 fasm 編譯解釋器的源代碼
     並閱讀文檔
     以瞭解其使用方式
   * 小蟬引導文檔
     文檔中有進一步的學習說明
* 見面
** 第一次
   * 課程簡介
   * 抽象的計算機構架
** 第二次
   * 實驗流程介紹
     * 在 windows 上 使用 emacs 中的 eshell
       失敗極了 orz
** 第三次
   * 線串碼解釋器的抽象模型
     1. 珠珠
     2. 棧
     3. 函數語義之形成
   * 複習 抽象的計算機構架
     並介紹 具體計算機構架 之 x86 篇
** 第四次
   * 輸入與輸出的歷史
   * 線串碼解釋器的具體實現
     1. 匯編語言中製作棧
     2. 珠珠之數據結構
     3. 函數語義的形成
   * 線串碼解釋器的優越性
     * 利用線串碼解釋器
       來測試你所感興趣的匯編指令
** 第五次
   * 函數式範式
     * 尾遞歸優化
       小蟬的優越性
   * 輸入與輸出的具體實現
     * 字符串這個數據結構
** 第六次
   * 反思
   * 解釋器的雛型
     * REPL
   * 簡單的編譯
     * define-function 與 make-jojo
     * exception handling
** 結課作業
   * 首先是做任務的資料 各個階段的代碼
   * 下列任務可供選擇
     難度由低到高
     任選其一完成即可
     1. 在線串碼解釋器中
        寫一個 primitive-function
        或寫一個 function
        說明你所寫的函數想要做什麼
        並用線串碼解釋器來寫一個小測試
        以證明你所實現的函數的行爲 符合你的意圖
        你可以通過更改 我所提供的 任意階段的的代碼 來完成這個任務
        我認爲 前兩個階段的代碼 比較適合做爲 你的更改之基礎
     2. 通過更改第四階段的代碼
        來定製一個你自己的 REPL
     3. 嘗試 hack 第五階段的代碼
        此時你已經能夠在自己所寫的解釋器中
        用自己所設計的語言來定義新的函數了
        寫幾個新的函數試試
   * 提交作業的方式
     由以下幾種
     任選其一即可
     1. 發郵件給我
        郵件格式不限
        只要郵件中的信息足夠告知我以下信息就行
        1) 你的姓名
        2) 你的學號
        3) 你的班級
        郵件應該包含附件
        郵件的附件應該至少包含以下信息
        1) 你的源代碼
        2) 你的源代碼所編譯出來的可執行文件
        3) 說明文檔
           [請不要提交
            使用微軟的文字處理器所寫成的文檔
            你應該提交單純的 utf-8 編碼的文件]
           以說明你的代碼
           如果是在我所提供的代碼上做更改
           請說明你做更改的位置
           比如所添加的函數名字等等
           說明文檔的格式不限
     2. 如果你是 github 的用戶的話
        你可以直接 fork 我的 代碼庫
        把你的更改上傳到你做的 fork 中
        然後在 留言板 裏告訴我
        如果你 修復了我代碼的錯誤 或 貢獻了新的性狀
        你可以在這裏要求我把你的貢獻狀融合到主要文庫中
        利用 Pull Requests 頁面 就行
* 資料
** [構架] 費恩曼的比喻
   * 費恩曼關於計算機構架的演講
** [語言] forth
   * forth 的 wikipedia 頁面
   * forth 各種實現技術的比較
   * forth 興趣小組
   * 英國 forth 興趣小組
   * 另外一個與 forth 有關的中文項目
   * forth 的經典入門教程
   * 其他一些東西
   * 我爲 jonesforth 作的備份
** [匯編器] fasm
   * 主頁
   * 論壇
   * 維基百科頁面
   * 我在 github 上爲 fasm 所做的鏡像
   * fasm 是一個波蘭人在大學時候寫的
     我很欣賞其設計
     關於其設計決策有作者的兩篇文章 :
     1. Understanding the flat assembler
     2. Design Principles
** [匯編器] nasm
   * 主頁
   * 維基百科頁面
** [匯編器] gas
   * 維基百科頁面
** [版本控制] git & github
   * github 的幫助頁面
   * git 主頁
   * github 所提供的構建靜態網站的服務 -- github page
* ===================================