程式語言中內建型別是怎麼實現的?

時間 2021-05-05 18:02:15

1樓:Yunfei Lu

都有。一種語言,首先有基本型別,其實就是資料在記憶體的布局,方便表示不同種類的資料,例如整型和浮點是一定要有的,因為cpu的規範。再組合得到陣列,函式型別等,再發展出代數型別,然後包裝成介面、類、泛型等高階概念。

基本型別在編譯器裡規定。至於標準庫中定義的型別,通常是某種組合的封裝,例如標準庫的容器類等。c_str實際是字元陣列,而std::

string 則是進一步的封裝,來實現更多的介面方便使用者。

有個區別的概念是型別系統。型別系統本身放在編譯器(或直譯器)裡比較好,在編譯的同時做型別檢查,而在庫里,就是執行期檢查了。型別系統,描述對型別的判斷、推導,例如推導AST節點的型別,判斷合法或非法,又如型別之間可以如何上下轉化。

再比如高階的多型型別(泛型)或者依賴型別,一般把型別的定義(名稱+表示式)也放在庫里。但是型別系統,即根據定義(表示式)產生實際型別的推導規則(即演算法),是在編譯器(或直譯器)中。

2樓:

"God made the natural numbers; all else is the work of man."

"CPU implemented int and float; all else is the work of man"-_-

3樓:

int float作為基本型別是直接通過關鍵字識別而string是自定義型別雖然他是標準庫里的類那也是標準庫制定人員自定義的型別

4樓:新生命

c++一切非基本型別基本都是寫庫的人寫的。你自己寫個class和標準庫沒任何差異。也就是說如果實力足夠你也能創造乙個效能比標準庫強。而且表現一致的string。

而我用c++設計的一門語言內建型別有string double integer boolean內部都是以char*或void*存放的。所以很容易的做到精度計算等等。這是高階語言內建型別的一種方法。

而像c/c++這種語言的一些內建型別顯然和一些計算機硬體密切相關。這些就不太懂了。請高人來回答

5樓:

有一些最基本型別是cpu直接資瓷的,整形,浮點形等等。其實也不算是型別啦,就是因為cpu資瓷那些指令,給人一種有那些基本型別存在的感覺。有了基本型別以後,你可以通過一定的方法把基本型別放到某種容器裡,形成更複雜的型別,或者把容器再放到某種容器裡,形成更複雜的型別。

你說的string好像是把一排認為是字元的東西順序排放。

P.S. 我沒學過編譯原理,程式語言也只得了70幾分。範疇論也只是知道一點點概念。純粹強答,願能切題。

C語言中強制型別轉換是如何實現的?

涇渭漳淮 強制轉換時怎麼實現的?通常是由單獨的CPU指令實現的,也就是硬體實現的。5立方之後是125,125開立方之後是幾?嚴格的數學上應該是5,但實際上計算機有精度的限制,計算結果會有誤差,計算機計算得到的結果可能是4.9999999999999435452340065849之類的,將這個值直接取...

程式語言中的取余是如何實現的

各種語言裡面的演算法不完全一樣。有的語言支援任意精度整數,難道它也用跟C同樣的演算法計算餘數?另外各種語言裡面關於負數的處理也不一樣。對於除數固定 編譯時已知 的取餘操作,編譯器完全可以把它優化掉,具體優化成什麼,你隨便拿個C編譯器試試就知道了。特別對於Hash表這種,使用2的整數冪大小還是比較常見...

程式語言中的 關鍵字 是怎麼實現的?自己該怎樣實現乙個關鍵字呢?

關鍵字本身是沒有功能的,要關聯功能,有不同的方式 對應到語法樹結構上 對應到一條或多條IR上 或者也可以直接對應到一條或一組彙編指令上 直接對應的到彙編一步到位的方式開發比較困難,除非你的語言相當簡單 關鍵字除了助記,乙個隱含的意義就是,在當前的語言環境下,其功能不可分割,它的分割在實現層。if 有...