精華區beta Programming 關於我們 聯絡資訊
※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言: : > Concurrency跟這裡討論的循序化是不一樣的 兩者並不是相反的詞 : > 循序化就是明確的指定指令執行的內容與程序. : 這個討論串的爭議就在 "非循序" . : 也就只有 gsj 那麼一句 " OO 是非循序" . : 其中一個疑問就是電腦是否能處理 "非循序" 事件 ? 這是底層的細部處 : 理動作, 而事實上電腦的 interrupt 就是應付非循序事件而來的. 如果你主要是回應 gsj 的問題, 那麼在你提出不同 process 的情況時, gsj 已經說這不是他認為 "OO非循序" 的情況了, 如下: "我的循序是指 "行程內" 的循序" "行程間也是有一個順序規則的" "Process 的執行順序會由Scheduler 來排定" "(這些東西已經算是OS的議題了,詳情去看看教科書吧)" "至於Interrupt 有的是隨機發生(如網路卡、Keyboard),有的是定時發生(如Timer)" "但是ISR內部的執行也是循序" "如果它有Task要註冊到Task Queue內執行,它也是循序的" [恕刪] : > 與循序化相反的是Declarative language, 例如SQL, : > 這種language不會列出電腦執行的程序, 只會描述要作的事 : 不必詳述執行的細節次序, 但要敘述清楚問題項目與結果的 "關係", : 如何求解由 compiler/interpreter 去善後. Declarative Language : 表面上是跟執行次序無關, 但先得出結果 X , 再混合問題的關係條件 : 與中間結果得出結果Y, 最後根據 X, Y 與關係條件, 最終得出結果Z, : 還是有可能會跟先做 X 還是 先做 Y 這種次序是有關的. 換言之, 前 : 後次序本身就是一種關係, 先做後做可能會影響結果不同. 宣告某個 : 段落(或子流程)可以併行或者必須等候某個事件(或條件)成立, 才能 : 繼續執行, 是兼具 imperative 或 declarative 敘述的特質的. : 所謂 導向 (Orientation) 意涵 "主流" "時尚" , 帶有以 XX 為主要 : 項目的含意. 但這並不表示 "非主流項目" 就完全被排除. 直接引用 Booch 在 Object-Oriented Analysis and Design 中的定義, Object Model 的必要條件有: 1. Abstraction 2. Encapsulation 3. Modularity 4. Hierarchy 非必要條件為: 1. Typing 2. Concurrency 3. Persistence. 既然 concurrency 是在非必要條件, 那麼就算 concurrency 確算真的 會造成 gsj 所說的 "用非循序的程式設計方式不適合循序的CPU", 又 跟 OOP 有什麼關係. : 命令式語言可以循序化處理, 但也可以宣告某個部分可以併行處理. 你在探討的似乎是 "到底要不要把 process model 從 OS 整合成為 OOPL 的語法", 只是如果把 process model 歸類到 OS 中, 可以廣為大眾所接受, 又可以讓 process model 有更大的發展空間, 又何必一定要把所有的東西都放到 programming language 中? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.23.107