国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
上帝的玩偶:haXe語言

在動畫片《我叫MT》中,有個“五火球神教”,五火球神教的口號是“征服世界”。在小說《風(fēng)姿物語》中瘋狂的白家的某代家主白拉登,他手中的扇子上寫著“世界征服”四個大字。

 

 

瘋狂!只能用瘋狂來形容。少年們,下面請看一群瘋狂的黑客為我們提供的程序語言“征服世界”的解決方案吧!

這里的黑客指的是真正的黑客,是程序世界里勇于嘗試和探險(xiǎn)的人,不是那些Cracker們。

這是一個激動人心的旅程,其起點(diǎn)來自某個不為人知的角落。

2005年之前,小小的Flash開源社區(qū)中流傳著MTASC的傳說,MTASC的全稱為 Motion-Twin ActionScript 2 Compiler,顧名思義,它是一個ActionScript 2語言的編譯器(當(dāng)時的Flash官方腳本語言),MTASC是用OCaml語言編寫的,OCaml語言是一種主流的函數(shù)式編程語言,正如《計(jì)算機(jī)程序的構(gòu)造和解釋》一書使用Scheme所描述,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》這兩本類型系統(tǒng)的圣經(jīng)用的是OCaml描述。OCaml是玩類型系統(tǒng)的黑客們的御用語言。

.Net社區(qū)所熟知的F#也是基于OCaml的,通俗點(diǎn)講,F#OCaml的親兒子,OCamlF#的粑粑。

玩函數(shù)式語言的家伙們通常身上都有黑客氣質(zhì),因此,當(dāng)ActionScript 2 改頭換面為ActionScript 3后,開發(fā)MTASC的家伙們做出了一個大膽的決定:

“少年不哭,

  站起來擼;

  不做備胎,

  征服世界!”

 

于是,一門跨平臺跨語言的神上神語言橫空出世——haXe!而隨著移動時代和html5時代的到來,haXe的解決方案竟然是這樣的優(yōu)美和令人贊嘆。

與我們知道的語言不同,haXe是一門“Universal Language”,我覺得翻譯成“上帝語言”比較準(zhǔn)確。haXe是一門超越語言的語言,使用haXe寫的程序,可以編譯成不同的其它語言源碼,再進(jìn)行編譯。如,haXe -> C++,haXe -> JS ,haXe -> as3/swf,haXe -> php。同時,haXe社區(qū)又為不同的平臺提供了統(tǒng)一的API抽象,形成了跨平臺跨語言的解決方案。

haXe開發(fā)環(huán)境的安裝見《擁抱haXejavascript 也玩mvc》一文,本文詳細(xì)談?wù)勎覍?font face="Times New Roman">haXe的理解。

很多程序員言不離OO,好像OO便是很高級的玩意。而在高聳如云的云端,住著一些仙人,口中沒有OO,只有類型。我看不懂《Types and Programming Languages》,所以,下面對類型系統(tǒng)的說法只是我的胡亂所想,有可能謬誤百出。

.Net文檔中,我們經(jīng)常看到一個詞:Type,對,這就是類型。而對象,則是Object。類型這個詞,是高于對象的。C中的int是一種類型,函數(shù)是一種類型,C#中的Object是一種類型,每一個編程語言都提供了一種類型系統(tǒng)。類型的水,比OO的水深的多。而haXe,就是一套類型翻譯系統(tǒng),將由haXe類型系統(tǒng)所描述的代碼,翻譯成目標(biāo)語言的類型系統(tǒng),它玩的是類型。

為了跨語言,haXe只提供了簡單的基本類型,如Int,FloatBool,Void等,在基本類型之外,haXe幾乎提供了一門現(xiàn)代語言的所有工具:靜態(tài)類型、動態(tài)類型、命名空間、泛型、函數(shù)對象、迭代器、內(nèi)聯(lián)、繼承、多態(tài)、getter,setter,接口,mixin,typedef,標(biāo)準(zhǔn)庫……。它使用某種高玩?zhèn)儾拍芾斫獾募夹g(shù)確保這個類型系統(tǒng)到目標(biāo)類型系統(tǒng)間正確的轉(zhuǎn)換(不必?fù)?dān)心它會發(fā)生錯誤,它的正確性應(yīng)該是得到證明過的,是證明不是證實(shí)啊親),如此一來,使用haXe就具有兩個好處:

(1)使用haXe寫的代碼,能正確的轉(zhuǎn)換到不同的目標(biāo)語言,這樣,最大程度的達(dá)到代碼級別的共享。

