2010-03-01 72 views
17

我一直在編程...... 6 - > 8年,我開始意識到,我不知道真正發生在低水平的事情,當我做一些類似於我想描述什麼計算機科學主題?

int i = j%348 

事情是,我知道j%348做了什麼,它將j除以348並找出餘數。我不知道的是電腦如何做到這一點。

同樣,我知道

try 
{ 
blah(); 
}catch(Exception e){ 
blah2(); 
} 

將調用blah如果嗒嗒拋出,它會調用blah2 ...但是,我不知道電腦怎麼做的這個代替嗯...崩潰或結束執行。

我想,爲了讓我在編程中「更好」,我應該知道我的代碼真的在做什麼。 [這可能也會幫助我優化和...錯誤...不做愚蠢的事情]

我認爲我要求的東西可能是在大學或其他東西教大量的東西,但說實話,如果我可以學習一點,我會很高興。

問題的關鍵是:
我問什麼話題/計算機科學課程?因爲誠實,我不知道。

由於我不知道這個主題被稱爲什麼,我無法真正找到一本書或在線資源來了解該主題,所以我有點卡住了。我會永遠感謝,如果有人幫助我=/

回答

6

你應該先看看程序集然後進入編譯器設計。如果你不知道程序集,那麼編譯器設計就會完全丟失。我個人只是從彙編開始,因爲你的確切原因 - 我想了解我的代碼在較低級別上正在做什麼。

我發現這個資源,這是非常酷:http://en.wikibooks.org/wiki/X86_Disassembly

基本上它是一個組裝的書,介紹了一些如何更高級代碼的概念組件執行,並有一些例子在那裏展示瞭如何功能等可能由編譯器在彙編中生成。

+0

+1,用於裝配,它明確幫助您深入瞭解您的語言爲您提供的所有那些漂亮語法糖背後發生的情況。 – HeDinges

+0

我決定遵循你的建議。我將學習彙編,之後,我將進入編譯器設計。感謝您的建議。 – Warty

+2

更新:幾個月後,它會很好。爲簡單的語言寫一個簡單的解釋器。還沒有編寫編譯器,但希望我會在明年左右這樣做。 – Warty

1

第一部分可能被認爲是計算機工程,但第二部分只是語言設計。

12

我會說第一部分是計算機體系結構,而第二部分是編程語言。

計算機架構的一些好書,如果你有興趣瞭解多一點關於計算機如何執行程序是:

我不知道什麼建議理解編程語言結構,如捕捉異常。可能是一本很好的編譯器書。

尤其是對於第二個示例,不同的編程語言可能會以不同的方式實現。例如,在Java等虛擬機上運行的語言會讓虛擬機保護它並拋出某些類型的異常,而在C++中,這將以不同的方式處理。

+0

+1爲計算系統的元素。這本書很棒! – Dinah

1

我想你正在研究編譯器如何將高級語言代碼翻譯成機器指令。看看編譯器的設計。這是一個經典的book

+3

WOAH!我承認封面!我知道我爸有這本書!當我還是個孩子的時候,我曾經看過書的封面,認爲這是一本童話故事書。 – Warty

+0

@Itz - 因爲有人認爲龍書是童話故事:) – Cam

+1

@Itz +1有一個有龍書的爸爸。 –

1

聽起來有點像你在談論編譯器構造和語言設計。

可以實現異常的(最)一般的「CS事物」可能是continuations(如在Scheme中發現的一樣)。如果您還沒有閱讀「計算機程序的結構和解釋」(SICP,Web page here, including full text),那麼可能需要快速完成,它只涉及編譯器構造。

0

用於計算模量的實際機制很可能會因語言和實現每種語言而有所不同。有一些關於算法here的信息。

也許算法是你感興趣的領域?

0

沒有人在談論Mathematic for modulo? 第一學期媒體信息學(我在第五),課程:數學:

10%3 =?
X%Y = Z

計算:

  1. 10/3 = 3.33333
  2. 3.3333舍入到3
  3. 3 * 3 = 9
  4. 10 - 9 = 1

作爲一個公式:
10 - (Math.round(10/3)* 3)= 1

隨着變量:
X%Y = X - (Math.round(X/Y)* Y)

瞭解二進制,你會明白,每一個數學運算是基於加法。

0

上面提到的「計算系統的元素:從第一個原則構建現代計算機」由Noam Nisan和Shimon Schocken提出,它們提出了以整體方式提出的問題類型:從架構到虛擬機到編譯器到OS。

0

如果你不想花任何錢,有一本名​​爲「計算機組織和設計基礎」的好書here(PDF鏈接)。我還推薦Charles Petzold的「Code」,由Microsoft Press出版。