absmiddle 以一個程式設計者看 Microsoft 及其競爭者


[看法] [版主] 本文經椰林 Programming 版主 PowerPC 同意後轉貼. EightCloud.bbs@csi (嵐雲): 我用 NT 快一年了,用來寫程式, 實在覺得不錯. 功能強大, 穩定性也就, 加上 Win32 API 的 Scalable, 目前適合用來發展程式. 像我看過一個 Shareware 的程式, 是在 Daytana(NT 3.5 Beta)上, 用 Visual C++ 2.0(Beta) 寫的, 可以在 Win32s(In Windows 3.1), NT 3.1, NT 3.5(Beta), Chicago(Beta) 上跑! 但它絕對不適合 Win/DOS 的 Upgrade, 現階段也不適合做為高階個人工作站, 因為 和 Win/DOS 相容 性不夠好(這是系統定位的問題, 本來就會這樣), Native 的軟體又不夠多. 3.1 或許 是一個過渡版, 因為它的 Memory 須求大了一些, 而且缺乏 OLE2 的功能. OLE2 在 M$ 是一個很重要的技術, 像在 Word 6.0 那版的 Office, 都有 OLE2 的功能. 而且 也由於 NT 3.1 沒有 OLE2, 所以要出 Office Win32 版本, 也是不可能的. 在 3.5 中, 就會有所改進, 從 News 上看 3.5 Beta 的使用者, 許多都對 3.5 的速 度改進感到滿意, 在 3.5 中, 也會有 OLE2. 中文版也會跟著出來(目前也在 Beta 中) 到時就應該會有 Office for Win32 出現吧! Visual Basic 方面, 現在正在讓 OLE2 和 VBX 合二為一, 叫 OCX 吧! 在 Visual C++ 2.0 裡會有的樣子, 之後, Visual Basic 的 32-bit 也會出來吧! 最後, 當 Chicago 出來後, 只要是 Chicago 的軟體, 幾乎就是 NT 的軟體. (在某些 方面, 如 GUI, P&P 等, Chicago 是領先 NT, 不過基本上, 都是用 Win32 API, 在 Win32 API 中, NT 的功能大過 Chicago) 當 NT 的軟體夠多後, 才能當成高階個人工 作站吧! -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 在知道有 Windows NT 後, 我把大部份的時間都花在有關 Microsoft 上. 在 Windows 3.0 出來之前, 我一直準備把時間花在 Unix 上, 不過在習慣了 DOS 下, 整合視窗的 Compiler, 及整合為一的 Debug (Borland C++), 在 Unix 上用 CC 一直不曾習慣過, 也不知道如何去 Debug. 再來就是各家的 Unix API 不一, 我到現在還是不知道要參 考什麼樣的書比較好. 在 Windows 3.0 出來後, 無意中發現有 Borland C++ for Windows, 寫 Windows 程 式非常的方便, 開始學這種程式設計. 其實當時是想先了解一下 Windows Message Driven 的程式架構, 終極目標在 X-Window. 同樣的, 不知道要找什麼樣的 X-Window 的書, X-Window 好像還包含有網路部份, 分了幾層的程式設計, 較上層當時又有 Open-Look 和 Motif 之爭, 同樣讓我無所適從. 同時 Windows 程式也讓開始寫多工 (雖然不是 Preemptive), 但也了解 Windows 還是沒有充份發揮 386 CPU, 雖然有進 入 Protected Mode, 但只用到一些 Virtual Memory 管理, 像 CPU 內的 Task Switch, Flat Address Mode, Per Process Address... 都沒用到, 使得程式的大小 受很大的限制. (特別像 GDI 等 Resource) 而 Cooperative 多工, 也讓程式 Debug 不易, 因此, 還是沒打算久留於 PC. 在知道有 NT(當時是 10 月 Beta版) 後, 有很大的改變. 我是從 Inside Windows NT 這本書開始看的, 從它的架構看來, 充份的發揮了 CPU, 且是一個 "完整的" OS, 就 功能來看, 可以做到和 Unix 一樣的工作 (它還有一個 POSIX 的 Subsystem, 可以讓 你 Run csh 等等, 一些 Unix 上的工具, 在重新 Compile 後, 就可以 NT 的 POSIX 下 Run,就實際應用而言,我所知道的缺點是, 它似乎不能管理使用者的 Disk Quota. 不過他是定位於個人工作站, 並不是完整的 "多人" 多工 OS. 因此在上面, 你可以寫 事實上 DOS/Windows 辦不到, 以往必須在 Unix 上寫的程式. 且 Win32 API 的理念, 你在 NT 寫的程式, 只要你選擇適當的子集, 你的程式可以在 Chicago(Windows 下一 代, 避開 Security 等的 Win32 API), Win32s(Windows 3.1 上擴充, 避開 Multi- thread, Preemptive 多工及所須的同步 API) 上, 以 Native 的速度跑. 且 NT 可在 不同的 CPU 平台上跑, 脫離 Intel 的限制 (事實上, 在 Inside Windows NT 裡, 一 些例子是以 MIPS CPU 為主, NT 的發展人員是發 DEC 挖過來的吧, 他們對 Intel 也 不一定很熟). 現在在等 PowerPC, 和 Windows NT 3.5, 若有可能, 我會買來玩玩看. (對 AlphaPC 也有在觀察, MIPS 的電腦好像很少, 宏硒蕈g做了一個架構, 但不知道 有沒有在賣. 總之, 我應該應會買一台非 Intel 的機器玩玩吧!) 之後, 對 Microsoft 就比較注意, 發現它雖然霸道, 但至少有新的技術在形成, 像 OLE2, Winsock, ODBC, MAPI, TAPI, P&P 等, 且市面上書很多, 若有需要, 就可以買 來參考. 這對我而言, 非常重要. 可以讓我寫各種的程式. 其它像 Visual C++ 的出 現及內建的 MFC, Visual Basic 等程式設計工具, 更符合我的需求. 雖然 Microsoft 廣告打的凶, 但也達到類似教育使用者的目的, 讓使用者能知道這個產品的存在. 雖 然知道有其它先進的 OS, 像 Nextstep, 但對它一知半解, 或許就是廣告打的少吧!:> 對 OS/2, 它的功能, 似乎也合乎我的需要. 不過它不像有 Win32 那麼明顯的程式設 計介面(API, Application Program Interface). 在 Microsoft 的書中, 有提到, 在 下一代的物件導向 OS(Cairo 吧!), Win32 API 仍然可用, 不過速度會較慢. 這時應 用 OLE2 設計為最 Native 吧! Win32 變成架在 OLE2 之上. IBM 雖然也有在計畫物 件導向 OS(Taligent?), 不過我不知道它的程式是要如何設計(或許廣告不夠:>). 再 來就是 IBM 的 OS 不少, 功能都可取代 OS/2. 在雜誌上也看過 OS/2 設計小組並沒 受到應有的重視, 這使我感覺到, 若 OS/2 的銷售不好, 它就可能被換掉. 縱使 IBM 沒有 OS 部門, 它也可以活下去吧! Microsoft 不同, 軟體是他們唯一的業務. 雖然 Windows NT 3.1 被批評的很厲害, 但我還是想信他們絕對不會放棄, 而是會加以改 進. (3.5 在 Beta, 在 News 上的討論, Beta 測試者反應不錯. 有人說 Chicago 是 要取代 Windows NT 的, 我則認為不可能, 因為定位不同. 就算如此, 我在 Windows NT 的 程式設計, 也可在 Chicago 上應用) 對 MAC 的 System X, 是最近才在注意. 不過在雜誌上, 似乎看到目前的 System 並 不是 Preemptive 多工(若是的話, 加上 Multi-thread, 就符合我的需要). 對於它的 GUI, 可以說是最人性化的吧! 時常有人說 Chicago 在抄 MAC 的 GUI, 或許可以把它 想成 MAC 的 GUI 是最理想的, 雖然 Microsoft 不想和 MAC 一樣, 但最後還是回到 原點. 若 Microsoft 本來就想抄, 應該不會抄的那麼辛苦吧! MAC 的 Users 或許可 引以為傲. 其次讓我不敢碰 MAC 的原因之一, 也是他的封閉性, 加上我對 x86 PC 較 熟悉了, 從組合語言, CPU , 硬體架構,... 到 OS, 可以說跟 x86 PC 長大的, 隨著 這個成長, 對它有一份感情. (不過在此之前, 我是學 Apple II 的 Basic 和 6502 組合語言) 我想要添設備, 想要部份升級都非常的容易. 若將來 PowerMac 遵循 PReP , 加上他的 System 是 Preemptive & Multi-thread, 大概我就會去碰他的 System 吧! (System 是商標嗎?) 對 Unix, 就是一直找不到標準, 加上 Compiler 不如 PC 上的 User Friendly. 常常 有什麼聯盟, 想要統一什麼規格, 但總是多頭馬車, 最後常無疾而終. 不過像 Linux 就給我很大的感受, 若 NT 沒出現, 或我仍在高中的話, 我大概會專心於 Linux 吧! 事實上, 從不同的觀點看事物, 會有不同的看法. 一個使用者最在意的, 可能是它上 面 AP 的多寡, 速度的快慢, 好不好用等; 一個設計者, 可能是看這個 OS 能寫出什 麼樣的程式, 及寫出的程式能在那 Run, 不一定要 Binary Compatible, 速度不一 定要快, 不過要穩. 不能 Binary Compatible, 在不同平台上再 Compile 就好了, 速 度不夠快, 若是 OS 的問題, 再等它改進(自己程式就不用改), 換較好的設備... 若 不穩, 那就慘了; 現在使用者不多沒關係, 要有未來; 要是一個大程式寫了兩三年, 這個 OS 夭折了, 那...:< 這是我的感想, 大家多多交流, 也提提你不同的經驗吧! :> [看法] ax.bbs@bbs.ee.nthu (athena): 所以我都叫人努力學理論,我自己也是:P 電腦知識到達一定水平的時候,可以在一個月內對任何作業系統的發展環境進入狀況 為什麼要被這些公司牽著鼻子走呢? [看法] EightCloud.bbs@csie.nctu (嵐雲): 或許吧! 不過要把理論實體化, 還是要找一個實際的系統 Implement. 事實上, 我學 NT, 也是學基本理論. 像在看 Inside Windows NT 時, 相當於在學 OS 架構, 並和 OS 的課本相互參考; 學 Programming, 則在學 Multi-thread 的程式設 計, 怎樣利用這種技巧來寫程式, 怎樣利用同步信號(Semaphore, Mutex, Event)來避 免 Preemptive 環境下, 資料被同時存取, 且避免 Deadlock... 雖然說, 我認為現在 換到別的 OS, 較容易進入狀況, 但是要到熟悉那堶悸瑰藿, 也不是那麼容易吧! 像 一些 Debug 的技巧等. 還有, 就是有一些程式是很大的, 要寫很久的, 就算你熟悉一套 OS, 要把你所想的寫 上去, 那也是很難的. 還有就是不夠聰明吧! 對一些書上的說明, 若不實際寫程式測 試, 不能確定自己所了解的是否就是它所要表達的. 所以我還是選一套 OS, 邊學邊寫, 到時候用的 OS 倒了, 再換吧! [看法] ax.bbs@bbs.ee.nthu. (athena), 信區: Programming : 雖然說, 我認為現在換到別的 OS, 較容易進入狀況, 但是要到熟悉那堶悸瑰藿, 也 : 不是那麼容易吧! 像一些 Debug 的技巧等. 忘了那裡看來的: 良好的程式應有自我偵錯的能力。 要靠 OS 的 Debug 技巧大概也是用在 OS Dependent 的地方。 : 還有, 就是有一些程式是很大的, 要寫很久的, 就算你熟悉一套 OS, 要把你所想的寫 : 上去, 那也是很難的. 這時候,物件導向式語言就派上用場了 ... 管你是什麼 OS,主幹還是主幹,枝葉改改就好了:) IMHO,學生嘛,鼻子是用來到處聞聞的,不是給人牽著的 ...:P [看法] EightCloud.bbs@csie.nctu (嵐雲): 大致上, 同意你的看法. 不過有一些事情, 必須要親自去接觸, 不然實在不會想到. 我忘不了當初修 Compiler, 寫程式時, 執行時會產生 Bus Corrupt 而 Core Dump, 經過很久時間, 才 Debug 出, 原來是 Sun 的 Sparc CPU 有 Data Alignment 的限 制. 雖然早先就知道 Data Alignment 有利於資料的快速存取, 但總以為是最佳化的 選擇而已. 接著以為這是 RISC CPU 的限制, 可是後來又發現 DEC Alpha 好像沒這 種限制... 像這種根本想不到的問題, 沒 Debug 實在很難. 有 Debug, 只要 Step by Step Trace 一邊, 就出來了, 當時花了數天找這個問題. 而當時想把 lex, yacc, gcc(c++) 和起來用, 也是搞了一頭霧水, 出問題, 總是不知 道那個部份有錯呢? 自己語法有錯呢? 還是軟體還沒支援那樣的功能. 最後 Compiler 是用別人的交, 唉! 也不能怪 Unix 吧! 這些工具好像都是 Shareware 吧! 不知道商業的發展軟體有沒有 做到 PC 上的一樣好用(or 更好). 一些 Debug, 它能把 Source Code 和 Assembly 一起 Show 出來, 這不僅能讓你 Debug 而以, 還能看 Compiler 如何翻成機械碼的, 還可看出如何最佳化. (BC 和 VC 都可以吧! VC for NT 也可以) 而到新系統, 你還要了解&熟悉上面的發展工具吧! 想當初, 從 Borland C++ 轉 Visual C++, 就花了不少時間, 一個月學會 OS Dependent 的東西, 我實在是做不到. (我想信有人做的到, 不過不是我 :>) 不過如果換系統那麼容易的話, 那許多商業軟 體, 應該會同時有 Unix, OS/2, NT, MAC... 版吧! (不過現在好像這類軟體也慢慢多 起來) 當你一些理論學到某種程度, 總會想寫個程式, 試試自己功力吧! 此時我建議, Windows NT 發展環境, 工具, 參考書籍都不錯, 不過 $$ 要多就是了. (不要罵我頑固哦!) [看法] cjh.bbs@csie.nctu (小丸子): : 這時候,物件導向式語言就派上用場了 ..... ^^^^^^^^^^^^^^ OOP 不是萬靈丹! 舉例來說吧! 如果你是以 C++ 語言, 架在某些 Class Library 上來發展(Motif, OpenLook, MFC, OWL...), 這時候當你要轉換不同的 OS 時, 因為 Class Library 沒 有標準, 請問如何改改枝葉? (主幹都不見了!) 當然囉! 除非程式中用到的所有 Class Library , 都自己用 C 來寫不假於他人, 不過... 應該沒有人這樣吧! [看法] syc@cc.ntu (Shiau Yong-Ching): : 也不能怪 Unix 吧! 這些工具好像都是 Shareware 吧! 不知道商業的發展軟體有沒有 : 做到 PC 上的一樣好用(or 更好). 一些 Debug, 它能把 Source Code 和 Assembly : 一起 Show 出來, 這不僅能讓你 Debug 而以, 還能看 Compiler 如何翻成機械碼的, : 還可看出如何最佳化. (BC 和 VC 都可以吧! VC for NT 也可以) 不能怪 Unix 就該怪你了:> 所有 GNU 的程式發展工具都可以用 Latex 印出來, 內容 非常完整. 如果你用過 GDB 的話, 就會發覺 Unix 下的 Debugger 是多麼的方便, Turbo Debugger 都要閃一邊站. 在沒有把 GDB 的手冊印出來之前常常覺得 Unix 的 遺憾就是沒有好的 Debugger, 可是看了 Manual 後覺得 Unix 最強的地方竟然是它的 Debugger. : 之後, 對 Microsoft 就比較注意, 發現它雖然霸道, 但至少有新的技術在形成, 像 : OLE2, Winsock, ODBC, MAPI, TAPI, P&P 等, 這些不是新技術, 而是舊觀念的新包裝, 例如 OLE 就是在 GUI 的環境下, 用來取代 Unix 傳統的 Pipe 地位的架構. : 雖然知道有其它先進的 OS, 像 Nextstep, 但對它一知半解, 或許就是廣告打的少吧! 非也, Nextstep 一套幾十萬, 他們的客戶群不是學生, 而是廣大的企業界, 你聽不到 Nextstep 的聲音是正常的, 反而聽了太多 NT 的聲音是不正常的, NT 的廣告似乎選 錯了對象. 舉例來說, 有多少人聽過 IRIS 工作站? 大概很少吧, 不過它在影像處理 的領域堶, 可是嚇嚇有名的. : 再來就是 IBM 的 OS 不少, 功能都可取代 OS/2. 在雜誌上也看過 OS/2 設計小組並 : 沒有受到應有的重視, 這使我感覺到, 若 OS/2 的銷售不好, 它就可能被換掉. 縱使 : IBM 沒有 OS 部門, 它也可以活下去吧! 這大概不可能, OS/2 已經很確定是 IBM 下一代作業系統的標準.不過 OS/2 這個名字 好像讓很多人印象不好, 它可能會換個名字(Workplace)吧. : 對 Unix, 就是一直找不到標準, 加上 Compiler 不如 PC 上的 User Friendly. 常常 : 有什麼聯盟, 想要統一什麼規格, 但總是多頭馬車, 最後常無疾而終. 怎麼會沒有標準呢? Unix 標準推動的困難是 OS Upgrade 的速度幾乎是零, 有幾部 Sun 的 Workstation 出廠後還有 Upgrade OS 過呢? 不過仔細想想, 一般寫程式真的 需要那麼多標準嗎? 我寫的程式大概有 File IO 以及數值運算就好, 這些東西 Unix 早在 System V7 就已經有了, 連 DOS 下也都一模一樣. : OOP 不是萬靈丹! : 舉例來說吧!如果你是以 C++ 語言, 架在某些 Class Library 上來發(Motif, : OpenLook, MFC, OWL...), 這時候當你要轉換不同的 OS 因為 Class Library 沒有標 : 準, 請問如何改改枝葉? 嗯,好像大家用 Class Library 的方式不太一樣:) 我一向是自己先定好 Abstract Class 再去用別人的 Class Lib,所以速度一向是慢 半拍:P 轉移平台就沒什麼了... [看法] ax.bbs@bbs.ee.nthu. (athena), 信區: Programming : 不能怪 Unix 就該怪你了:> 所有 GNU 的程式發展工具都可以用 Latex 印出來, 內容 : 非常完整. 您也不能太苛求啦! 1.PC 的 LaTEX 不是說架就可以架的,還要你的印表機和它 Match 才可以。 像我這種印表機是非主流派的,裝了和廢物一樣。 2.好吧用工作站,哇咧印一張兩元 ...... 印的錢剛好可以買 Borland C:P 3.好吧用買的 ...... 咦?台灣怎麼沒賣? ...... 最好是真的有個 GNU in Taiwan,解決 Documentation 的問題 ...... [看法] EightCloud.bbs@csie.nctu (嵐雲): : 這些不是新技術, 而是舊觀念的新包裝, 例如 OLE 就是在 GUI 的環境下, 用來取代 : Unix 傳統的 Pipe 地位的架構. 或許不是很新的技術, 但是對我(|| 對 M$)更新了. 事實上, 我總不覺得技術並不是 有較好, 還要推廣成一個標準, 大部份的人能獲益才好. M$ 就有這實力. 我也常聽說 過 NeXTSTEP 的物件導向能力, 它們 GDI 技術也比 OLE2 要先進, 可是多少人用到? OLE 沒那麼簡單, Pipe 還比較像 DDE. OLE(第一版) 雖然用 DDE 傳資料, 但它主要的目的在達成編輯複合文件(Compound Document) 的功能. OLE2 就更強了, DDE 也只是它傳資料的方法之一而已. 它主要的 目的是要以文件為中心, 有 Inplace Editing 的效果. 你可以看看我在 Windows 版 Oost 的 OLE2 vs OpenDoc, 堶惘 OLE2 的介紹, 歡迎批評比較. NT 中也還有 Pipe, 其中還有 Named Pipe, 可以透過網路, 在兩台機器間建立管道. : 有多少人聽過 IRIS 工作站? 大概很少吧, 不過它在影像處理的領域堶, 可是嚇嚇 : 有名的. IRIS 一台要多少錢呢? 計算機圖學就是用這個寫的. NT 3.5 可能把 IRIS 的 OpenGL 弄進來吧! : Personality 和 NT 的 Subsystem 都是個笑話, 說穿了都是 Mach 的 Server 而已。 NT 的 Subsystem 是 Mach 的 Server? Subsystem 指的是在微核心的 OS 中, 把傳統屬於 Kernel部份, 提到 Usermode, 如 此有更多的彈性, 能有許多 "人格". NT 的微核心也不是 Mach, 也不是純種的微核心 (以一些人的定義而言). NT 的微核心和 Mach 最大的不同點, 在 M$ 為速度的考量, 把 Scheduler 放入核心. (參考四月中文 Byte, 這本我借人了, 所以無法打原文, 這 裡寫的若有錯誤, 請更正.)
上一層目錄