你可能覺得,這不是帶著鐐銬跳舞嗎?是的,在以前是,但是,現(xiàn)在不是了,現(xiàn)在的平臺越來越多元化了。用js寫前臺的,用js寫后臺的,用php寫后臺的,用C#寫應(yīng)用的,用C#寫后臺的,用C++寫應(yīng)用的,用C++寫后臺的,用Java寫應(yīng)用的,用Java寫后臺的……如果一個功能,用一門語言寫好了之后,它可以翻譯成各種不同的語言,還是很有價(jià)值的。雖然C很萬能,但也沒辦法在前臺JS中用啊,因此,haXe的這種解決方案是一種很有特色很有針對性的解決方案。比如,我有一個東西,既想通過html5發(fā)布,又想通過Flash發(fā)布,還想發(fā)布成iOS本地應(yīng)用,那么,有比haXe更好的解決方案嗎?沒有。用haXe就很簡單了,寫一份代碼,編譯成js的,在html5中用,編譯成flash的在Flash中用,編譯成C++的在iOS中用。再比如,張三的公司要推出一款Web產(chǎn)品,既有PHP版又有.Net版(比如,Discuz這種),用haXe開發(fā)可以只維護(hù)一份代碼。

你可能還有另一個疑問:不同平臺間的差異十分大,就算我可以不用Byte,但那些底層API都不一樣啊。沒關(guān)系,haXe社區(qū)提供了NME,對不同平臺的基本API提供了抽象,還是一份代碼,到處編譯。實(shí)在不行了,你還可以通過條件編譯和Magic代碼來直接調(diào)用外部API。

(2)對于某些弱類型系統(tǒng),比如js,使用haXe可以帶來生產(chǎn)力的極大提高!強(qiáng)大的類型系統(tǒng)啊,親!大部分錯誤編譯器都幫你檢查出來了,親!有命名空間啊,親!有泛型啊親!接口啊,繼承啊,多態(tài)啊,getter,setter,static等都有啊親!注釋啊,還有那些你用不上的類都不會被編譯進(jìn)js中的啊,親!還有個小型的標(biāo)準(zhǔn)庫啊,親!

下面談?wù)勈褂?font face="Times New Roman">haXe的三個主要的場景。

(1)Web APP

隨著Html5時代的到來,Web APP會越來越多。以往的Web主要是基于文檔的頁面,也就是說,一頁Web頁面,大部分是htmlcssJS只是腳本,代碼量并不多。而Web APP改變了這一狀況,Web APP中,可能htmlcss代碼量會比較少,JS代碼會比較多。

以我現(xiàn)在手中的Web APP為例,截至目前為止,只有150html代碼,50css代碼,而JS代碼有5000行。JS代碼中,大部分是處理業(yè)務(wù)邏輯,只有一小部分是處理dom。如果使用JS開發(fā),要規(guī)劃好類,要做好類與類的繼承關(guān)系還并不是一件簡單的事情,又由于不是強(qiáng)類型,代碼一多,很難維護(hù)。

而我一開始就選用了haXe,就沒有這些問題了。把每一個Dom節(jié)點(diǎn)當(dāng)作一個控件,style當(dāng)作控件的顯示屬性(haXe中,css直接被typedefHtmlDomstyle對象的屬性了),然后,監(jiān)聽各種事件,更新控件的屬性即可,就像寫Winform程序一樣。由于haXe有強(qiáng)大的類型系統(tǒng),規(guī)劃好類,一切很順利的搞定,用的很爽,像寫C#程序一樣。

看看下面的代碼組織,你能想到這是一個js web 應(yīng)用嗎:

好處一:使用命名空間、類來組織代碼,代碼結(jié)構(gòu)清晰,容易維護(hù)。最終,haXe編譯器會將使用到的類編譯成一個獨(dú)立的js文件,剔除了用不上的類。發(fā)布也很簡單;

好處二:由于是強(qiáng)類型,即使我用的是開源IDE,自動完成系統(tǒng)也很完善,打個點(diǎn)就知道類型有哪些成員和操作了;

好處三:使用熟悉的OO開發(fā)方式來開發(fā),不用去折騰js那一套類型系統(tǒng)來模擬OO、命名空間等機(jī)制;通過mixin,甚至連.Net的擴(kuò)展方法也可以實(shí)現(xiàn);

好處四:haXe編譯器保證了類型的正確處理,將很多js運(yùn)行期可能出現(xiàn)的錯誤在編譯時就發(fā)現(xiàn)了,直接定位到代碼的行處,提前解決問題。

這個項(xiàng)目在進(jìn)行第三期了,預(yù)期最終js代碼量會達(dá)到10000行,如果我直接使用js開發(fā),恐怕是個災(zāi)難。

