<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 第五章-編程語言 如果讀到這兒還不知道編程語言是啥的,請回頭閱讀第一章,下邊的介紹僅僅只是蜻蜓點水式的,想詳細了解的請自行Google或者Wikipedia,每種語言都有其優缺點和適用領域,不可一概而論。 ### C 在第四章中已經初步提及了C語言的產生歷史。C語言是一種通用的、過程式的編程語言,廣泛用于系統與應用軟件的開發。具有高效、靈活、功能豐富、表達力強和較高的移植性等特點,正是由于這些特點,在嵌入式領域也得到了最為廣泛的應用。 C語言是由UNIX的研制者Dennis Ritchie于1970年由Ken Thompson所研制出的B語言的基礎上發展和完善起來的。目前,C語言編譯器普遍存在于各種不同的操作系統中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C語言的設計影響了許多后來的編程語言,例如C++, Java, Golang和C#等。 在發展的過程中,出現了許多略有差別的C語言版本。1989年,美國國家標準研究所(ANSI)為C語言制定了一套ANSI標準,就是所謂的C89。經過10年的發展,在C89的基礎上又頒布了C99標準。大約又過了十年,2011年12月,ISO 正式公布C語言新的國際標準草案:ISO/IEC 9899:2011。目前大多數編譯器完全支持C99,也可以指定為C89進行編譯。 ### C++ C++和C的關系非比尋常。1979年,當Bjarne Stroustrup在新澤西州的Murray Hill實驗室工作時,發明了C++。Stroustrup最初把這種新語言稱為「帶類的C」,1983年,改名為C++。C++通過增加面向對象的特性擴充了C。因為C++產生在C的基礎之上,因此它包括了C所有的特征、屬性和優點。在這個意義上,你可以認為C++是C語言的進化,這個進化的原因是復雜性(complexity)。一旦一個程序的代碼超過25,000~100,000行,就很難從總體上把握它的復雜性了。C++突破了這個限制,幫助程序員理解并且管理更大的程序。 當然今天的C++已經不只是C的進化那么簡單,它還包含了其它很多很多的新內容,C++對于C的進化著重體現在規模上,幾乎C++的所有新特性,都是為大規模編程服務的。如果說C語言編程是單兵小組作戰的話,C++編程就是集團軍運動。它是如此的復雜以至于你要花上幾倍于學習C的時間來學習他。但由于它和C的歷史淵源,所有支持C++的編譯器都能支持C,因此他倆也就常被合稱為C/C++語言(大部分的C代碼可以很輕易的在C++中正確編譯,但仍有少數差異,導致某些有效的C代碼在C++中失效,或者在C++中有不同的行為)。 標準化歷經`C++98->C++03->C++TR1->C++11->C++14` ### C/C++和其它語言的關系 Java 只要用一句話就可以概括,它是一種簡化了的跨平臺的C++語言(因此也被稱為C++--)。掌握了C++的人,學習Java幾乎是輕而易舉。Java舍棄了C++語言中容易引起錯誤的指針,改以引用取代,同時移除原C++與原來運算符重載,也移除多重繼承特性,改用接口取代,增加垃圾回收器功能。不同于一般的編譯語言和解釋語言,Java首先將源代碼編譯成字節碼(bytecode),然后依賴各種不同平臺上的虛擬機來解釋執行字節碼,從而實現了「一次編譯、到處執行」的跨平臺特性。在早期JVM中,這在一定程度上降低了Java程序的運行效率。但在J2SE1.4.2發布后,Java的運行速度有了大幅提升(O(∩_∩)O~這當然也是相對的啦)。 Perl, Python, Golang, C# 還有其他諸如此類的語言,或者與C處于同一檔次,或者與C++處于一個水平,學過C/C++之后,再去學習他們是很容易的事。其實在C之后很多語言都可以稱之為C系語言。 LISP, Scheme是和C的思維方式完全不同的一類,被稱為函數式編程語言,在人工智能等領域有奇妙的應用,有興趣的朋友可以去領略。 ### 為什么要學習C/C++ 考試的人不用討論這個問題,他們沒有選擇。如果我們有選擇,為什么我們學習C語言而不是別的。首先因為C本身是非常優秀的,它是世界上最偉大的編程語言之一。許多人認為C語言的產生標志著現代計算機語言時代的開始,它成功地綜合處理了長期困擾早期語言的矛盾屬性。C語言是功能強大、高效的結構化語言,簡單易學,而且它還包括一個無形的方面——它是程序員自己的語言。它的設計、實現、開發由真正的從事編程工作的程序員來完成,反映了現實編程工作的方法。它的特性經由實際運用該語言的人們不斷去提煉、測試、思考、再思考,使得C語言成為程序員們喜歡使用的語言。 在編程規模越來越大的今天,用C往往會遭遇協作型的問題,而C++在保持了C的高效的同時,實現了大規模協作的可能,因而成為了真正工業化的語言。C/C++的優秀,使得它是主流的,在20世紀70年代末和80年代初,C成為了主流的計算機編程語言,至今仍被廣泛使用。今天幾乎所有的操作系統、大部分的的應用軟件,90%以上的大型游戲都是用C/C++編寫的。在對運行速度和資源占用有嚴格要求的領域,比如游戲、即時控制、嵌入式系統,基本都是C語言內嵌匯編語言的天下。今天只有一種語言的性能比C強,那就是匯編,優化過的C程序的速度大約是匯編的95%-98%。但匯編基本不是常人用的,所以實際上C就是最快的語言。 主流的就意味著資料豐富。不論是編程時所需要的文檔,還是學習的示例代碼,甚至是平臺提供的接口和庫,C/C++語言版本都是最豐富的。任何一家硬件軟件公司,當他開發一款能夠編程的設備或是軟件,必然會提供C/C++語言的接口函數,其他的語言,就不一定有這樣的好處了。不論是計算機圖形學、加密解密還是計算機編程的其他領域,C/C++簡直就是編程界的普通話。根據 International Data Corporation 的統計,C/C++ 是全球開發者使用最多的編程語言。如果確實要投身編程界,不懂C/C++的話,根本就是Mission Impossible。 如果你還不明白,我只需舉一個小例子。假設你現在有機會去學習一門外語,投入時間差不多,你會選擇學習英語呢,還是斯瓦希里語呢?(斯瓦希里語流行于非洲東部,為肯尼亞坦桑尼亞等國的官方語種)。當然,并不是說其他語言不值得學習,存在即是合理,今天存在的各種語言,當然都有它存在的價值,多學一點沒有壞處。沒有人禁止你在學會英語的基礎上再學習法語日語等等。況且為了找工作等現實原因,學習其他語言也是非常正常和必要的。無論過去、現在還是將來手,天底下不存在哪一門語言非學不可才能成為高手,思想最重要,「不會XXX語言不算真正的高手」之類的言論實在無聊之至。學C/C++,主要還是通過他學習編程思想,真正的武林高手,難道會局限于手里的那把寶刀嗎? ### Python 雖然如上所述,C/C++語言有如此之多的好處,但它也不是完美無缺的,第一個致命弱點是復雜性。為了應付千奇百怪的需求,C++提供了很多奇妙的語法從而實現了各種現代編程特性,這就使得C++變得異常復雜。如果有一個程序員對你夸口說他已經徹底掌握了C++的話,你基本可以斷定他接觸C++還沒超過半年。幸好C語言還沒有復雜性的困擾。但是開發效率也是C/C++的致命傷,因為過于接近硬件底層,C/C++程序在運行時幾乎可以調動一切資源,取得最高的性能。但與此同時,C/C++程序員必須小心維護程序的運行狀態,稍有不慎,輕則文件丟失&內存泄露,重則死機甚至導致整個系統軟硬件崩潰也是有可能的(大多數人C語言上機時恐怕或多或少都會遇到野指針的問題)。所謂高收益必與高風險相伴就是這個道理。這就使得開發時必須小心謹慎,開發效率也就提不上去。 對于性能要求極高的程序,比如要求大量高速3D計算的計算機游戲、密集科學計算的工程軟件、同時應付巨量用戶的網頁和數據庫服務器,使用C++是當仁不讓的選擇。但是對于很多應用來說,些許的延遲是可以忍受的。舉例來說,在某個工程中想要得到圓周率的后十萬位,如果此時我們不在乎0.25秒和1.25秒運算時間之間的差別的話,就可以選擇開發效率極高,而計算速度相對較慢的其他語言來實現。在所有這些其他語言中,強烈推薦的是 Python語言。「人生苦短,我用Python」 由創始人Guido van Rossum在1989年圣誕節期間創造出來的Python語言,是一種面向對象、直譯式計算機程序設計語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。**Python 具有腳本語言中最豐富和強大的類庫,足以支持絕大多數日常應用。**這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務,幾乎可以在所有的操作系統中運行。Python支持命令式編程、面向對象程序設計、函數式編程、面向切面編程、泛型編程多種編程范式。與Scheme、Ruby、Perl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理內存使用。它經常被當作腳本語言用于處理系統管理任務和Web編程,然而它也非常適合完成各種高階任務。 Python語言有兩大關鍵特點。首先它被稱為是一門清晰的語言。因為它的作者在設計它的時候,總的指導思想是,**對于一個特定的問題,只要有一種最好的方法來解決就好了。**這在由Tim Peters寫的Python格言(稱為The Zen of Python)里面表述為:There should be one and preferably only one obvious way to do it。這正好和Perl語言(另一種功能類似的高級動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。Python語言是一種清晰的語言的另一個意思是,它的作者有意的設計**限制性很強的語法**,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。這樣有意的強制程序員養成良好的編程習慣。簡單來說,幾乎所有的Python程序看起來都是一個樣子的,而相對的,人們說,到哪里去找一段隨機字符,讀一段Perl程序就行。 第二個特點是它被稱為膠水語言。哦,這可不是說它會把你的手指給粘住。它的意思是它可以像膠水一樣,把用其他語言制作的模塊拼合起來。很多人是這樣用Python語言制作大型程序的:他們先用Python做出一個可用的程序,再把其中最影響性能的部分用C/C++語言重新寫成模塊(在已經滿足要求的時候,根本就無需替換)。不用擔心配合的問題,Python的可擴充性完全可以勝任要求,可擴充性可以說是Python作為一種編程語言的特色。新的內置模塊(module)可以用C/C++或其他語言寫成,同時也可為現成的C/C++或其他語言模塊加上Python的接口。這樣一來,我們既能充分享受到Python快速開發帶來的效率,又能夠實現足夠強大的性能。 再加上設計極為出色的三大內置數據類型:異構列表、元組、字典和從函數式語言學來的列表解析、對象自省、方法動態生成等突出特性,使得它的功能變得極為強大的同時程序又相當簡潔。想想看,你能在C程序運行的同時,改變自身的代碼讓它再次以另一面貌運行么?Python就可以輕松地做到。同樣的功能,用Python實現所需的語句可能僅僅是C的十分之一到二十分之一,而開發(包括調試)所需要的時間更可能只需要百分之一。 Python語言是少有的一種可以稱得上既簡單又功能強大的編程語言。對于工程師會計師這類非職業程序員,在平時需要某種語言來編寫程序解決一些小問題的時候(例如做個土方計算,分析某種投資的收益,批處理一些文件的改名壓縮之類),Python是比C語言更好的選擇。即使對職業程序員,Python也是稱手的工具。總之,Python就是手邊的語言。 Python的應用很廣,既可以當做腳本語言來使,又可用于Web開發,還可用于科學計算——[《Python科學計算》](http://book.douban.com/subject/7175280),可以用輕便的Python來替代昂貴的商業軟件MATLAB噢~ 下圖是Python在Big Data領域一些相關庫的思維導圖。其第三方庫的豐富程度可見一斑。 ![Python for Big Data](https://box.kancloud.cn/2015-10-26_562db8f9d6d5a.png) 在MIT Fall 2008的[Introduction to Computer Science and Programming](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008)課程中有不少內容就是用Python實現的,MIT開放式課程官網有詳細介紹,視頻啥的也可以到VeryCD和一些校內BT站上下載。 ### Java 在前邊的小節[C/C++和其它語言的關系](#)中已簡要介紹過Java,作為主流的工業化語言之一,其主要面對企業級開發。優點么,就是有成熟的框架和社區,有不少大公司在用。另外,如果要為目前市場占有率第一的移動操作系統——Android寫點安卓應用,不會 Java 還真不行... 所以說,從找工作的角度考慮,熟悉下Java還是有必要的。但是,從單兵作戰的角度考慮,Java代碼就顯得太過冗余笨重,不像Python那般簡明。 ### Go 相對于以上幾種編程語言,Go還顯得太年輕,Go語言由Robert Griesemer, Rob Pike, and Ken Thompson 三劍客于2007年在Google開發,并于2009年11月正式宣布推出。 與Java向C++學習相反,Go繼承的是C,為何不直接學習C++?——因為C++太復雜了... 另外還記得 Ken Thompson 么?他可是C語言他老爹啊!老爹不用親兒子自然是說不過去。要想給Google這種龐然大物寫服務端程序,并行和分布式是必須考慮的因素,而為了解決這一開發效率上的難題(C開發效率低,C++又太復雜),Go于是橫空出世了。與其他主流編程語言需要使用第三方庫或者自行開發實現并發不同,Go將并發在語言的層面上實現了,實乃分布式開發之大幸啊。其實在Go之前的Erlang也是以在語言層面支持并發而聞名的,但是Go的基因先天有較強優勢,使得其發展迅速,已有不少從Erlang轉到Go的開發者。關于Go的一些其他特性可參考[Go語言資料收集](https://github.com/wonderfo/wonderfogo/wiki)。 ### Notes 1. 對各種編程語言的異同還有更濃厚興趣的話可參考松本行弘的大作——[代碼的未來 (豆瓣)](http://book.douban.com/subject/24536403/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看