???作為現(xiàn)代C++最重要的特色技術(shù),template正在各個(gè)傳統(tǒng)領(lǐng)域攻城略地。從基本算法與數(shù)據(jù)結(jié)構(gòu),到正則表達(dá)式與XML解析,從高性能數(shù)學(xué)計(jì)算,到資源的分配與管理,從網(wǎng)絡(luò)分布式計(jì)算環(huán)境,到組件模型創(chuàng)建,從靜態(tài)多態(tài)性的維度擴(kuò)展,到設(shè)計(jì)模式的自動(dòng)生成,神奇的template顯示出其令人嘆為觀止的強(qiáng)勁實(shí)力,如果不是有一個(gè)隱隱的痛處,template愛好者簡(jiǎn)直可以去狂歡了。
這個(gè)隱隱的痛處,就是在GUI編程領(lǐng)域。
???現(xiàn)有的大部分成熟GUI框架和工具庫(kù),其定型時(shí)間都在90年代早期,不管是因?yàn)槭裁丛颍傊覀兏究床坏絫emplate技術(shù)在這些環(huán)境中的任何重要運(yùn)用。無(wú)論是專有MFC和OWL,還是開源的wxWindow和Mozilla, 以至于是專有還是開源都說(shuō)不清楚的Qt,它們?cè)谄渌矫嬗兄T多不同,偏偏倒是在對(duì)待模板技術(shù)上空前一致:嚴(yán)格限制在底層的數(shù)據(jù)結(jié)構(gòu)領(lǐng)域內(nèi),抵制模板技術(shù)流入GUI主體結(jié)構(gòu)。最過(guò)分的wxWindow和Mozilla,在代碼編寫規(guī)范里嚴(yán)厲禁止使用1990年之后發(fā)展出來(lái)的任何C++特性,模板、異常、多繼承、STL等等,均在黑名單上。諸位有興趣,不妨去看看,那與其說(shuō)是一份C++代碼編寫規(guī)范,倒不如說(shuō)是對(duì)C++現(xiàn)代特性在GUI領(lǐng)域應(yīng)用的一份不公正的判決書。
難道模板技術(shù)真的在GUI領(lǐng)域無(wú)用武之地嗎?
WTL給出了一個(gè)響亮的回答。
???WTL是微軟ATL開發(fā)組成員Nenad Stefanovic先生在ATL Windowing機(jī)制上發(fā)展起來(lái)的一整套GUI框架,運(yùn)用template技術(shù)組織和創(chuàng)建GUI對(duì)象,構(gòu)筑了精致的面向?qū)ο罂蚣埽]錯(cuò),在這里object oriented與template達(dá)成了精致的融合)。雖然沒有獲得微軟的官方支持,雖然其使用者人數(shù)很少,但是確實(shí)是“用過(guò)的都說(shuō)好”,有位微軟MVP人士甚至說(shuō),這是微軟有史以來(lái)推出的最優(yōu)秀的一個(gè)framework。真是一個(gè)有趣的諷刺,最好的東西居然不被官方支持。有關(guān)于WTL的流言不少,比如這東西原本是微軟內(nèi)部專用,只是因?yàn)椴恍⌒牟疟恍孤┏鰜?lái)等等,這更加劇它的神秘色彩。相信大家對(duì)它一定有不少問(wèn)題。我們特別邀請(qǐng)到了WTL之父Nenad Stefanovic先生,進(jìn)行了一次網(wǎng)上的訪談,希望能幫助大家了解WTL的真面目。
【C++ View】:I think most of our readers are not very familiar with you, so would you please tell us your story here? We are very fond of that. What do you think about China and Chinese people?
【C++ View】:我想,可能我們的讀者中有很多人對(duì)您還不是很熟悉,您能不能在此給我們簡(jiǎn)單介紹一下您自己呢?我們將非常樂意聽到您的自述。還有,您能不能也對(duì)我們講述一下您對(duì)于中國(guó)以及中國(guó)人民的基本看法呢?
【Nenad】: I am a software developer at Microsoft. Your readers will probably know me as a creator of Windows Template Library, WTL. I am from former Yugoslavia, where I finished school and started working on software development. I've been living in US for 10 years now.
I am intrigued and impressed by the Chinese culture and tradition. I think that China is now in a great position of progress as a country and a nation. I discovered that, being from former Yugoslavia, I already know many things about China, and getting to know people from China gave me a bit of the "everyday" life perspective as well. I'd like to learn more, so I hope to visit China one day.
【Nenad】:好的。我現(xiàn)在在Microsoft工作,是它里面的一個(gè)軟件開發(fā)人員。你們雜志的讀者中可能有人知道,我就是Windows Template Library (WTL)的創(chuàng)作者。我來(lái)自于前南斯拉夫,在那我完成了我的學(xué)業(yè)并開始了我作為軟件開發(fā)人員的工作生涯。現(xiàn)在,我在美國(guó)居住的時(shí)間已經(jīng)超過(guò)了10年了。
???中國(guó)的文化以及傳統(tǒng)給我留下了極為深刻的印象,我對(duì)此十分感興趣。我想,作為一個(gè)國(guó)家以及民族,中國(guó)已經(jīng)處于一個(gè)偉大并且不斷在成長(zhǎng)中的位置上。作為一個(gè)從前南斯拉夫來(lái)的人,我早就了解到關(guān)于中國(guó)的很多事情。在與來(lái)自中國(guó)的人民的接觸過(guò)程中,我還了解到了你們?nèi)粘I畹囊恍顩r。我還想了解更多(有關(guān)中國(guó)的事情),希望有一天我可以到中國(guó)來(lái)游覽。
【C++ View】:When and why did you first think about WTL? What's its original purpose? How do you see its future?
【C++ View】:您是什么時(shí)候開始想起要開發(fā)WTL呢?為什么?您在開發(fā)它時(shí)的最初目的是什么?您又是如何地看待它未來(lái)的發(fā)展呢?
【Nenad】:WTL was born while I was working on ATL (Active Template Library). We were extending ATL to support ActiveX controls, and I was working on the windowing support. I started thinking that the same techniques can be applied to much broader windowing support, for the much richer UI for controls, components, and also applications. So, WTL was created as a part of ATL that would extend ATL to support any kind of UI related component or application. It did not ship with ATL in Visual Studio, however, so I decided to ship it as a standalone library that extends ATL.
I think that WTL will continue to be a great option for developers writing Windows applications and components. I don't see big changes or additions to WTL, because one of the design principles for WTL was to follow the Win32 UI API and design. It will continue to do so.
【Nenad】:WTL是我在從事ATL (Active Template Library)開發(fā)工作時(shí)的產(chǎn)物。那時(shí)我們正在擴(kuò)展ATL,使之得以支持ActiveX control,而我負(fù)責(zé)的就是其中對(duì)于窗口機(jī)制部分的支持。這時(shí),我就開始想,是不是可以把同樣的技術(shù)應(yīng)用到更為廣泛的窗口機(jī)制中,以獲得更豐富的UI控制、組件、以至于應(yīng)用程序呢?于是,作為ATL的一部分,WTL被開發(fā)出來(lái)了。它將ATL進(jìn)行了擴(kuò)展,以使得它可以支持各種類型的與UI相關(guān)的組件或者應(yīng)用程序。然而,它并沒有隨著ATL一同集成在Visual Studio中被發(fā)布,于是我就決定將它作為一個(gè)單獨(dú)的ATL擴(kuò)展庫(kù)發(fā)布出去。
我認(rèn)為WTL將一直是那些在Windows下開發(fā)應(yīng)用程序以及組件的開發(fā)者的一個(gè)很好的選擇。我并不認(rèn)為在以后,我們會(huì)對(duì)WTL有一個(gè)大的改動(dòng)(或者增添),因?yàn)閃TL的一個(gè)設(shè)計(jì)宗旨就是“遵循Win32 UI的API及其設(shè)計(jì)”。現(xiàn)在如此,將來(lái)還是會(huì)如此下去。
【C++ View】:I first heard about WTL in July, 2000. At that time, I thought: "No official support, no documentation, no commercial hype, it will die in 6 months." Now, fifteen months passed, it spreads wider and be more vigorous. Lots of C++ programmers, esp. the ones we regard them as "gurus and masters" involved in WTL. I know it's surely because WTL is a wonderful library, but it must be more than a wonderful library to gain such attentions without official force.What do you think WTL's relative success? What's the reason?
【C++ View】:我第一次接觸WTL是在2000年7月。在那時(shí),我就想:“沒有官方的支持,沒有文檔,也沒有商業(yè)吹捧,它最多只能夠存活6個(gè)月。”但現(xiàn)在15個(gè)月過(guò)去了,它反而流傳得更為廣泛,更加的生機(jī)勃勃。許多C++程序員,尤其是一些我們所認(rèn)知的“專家”以及“大師”,都在使用WTL。我當(dāng)然知道這主要是因?yàn)閃TL的出色,但我想,能夠在沒有官方的力量牽涉的情況下吸引如此多的注意,WTL一定還有更出色的東西,請(qǐng)問(wèn)您是如何看待WTL的成功呢?它成功的原因又是什么?
【Nenad】: I think that the main reason of WTL's success is that it did fit the need of developers at the right time. More and more developers started using ATL, and it was natural for them to start using WTL when they needed more UI support. It seems that WTL was perceived as a more open project than others, judging by the support provided by other parties in the development community. Many people did a wonderful job of creating samples, documentation and support for WTL. The support from the programming community is very important part of the acceptance and success of WTL.
【Nenad】:我認(rèn)為WTL成功的最主要原因就是,它確實(shí)而且及時(shí)地滿足了開發(fā)者的需求。越來(lái)越多的開發(fā)人員開始使用ATL,當(dāng)他們需要更多的UI支持時(shí),他們很自然的就會(huì)開始使用WTL。 從其他的開發(fā)團(tuán)隊(duì)所提供支持來(lái)看,WTL看起來(lái)似乎要比其他的項(xiàng)目更加開放。許許多多人為WTL做了大量工作,如:創(chuàng)建示例代碼,撰寫文檔等。WTL之所以能夠被廣為接受并獲得如此大的成功,來(lái)自于這些開發(fā)團(tuán)隊(duì)的支持絕對(duì)是一個(gè)重要的因素。
【C++ View】:What do you think about MFC? Do you like it? If you don't, why? And the most confusing thing is Managed C++, is it C++? Do the leaders of MC++ really think some C++ users will go to learn it? Do you believe?
【C++ View】:請(qǐng)問(wèn)您對(duì)于MFC是怎么看的?您喜歡它嗎?如果不,為什么呢?還有,最讓人迷惑不解的就是Managed C++了,它是不是C++呢?MC++的提倡者是不是真的認(rèn)為會(huì)有一些C++的用戶轉(zhuǎn)而去學(xué)習(xí)它呢?您的看法又是如何呢?
【Nenad】: I think that MFC is a great framework library. Don't forget that MFC was designed at the time that C++ compiler was rather limited, and the main platform was 16-bit Windows. Unfortunately, because MFC was designed as a framework, it was really hard to evolve it to use better C++ support in newer compilers, and to add support for new features added to Windows in the meantime. What I don't like about MFC is the DLL approach, which causes many compatibility problems, and framework design, which dictates too many things about app design.
Managed C++ is an extension to C++ which allows C++ programs to use managed code. It is very important to understand that you can compile your existing C++ code using MC++ without any changes. MC++ allows developers to use both familiar non-managed C++ and managed code in the same module. That provides an excellent way to extend existing code to interact with managed code, as well to create new projects that can use both managed and traditional C++.
【Nenad】:我認(rèn)為MFC是一個(gè)了不起的框架庫(kù)。請(qǐng)不要忘了,在MFC被設(shè)計(jì)出來(lái)初期,那時(shí)的C++編譯器還具有很多的限制,并且那時(shí)主要的平臺(tái)還只是16位的Windows。不幸的是,由于MFC被設(shè)計(jì)成為一個(gè)框架,使得我們很難利用新編譯器中那些更好的C++特性來(lái)改進(jìn)它,也很難將Windows中的很多新特性添加到MFC中。我不喜歡MFC的地方是它高度依賴DLL的特性——因?yàn)樗鼘?dǎo)致許多兼容性方面的問(wèn)題;還有就是MFC的整個(gè)框架設(shè)計(jì)——它在應(yīng)用程序的設(shè)計(jì)中限定了太多東西。
Managed C++是C++的一個(gè)擴(kuò)展,它允許C++程序得以使用受管(managed)代碼。我們需要了解的一個(gè)很重要的特性就是,我們可以使用MC++來(lái)編譯已有的C++代碼而無(wú)需對(duì)它們進(jìn)行任何改動(dòng)。MC++允許開發(fā)者同時(shí)使用他們所熟悉的非受管代碼以及受管代碼來(lái)開發(fā)同一個(gè)模塊。這就提供了一個(gè)非常好的途徑,使已有的代碼與新的受管代碼相互作用,并也可使得我們創(chuàng)建一個(gè)項(xiàng)目,同時(shí)使用受管的和傳統(tǒng)的C++代碼。
【C++ View】:In the past 15 years or more, C and C++ is the base of almost all Microsoft's technologies(OS, COM, etc.). We C++ user paid a lot of hard work to catch them, because we felt what we paid was worthy(?). Now, it seems the climate changed. .NET is coming, the world is going to be full of CLRs and/or JVMs. There has been a decampment from C++. So what do you think about the future of C++ (not MC++) in Mircosoft technologies? Will it go away? Will it become a marginal language?
【C++ View】:在過(guò)去的15年中(甚至更長(zhǎng)的一段時(shí)間內(nèi)),C以及C++構(gòu)成了幾乎所有Microsoft技術(shù)的基礎(chǔ)(如:OS,COM等)。我們這些C++用戶花費(fèi)了大量的時(shí)間來(lái)熟悉并掌握它們(C以及C++),因?yàn)槲覀兿嘈盼覀兯冻龅囊欢〞?huì)有回報(bào)(?)。但現(xiàn)在的風(fēng)向好像有了很大的改變。.NET出現(xiàn)了,世界似乎就要充斥CLR (Common Language Runtime,公共語(yǔ)言運(yùn)行庫(kù))以及/或JVM (Java Virtual Machine,Java虛擬機(jī))。現(xiàn)在C++已經(jīng)出現(xiàn)了退潮的跡象。那么,請(qǐng)問(wèn)您對(duì)于C++(不是MC++)在Microsoft技術(shù)中的前景如何看待?它是否會(huì)由此消亡?還是就此淪落為一門邊緣語(yǔ)言?
【Nenad】:Well, the world is changing too. The new type of development for Web services and connected applications is on the horizon. I think that new languages, like Java, C#, and VB.NET, were developed to address two main issues - to simplify software development and to provide better support for Internet development. Simplifying software development allows more developers to write good applications and cuts down on time needed to finish a project. Supporting Internet development is obviously very important in this time when Internet is used more and more in every part of everyday life.
I think that C++ will continue to be an important language, especially for ISV's and for system development. On the other hand, I believe that .NET will be very important platform soon. .NET has the potential to be the main programming platform for the future, but it is reasonable to expect that the transition will take some time.
【Nenad】:是的,世界也已經(jīng)發(fā)生了變化。對(duì)于網(wǎng)絡(luò)服務(wù)以及連接這樣的新型應(yīng)用程序的開發(fā)已經(jīng)浮上了水面。我認(rèn)為那些新的編程語(yǔ)言(如Java,C#,以及VB.NET)都是針對(duì)以下兩個(gè)主要的問(wèn)題而開發(fā)出來(lái)的——簡(jiǎn)化軟件的開發(fā)過(guò)程以及對(duì)于Internet應(yīng)用程序開發(fā)提供更好的的支持。簡(jiǎn)化軟件的開發(fā)過(guò)程使得更多的開發(fā)者可以寫出更多更好的應(yīng)用程序并減少完成開發(fā)項(xiàng)目所需要的時(shí)間。而支持Internet的開發(fā),對(duì)于這個(gè)Internet越來(lái)越深入到我們的日常生活中的時(shí)代來(lái)說(shuō),毫無(wú)疑問(wèn)是一件非常重要的事情。
我認(rèn)為C++會(huì)繼續(xù)作為一門重要的編程語(yǔ)言發(fā)揮作用,尤其是對(duì)那些獨(dú)立軟件開發(fā)商和那些系統(tǒng)級(jí)開發(fā)來(lái)說(shuō)更是如此。從另一方面來(lái)說(shuō),我相信.NET將會(huì)在不久以后成為另外一個(gè)非常重要的開發(fā)平臺(tái)。對(duì)于未來(lái)來(lái)說(shuō),.NET擁有成為主流編程平臺(tái)的潛力,但我們必須認(rèn)識(shí)到,這樣的過(guò)渡階段肯定要持續(xù)一段時(shí)間。
【C++ View】:There a lots of beginners in our readers, after they learn (standard) C++, they want to seek a path to master enought Microsoft technologies to be practical and proficient programmers. Could you recommend such a path? Should they learn Win32 API programming? Is it worthy of studying MFC? Is WTL/ATL/STL a reliable solution? Or goto C# directly? Many many people will thank you if you give them frank advice.
【C++ View】:我們的讀者中有很多是初學(xué)者,在他們學(xué)習(xí)完(標(biāo)準(zhǔn))C++后,他們希望能夠找到一條道路,掌握到足夠多的Microsoft的技術(shù)使自己成為經(jīng)驗(yàn)豐富的、熟練的程序員。您能不能給我們指出這樣的一條道路來(lái)呢?我們是不是應(yīng)該學(xué)習(xí)Win32 API編程?學(xué)習(xí)MFC是否是值得的?WTL/ATL/STL算得上是一個(gè)可靠的解決方案嗎?又或是我們應(yīng)該直接學(xué)習(xí)C#?如果您能夠給我們一些建議,相信會(huì)有很多的人為此而感激您的。
【Nenad】:I think that depends on their plans and ambitions. The more of those things you do, the better you are off in the long run. But, you also have to balance that with the practical issues. So, I think that people who see their future in the Internet development can go directly to C# or VB.NET, and study .NET platform. Those who would like to have more knowledge of the Windows platform and services it provides should certainly learn more about Win32 API and libraries that support Windows programming.
【Nenad】:我認(rèn)為這主要取決于他們的計(jì)劃以及雄心。你所做的越多,在長(zhǎng)時(shí)間競(jìng)爭(zhēng)中你就越占據(jù)優(yōu)勢(shì)。不過(guò)你也要注意保持與實(shí)際問(wèn)題的平衡。我建議那些決心以后只做Internet相關(guān)開發(fā)的人可以直接去學(xué)習(xí)C#或者VB.NET,同時(shí)學(xué)習(xí).NET平臺(tái)。而那些更多地了解Windows平臺(tái)以及它所提供的服務(wù)方面知識(shí)的人,當(dāng)然就必須需要更多地了解有關(guān)Win32 API以及那些支持Windows編程的庫(kù)相關(guān)的知識(shí)。
【C++ View】:Soon after I began to learn WTL, a warm-hearted man posted me a email. He wrote: "You won't be a good WTL programmer if not a good ATL programmer, you won't be a good ATL programmer if not a COM programmer. And once you decide to learn COM, you are beginning your travel to hell." Is COM so difficult to learn? How to study WTL? We must learn API, COM, ATL and WTL in sequence, do we? And what about COM, will it remain to be the core technology of Microsoft, or just be substituted by .NET and dismiss?
【C++ View】:在我剛開始學(xué)習(xí)WTL后不久,有一位熱心人給我發(fā)了份郵件。他寫道:“如果你不是一個(gè)好的ATL程序員的話,你就不可能成為一個(gè)好的WTL程序員;如果你不會(huì)COM編程的話,你就不可能成為一個(gè)好的ATL程序員;但一旦你決定開始學(xué)習(xí)COM,你就邁出了踏向地獄的第一步。”COM是不是真的那么難學(xué)?我們應(yīng)該如何地來(lái)學(xué)習(xí)WTL呢?我們是不是應(yīng)該按照這樣的順序?qū)W下來(lái)呢,API->COM->ATL->WTL?還有,COM將會(huì)變得如何?他是不是還能夠保持Microsoft的核心技術(shù)這一頭銜,抑或是被.NET給替換掉然后就此消失?
【Nenad】:I don't think it is necessary to master COM to use and understand WTL. Win32 UI knowledge is more important than COM to understand WTL. But it is true that knowledge of ATL is required, and ATL mainly supports COM. So, COM knowledge is desirable, but not required.
I don't think that COM is hell, but it sure does require a lot to learn to be an expert. Keep in mind that many people don't have to be COM experts to use COM, or to use WTL. Just understanding basic principles of COM is enough to use it, and then people can learn more when needed.
【Nenad】:我不認(rèn)為使用和理解WTL就一定要掌握COM。相比于COM來(lái)說(shuō),Win32 UI的知識(shí)對(duì)于理解WTL顯得更為重要。但毫無(wú)疑問(wèn)的是,ATL的相關(guān)知識(shí)是必不可少的。由于ATL主要任務(wù)就是支持COM,所以,有COM的知識(shí)只是會(huì)更好一些而已,但它們并不是必需的。
我也不認(rèn)為COM是一個(gè)噩夢(mèng),但毫無(wú)疑問(wèn)的是,想要成為一個(gè)COM專家,要學(xué)的東西實(shí)在是太多了。但請(qǐng)記住一件事情,很多使用COM或者WTL的人并不都是COM方面的專家。要想使用它們,人們所需了解的只是一些COM的基本原理就夠了,其他的相關(guān)的知識(shí)則可以在需要時(shí)再去學(xué)習(xí)。
【C++ View】:What do you think about Generic Programming? Is it a whole different paradigm from OOP, or just OOP's supplemental facility? Can we combine GP and OOP? In the hard work of design and implement WTL, you must had got an insight about the relationship between OOP and GP, what's it?
【C++ View】:請(qǐng)問(wèn)您對(duì)于泛型程序設(shè)計(jì)是如何看待的?它到底是OOP的一個(gè)補(bǔ)充呢,還是完全不同于OOP的另外一個(gè)程序設(shè)計(jì)范型呢?我們是否可以將GP以及OOP一同聯(lián)合使用?我想,在設(shè)計(jì)和實(shí)作出WTL的艱苦過(guò)程中,對(duì)于OOP以及GP之間的關(guān)系,您一定有了自己的看法,您能不能給我們說(shuō)一下呢?
【Nenad】:Generic Programming and OOP are very different, mostly because Generic Programming doesn't explicitly express relationships between design elements. They can, however, be used together very efficiently.
WTL uses a combination of Generic Programming and OOP design. Templates are mostly used to implement traditional OOP classes. I'd like to point out that WTL doesn't use any "pure" design, and it doesn't strictly follow any design guidelines or styles. I do think, though, that WTL does use one of the main strengths of the C++ language - it uses appropriate paradigm that is the most suitable for a particular problem.
【Nenad】:GP和OOP非常不同,這主要是由于GP從不顯式地表達(dá)出設(shè)計(jì)元素之間的關(guān)聯(lián)來(lái)。然而,它們也可以被非常高效地組合運(yùn)用。
WTL中使用了一種GP連同OOP的設(shè)計(jì)。我在其中大量使用了模板來(lái)實(shí)作出傳統(tǒng)的OOP中的類。我很樂意指出的是,WTL中并沒有使用一種“純”設(shè)計(jì),它也沒有遵循任何的設(shè)計(jì)指導(dǎo)方針或者設(shè)計(jì)規(guī)格。可是,我還是認(rèn)為WTL使用到了C++語(yǔ)言中的最主要的精髓處——對(duì)于一個(gè)特定的問(wèn)題使用一種最適合它的適當(dāng)?shù)浞丁?
【C++ View】:Recently, the famous C++ pioneer Stanley Lippman joined Microsoft and became a member of Visual C++.NET group. How do you think about this? What message do you think your company like to pass to public? Does this mean Microsoft want to make VC.NET a full-standardized C++ compiler and hold C++ as your core system language?
【C++ View】:最近,著名的C++元老級(jí)大師Stanley Lippman加入了Microsoft并成為其VC.NET開發(fā)小組中的一員。請(qǐng)問(wèn)您對(duì)于此事是如何看待的?您認(rèn)為Microsoft試圖向公眾傳播一種什么樣的信息呢?這是否也意味著Microsoft希望VC.NET成為一個(gè)完全標(biāo)準(zhǔn)化的C++編譯器,并繼續(xù)保持C++的核心系統(tǒng)語(yǔ)言地位呢?
【Nenad】:I think that shows that Microsoft is committed to advance the C++ compiler and language, and ready to get the best people to help. I am sure that VC++.NET will continue to be powerful tool for developing applications, and that it will also include additional capabilities for the .NET development. Compliance with the C++ Standard is an ongoing work, and we will see further improvements there, too.
【Nenad】:我認(rèn)為這顯示了Microsoft對(duì)于促進(jìn)C++編譯器以及語(yǔ)言繼續(xù)發(fā)展的決心,并為此找到了最佳人選來(lái)獲取幫助。我確信VC.NET將會(huì)繼續(xù)是開發(fā)應(yīng)用程序的強(qiáng)有力工具,并且它同時(shí)還將包含有.NET開發(fā)能力。目前我們正在進(jìn)行兼容C++標(biāo)準(zhǔn)方面的工作,不久我們就會(huì)看到成效。
【C++ View】:I'm learning WTL and ATL, since you are the author of WTL and a member of ATL group, can you give me some advice?
【C++ View】:我現(xiàn)在正在學(xué)習(xí)WTL以及ATL,既然您是WTL的作者,同時(shí)又是ATL開發(fā)小組中的一員,您能不能給我一些建議呢?
【Nenad】:There are several areas of programming that are very important for WTL and ATL: knowledge of the C++ language in general, understanding of templates, COM for ATL, and Windows UI programming for WTL. Solid knowledge in these areas is very beneficial for WTL and ATL developers, and it also helps to understand the source code for both libraries.
I would also like to encourage everybody to write programs. That is the best way to learn how to use any library, or a programming language or operating system. Writing programs often brings problems that must be solved that are not addressed in books. Reading about something is very useful to start learning, writing programs is the best next step.
【Nenad】:對(duì)于WTL和ATL來(lái)說(shuō),有好幾個(gè)編程方面的領(lǐng)域是十分重要的:大體上的C++語(yǔ)言知識(shí),了解模板,COM(對(duì)ATL而言),以及Windows UI編程(對(duì)WTL而言)。在這些領(lǐng)域有著堅(jiān)實(shí)的基礎(chǔ)對(duì)于WTL以及ATL開發(fā)人員來(lái)說(shuō)有著很大的好處,同時(shí)對(duì)于理解這兩個(gè)的源代碼也能夠起到幫助作用。
我同樣也很樂意去鼓勵(lì)大家多寫程序。這也是學(xué)習(xí)如何使用一個(gè)程序庫(kù),或者一門編程語(yǔ)言,或者一個(gè)操作系統(tǒng)的一個(gè)最好的方法。在寫程序的過(guò)程中經(jīng)常會(huì)出現(xiàn)一些書本上沒有提及但又必須被解決的問(wèn)題。在開始學(xué)習(xí)時(shí)讀一些東西是很有用的,而寫程序則是向縱深發(fā)展的最佳方式。
【C++ View】:They say we are in the gate of Post-PC times, it will be a embedded world, and there will be embedded smart device everywhere, and the embedded industry will build a far large market compare to PC's. Do you believe it? Do you think WTL and other C++ template libraries are available and appropriate for embedded development? Are there available for Internet development?
【C++ View】:有人說(shuō),我們現(xiàn)在已經(jīng)處于后PC時(shí)代的門口,未來(lái)將會(huì)是一個(gè)嵌入系統(tǒng)的世界,嵌入式的智能設(shè)備將會(huì)無(wú)所不在,并且對(duì)比PC來(lái)說(shuō),嵌入系統(tǒng)的產(chǎn)業(yè)將會(huì)是一個(gè)更大的市場(chǎng)。您是否相信這些呢?您是否認(rèn)為WTL以及其他的一些C++模板庫(kù)對(duì)于嵌入式開發(fā)也適用呢?它們是否適合Internet開發(fā)?
【Nenad】:Yes, I think that large number of various devices that we use everyday will become small, specialized computers. That doesn't mean that the number and importance of PCs will go down, just that there are many other devices that will be enhanced to be programmable and connected. Those new devices will provide a great opportunity for software developers, because they will all have software and somebody has to write it.
Many of the C++ libraries are quite appropriate for embedded development, and WTL would also be in cases where Windows based user interface is important (for example, Pocket PC platform). Great flexibility and small footprint are always very important features for embedded development, so template libraries are in the very good position there.
【Nenad】:是的,我認(rèn)為我們現(xiàn)今所使用的各種設(shè)備中的大部分在以后都將會(huì)演變成為一些小的,具有專門用途的計(jì)算機(jī)。但這并不意味著PC的數(shù)目以及重要性將會(huì)由此降低,只不過(guò)是表明還有著許多其他的設(shè)備需要被加強(qiáng)以使得我們可以對(duì)其進(jìn)行編程并且連接。由于必須需要有軟件的支持,而軟件又需要有人來(lái)寫,這些新的設(shè)備將會(huì)給軟件開發(fā)人員帶來(lái)極大的機(jī)遇。
有許多的C++函數(shù)庫(kù)都可用于嵌入系統(tǒng)的開發(fā),WTL也將會(huì)在那些Windows用戶界面較為重要的開發(fā)中(例如,在Pocket PC平臺(tái)上面開發(fā))占有一席之地。對(duì)于嵌入式開發(fā)來(lái)說(shuō),良好的彈性,微小的內(nèi)存耗用永遠(yuǎn)都會(huì)是很重要的特性,而模板庫(kù)在這方面占據(jù)了一個(gè)非常好的地位。
【C++ View】:In the past 7 years or more, COM is Microsoft's core technology. And we now can see that in the next decade, the core role may be .NET. My question is, what's wrong with COM? Where will COM be? Will it disappear? Will it be substituted by something else? What's the relationship between COM and .NET? Is .NET based on COM? Is it worthy of learning COM now?
【C++ View】:在過(guò)去的7年(甚至更長(zhǎng)的一段時(shí)間)內(nèi),COM都是Microsoft中的核心技術(shù)。現(xiàn)在我們可以預(yù)見到,在下一個(gè)十年間,這個(gè)核心將會(huì)變?yōu)?NET。我的問(wèn)題就是,COM有什么過(guò)錯(cuò)?COM將何去何從?它是否會(huì)逐漸消失呢,還是會(huì)被其他的一些技術(shù)給替代?COM和.NET之間的關(guān)系是什么樣的情況?.NET是否是基于COM之上呢?現(xiàn)在學(xué)習(xí)COM是不是還值得?
【Nenad】:Maybe you shouldn't ask what is wrong with COM, but just think of .NET as the evolution of COM. .NET extends what was started with COM- creating reusable binary components - and brings additional important features: rich metadata, great run-time, built-in security, versioning, etc. All of these new features are important for development today, and it is really great that .NET has extensive support for them. Interoperability between .NET and COM is also provided, so that the previously developed COM components can still be used in the .NET environment.
I still think that it is a good idea to learn COM - it is a great first step even for people who want to learn .NET, and it also provides better understanding of the design and implementation of .NET itself.
【Nenad】:或許你不應(yīng)該問(wèn)COM有什么過(guò)錯(cuò),而是應(yīng)該把.NET看成COM的進(jìn)化。.NET擴(kuò)展了COM最初的目的——?jiǎng)?chuàng)建可重用的二進(jìn)制程序組件——并向其中添加了很多重要的特性:豐富的元數(shù)據(jù),了不起的運(yùn)行庫(kù),內(nèi)建的安全機(jī)制,版本機(jī)制等。對(duì)于現(xiàn)今的軟件開發(fā)來(lái)說(shuō),所有的這些新的特性都非常重要,所以.NET能夠廣泛地支持它們,是一件很偉大的產(chǎn)品。Microsoft同時(shí)也提供了在.NET和COM之間進(jìn)行互操作的能力,這使得以前所開發(fā)出來(lái)的COM組件在.NET環(huán)境中同樣也能夠得到使用。
我仍然認(rèn)為學(xué)習(xí)COM是一個(gè)很好的主意——它甚至對(duì)于那些希望學(xué)習(xí).NET的人們來(lái)說(shuō)也是一個(gè)很好的開端,學(xué)習(xí)COM同時(shí)也有助于我們更深入地理解 .NET本身的設(shè)計(jì)和實(shí)現(xiàn)。
【C++ View】:I know you must be a C++ fan. Now the language is facing lots of challenges. To counterattack, Dr. Stroustrup suggest to develop many useful libraries, and teach the programmers to use C++ as a high level language. Now there are several wonderful modern C++ libraries. Aside of ATL, WTL and STL, there are still Boost library, MTL, ACE/TAO, DTL, etc. It seems the C++ community is preparing a movement. Do you think the movement will success? Why? What are your colleagues'(in Microsoft VC.NET group) attitude towards such a movement?
【C++ View】:我猜想您肯定是一個(gè)C++愛好者。現(xiàn)在這門語(yǔ)言面對(duì)著許多的挑戰(zhàn)。作為反擊措施,Stroustrup博士提議開發(fā)許多有用的庫(kù),并引導(dǎo)C++程序員把C++當(dāng)作一門高級(jí)語(yǔ)言來(lái)使用。現(xiàn)在我們已經(jīng)可以得到好幾個(gè)極好的現(xiàn)代的C++庫(kù),除去ATL、WTL以及STL之外,還有Boost庫(kù)、MTL、ACE/TAO、DTL等。一切都顯示著C++社區(qū)正在醞釀著一次變革。請(qǐng)問(wèn)您覺得這場(chǎng)變革能否成功?為什么?您的那些Microsoft中的VC.NET開發(fā)小組中的同事對(duì)于此態(tài)度是怎樣的?
【Nenad】:C++ is a great language and its importance remains high, even with the new challenges. Libraries are an excellent addition to the language itself, as they provide very useful reusable code for developers. The existence of many great C++ libraries shows the size and strength of the C++ community. I think that is already a success, and that it will continue. You can be sure that the VC++.NET group is aware of the existing libraries, and I expect them to continue to enhance the support for them.
【Nenad】:C++是一門偉大的語(yǔ)言,即便遇到了新的挑戰(zhàn),它仍然將是非常重要的。程序庫(kù)對(duì)于語(yǔ)言本身是極好的補(bǔ)充,它們?yōu)殚_發(fā)者提供了一些十分有用的可重用代碼。存在如此眾多的、了不起C++程序庫(kù),這件事情本身就表明了C++社區(qū)的龐大和強(qiáng)大。我認(rèn)為這場(chǎng)變革已經(jīng)成功了,并且會(huì)一直成功下去。你們可以放心,VC.NET開發(fā)組是不會(huì)對(duì)這些已有的程序庫(kù)熟視無(wú)睹的,我預(yù)期他們會(huì)不斷地加強(qiáng)對(duì)于這些庫(kù)的支持。
【C++ View】:The last question. Since lots of people don’t acquaint themselves with WTL, now we have a chance for you, the father of WTL, to introduce WTL in a short speech here. What would you like to speak?
【C++ View】:最后一個(gè)問(wèn)題。既然許多人并不了解WTL,作為WTL之父,您現(xiàn)在有機(jī)會(huì)在這里做一個(gè)演講,請(qǐng)簡(jiǎn)短地介紹一下WTL。
【Nenad】:WTL is a template based library for user interface development. It extends ATL to provide classes for implementing user interface for applications, components, and controls. It provides classes for various user interface elements: top-level windows, MDI, standard and common controls, common dialogs, property sheets and pages, GDI objects, UI updating, scrollable windows, splitter windows, command bars, etc.
WTL is implemented using the same template architecture as ATL, so it is a natural fit for ATL developers. It also doesn't alter or hide Windows specific constructs, thus allowing Windows programmers to use WTL without surprises. The important design goal of WTL was to avoid inter-dependencies - classes themselves do not reference other WTL classes. That means that your program will contain just the code that you actually use, and nothing else. Coupled with the use of templates, this allows creation of very small programs without run-time dependencies.
WTL delivers the object oriented way to program for the Windows user interface, while keeping the code size small. It also provides a great foundation that developers can extend with their own classes.
And finally - WTL was written with a hope that developers will enjoy using it. I hope you will use it and enjoy it, too.
WTL是一個(gè)基于模板的、專為開發(fā)用戶界面的程序庫(kù)。它擴(kuò)展了ATL,并提供了一些類用來(lái)實(shí)現(xiàn)應(yīng)用程序的用戶界面、組件和控件。它提供了各種類來(lái)支持各種各樣的用戶界面元素:頂級(jí)窗口、MDI、標(biāo)準(zhǔn)控件和通用控件、通用的對(duì)話框、屬性表以及屬性頁(yè)、GDI對(duì)象、UI更新、可卷動(dòng)的窗口、分割窗口、命令條等等……
WTL的實(shí)現(xiàn)使用了和ATL一樣的模板架構(gòu),所以對(duì)于ATL開發(fā)者顯得很自然。同時(shí)它并沒有改變或者是隱藏那些Windows相關(guān)結(jié)構(gòu),那些Windows程序員在使用WTL時(shí)也不會(huì)感到很吃驚。WTL的一個(gè)主要設(shè)計(jì)原則就是避免在沒有引用到其他WTL類時(shí),出現(xiàn)不必要的內(nèi)部依賴。這意味著我們的程序?qū)⒅话形覀儗?shí)際上所使用的代碼,除此之外再無(wú)其他的東西。加上了模板的使用后,這樣做得到的結(jié)果就是一些非常小的,不依賴于運(yùn)行庫(kù)的程序。
WTL專注于用面向?qū)ο蟮姆椒▉?lái)編寫Windows的用戶界面程序,同時(shí)保持代碼的尺寸很小。同時(shí),它也為開發(fā)者提供了一個(gè)很好的基礎(chǔ),可以寫新的類來(lái)擴(kuò)展WTL。
最后,我在編寫WTL時(shí)就希望開發(fā)者能夠喜歡在開發(fā)中使用它。我同樣也希望您能夠使用它并喜歡上它。