我一直宣稱JSHtml5的最大軟肋,就在于Web APP一旦復(fù)雜起來,JS的缺陷就會開始暴露。你能想象到擁有10000個類的JS代碼是什么樣子嗎(如果要在頁面實(shí)現(xiàn)OfficeCAD,Matlab這樣檔次的應(yīng)用,怎么說也得幾千個類吧)?而對于這種情況,haXe提供了成熟的解決方案。當(dāng)然,這個解決方案是誤打誤撞的,少年不哭,站起來擼,Flash開源社區(qū)飛出來一根屌絲,在Html5的土壤中發(fā)了芽。

(2)移動APP

在移動開發(fā)領(lǐng)域,現(xiàn)在是蘋果,Android在主導(dǎo),還有個老去的黑莓,還有未長大的WP,如何只用一份代碼,就開發(fā)出上述平臺通用的應(yīng)用呢?haXe同樣提供了解決方案,就是haXe+nme,詳見網(wǎng)站 http://www.haxenme.org/

WP就不談了,市場占有率太低,nme還沒考慮它。

你可以將NME看作對平臺UI和基本OS操作、基本Web操作的抽象,來看看NME的介紹:

NME targets iOS, Android, webOS, BlackBerry, Windows, Mac, Linux and Flash Player using your same code.

它的野心不止是移動平臺,而是所有的主流平臺!

是的,我們要征服世界,盡管我們只是幾個孤獨(dú)的黑客!

這里只提移動APP是因?yàn)樗膬r(jià)值主要體現(xiàn)在移動平臺上,因?yàn)樵谧烂嫫脚_上,有更NB的解決方案,比如.Nethaxe+nme沒什么競爭力。

它可以編譯成Native APP(這利用的是haXe->C++特性)在桌面或移動平臺運(yùn)行:

Harness native features and performance without writing C++ or Objective-C.

這一點(diǎn)挺有競爭力的。目前雖然Flash也能做到在部分平臺編譯為Natice APP,但是ActionScript3的性能比不上C++。同時,Flash的移動應(yīng)用的尺寸比較大,也是一個缺陷。

它也可以編譯成Flash程序在瀏覽器或者移動平臺運(yùn)行:

Compile for Adobe AIR or Adobe Flash Player using the same codebase.

這一點(diǎn)唯一的實(shí)用價(jià)值是編譯成Flash程序,可以Web上瀏覽。編譯為Flash 移動應(yīng)用還不如直接編譯成C++移動應(yīng)用,尺寸更小,速度更快。

它也可以編譯成Html5應(yīng)用在瀏覽器上運(yùn)行:

Designed to work with Jeash for rich HTML5 applications in your web browser.

Jeash是一款html5平臺實(shí)現(xiàn)的Flash API,而NME實(shí)現(xiàn)的也是FlashAPI,所以這一來,就有點(diǎn)意義了。

這里有haxe+nme的案例,全部是游戲:

http://www.haxenme.org/showcase/

這是一個巧妙的跨平臺解決方案。當(dāng)然,這個解決方案依然是誤打誤撞的,無論是haXe還是nme,都比iphone年齡大。少年不哭,站起來擼,Flash開源社區(qū)飛出來一根屌絲,在移動應(yīng)用的土壤中發(fā)了芽。

(3)Flash APP

haXe的前身MTASC的唯一用途就是開發(fā)Flash應(yīng)用,而進(jìn)入haXe時代后,Flash APP反而是最不值得關(guān)注的一個領(lǐng)域了。haXe開發(fā)相比as3開發(fā)優(yōu)勢不多,一個優(yōu)勢是haXe提供了一些Flash未公開的API操作,可以提高性能;另一個優(yōu)勢就是haXe編譯速度非??臁_@兩個優(yōu)勢都不是決定性優(yōu)勢,我覺得沒多大發(fā)展前途,haXe的主要前途應(yīng)該是html5領(lǐng)域和移動應(yīng)用領(lǐng)域。

而未來,不是Web APP壓倒移動APP,就是移動APP壓倒Web APP,無論哪一個取勝,都沒有關(guān)系的。有了haXe,你就是上帝。

對性能特別敏感的應(yīng)用,haXe還搞不定,或者,你得hack一下haXe。haXe的核心代碼就那么幾個文件,幾千行。

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
html5 canvas 版 hello world! 暨h(yuǎn)aXe簡介
10種能夠編譯成 JavaScript 的腳本語言
10款讓你震撼的圖片展示js代碼(媲美flash效果)
Haxe:號稱比Java還要跨平臺的語言
js基礎(chǔ)語法
撼動IT界的10大編程語言
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服