為什麼 TypeScript 成功了,更先進的 ActionScript 卻失敗了?

如果當年 Adobe 對 Flash 見好就收,把 ActionScript 作為以瀏覽器為目標平台的語言,會取得成功嗎?


2016 年了,還有人在關心 ActionScript,我感到很是欣慰啊。

作為一個老老老老老 Flasher 來說兩句。

題主問得 「如果當年 Adobe 對 Flash 見好就收,把 ActionScript 作為以瀏覽器為目標平台的語言,會取得成功嗎?」 和 @張程易 回答的 「針對題主的第二個問題,我想說,Adobe並沒有能力影響瀏覽器,微軟的VBscript憑藉Windows內嵌的IE6都沒有成功,Adobe有什麼能力能佔領瀏覽器平台呢?」

其實都不對。啊,簡直大錯特錯。

Adobe 當然想到了把 ActionScript 作為以瀏覽器為目標平台的語言,Adobe 也當然有能力影響瀏覽器平台……

君可知瀏覽器御用語言 JavaScript 背後的 ECMAScript 規範,又可曾聽過傳說中的 ECMAScript 4th Edition?

君可知這個規範由 Adobe 與 JavaScript 作者 Brendan Eich 聯手打造,卻最終慘遭遺棄,而其唯一實現,就是 Flash 中 ActionScript 3.0 ?

君可知從 1999 年的 ES3,到 2009 年的 ES5(Harmony),這段長達十年之久的歷史裡,又發生了什麼驚天地泣鬼神的故事?

歡迎來到《走進科學》。

啊不,是《知乎 Wiki》

知乎上關於這個問題的好答案,真的太多了,由衷感謝下面各位。

1. ECMAScript 6 會重蹈 ECMAScript 4 的覆轍嗎? - 尤雨溪的回答

ES4 的故事相當複雜... 我一時八卦心起整理了一下:

2005 年開始弄 ES4 的主要是 Brendan Eich 和開發了 AS3 的 macromedia(後來是收購 macromedia 的 Adobe)……

ES4 的歷史與八卦,聽小右哥 @尤雨溪 給你娓娓道來。下面的參考文獻也滿是乾貨。

2. ECMAScript 6 會重蹈 ECMAScript 4 的覆轍嗎? - 賀師俊的回答

ES4被幹掉我個人覺得很大程度上是「政治」原因而非技術原因。注意本段均為帶有強烈個人觀點的陰謀論敘述……

@賀師俊 賀老之所以為賀老,看的就是賀老犀利的觀點。

3. 未來是 HTML 5 還是 Flash 的時代? - 知乎用戶的回答

1999年開始接觸Flash技術,2000年向Macromedia提交了Flash AS1的Math相關演算法而成為beta tester,2003年是Macromedia Flash的dev volunteer, 2004年成為Macromedia在中國的第一個技術員工,2005年,Adobe併購Macromedia結束,進入Adobe做工程師,2008成為Flash Video與Flash Media Server的大客戶技術經理,2009年成為Flash Platform Evangelist......

來自 Egret Co-founder,Adobe 中國 Flash 平台教主級人物 @馬鑒,3000 贊的大回答,分享他與 Flash 與 AS 的沸騰十五年。

4. 如何看待 HTML5 開源遊戲引擎 Egret,HTML5 遊戲開發的前景如何? - 知乎用戶的回答

Egret 為何用TypeScript?為何不用Dart,AtScript或者其他?

TypeScript(TS)是一個嚴格意義上JavaScript超集......

同樣來自 @馬鑒,由於 Egret 的設計非常非常接近 Flash,而 TS 又非常接近 AS3……裡面有關 ES Feature Set 和 Flash vs Egret 的圖挺不錯的。

5. Flash 動畫是如何興起和衰退的? - 曾嶸的回答

Flash 和Flash MV依然會有市場,它們還會在自己的領域繼續發光,Adobe依然可以開心地賣軟體,Macromedia依然是死不瞑目。

只是——這世界變了。

大概是我在知乎上關注的第一個 Flasher @曾嶸,2013 年還力挺 Flash/AIR 的他,2014 年的答案里已經滿滿都是心酸。

6. ECMAScript - wikipedia

By August 2008, the ECMAScript 4th edition proposal had been scaled back into a project codenamed ECMAScript Harmony.

7. 趣文:編程語言擬人化(第二彈)

