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
* ===================================