欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
為什么會(huì )有這么多種程序設計語(yǔ)言?

傳說(shuō)人類(lèi)建造通天塔觸怒上帝,上帝施法使人類(lèi)語(yǔ)言混亂彼此之間無(wú)法交流。這就是說(shuō)各種各樣的語(yǔ)言其實(shí)就是禍亂之源——只會(huì )導致交流的不便??墒强纯慈缃竦某绦蛟O計語(yǔ)言的數量,你會(huì )懷疑人類(lèi)是否又在造“通天塔”了?真的有這么多語(yǔ)言的必要嗎?我到底要學(xué)習多少種程序設計語(yǔ)言才夠用呢?

根據維基的資料,可以稱(chēng)得上相對“主流”(有人用、有文檔)的程序設計語(yǔ)言至少有 600 種,還有大量的商業(yè)化失敗、實(shí)用性不高、語(yǔ)言小眾(這里的“語(yǔ)言”指的是編碼的語(yǔ)言,一般的程序設計語(yǔ)言都習慣用拉丁字母集合或其超集來(lái)作為源碼的字符集,也有用日文、俄文編程、漢語(yǔ)編程的,比如易語(yǔ)言)就難以統計了(保守估計可以上萬(wàn)種),盡管已經(jīng)有了這么多種程序設計語(yǔ)言,仍然有大量的人投入了大量的時(shí)間來(lái)研發(fā)新的語(yǔ)言,這難道不是重復通天塔的故事嗎?

為了解釋“為什么會(huì )有這么多種程序設計語(yǔ)言”這個(gè)問(wèn)題,想讓我們來(lái)看一份較新的最流行編程語(yǔ)言流行榜:

排行榜上排名前十的依次是: C 、 Java 、 Object-C 、 C++ 、 C# 、 PHP 、 Python 、 JavaScript 、 Perl VB 。下面我會(huì )根據這份排行榜來(lái)回答我們的問(wèn)題。首先闡述一個(gè)基本觀(guān)點(diǎn): 程序設計語(yǔ)言被創(chuàng )造的目的主要有三個(gè)——實(shí)用目的、學(xué)術(shù)目的、商業(yè)及特殊應用需要。 且聽(tīng)一一分解:

一、實(shí)用目的

可以看見(jiàn)在排行榜中, C , Java , C++ 這樣的語(yǔ)言幾乎是年年穩居前五。這些語(yǔ)言的實(shí)用性都是非常高的。讓我們回顧一下 C 語(yǔ)言的歷史 1973 AT&T Ken Thompson 因為研發(fā)和維護操作系統的需要,要求一種高效簡(jiǎn)潔的程序設計語(yǔ)言,于是在 BCPL 語(yǔ)言的基礎上創(chuàng )造了 C 語(yǔ)言。 Java 、 C++ 等語(yǔ)言也都是在有著(zhù)類(lèi)似的高要求的任務(wù)下臨時(shí)創(chuàng )造出來(lái),然后再不斷發(fā)布標準進(jìn)行改進(jìn)的( C 語(yǔ)言是為了操作系統, Java 是為了嵌入式應用和網(wǎng)絡(luò )開(kāi)發(fā)……) 如果現有的輪子不夠好,那么就去自己造一個(gè)輪子 ,也正是因為這個(gè)特殊的原因,所有這些以實(shí)用為目的的語(yǔ)言都很高效,語(yǔ)法構造方法、編程邏輯和配套的編譯技術(shù)都很成功,所以能夠切切實(shí)實(shí)地解決工程上的問(wèn)題。另外,這些實(shí)用目的語(yǔ)言的語(yǔ)法都很自由( Python 因為“ 明確”、“簡(jiǎn)單”的哲學(xué)所以算個(gè)例外),正好符合了不同性格的程序員的需要。另外非常重要的一點(diǎn)是:“ 決定一種程序設計語(yǔ)言是否強大的是這個(gè)語(yǔ)言的庫 (標準程序庫、類(lèi)庫、包、組件、單元、模塊……每種語(yǔ)言都有自己的叫法) 而不是程序設計語(yǔ)言本身 ”;這可能會(huì )讓很多人不高興 :說(shuō)實(shí)話(huà), C 語(yǔ)言在語(yǔ)言的優(yōu)雅性和友好性上(比如 == = )完全和 Ada 、 Pascal 比不了( Ada 是軍方人員設計的, Pascal 是數學(xué)家設計的),但是 C 語(yǔ)言依然非常流行,這是因為你想要寫(xiě)一個(gè)含有系統調用的程序,用 C 語(yǔ)言是最佳選擇, Ada Pascal 這樣的語(yǔ)言想要直接和內核交流是很麻煩的。同理也可以解釋 C++ 、 Java 、 Perl 等語(yǔ)言的流行,你想要寫(xiě)多線(xiàn)程的程序用 C++ 的多線(xiàn)程庫和 Java 的包就行了,你想寫(xiě)正則表達式相關(guān)的程序用 Perl 或者 C++ boost 庫就好了……懂得不要重復造輪子是很重要的,遇到不能解決的問(wèn)題,先去查查資料看有沒(méi)有人已經(jīng)寫(xiě)好了類(lèi)似的程序,直接把他的函數抄過(guò)來(lái)就是了——這恐怕是很多人都會(huì )做的吧?這些實(shí)用性的語(yǔ)言,在長(cháng)期使用的廣泛的使用過(guò)程中積累了大量?jì)?yōu)秀的庫( C++ STL 、 BOOST 和有些編譯器自帶的庫, Object-C 專(zhuān)門(mén)針對 Mac OS X 的庫, Fortran 的便于科學(xué)計算的函數等等),而且還有越來(lái)越多的程序員在不斷增加更好的庫,這些都使這些“語(yǔ)言”越來(lái)越強大。

