Wednesday, October 29th, 2008
今天跑的 session 多半屬於展示型的,可寫的東西不多,反而是看 recorded session 有心得。我看的是C# 語言的未來,講師當然是 Anders Hejlsberg。我想在這裡聊一些我覺得很重要的東西
Hejlsberg 提到程式語言的趨勢將會是 declarative、dynamic 以及 concurrent,除了 concurrent 之外,其他都是為了因應 web 應用而來的。以 C# 作為 .Net 旗艦語言的身份來講,這樣的演化是非常合理的,但這並不代表這是通則。我個人認為在學校中仍應教授 procedural 語言,但可加入 functional、declarative 與 dynamic 語言的訓練,像我們以前只學 procedural 會變得太過狹隘。
因為硬體在 single core performance 已然遇到瓶頸,所以 concurrent programming 將會是 multi-core 大潮下不得不然的趨勢。但是以目前的技術來看,無法很有效率地處理 heap object concurrency,這對 Java 或 C# 這種有 automatic memory management 的語言是不利的。因此在選用工具的時候,要特別注意這個陷阱,C# 在這方面的開發成本未必低於 C++。
微軟自己應該也嘗到 version hell 的苦果了,因此不但是 CLR,連 [...]
C++/C#, Windows, 技術文章, 會議相關 |
Tuesday, October 28th, 2008
現今的主流市場裡,CPU 單一核心的處理速度增加有限,而硬體大廠則致力於多核處理器的開發。多核處理器的強項在於平行處理,但它必須靠軟體的配合才能有效發揮效能。微軟在 Visual Studio 2010 中推出了不少東西來協助師程工們寫作多緒的程式,在 PDC 中自然要拿出來秀一下啦。
微軟建議的 best practice 非常值得借鏡。若要改進程式的執行效率,應該依循以下的步驟:
建立效能調校的目標,找出量測的方法。儘量使用真實的資料和直實的環境,平行處理並不是萬靈丹,真實世界中許多其他的因素才是效能的殺手 (如 I/O、memory latency)
量測現有的效能,找出執行熱點
想辦法調校現有的程式
若調校無效,找看看是否有平行處理的機會: CPU intensive,或是可以讓 UI 反應變快增加 perceptual performance
若可平行處理,則利用程式技巧去最佳化熱點
Visual Studio 的目標是想辦法讓寫作平行處理的程式變得容易一些,它提供許多基礎設施和函式庫 (如 Concurrent runtime, Parallel Pattern Library, PLINQ 等等),也提供許多 profiling 和 debugging 的工具 (我個人的偏見是這些工具和 VTune 好像!)。因此,師程工就可以集中精力在設計 synchronization 上,而不必到處尋尋覓覓好用的程式庫,或是花許多資源開發自己的程式庫。
微軟的 concurrent runtime 和 PPL 在某種程度上和 OpenMP 有重疊性,不過微軟上從 VP 下到師程工一律口風緊閉,不願意討論和 OpenMP 的未來有關的任何問題。此外,PPL 大量利用 C++0x 的 lambda expression,並刻意地將所有的東西做成 [...]
C++/C#, 技術文章, 會議相關 |
Tuesday, October 28th, 2008
微軟打算在 .Net CLR 4.0 中改進它的型別系統 (type system)。這個改進的主要動機有兩個,一是現行的 .Net 程式若是用到了 interop assembly,在安裝的時候,這些 interop assembly 的體積通常要比你寫的程式大很多。比方說,在程式中用到了 Excel 2007 interop 的話,就必須加裝 6.7MB 的 Office 2007 PIA redist,除了安裝用的 package 變大之外,程式執行時浪費的 working set 也變多 (你總不會用到 interop assembly 中的每一樣功能吧?)。此外,對於 managed to managed assembly,目前的做法是進行非常嚴格的版本檢查,若版本不合就直接踢掉。這雖然解決了 DLL hell 的問題,但卻造成更多問題: multi-target complexity 以及 deployment complexity。
multi-target 這個問題被唾棄很久,連微軟自己的師程工也很不爽,因此 CLR 4.0 就推出兩個重大的改進: type embedding 與 type equivalance。Type embedding [...]
C++/C#, 技術文章, 會議相關 |
Wednesday, March 7th, 2007
最近開始使用 Visual Studio 2005 SP1 (a.k.a. VS8 SP1) 來開發程式,VS8 與之前版本最大的不同在於 CRT library 會安裝到 WinSxS,這是為了解決 DLL hell 的問題,至少 VC team 的 development lead Martyn Lovell’s 的 blog 是這麼寫的。
因此,VC linker 會自動產生 manifest 檔案並將它包入你的 DLL 或 EXE,不幸的是,這玩意兒造出了一個新的 hell。以下是一個例子:
我有一個 setup.exe 用到了兩個 delayed-load DLL,一個叫 comp8.dll,另一個叫 comp8sp1.dll。comp8.dll 是買來的元件,用 VC8 (CRT version 8.0.50608.0) 編譯成的,另一個元件 comp8sp1.dll 則是我自己的 DLL,用 VC8 SP1 (CRT version 8.0.50727.363) [...]
C++/C#, Windows, 狀況排解 |
Tuesday, April 18th, 2006
最近又開始新一輪面試,遇上了一些有趣的面試者,他們真的直接拒絕在白板上寫程式喔 那就沒什麼好說的,我只好當他答錯了哇哈哈。
為了避免撐不到半個小時,所以又想了幾道題目。有趣的是 (或者該說,林老師卡好的是),答對的比例出奇的低!以下是我最近用的考題,這 … 這會太難嗎?
1. 請實作 size_t strlen(char*) 函數。 2. 請實作 int strrchr(const char*, char) 函數。 3. 請實作 char* reverse(const char*) 函數,將輸入的字串以相反的順序傳回,如 "123" 就會傳回 "321" 4. 什麼是 namespace?為何要有 namespace? (相信我,這題居然一堆人答不出來 …) 5. 以下的程式總共有幾個錯誤?為什麼?
#include <iostream> using namespace std; class A { A() { cout ~A() { cout };
class B: public A [...]
C++/C#, 無責任評論 |
Thursday, December 22nd, 2005
每年的年底是軟體業面試的高峰期,因為這段時間是我們最閒的時候。產品為了趕耶誕假期早就做好上架去賣了,這意味著人事終於可以要這些大爺大娘們來幫忙他們面試所需的人才;要換工作的人也多半會趁這段時間趕快找新目標,這樣過完年就可以直接投入下一個產品的開發周期。
不才小弟我身為豬深工程師 (就是結了婚沒有錢長的又不帥家裡還有嗷嗷待哺的嬰兒要養的那一種 …) 自然面試這種吃力不討好的工作就會落在我身上了。好吧,為何面試吃力不討好呢?因為很多來面試的人真他老師的會拗,明明是錯的也要硬拗成對的,要不是聽的是英文,我以為我又回到新竹了咧 …
基本上來找工作功課也稍微做一下嘛 … 下面的題目,您看看您能做幾題?
1. 請給我以下程式的結果
for (unsigned char i=0; i printf("%d\n", (int)i);
2. 請給我一個函數,輸入一個 DWORD,把這個 DWORD 的 high WORD 和 low WORD 交換,例如輸入 0×12345678 回傳值就是 0×56781234
3. 請給我一個 template 函數 min,它必須可以處理 char, int, float, double 和 char*,例如
min(1, 2) = 1; min("abc", [...]
C++/C#, 無責任評論 |
Friday, April 8th, 2005
最近聽到一種新的說法:Avalon 屬於所謂的 form-based UI。目前的 UI 大部份都有一個 frame window 負責大部份的顯示工作,而與 user 互動的部份則多半由對話盒來搞定。所謂的 form-based UI 就是將對話盒的工作推回去給 frame window 來做,所以用起來就像使用不同的表單一樣。我知道這種設計理念當初是為了遷就 HTTP 的限制而產生的,但若要說這種方法比較好,實在令我懷疑。
好像每個大師現在都改談所謂的 secure computing,可憐的小師程工最好知道 DREAD 和 STRIDE 是啥鳥玩意不然就別想要加薪了。(註:敗家中毒太深的注意,STRIDE 不是 STRIDA) 我個人認為要當個 "secure coder" 還蠻容易的,只要切實遵守三個原則就可以了:以駭客的想法想事情,寫程式時要非常非常的偏執,然後記得跟上這些流行的字眼並將它們落實在你的報告裡。我會 不會是呆伯特卡通看太多了?
微軟宣稱他們最新的 Platform SDK 支援 64 位元的開發,而且你最好現在就開始將你的程式 port 過去。真是感謝您的提醒,那個 atlstr.h 死哪去了?CString 類別又跑回 MFC 的 afx.h,這是暗示說用 ATL 7 / WTL 來寫程式的人活該是吧?最好是大家都只用 MFC 或 STL [...]
C++/C#, Windows |