「她的父親是有名的設計師,但是在她5歲的時候被捲入戰火身亡。她希望為即將到來的和平時代出一份力,比誰都更早開始學習這門語言,然而在好不容易能說好這門語言的時候,這語言被採用為公用語的提案泡湯了。」

這個世界上純粹的東西不多,技術算一個。

可是就算是技術,也不是那麼純粹的。

不說了,滿滿都是淚。

那年的英語比現在還渣。

那年我還說著 HTML5 臘雞,Flash 牛逼。

那年。


因為Adobe沒有做像Chrome這樣的瀏覽器。


TypeScript逐漸流行並不是主要因為語言設計比大多其他語言都先進,而是就針對JavaScript開發者,就只專註

1. 能用js的地方就能用ts

2. 比js好用

就行了。比TS先進的語言是有好多,但是受眾都不同,用的地方也不同,不太好比較。


很多時候,一個東西走進死胡同和它本身沒有關係。Adobe在這事兒上有不可推卸的責任,而大如谷歌、蘋果只是幫忙推了一把而已。

不過我覺得as並沒有失敗,畢竟adobe在es上也貢獻很多內容。h5這麼多特性也有as一份功勞,時代更替罷了。


在我的職業生涯中,我用過C++,C#和ActionScript寫過很多遊戲。

直到遇到ActionScript,那是我生命中最美好的時光。

我用ActionScript寫過了大量的遊戲,感受著它的優雅。

C++為了解決所有問題,裡面充斥著大量的解決問題的概念,可以說是編程的最大化。

而JavaScript就是編程的最小化,在維護大型項目的時候總有餘力而不足。

我曾經做過一個實驗,分別使用C++,JavaScript和ActionScript寫幾個小遊戲和一個軟3D引擎。

ActionScript實現起來最優美,簡單而又強大,乾淨利落恰到好處,幾乎任何人都可以毫不費力分析閱讀,沒有語法上的負擔。

後來工作的原因,開始使用node.js即JavaScript來寫服務端和各種應用。

現在JavaScript開始流行用ECMAScript6,我才開始去了解ECMAScript的歷史。

一了解才驚訝的發現,原來ActionScript居然就是ECMAScript4的實現!

ES4早在1999年就開始提出了,花了近8年的時間開發,直到2007年實現,最後卻因為Yahoo的Douglas Crockford和微軟的反對被廢棄了。

但是Adobe最終把ES4的特性全部在ActionScript上實現了,所以2007年誕生的ActionScript3其實就是ES4的實現。

後來互聯網上出現的海量基於ActionScript的遊戲和軟體證明了ES4的優秀。

我翻著ES4的一條條特性,原來所有ES4的關鍵特性都是ActionScript好用的原因。

過了十幾年。時代不同,微軟的瀏覽器市場份額節節敗退,Douglas Crockford的Yahoo也成為了一家快要死的公司。兩家公司在互聯網標準上話語權都不再重要了。

打臉時刻來了。

很多ES6的特性其實ES4裡面早就有了。比如類,繼承,塊作用域...又重新撿起來實現一遍,啪啪。

而有些ES6的特性設計的很爛,不如ES4好,可以稱為倒退。

靜態類型檢測在ES4裡面也早就有了。FaceBook為了在在JavaScript上實現這個特性,開發了Flow。如果當初ES4通過了,也不用浪費FaceBook的大量人力去開發維護了。

而TypeScript更加是對當初微軟的反對打臉。裡面使用了大量的ES4特性,啪啪。

其實隨著TypeScript的升級,TypeScript特性比ActionScript更完善更好用了,基本上原來的ActionScript程序員都轉到TypeScript過去了。

相關資料:

《ECMAScript 4會是JavaScript的未來嗎?》

http://www.infoq.com/cn/news/2007/11/ecmascript-4


那為什麼ES4最終胎死腹中而ES5誕生了?

說得好像推行AS是Adobe一個人說了算一樣。

而且我也不覺得AS失敗了,AS隨著宿主的消亡是不可避免的,完成了歷史使命就默默的退出歷史舞台標誌的是標準、規範、世代的進步啊。


喬老爺拍腦門一句話,轉身就走了。成就了現在繁榮的unity3d(之前一直被flash碾壓)和html5市場,這算好事還是壞事呢?


TS借鑒了AS/ES4裡面的語法,我看中TS的地方在於TS設計中的「服務精神」,能夠把各種「奇淫」的JS對象結構類型化,得花費多麼大的腦洞啊! 也許有更簡單直接的方案,比如Flow,但是沒有一流的編輯器支持,要類型有毛用么,而工具支持又是巨硬爸爸所擅長的。