這些程序設計語(yǔ)言在發(fā)展過(guò)程中既有一些公共的庫(比如文件的 I/O ),也有一些特有的庫(比如線(xiàn)程庫、 RE 庫),這些特有的庫往往是某一語(yǔ)言的最大優(yōu)勢,可以說(shuō)正是這些各自獨立的庫把不同的語(yǔ)言區別開(kāi)來(lái),長(cháng)此以往,解決某些特定問(wèn)題時(shí)程序員就傾向使用某一特定語(yǔ)言。這并不是說(shuō)這些特有的庫無(wú)法移植到其它的語(yǔ)言上,只是由于代碼量巨大,移植是在是個(gè)不小的工程(況且,在某種語(yǔ)言中表述很方便的語(yǔ)言在另一種中就會(huì )難以表示,比如 C 語(yǔ)言有很多語(yǔ)言都沒(méi)有的顯示指針,在 Lazarus 項目中,程序員開(kāi)發(fā)了一個(gè)程序用以把 C 頭文件自動(dòng)轉換成 Pascal 單元,即使這樣,實(shí)現代碼的量依舊很大,這種源到源的語(yǔ)言翻譯的介紹可以參見(jiàn)龍書(shū)的引論部分,不學(xué)編譯原理的請略過(guò))。因為有如此多的專(zhuān)用庫,這些實(shí)用目的語(yǔ)言越來(lái)越多也就不稀奇了。

二、學(xué)術(shù)目的

不管什么程序設計語(yǔ)言,在本質(zhì)上都不過(guò)是機器級別的 0 1 。所謂的高級語(yǔ)言不過(guò)是機器眼中的 胡言亂語(yǔ)(這也正是編譯技術(shù)存在的價(jià)值)。

然而,人不是機器,也不可能也沒(méi)必要成為機器。創(chuàng )造程序設計語(yǔ)言的目的是為程序員服務(wù)的,應該說(shuō), 一個(gè)程序員所用的語(yǔ)言很大程度上決定了他的思維方式——程序設計語(yǔ)言本身就是一種嚴謹的數學(xué)模型、一種高效的思維方式 。 為了說(shuō)明這個(gè)道理我以一個(gè)物理題為例來(lái)解釋 :一輛汽車(chē)做勻速直線(xiàn)運動(dòng),以 2m/s 的速度經(jīng)過(guò)了 6m ,問(wèn)汽車(chē)用了多少時(shí)間? 顯然 t=s/v=6/2=3(s) ,這也可以列方程來(lái)解決:設運動(dòng)用時(shí) t s ,則 tv=s ,即 2t=6 ,解得 t=3 ,這好像多此一舉。 如果把問(wèn)題稍微“復雜”一下:一輛汽車(chē)以 1m/s 的初速度做加速為 2m/s 2 的勻加速直線(xiàn)運動(dòng) , 經(jīng)過(guò)了 6m ,問(wèn)汽車(chē)用時(shí)多少時(shí)間? 根據運動(dòng)學(xué)公式列方程 V 0* t +1/2*a*t 2 =s ,即 1*t+0.5*2*t 2 =6 ,解得 t=2 ,也就是要用 2s 。 又或者可以這樣做:由速度與時(shí)間的關(guān)系可以得到 v(t)=v 0 +a*t,而

