我想對於一些用語不精確,造成誤解與討論上的困難,應該是給出一些定義的時候了。
底下是我用對設計階段的意圖所下的定義:
  • 成功:可由函數名稱看出其執行時的意圖,於流程上預期得出之處理。
  • 失敗:與成功相對,於流程上非預期得出之處理。
  • 錯誤:觸及程式語言中無法自理的條件,使得執行程式必須終止之處理。
  • 例外:觸及區域流程上無法自理的條件,但可能借程式語言更正之處理。
很簡略的給出了這幾個定義,或許並不嚴謹,但可以很清楚的看出這四個詞彙的分別。
我認為,資料結構、演算法、重構、設計模式等等,都圍繞在關於「成功」這部份的處理,其他的部份論及較少。
我對於例外處理的態度和這篇相同,除非必要,我盡量不使用例外處理。

在我最近幾年寫過的程式中,有一類處理是必須使用例外處理的,那就是必須使用 eval() 時的場合。
這類處理由於很難在執行完 eval() 之前確認其執行結果,為了防範未然,必須使用例外處理來使得程式可以不因其執行失敗而中斷。

對於中斷與例外處理的概念,可以參考這篇。文章是比較偏向組合語言的說明,但是其觀念是相通的。
創作者介紹

失落的技術

HACGIS 發表在 痞客邦 PIXNET 留言(3) 人氣()


留言列表 (3)

發表留言
  • 遊手好閒的石頭成
  • 古夫和扎古是不同的,和扎古!
    Orz... 我在說什麼,咳,我要說的是:
    中斷和例外是不同的,和例外!

    「中斷」的意思是暫時打斷 CPU 處理指令佇列的動作,令 CPU 把其他執行碼排入指令佇列中,然後 CPU 再繼續處理指令佇列。

    在 DOS / 真實模式下撰寫 80x86 組合語言時,所謂的系統呼叫,就是透過「中斷」調用的。例外、呼叫、工作切換等等,都是一種「中斷」。「中斷」並不是一種錯誤。

    CPU 層級的例外和軟體層級的例外意義也不太相同。有些 CPU 層級的「例外」甚至是達成作業系統功能必需的,像「虛擬記憶體」功能就是一例。當記憶體存取器所定址的記憶體不存在真實空間 (沒有插真的記憶體晶片) 時,就會向 CPU 發出定址例外的中斷,作業系統藉由攔截/覆蓋此一中斷的內容,才得以實現虛擬記憶體功能。
  • HACGIS
  • 我知道中斷和例外和錯誤都是不同的阿, 我引用那篇文章只是要說明原始的觀念是什麼.
  • HACGIS
  • 剛剛那個留言是在我阿姨家留的。
    追述一件事情:
    嚴格來說,我很清楚組語/硬體、C Family、設計意圖等等所描述的「中斷」、「錯誤」、「例外」都是不同一回事。
    雖然名詞相同,觀念相近,但的的確確不是同一回事。
    提出來不是要誤導看文章的人,而是希望看文章的人能夠有分辨的能力。
    不然每搞出一個觀念就要發明一個新詞,那實在太累人了。

找更多相關文章與討論