> ==>發信人: Wiseman.bbs@bbs.cs.nthu.edu.tw (), 信區: programming
> ※ 引述《tester.bbs@bbs.csie.ncu.edu.tw (try or test)》之銘言:
> > > X跟Y既是兩台機器 當然可以同時做不同的事
> > > 就算是同一台機器的同一個程式, 也有可能有兩個thread 同時執行類似以上的
> > >event loop. 但是重點是thread 本身是循序的.我想說明的是, 像gsj此類因為不了解
> > > framework內部的機制而誤認framework為非循序的, 是一件多麼可笑的事.
> > > 循序化是gsj自己提出的, 他自己也無法給出一個完整的定義(沒有main() ? 哈哈)
> > > 所以我也只是猜測他最可能的定義來反駁. 我想..任何一個有大腦的人都會知道
> > > 幾乎世界上所有的language,都是他所謂的循序化. 包括C++/C/Java/Pascal/Perl/Python
> Concurrency跟這裡討論的循序化是不一樣的 兩者並不是相反的詞
> 循序化就是明確的指定指令執行的內容與程序.
這個討論串的爭議就在 "非循序" .
也就只有 gsj 那麼一句 " OO 是非循序" .
其中一個疑問就是電腦是否能處理 "非循序" 事件 ? 這是底層的細部處
理動作, 而事實上電腦的 interrupt 就是應付非循序事件而來的.
另一個就是解決問題的設計分析是否一定就要分解成內外都循序執行的
模組 ? 假如電腦就是模擬這個世界去解問題, 那這個世界就是同時會
有很多事或工作同時發生或被執行, 這個世界是併行的, 有循序也有非
循序. 當然, 傳統的程式語言沒有進化到明顯的 "非循序".
指定指令執行的內容與程序, 當然包含可以雜亂無序這種執行次序關係,
"循序化" 的中文含有 "使之依循次序" 之意, 也就帶有強制為序之意.
命令式敘述未必就是依循一定次序的敘述. 同時發生或進行是意謂著無
法分辨次序, 或者不必依循一定的順序.
imperative programming language 都是譯成 "命令式的程式語言"
主要都是在 " 敘述 control flow ", 也就是敘述電腦工作的次序流程.
如果利用電腦解決問題, 就是把問題的解決, 思考成問題資料的表示及
對問題資料的搬移與計算處理次序(這是方法的一種), 這就是傳統的
"流程化分析與設計", 也就是最簡單的 flow chart 分析. 但一個複
雜的問題可以切分成不同的子問題, 每個子問題可以使用某個子流程
來解決, 但各流程與子流程之間未必就有一定的必然次序關係, 所以
這樣的分解細化過程不應該全被稱為 "循序化". 子流程在很多細部處
理上是次序相關的, 例如四則計算就是最明顯跟處理的前後次序是有
關的. 但子流程與子流程間, 無關的就未必一定要依循一定的次序.
至於子流程是能共用記憶體的 procedure 或整理成強調 message
passing 的 class object method 並沒有那麼明顯的不同. 可是叫用
一段子流程, 這個叫用還回(call-return) 的形式, 在規則上就會影
響處理流程的整個次序.
> 與循序化相反的是Declarative language, 例如SQL,
> 這種language不會列出電腦執行的程序, 只會描述要作的事
不必詳述執行的細節次序, 但要敘述清楚問題項目與結果的 "關係",
如何求解由 compiler/interpreter 去善後. Declarative Language
表面上是跟執行次序無關, 但先得出結果 X , 再混合問題的關係條件
與中間結果得出結果Y, 最後根據 X, Y 與關係條件, 最終得出結果Z,
還是有可能會跟先做 X 還是 先做 Y 這種次序是有關的. 換言之, 前
後次序本身就是一種關係, 先做後做可能會影響結果不同. 宣告某個
段落(或子流程)可以併行或者必須等候某個事件(或條件)成立, 才能
繼續執行, 是兼具 imperative 或 declarative 敘述的特質的.
所謂 導向 (Orientation) 意涵 "主流" "時尚" , 帶有以 XX 為主要
項目的含意. 但這並不表示 "非主流項目" 就完全被排除.
命令式語言可以循序化處理, 但也可以宣告某個部分可以併行處理.
--
◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234