解這個(gè)等式 同樣也可以求出 t 。這個(gè)時(shí)候使用方程就很自然了,用定積分卻顯得多余。從中我們知道什么?人的思維能力是有限的,面對復雜的新問(wèn)題,要么用就用原來(lái)老方法麻煩地進(jìn)行計算,要么提出新的高效的模型來(lái)解決問(wèn)題。不管是算術(shù)、方程還是微積分、傅立葉變換或是其它高級的數學(xué)方法、模型都只是一個(gè) 簡(jiǎn)化問(wèn)題的抽象層 (數學(xué)家看到了我說(shuō)這句話(huà)恐怕會(huì )很生氣的,但這就是事實(shí)),作為類(lèi)比,程序設計語(yǔ)言就好比這里的數學(xué)模型,越是復雜的問(wèn)題、越是大的規模(指問(wèn)題規模),才越能體現出高級語(yǔ)言的價(jià)值(有人用過(guò)幾十多種語(yǔ)言寫(xiě)” hello world” ,這有什么意義呢?我用機器語(yǔ)言都能寫(xiě) hello world )。知道了語(yǔ)言模型對于思維方式的影響,我們就能解釋這么多語(yǔ)言的學(xué)術(shù)上(或者說(shuō)是研究上)的目的了:機器語(yǔ)言 / 匯編語(yǔ)言意味著(zhù)程序員專(zhuān)注的是寄存器、內存地址、狀態(tài)、位的打開(kāi)或關(guān)閉,因此思維重在每一條實(shí)際的指令; C 、 Pascal 這樣的命令式語(yǔ)言注重每一個(gè)“計算過(guò)程”,因此思維重在將計算方法、算法、數學(xué)模型表達出來(lái);而 Java 、 C++ 這樣的面向對象的程序設計語(yǔ)言,試圖用對象、類(lèi)、屬性、方法這些概念來(lái)統一的描述算法和數據結構, OO 語(yǔ)言的思維因此能夠重在算法和數據;還有像 Lisp 、 Haskell 、 Erlang 、 Prolog 這樣的函數式、邏輯式語(yǔ)言,強調的是數學(xué)的推演、函數的運算、邏輯的證明,我認為它們才是最接近人的思維的語(yǔ)言;而像 SQL 這樣的語(yǔ)言,強調是“高產(chǎn)出”,它們是對常用的指令進(jìn)行了簡(jiǎn)化、“宏化” Macronize, 本人自己造的一個(gè)詞),它們的思維是“要做什么”而不是“怎么做”;最后,是像 HTML 這類(lèi) Markup 語(yǔ)言(有人說(shuō) HTML 不是程序設計語(yǔ)言……)個(gè)人認為是一種 glue (膠水語(yǔ)言,最有名的 glue 算是 Lua 了),它對文本(比如網(wǎng)頁(yè))的格式進(jìn)行描述,同時(shí)又把 JavaScript 、 Applet 等等擴展“連接”在一起,它們的思維是“組合”,是怎樣才能協(xié)調各個(gè)組件、把組件的功能發(fā)揮到極致(說(shuō)起排版不得不提提 TeX 了,它和 HTML 的思維類(lèi)似,各種開(kāi)發(fā)好的宏集就是它的“組件”)。最后我還想再談一談“學(xué)術(shù)風(fēng)味”很濃的函數式語(yǔ)言,函數式語(yǔ)言歷史悠久,但多年以來(lái)一直在學(xué)術(shù)界活躍,少有能夠成功商業(yè)化的,多年來(lái)一直處于不溫不火的的狀態(tài)。但隨著(zhù)今年來(lái)編譯技術(shù)的發(fā)展,函數式語(yǔ)言的執行效率已經(jīng)很高了,加上大數據時(shí)代對于大量數據處理的需求、機器深度學(xué)習的成熟、現代架構計算機的發(fā)展,僅僅依靠程序執行的單線(xiàn)程性能提升已經(jīng)不能夠滿(mǎn)足實(shí)際需求了,只有并發(fā)和并發(fā)才能滿(mǎn)足這樣的高負荷計算要求 ,純函數語(yǔ)言處理起多線(xiàn)程來(lái)十分方便,能夠“榨干”處理器的運算潛力,這也是近年來(lái) Erlang 之類(lèi)的語(yǔ)言大放異彩的重要原因。在現代計算機結構和工藝發(fā)展難度大的情況下,這些函數式語(yǔ)言可能會(huì )成為推動(dòng)計算力的重要動(dòng)力,這一點(diǎn)可以參見(jiàn)本人的論文《 AACOS: 基于編譯器和操作系統內核的算法設計與實(shí)現》(由于版權的問(wèn)題,我暫時(shí)不能把論文貼出來(lái) :-) )。

三、商業(yè)及特殊應用需要

(以下言論僅僅是本人個(gè)人觀(guān)點(diǎn),沒(méi)有任何指責的意思)