TS對業界的貢獻是,在不推翻JS的基礎上改變這個圈子的現狀,給DOM API、BOM API這些技術發聲的機會,能直接用於生產,編譯出IE6能運行代碼;HTML5/NodeJS的時代海量API,TS可以讓你減少查文檔和調試的時間,就好像練武功的人打通了任督二脈,掌握任何JS框架都會比較快(相對於不OO思維的JSer)。

不過說一千道一萬,題主偽命題,AS火的時候TS還不知道在哪呢,AS至少成功過,產生過生態、產品和就業,TS什麼時候能成為大學課程再說吧(層主大學時候修過flash課程)。


我只想知道,ts啥時候能實現成員方法自動代理?這樣不用每次傳回調函數還要多傳個this或者調一下bind(this),畢竟這樣很麻煩,也不方便取消回調。

另外,能不能不要有成員方法或屬性必須加this.才能訪問的限制?到處都是this.看起來不累么?


首先我們來看問題"為什麼 TypeScript 成功了,更先進的 ActionScript 卻失敗了?"

先問是不是,再問為什麼,根據github上的語言活躍度統計[1],TypeScript名列34位,ActionScript名列36位,可謂半斤八兩,並沒有哪個成功哪個失敗之說,更何況TypeScript今天的活躍度大部分由巨硬爸爸維持,很多新JS項目已經轉向Flow等更友好的類型檢查工具,所以說這個題目的前提並不成立。

再者這兩個語言的應用場景並不一樣,AS的本體Flash已是強弩之末,TS是前端的一門預處理語言,依託強大的JS生態而生,二者並不具有可比性,所以說並不能就此對比兩者語言哪個成功哪個失敗。

針對題主的第二個問題,我想說,Adobe並沒有能力影響瀏覽器,微軟的VBscript憑藉Windows內嵌的IE6都沒有成功,Adobe有什麼能力能佔領瀏覽器平台呢?

最後我們說一門語言是否成功,其實並不只和這門語言的設計有關,君不見Java10年不變之語法對C#照樣是有巨大的優勢,真正決定一門語言是否成功,主要是要看這個語言的生態環境,也就是說要考慮到歷史的進程~

來源

[1].GitHut - Programming Languages and GitHub


成功和先進並沒有必然的關係。


ts是用來生成js的,只是js的超集,它本身不是一門新語音。ts的成功是因為js讓人惱火但又不得不用。

所以這個話題不如改成為什麼js活得越來越好,更先進的as卻死了。


微軟都沒法統一web,adobe更加不可能了


軟體工程中並不是越先進就能贏,穩定性和生態很重要,你看Java語法上那麼挫,不照樣吊打擁有優雅語法的C#,還有,來得早不如來得好(逃


as也沒失敗啊 就是和flash綁定 錯過了es4機會


typescript也沒成功啊 javascript原汁原味 挺好的 你不會用不等於別人不會


不好猜測,就如當年諾基亞見好就收會發生什麼。


謝邀,好問題啊,小弟做了10來年的flasher,本來想學做mv,結果不小心從as1,as2,as3一路跟著Adobe學會了編程,一直很信任Adobe爸爸,爸爸在富應用遊戲視頻等領域都是絕對霸主,我一直覺得這輩子不用碰js臟手了,flashplayer無處不在,從手機到智能電視,以後所有的界面程序都會用as3寫,即使退一萬步flashplayer不行了爸爸自會想辦法編譯到js繼續稱霸,完全沒壓力。可是萬萬沒想到的是,突然有一天。。。爸爸。。腦抽了。。。不顧開發者反對,接連取消了actionscript next計劃,停止了stage3d後續開發,fp技術經理調職了,cto跳槽了,roadmap里只有修bug。所有人手都回去賣軟體了。本來as應該是現在ts的樣子,偏偏被Adobe給自廢了,還好有微軟這家有遠見的公司接過大旗。ts短短一兩年已經比as3多了很多特性了,實現了es6大部分特性,前途大大好,對比as3語言自出世已經10周年沒更新了,沒落是必然的


推薦閱讀:

為什麼inferno.js這麼快?
bootstrap過時了嗎?
tabris.js這個框架使用起來怎樣?

TAG:前端開發 | ActionScript | ECMAScript | ActionScript3 | TypeScript |