計算機要素--第九章 高級語言

計算機系統要素,從零開始構建現代計算機(nand2tetris)
如果完成了本書所有的項目 你將會獲得以下成就

  • 構建出一臺計算機(在模擬器上運行)
  • 實現一門語言和相應的語言標準庫
  • 實現一個簡單的編譯器

而且,這本書的門檻非常低,只要你能熟練運用一門編程語言即可。本課程綜合了數字電路,計算機組成原理,計算機體系架構,操作系統,編譯原理,數據結構等的主要內容,搭建了計算機平臺的構建的框架,並未深入細節,如果需要了解細節,可由本書作爲主線,逐步完善的知識體系。

QQ交流羣(含資料):289682057
課程連接
項目地址Github


本章重點內容

  • 瞭解Jack語言

詳細內容


Jack語言規範簡述

程序入口:與Java語言類似,Jack語言執行總是從Main類的main函數開始執行,所以每個Jack程序至少要包含一個Main類,該類必須包含一個main函數。
函數、方法、構造函數:在類級別上的操作,類似於Java中的靜態函數,用函數表示;作用在當前對象上的操作用方法表示;構造函數用於創建新的對象。
程序結構:Jack中的基本編程單元是類。每個類存在於獨立的文件中。因此Jack是一種面向對象的語言。
變量:Jack中有四種類型的變量:成員字段,靜態變量,局部變量和參數變量。
數據類型:Jack支持三種基本數據類型:int,char,boolean。其他的數據類型,又可以稱爲對象類型,例如String,可以基於這些基本數據類型進行擴展。
Array類:Jack程序使用內置的Array類來聲明和構建數組,該類是Jack標準庫的一部分。該類並沒有指定類型,它可以包含任意類型的數據。該數組是一維的。
Strings類:字符串使用內置類Strings來聲明。
類型轉換:Jack是弱類型語言。該語言規範並沒有定義從一種類型轉爲另一種類型的結果。類型轉換主要包括這三種:字符和整數能夠根據Unicode規範在必要時相互轉換;整數可被賦給任何對象類型的引用變量,這時該整數被當做是內存中的地址;對象變量可被轉換成Array變量,反之亦然,經過轉換就可以像訪問數組中的數據項一樣去訪問對象中的成員,反之亦然,這也是對象序列化的基本方法。
變量的類型和作用域:靜態變量定義在類這一級,被該類的素有對象共享,參考之前的內存段的劃分即可理解爲什麼靜態變量會被共享。成員字段變量用於定義類對象的屬性。局部變量被子程序使用,僅存在與子程序的生存週期內,這裏參考堆棧虛擬機2可以很好的理解底層原理。參數變量用於傳遞變量給子程序。
表達式:Jack語言中沒有定義運算符的優先級。爲的是簡化編譯器的設計,所以涉及到優先級的表達式必須用括號顯式說明優先級。
構造函數:對象的構造可以分爲兩個階段:內存分配和構造對象。內存分配階段開闢內存段,然後創建指向該內存段的指針。構造對象階段完成對象的構造。
對象內存回收dispose():當對象使用完畢後必須進行內存釋放,這與C編程類型,而Java卻不用考慮這個問題,因爲Java提供了垃圾回收機制。也許在Jack開發完成了,可以對其進行擴展,進而實現垃圾回收機制。這是操作系統提供的一種服務。

本章的課程項目主要是演示和嘗試去測試,對於有編程經驗的人來講幾乎可以不做,本章的重點在於瞭解Jack語言的語法,能編寫Jack程序!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章