精華區beta Programming 關於我們 聯絡資訊
> ==>發信人: gsj.bbs@bbs.nchu.edu.tw (國王的新衣), 信區: programming > 高階的東西畢竟要由低階來實作完成 > 而低階到最後,CPU的運作都是循序式,而不是物件導向式 > CPU內部的Address Segment 暫存器, > 一開始就是分成Data Segment 及 Code Segment 兩大類 ====== code, data, stack 分開各放一堆是 X86 processor 的特有架構, 這是有原因的. 1. 呼應 High Level Language Compiler 產生的 code, data 就是分開的. 2. code , data 分離比較難發生 dirty program (把 code 當 data 處理) 現像. 3. code 與 data 的 fetch 可以分離, 平行. instruction code 較容易 pipeline prefetch 與 branch prediction. 4. Code Area 可以使用 ROM . 5. 隔離可防錯, 也易於除錯, 也配合下層的系統支援. > 只要電腦還是三大元素的架構 (CPU、Memory、IO) > 循序式的東西就永遠不死 > 我很早就說過OO的Class語法,將Code與Data 搞在一起, > 這是從出發點就錯誤了, > 程式語言與硬體開始有了 "不對稱 " 的問題 > 所以程式越是發展,毛病也就越多 傳統的程式概念跟 Class Object 最接近的就是 OS 裡的 Synchronization Monitor, 現代的 OO 配合分散式多處理(機)的用法, 把呼叫另一台機器(不同的 process 可以想像成是在不同的 Virtual Machine 上)Mornitor 所需要傳送參數 與資料的部份, 一律改用 message passing 的抽象概念來代替. 即使是單機上的 程式, 一旦涉及不同 Process 間的來往, 在不同 process 使用不同的 virtual memory space 隔離使用下, 這是難有 shared memory 的做法與效率, 為了這個 分散隔離的缺點, user mode 下同一 process 的 multi-thread 就應運而生. 把 process 或 mornitor 都想像為隔離的 Virtual Machine , 每個 machine 有其 多個 code threads 或 function code procedure , 可使用 sharable data memory . 這時候的一個 class 有很多 methods 就像一個 mornitor 提供有很多 procedure 可以從單一入口進入封裝的空間(含 code , data, stack)進行啟動 代理(invoking)的工作. 在 process , mornitor 或 virtual machine 的概念裡, 用到的 code , data 當然得擺在其勢力範圍可及之處, 所以 code 與 data 甚至臨時工作的 stack 都得封裝在一起. OOP 強調的是抽象的概念, 不必去管跟實體是如何對應的, 當然, 抽象的 物件絕對得建立在實體之上, 近代化的 OO 是同時具有 shared memory (user space multi-thread) 與 distributed processing (network message passing) 的二元性, 在何處該如何用, 那是 compiler 與 linker/binder 的事. ====== 用組合語言(或機器碼)寫程式, 要怎麼擺, 怎麼傳送與叫用, 怎麼做記號 解譯, 都是可以 "無法無天" 的, 但也是雜亂無序的根源. 高階程式語言, 尤其 是 OO , 就是希望初學者只要有上層抽象概念後, "不知亦能行", 然後習慣了就 自然成為 "有文明素養" 的資訊良民. 在一個 single user space 下的應用程式, 只要沒有併行同步的需求, 使 用 shared memory 的概念是最簡潔仍然有高效的, 那就相當於把一個傳統的 C 程式, 共用到相同 data 的同一群 function code 全都塞在同一個 class 下就 可以了. 抽象化的高階語言最怕的就是跟其理念模式相違反的用法, 就像裝輪子的 機器人卻偏要叫他去爬樓梯. 不過, OO 卻像裝了腳也有輪子在上面的機器人, 怕 的是用錯道具. 組合語言則是一切道具都可以自己來, 但不會用現有的組裝就會 耗掉寶貴的生命時間. > 你知不知道物件別名(Alias) 這種東西是怎麼來的嗎? > 為什麼會有這種東西的存在?是為了加強程式語言的功能而存在的嗎? > 有心人可以去查查原因,那是語法與硬體的不對稱性,造成了大漏洞 > 為了補丁,才有這種東西存在的。 -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234