版權(quán)所有普碎,轉(zhuǎn)載注明吼肥。
桌面應(yīng)用軟件,在操作系統(tǒng)中麻车,通過操作系統(tǒng)桌面窗體展現(xiàn)應(yīng)用內(nèi)容缀皱,并實(shí)現(xiàn)用戶交互操作。編程語言有很多種动猬,但并不是每一種語言都具有支持UI開發(fā)的能力啤斗,很多語言支持UI開發(fā)能力,是有人專門為之實(shí)現(xiàn)的UI開發(fā)支持平臺(tái)赁咙。簡單地說钮莲,需要有專門的語言UI庫支持,如C++中的Qt庫彼水、MFC庫崔拥,Java的Swing、AWT相關(guān)依賴庫凤覆,否則語言是沒辦法進(jìn)行快速UI開發(fā)的(可以通過編程語言調(diào)用系統(tǒng)函數(shù)链瓦,但很復(fù)雜)。
本文僅討論常用的編程開發(fā)語言進(jìn)行桌面應(yīng)用軟件開發(fā)的相關(guān)內(nèi)容盯桦,對(duì)于諸如Matlab的m語言慈俯、Labview以及其他的類似語言,并不適合廣泛的桌面應(yīng)用軟件開發(fā)的情況俺附,將不涉及肥卡。
1. 有哪些語言支持桌面應(yīng)用開發(fā)
桌面應(yīng)用開發(fā)的方式有很多種,一般分成三大類:
一是原生編譯運(yùn)行的開發(fā)技術(shù)事镣,這一類技術(shù)步鉴,通過編譯->可執(zhí)行文件方式揪胃,可執(zhí)行文件直接調(diào)用系統(tǒng)API,完成UI繪制等氛琢。這類開發(fā)技術(shù)喊递,有著較高的運(yùn)行效率,但一般來說阳似,開發(fā)速度較慢骚勘,技術(shù)要求較高。
二是二次編譯或解釋運(yùn)行方式撮奏,這一類技術(shù)和將要說的第三類技術(shù)類似俏讹,但又稍有一些不同,這一類語言是一開始就有本地開發(fā)和UI開發(fā)的畜吊。一次編譯后泽疆,得到中間文件,通過平臺(tái)或虛機(jī)完成二次加載編譯或解釋運(yùn)行玲献。運(yùn)行效率低于原生編譯殉疼,但平臺(tái)優(yōu)化后,其效率也是比較可觀的捌年。就開發(fā)速度方面瓢娜,比原生編譯技術(shù)要快一些。
三是機(jī)箱模式礼预,總是需要一個(gè)運(yùn)行外盒眠砾,才能夠運(yùn)行。這一類雖然類似于基于平臺(tái)或虛機(jī)逆瑞,但是這一類一開始的目標(biāo)不是桌面應(yīng)用荠藤,而是Web應(yīng)用開發(fā)伙单,包括了常見的RIA開發(fā)技術(shù)和主流Web前端開發(fā)技術(shù)获高。這一類技術(shù)桌面應(yīng)用開發(fā)中,不外乎兩種方式吻育,一種是單獨(dú)開發(fā)了基于桌面的機(jī)箱念秧,來提供運(yùn)行平臺(tái)。另一種就是對(duì)機(jī)箱打包嵌套布疼,給機(jī)箱再加個(gè)外殼摊趾,讓機(jī)箱運(yùn)行在外殼上。運(yùn)行效率上游两,經(jīng)過不斷地革新和優(yōu)化砾层,F(xiàn)lash引擎進(jìn)化、V8引擎的出世贱案,總體上能夠滿足要求肛炮。開發(fā)效率上,速度較快,畢竟平臺(tái)支持比較高級(jí)侨糟,很多東西直接拿來用碍扔。
目前比較流行的:
原生編譯:
C++/MFC(Win)
Objective-C(Mac)托管平臺(tái):
C#/.NET Framework(Win)
Java/Swing、AWT \*富客戶端:
Java/JavaFX \(Sun出的秕重,富客戶端)
ActionScript/Flex不同、Flash(Adobe Air、Adobe Flash) \(Adobe出的溶耘,富客戶端)
SilverLight(微軟出的二拐,富客戶端)(Win)
Open Laszlo(挺渣的,我用過凳兵,效率低的不得了)Web式:
HTML5/H5 + WebKit 卓鹿、Node.Js(NW.JS)、Electron\*其他:
Python/PyQT留荔、GTK+ \*
Ruby TK\*
Go \* (部分方言支持吟孙,入手要慎重)** 有年頭的,但也有一些使用量的:**
VB聚蝶、Delphi
2. 選擇語言的評(píng)判標(biāo)準(zhǔn)
- 運(yùn)行效率
- 開發(fā)效率
貌似杰妓,運(yùn)行效率和開發(fā)效率是一對(duì)矛盾的值,但隨著各類渲染技術(shù)碘勉、引擎巷挥、優(yōu)化的加深,這兩個(gè)值也開始同步提高验靡。實(shí)際上倍宾,下述的評(píng)判內(nèi)容,基本包含在了開發(fā)效率中胜嗓,只有各種依賴高职、支持良好,才能快速開發(fā)辞州,除此怔锌,還有語言的易用性。 - UI庫支持变过、渲染美化效果程度
- 網(wǎng)絡(luò)庫支持程度(是否支持網(wǎng)絡(luò)埃元,網(wǎng)絡(luò)庫支持協(xié)議(TCP/IP?HTTP? SMTP媚狰?POP3岛杀?RTMP?))
- I/O支持
- 數(shù)據(jù)庫操作支持
- 算法庫支持程度
- 其他第三方庫支持程度崭孤,如JSON类嗤、XML支持衫生,加密支持,壓縮文件支持等等
- 跨平臺(tái)能力(跨Windows土浸、Linux罪针、Macintosh OS X等操作系統(tǒng))
- 新開發(fā)技術(shù)學(xué)習(xí)成本
- 開發(fā)平臺(tái)成本
3. 具體分析
以下將分析各種UI開發(fā)技術(shù)的一些內(nèi)容黄伊。但主體趨勢(shì)無外乎以下方向:
運(yùn)行效率:原生 > 托管平臺(tái) > 富客戶端、Web
開發(fā)效率:原生 < 托管平臺(tái) < 富客戶端墓阀、Web
就學(xué)習(xí)成本來說,很難說出誰高誰低斯撮,但是總體來說扶叉,富客戶端和Web學(xué)習(xí)成本比較低,原生的學(xué)習(xí)成本比較高枣氧,因?yàn)樵乃嫦蜷_發(fā)應(yīng)用場(chǎng)景比較固定溢十,局限性大,所以考慮到技術(shù)人員的發(fā)展达吞,成本算高的张弛。
C++
基于C++語言進(jìn)行桌面應(yīng)用軟件開發(fā)的框架和平臺(tái)較多,包括了Windows平臺(tái)流行的MFC酪劫、支持多平臺(tái)的Qt吞鸭、GTK+等,都提供了GUI交互支持覆糟。
-
運(yùn)行效率
C++開發(fā)的應(yīng)用軟件刻剥,需要針對(duì)運(yùn)行目標(biāo)平臺(tái)進(jìn)行單獨(dú)編譯、生成可執(zhí)行文件搪桂,運(yùn)行效率極高透敌,具有較好的性能盯滚。
-
開發(fā)效率
C++開發(fā)要求開發(fā)人員具有較好的C++基礎(chǔ)和應(yīng)用能力踢械,否則將會(huì)極大的降低開發(fā)效率。C++對(duì)內(nèi)存管理要求較高魄藕,需要耗費(fèi)較多精力處理内列。
-
UI效果
UI效果與具體的GUI交互支持方式有關(guān)。
MFC采用貼圖方式美化外觀背率,且交互界面運(yùn)行效率高话瞧,在Windows平臺(tái)中嫩与,UI渲染有多種先進(jìn)的圖形庫和渲染引擎支持,能夠獲得極佳的UI性能和效果交排。
-
網(wǎng)絡(luò)支持
C++語言對(duì)網(wǎng)絡(luò)的支持較好划滋,具有多種成熟的開源網(wǎng)絡(luò)庫可使用,如重量級(jí)的ACE埃篓,Boost的ASIO处坪、陳碩的Muduo,僅支持Linux的libev架专、主要支持Linux的libevent部脚。
-
I/O支持
C++語言作為編譯型原生運(yùn)行程序開發(fā)語言丧没,本身就具有對(duì)I/O的天然良好支持骂铁,通過I/O流能夠快速完成本地文件操作等等一系列I/O操作拉庵。
-
數(shù)據(jù)庫支持
C++語言對(duì)于數(shù)據(jù)庫支持钞支,主要依賴于數(shù)據(jù)庫驅(qū)動(dòng)程序提供的接口支持程度烁挟,目前對(duì)絕大對(duì)數(shù)主流數(shù)據(jù)庫都有著良好的支持撼嗓。
-
其他第三方庫支持
C++作為目前使用量較大的開發(fā)語言且警,其各個(gè)方面均有較好的支持
-
跨平臺(tái)能力
C++開發(fā)的程序跨平臺(tái)能力較差斑芜,需要針對(duì)目標(biāo)平臺(tái)進(jìn)行單獨(dú)編譯盈包。當(dāng)所使用的框架呢燥、類庫不支持目標(biāo)平臺(tái)時(shí)疮茄,將導(dǎo)致失敗的跨平臺(tái)開發(fā)力试。
MFC目前不支持跨平臺(tái)畸裳,僅支持Windows平臺(tái)怖糊。
Qt和GTK+對(duì)較多平臺(tái)均支持伍伤,包括Windows扰魂、Linux劝评、Mac OS X蒋畜。
-
成本考慮
C++語言開發(fā),一直是成本居然不下愿棋,前期開發(fā)架構(gòu)搭建辛润、業(yè)務(wù)邏輯堆砌成本高砂竖,后期測(cè)試乎澄、維護(hù)置济,每一項(xiàng)環(huán)節(jié)都占據(jù)了較高的成本使用浙于。C++的開發(fā)羞酗、維護(hù)檀轨,都要求參與者有著較高的開發(fā)素養(yǎng)参萄,因此人工成本也是一個(gè)大項(xiàng)讹挎。
基于成本考慮淤袜,C++項(xiàng)目適合于運(yùn)行效率要求高
C#語言
C#語言是Windows中的當(dāng)紅語言铡羡,在Web烦周、系統(tǒng)服務(wù)读慎、桌面應(yīng)用夭委、富客戶端等多有涉及株灸。C#基于.NET Framewrok開發(fā)的桌面應(yīng)用軟件慌烧,也是Win系中的主流方式屹蚊。
此外汹粤,隨著微軟的努力嘱兼,感謝Visual Studio Core和.NET Code遭京,實(shí)現(xiàn)了跨平臺(tái)開發(fā)和運(yùn)行船殉。
-
運(yùn)行效率
C#桌面應(yīng)用基于托管式運(yùn)行斯嚎,效率相比于C++較低糠惫。
-
開發(fā)效率
C#開發(fā)效率較高較快钉疫,入門快固阁、上手快备燃,但后期優(yōu)化困難并齐,需要較為深入的研究撕贞。
-
UI效果
C#的UI效果通過皮膚控制窝剖。由于C#消耗資源較多赐纱,在低配機(jī)器上疙描,UI流暢度較低起胰。
-
網(wǎng)絡(luò)支持
C#網(wǎng)絡(luò)支持良好效五。
-
I/O支持
C#本地化支持良好畏妖,面向?qū)ο蟛僮鞯姆庋b,使得各種I/O操作都很便捷婆廊。
-
數(shù)據(jù)庫支持
C#對(duì)SQL Server數(shù)據(jù)庫支持良好茵典。對(duì)其他數(shù)據(jù)庫统阿,需要特殊的支持砂吞。
-
其他第三方庫支持
C#本身做了較為完整的工具類封裝,不僅在基本的JSON之類的支持良好,在加密呼巷、編碼等方面也有著良好支持。
-
跨平臺(tái)能力
不太好压储,但是微軟正在致力于跨平臺(tái)集惋。但微軟不應(yīng)該如此好心刮刑,他們從來不會(huì)讓客戶和用戶離開win系平臺(tái)的雷绢,這也許只是他們放出的一個(gè)糖衣。
-
成本考慮
Windows平臺(tái)采用C#開發(fā)簡單的桌面應(yīng)用成本較低傻工。大中型鸯匹、復(fù)雜應(yīng)用需要慎重考慮泄伪。
Java
Java是目前服務(wù)器端的主流語言之一染厅。Java語言用于桌面應(yīng)用開發(fā)的產(chǎn)品較多肖粮,但更多的體現(xiàn)在Sun公司涩馆、Oracle公司自主研發(fā)產(chǎn)品行施,如Eclipse。一些對(duì)性能有較高要求的應(yīng)用魂那,并不適合用Java開發(fā)蛾号,而更適合用C/C++。但Java最為突出的有點(diǎn)是Write once涯雅, Run anywhere鲜结,跨平臺(tái)性無與倫比。
-
運(yùn)行效率
基于JVM的運(yùn)行方式活逆,使得Java遜于C++精刷。
-
開發(fā)效率
有著Java基礎(chǔ)的開發(fā)人員琴庵,能夠快速開發(fā)庆寺。
-
UI效果
依賴皮膚效果陵霉⌒Т玻控件豐富度沪猴,需要第三方支持,原生控件種類較少,頗簡陋。
-
網(wǎng)絡(luò)支持
支持良好蚌本,同時(shí)擁有眾多第三方庫支持嵌莉。
-
I/O支持
支持良好可婶。
-
數(shù)據(jù)庫支持
支持良好曙旭。
-
其他第三方庫支持
Java的第三方庫支持眾多蛮位。
-
跨平臺(tái)能力
Java有著良好的跨平臺(tái)能力控轿。
-
成本考慮
Java開發(fā)成本較低,但其UI性能較弱廊鸥,需要考慮后期項(xiàng)目膨脹后的應(yīng)對(duì)辦法。
Objective-C
與C++同宗,但又有著很多不同的一門語言,隨著蘋果系列產(chǎn)品的暢銷诚啃,OC開發(fā)也逐漸主流化和橙。Objective-C由蘋果公司推出俄周,主要面向Mac系列系統(tǒng)使用拴曲,跨平臺(tái)能力較差。
-
運(yùn)行效率
運(yùn)行效率較高删铃,屬于原生編譯運(yùn)行。
-
開發(fā)效率
熟悉OC語言眼刃,能夠快速開發(fā)框舔。
-
UI效果
UI效果借助貼圖,控件樣式較多绢馍。
-
網(wǎng)絡(luò)支持
支持網(wǎng)絡(luò)朱躺,隨著OC火爆源请,很多第三方庫紛紛支持。
-
I/O支持
支持本地化操作。
-
數(shù)據(jù)庫支持
支持Mac上的數(shù)據(jù)庫,如SQLite瓦阐、MySQL等。
-
其他第三方庫支持
OC越來越流行,越來越多的第三方庫出現(xiàn)隔缀,支持越來越好袱吆。
-
跨平臺(tái)能力
不具有跨平臺(tái)能力。
-
成本考慮
僅支持Mac OS X。
富客戶端
富客戶端一度是瀏覽器的霸主夷蚊,但隨著H5的興起,更多更絢爛的效果由H5實(shí)現(xiàn)翘簇,甚至H5頁肩負(fù)起了RIA的任務(wù)撬码,老牌富客戶端開發(fā)技術(shù)主鍵平淡,但不可否認(rèn)的是版保,以Flash為主的富客戶端依然對(duì)Web RIA擁有著不可撼動(dòng)的主流地位呜笑。本文主要討論桌面應(yīng)用,富客戶端中彻犁,很大一部分是可以實(shí)現(xiàn)桌面應(yīng)用開發(fā)叫胁,當(dāng)前最流行的Flex/Flesh,是典型的代表汞幢。富客戶端技術(shù)開發(fā)語言根據(jù)平臺(tái)不同而不同驼鹅,包括了Flash/Flex的ActionScript/OpenLaszlo、JavaFX的Java森篷、SliverLight的C#等等输钩。富客戶端技術(shù)并不是一個(gè)單純技術(shù),而是以其他開發(fā)語言和技術(shù)支撐起來的復(fù)合型開發(fā)技術(shù)仲智。
-
運(yùn)行效率
富客戶端運(yùn)行基于其特定的環(huán)境和運(yùn)行平臺(tái)买乃,如Flash播放平臺(tái)、JVM钓辆、.NET Framework插件等剪验,從而導(dǎo)致了相比于原生編譯程序,其效率較為低下前联,從而不適合進(jìn)行復(fù)雜功能和高強(qiáng)度運(yùn)算處理應(yīng)用的開發(fā)功戚。
隨著技術(shù)不斷的革新,富客戶端在運(yùn)行效率上也有著較大的提升似嗤,但綜合來看效率普遍偏低啸臀,因此注重高效率的程序開發(fā)可以繞過這一塊另擇通路。
-
開發(fā)效率
富客戶端開發(fā)技術(shù)烁落,往往是基于其他技術(shù)而形成的綜合技術(shù)壳咕。
Flash/Flex的ActionScript是一類面型對(duì)象的腳本開發(fā)語言,該語言語法與一般面向?qū)ο箝_發(fā)語言類似顽馋,在語法格式上,其變量聲明格式與傳統(tǒng)的編程語言略有不同(類型后置寫法)幌羞,但一旦熟悉之后寸谜,基本無礙。除此属桦,F(xiàn)lash/Flex的UI界面開發(fā)熊痴,通過特殊的皮膚機(jī)制實(shí)現(xiàn)他爸,需要投入一定的精力研究。
JavaFX目前支持Java語言開發(fā)果善,對(duì)于一般Java開發(fā)者來說诊笤,需要熟悉JavaFX帶來的新內(nèi)容,能夠較快上手巾陕。
SliverLight基于C#語言讨跟,C#入門極易,但優(yōu)化困難鄙煤,所以入門級(jí)開發(fā)較快晾匠,后期優(yōu)化比較扎手。
-
UI效果
富客戶端的UI效果梯刚,一般靠皮膚支撐凉馆。JavaFX在3D圖形支持上稍弱,有待加強(qiáng)亡资。
-
網(wǎng)絡(luò)支持
富客戶端天然具有網(wǎng)絡(luò)支持能力澜共,通常具有較強(qiáng)的多媒體支持能力。Flash/Flex支持更多的多媒體網(wǎng)絡(luò)協(xié)議锥腻,如RTMP流媒體傳輸協(xié)議等嗦董,很多在線直播平臺(tái)均采用該網(wǎng)絡(luò)技術(shù)。
-
I/O支持
富客戶端桌面應(yīng)用開發(fā)中旷太,借助本地化操作支持展懈,能夠較好實(shí)現(xiàn)I/O操作。
-
數(shù)據(jù)庫支持
富客戶端開發(fā)中供璧,不同類型對(duì)數(shù)據(jù)庫連接和操作的支持不一致存崖。ActionScript對(duì)這一類支持較差,并且缺乏第三方庫支持睡毒。JavaFX天然使用Java語言来惧,在各類數(shù)據(jù)庫支持方面較好。SilverLight采用C#語言演顾,對(duì)SQL Server數(shù)據(jù)庫支持良好供搀。
-
其他第三方庫支持
由于Adobe開發(fā)的Flash/Flex ActionScript開發(fā)平臺(tái),尚處于閉源狀態(tài)钠至,因此第三方拓展較少葛虐,但其本身已經(jīng)具有較多的支持,如JSON支持等棉钧。
JavaFX能夠使用Java開發(fā)中的各類第三方庫屿脐,支持絕對(duì)良好。
-
跨平臺(tái)能力
富客戶端都具有較好的跨平臺(tái)能力。
-
成本考慮
富客戶端開發(fā)成本的诵,需要根據(jù)不同類型RIA區(qū)別對(duì)待万栅。
綜合考慮,JavaFX開發(fā)成本較低西疤。Flash/Flex開發(fā)成本稍高烦粒。
Web
Web語言實(shí)現(xiàn)桌面應(yīng)用開發(fā),實(shí)際上和RIA類似代赁,主要的套路是利用瀏覽器引擎完成UI渲染扰她,目前比較主流的是IE瀏覽器引擎和WebKit引擎。隨著H5前端技術(shù)管跺、NODE.JS等的大肆興起义黎,桌面應(yīng)用逐漸冷淡。但基于瀏覽器引擎開發(fā)桌面應(yīng)用的技術(shù)豁跑,卻因此而得到發(fā)展廉涕,如基于node.js的NW.js、基于io.js的Electron等等艇拍,以及國內(nèi)很多公司自主研發(fā)的開發(fā)平臺(tái)狐蜕。
-
運(yùn)行效率
隨著V8引擎的發(fā)布,Node.js借助其實(shí)現(xiàn)了服務(wù)器端JS編程的可能卸夕,作為桌面應(yīng)用层释,其性能也有大幅度提升,可以與其他桌面應(yīng)用開發(fā)技術(shù)相提并論快集。
-
開發(fā)效率
使用前端技術(shù)開發(fā)贡羔,對(duì)于有前端開發(fā)經(jīng)驗(yàn)的人來說,在克服了開發(fā)環(huán)境和運(yùn)行環(huán)境搭建后个初,稍微摸索下開發(fā)技巧乖寒,之后的路將會(huì)比較坦蕩。
-
UI效果
參考H5的效果院溺,不難想象楣嘁,UI效果將會(huì)達(dá)到比較炫酷的級(jí)別。
-
網(wǎng)絡(luò)支持
NW.js使用了WebKit支持UI渲染珍逸,同時(shí)使用node.js完成本地化操作逐虚,網(wǎng)絡(luò)支持通過node.js,支持良好谆膳。
-
I/O支持
本地操作極為良好叭爱,通過JS提供的多種API,能夠輕松完成各種本地操作漱病,因此對(duì)I/O支持良好涤伐。
-
數(shù)據(jù)庫支持
目前馒胆,有很多的JS數(shù)據(jù)庫操作庫,這方面支持較為良好凝果。
-
其他第三方庫支持
隨著WebKit桌面應(yīng)用開發(fā)的高速發(fā)展,同時(shí)以node.js等為主的JS后端編程實(shí)現(xiàn)睦尽,其他支持都已經(jīng)逐步跟進(jìn)器净,達(dá)到較好的支持。
-
跨平臺(tái)能力
不言而喻当凡,擁有良好的跨平臺(tái)能力山害。
-
成本考慮
開發(fā)成本主要在環(huán)境搭建和開發(fā)入門方面,一旦入門后沿量,有著豐富前端開發(fā)經(jīng)驗(yàn)的人員浪慌,能夠快速進(jìn)行開發(fā)。同時(shí)朴则,隨著相應(yīng)技術(shù)的發(fā)展权纤,文檔、資料乌妒、開源代碼等逐漸豐富汹想,開發(fā)成本逐步降低。
維護(hù)成本方面撤蚊,并非涉及到全新的開發(fā)語言古掏,成本因此能夠控制在較低的程度。
Python
一種膠水語言侦啸,目前也支持了UI開發(fā)槽唾。
-
運(yùn)行效率
一般。
-
開發(fā)效率
快光涂。
-
UI效果
局限性較大庞萍,控件庫豐富度較弱。
-
網(wǎng)絡(luò)支持
支持顶捷。
-
I/O支持
支持挂绰。
-
數(shù)據(jù)庫支持
支持。
-
其他支持
支持良好
-
跨平臺(tái)能力
良好服赎。
-
成本考慮
成本較低葵蒂,但不適合大型應(yīng)用開發(fā)。
Ruby
Ruby on Rails是當(dāng)前炒作的比較火爆的一個(gè)概念重虑,在Web開發(fā)中也有著一席之地践付。Ruby用于桌面應(yīng)用開發(fā),基于TK平臺(tái)實(shí)現(xiàn)缺厉。Ruby永高,作為一個(gè)簡單面向?qū)ο蟮哪_本語言隧土,其優(yōu)點(diǎn)是使用簡單,開發(fā)快速命爬。
-
運(yùn)行效率
一般曹傀,腳本語言的效率都不會(huì)太高。
-
開發(fā)效率
快饲宛,Ruby比較簡潔皆愉,開發(fā)速度較快。
-
UI效果
作為腳本語言艇抠,由TK決定幕庐,控件庫豐富度較弱。
-
網(wǎng)絡(luò)支持
支持家淤。
-
I/O支持
基本支持异剥。
-
數(shù)據(jù)庫支持
良好支持。
-
其他支持
良好支持
-
跨平臺(tái)能力
采用虛擬機(jī)運(yùn)行絮重,跨平臺(tái)能力良好冤寿。
-
成本考慮
成本較低,但不適合大型應(yīng)用開發(fā)绿鸣。
Go
Go語言的一些方言疚沐,目前支持UI開發(fā)。但即便是神一樣的方言設(shè)計(jì)者潮模,也有力不從心的時(shí)候亮蛔,也無法與大型公司為靠山的開發(fā)平臺(tái)豐富和穩(wěn)定。但Go語言的開發(fā)速度擎厢,絕不是蓋的究流。
-
運(yùn)行效率
視情況而定,由方言的特性決定动遭。
-
開發(fā)效率
快芬探。
-
UI效果
絕大多數(shù)個(gè)人貢獻(xiàn),所以厘惦,控件庫豐富度較弱偷仿。
-
網(wǎng)絡(luò)支持
視情況而定,由方言的特性決定宵蕉,一般是支持的酝静。
-
I/O支持
視情況而定,由方言的特性決定羡玛,一般是支持的别智。
-
數(shù)據(jù)庫支持
視情況而定,由方言的特性決定稼稿。
-
其他支持
視情況而定薄榛,由方言的特性決定讳窟。
-
跨平臺(tái)能力
視情況而定,由方言的特性決定敞恋。
-
成本考慮
成本較低丽啡,關(guān)鍵是快速開發(fā)效率高。
小結(jié)
- 以C++語言為基礎(chǔ)的桌面應(yīng)用開發(fā)技術(shù)耳舅,具有較高效率碌上,但跨平臺(tái)實(shí)現(xiàn)比較困難,需要具體平臺(tái)庫支撐浦徊,但Qt和GTK+基本上達(dá)到了跨平臺(tái)的能力。
- OC專門針對(duì)Macintosh OS X天梧,雖然具有較高的效率和較強(qiáng)的UI效果盔性,但是跨平臺(tái)能力限制了其廣泛發(fā)展的可能性(除非蘋果稱霸天下……)。
- C#是目前Windows系統(tǒng)上桌面應(yīng)用開發(fā)使用最多的開發(fā)技術(shù)之一(好像把之一去掉呢岗,不過還有MFC鎮(zhèn)壓著冕香,不可造次),C#雖然在效率上低于C++后豫,但是在開發(fā)效率上甩C/C++幾條街啊悉尾。
- Java在UI、用戶交互開發(fā)方面挫酿,一直是不溫不火的狀態(tài)构眯,Swing、AWT已經(jīng)是過去式了早龟,但做一些小工具還是可以考慮的惫霸,畢竟Java語言會(huì)的人多。
- 富客戶端開發(fā)技術(shù)葱弟,在桌面應(yīng)用開發(fā)市場(chǎng)中也占有一席之地壹店,尤其是網(wǎng)絡(luò)多媒體應(yīng)用,我鵝的某寵就是這種模式芝加。Flash/Flex是富客戶端的大哥大硅卢,SliverLight也曾紅火一時(shí)。JavaFX最近新軍崛起藏杖,是否能夠占據(jù)導(dǎo)一份市場(chǎng)将塑,也要拭目以待。
- WebKit為基礎(chǔ)的Web式桌面應(yīng)用開發(fā)制市,以Web引擎作為UI渲染工具抬旺,是一個(gè)高明的設(shè)計(jì)和思路。隨著H5祥楣、Node.js的興起开财,Web式桌面應(yīng)用也在逐漸火爆汉柒,某道翻譯軟件目前應(yīng)該是在借鑒NW.JS的基礎(chǔ)上使用自主研發(fā)的heX完成UI開發(fā)。
- 至于其他的語種责鳍,如Python碾褂、Ruby,腳本開發(fā)語言历葛,效率不高正塌,UI有限,但能夠?qū)崿F(xiàn)快速開發(fā)恤溶,小型軟件方面也有一定優(yōu)勢(shì)乓诽。Go語言作為程序節(jié)的高冷語言,部分方言有對(duì)UI的支持咒程,開發(fā)速度絕對(duì)快鸠天,但是要求對(duì)函數(shù)式編程有一定掌握,稍有些門檻帐姻。
那么該如何選擇
1稠集、 首先判斷項(xiàng)目類型,對(duì)運(yùn)行效率需求如何饥瓷、對(duì)一些特殊的技術(shù)指標(biāo)要求剥纷。如果有著較高的運(yùn)行效率要求,那么選擇范圍也就較低了呢铆,多在原生編譯和高度優(yōu)化的平臺(tái)上選擇晦鞋。如果對(duì)UI靈活性、自主性要求較高刺洒,也要重點(diǎn)考慮原生編譯鳖宾,因?yàn)樵幾g更接近底層,自由度更大逆航。
2鼎文、 開發(fā)速度要求:如果有快速開發(fā)要求,盡量避免原生開發(fā)因俐,一個(gè)是跨平臺(tái)比較麻煩拇惋,另一個(gè)是原生開發(fā),即便是提供了較多的UI支持庫抹剩,也不可能像基于平臺(tái)的技術(shù)有著良好的封裝撑帖。
3、 考慮技術(shù)人員的底蘊(yùn):如果具有特殊的技術(shù)人員澳眷,精通某一方面胡嘿,那么必須要把這個(gè)考慮進(jìn)去,這不但是技術(shù)方面的保證钳踊,也是開發(fā)成本的保證衷敌。
4勿侯、 后期考慮:從長遠(yuǎn)考慮項(xiàng)目的要求,有沒有什么特殊的考慮缴罗,如以后往Web上靠助琐,那么就考慮NW.JS或者Electron等。往流媒體富客戶端面氓,那么要考慮Flex技術(shù)兵钮。等等。
結(jié)尾
支持桌面應(yīng)用軟件開發(fā)的技術(shù)舌界,只要具有相應(yīng)的UI支持基礎(chǔ)就能夠?qū)崿F(xiàn)掘譬,因此相關(guān)技術(shù)并不止上述幾類,但上述幾大類是目前桌面應(yīng)用開發(fā)的主流開發(fā)技術(shù)呻拌,占據(jù)了絕大部分的市場(chǎng)屁药。其他較小眾的桌面開發(fā)技術(shù)由于其小眾化、文檔匱乏柏锄,較難流行。