開(kāi)發(fā)一種編程語(yǔ)言是可以賺錢(qián)的,你信嗎?

實(shí)際上開(kāi)發(fā)一種新的語(yǔ)言意味著(zhù)建立自己的“統一標準” (說(shuō)起標準就不得不談高通了,高通從“標準”上撈了多少銀子?), 一方面可以方便維護自己的產(chǎn)品,另一方面可以借助市場(chǎng)地位強迫程序員學(xué)習某種語(yǔ)言進(jìn)而達到自己(至少在某一領(lǐng)域)的霸主地位 。為什么這么多年以來(lái)微軟對 BASIC 情有獨鐘?在 DOS 時(shí)代, QBASIC—— 一種 BASIC 的變種,是每臺 PC 上必裝應用,也是當時(shí)很多人必學(xué)的一種語(yǔ)言, QBASIC 無(wú)論是從程序執行效率還是語(yǔ)言的思維性上都不好,但是因為是預裝的,本著(zhù)“不夠好但夠用”的原則,許多用戶(hù)居然湊合下來(lái)了(慚愧本人就是從 QBASIC 開(kāi)始接觸編程的 !這恐怕和 IE 用戶(hù)如此眾多的原因是異曲同工的吧?就這樣 QBASIC 居然一時(shí)成為了最受歡迎的入門(mén)編程語(yǔ)言工具。到后來(lái) ,微軟推出 Visual Basic 實(shí)際上是為了和 Borland (現已被收購)的 Delphi 競爭入門(mén)級編程工具市場(chǎng)(在相當長(cháng)的一段時(shí)間內 VB 都不是 Delphi 的對手,可以參見(jiàn)本人的另一片隨筆《 Borland Microsoft 的對話(huà)》,這直接導致了 C# 的誕生—— C#—— 一種 C++ 、 Java 、 Object Pascal 雜交的到的混血兒),憑借自己在 BASIC 用戶(hù)上的積累,在 RAD 領(lǐng)域混得不錯了,微軟又趁熱打鐵的推出了 VBS/VBE 、 VBA 等等腳本語(yǔ)言,目的就是拉攏自己的 VB 用戶(hù),使這種糟糕的語(yǔ)言能夠勉勉強強適應系統 GUI 編程、辦公套件編程、數據庫編程,好了現在形成了一個(gè)有機的整體。一個(gè)程序員要么學(xué)多種語(yǔ)言來(lái)完成不同的任務(wù),要么學(xué)一種不夠好但夠用的語(yǔ)言——然后 ,一招鮮,吃遍天……學(xué)習一種語(yǔ)言的成本是很高的(要時(shí)間和電費),所以有很多程序員會(huì )選擇微軟指定的這一標準。還有近幾年大紅的 Object-C 、 Swift 、 Go ,雖然名義上是開(kāi)源的,但是誰(shuí)知道他們的真正目的?除此之外,還有很多 DSL Domain-Specific Language ,專(zhuān)業(yè)領(lǐng)域語(yǔ)言),比如 sed awk 是為了處理文本, PHP 是為了處理 Web 開(kāi)發(fā)、 Emacs Lisp Vim 腳本是為了擴展編輯器功能, PostScript 是為了排版, batch 和各種 shell script 是為了 shell 編程等等。這里介紹一個(gè)典型: Adobe ActionScript ,它的作用就是為了支持 Adobe 自己的 Flash ,主要用于 Flash 動(dòng)畫(huà)和應用程序,不論 ActionScript 語(yǔ)言自身發(fā)展的多好不過(guò)是一個(gè)擴展罷了。

好了,已經(jīng)介紹完了實(shí)用目的、學(xué)術(shù)目的、商業(yè)及特殊需要,相信各位對“為什么會(huì )有這么多種程序設計語(yǔ)言”這個(gè)問(wèn)題有了更深刻的理解,也可能有了更多的疑惑。如果你有任何疑惑或者愿意和我交流,歡迎留言。對了,除了我說(shuō)的三個(gè)目的之外還有沒(méi)有別的創(chuàng )造新語(yǔ)言的原因?有,我自己設計了一種名為 Grove 的語(yǔ)言,用“樹(shù)”來(lái)完成過(guò)程編程和 lambda 表達式,改天把解釋器的源碼發(fā)出來(lái)交流一下。我的目的呢? Just for fun…… 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【C 語(yǔ)言經(jīng)典書(shū)籍】
子沐教你玩轉Python基礎之走進(jìn)Python
C 學(xué)習指南
C語(yǔ)言入門(mén) 進(jìn)階,有這幾本就夠了
C系列1-1:初探C
c++ 解釋
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久