首頁>Club>
1
回覆列表
  • 1 # 不辦卡先生

    C語言中包含的資料型別是最基本的幾種型別,C#作為一種指令碼語言其中所包含的某些資料型別是在封裝了其他資料型別後形成的。比如常見的字串型別是封裝了字元陣列後形成的新型別

  • 2 # 春天責備

    首先,我們來思考一個問題一.為什麼會有這麼多的程式語言?

    不同的cpu有著不同的指令集,這些指令集都是二進位制的0和1;後來有了組合語言,可以認為是二進位制指令的助記符表示;再後來有了高階程式語言,它們透過編譯器又變回了組合語言或者機器語言;緊接著一個又一個的高階程式語言誕生了,為什麼會有這麼多程式語言呢?

    二.思考

    因為編譯原理和技術越來越成熟了。語言大體上有四個階斷

    1、機器編碼階斷,比如卡帶編碼。

    2、組合語言階斷。這算是比較低階的語言。

    3、中級語言階斷,比如C語言。

    4、高階言階斷,比如JAVA等等。

    5、自然語言階斷,比如sql資料庫查詢語言。

    整體來說,語言的發展就是機器能聽懂和方便程式設計師的統一過程。

    機器語言時代

    所有語言的鼻祖的都是二元碼,也就是機器碼,最終都會翻譯成機器碼執行。但是二元碼錶示非常冗長。比如說大寫字母 A 好了,以二元碼錶示成 01000001 ,如果是小寫 a 呢,則是 01100001。

    組合語言時代

    用純數字的機器語言程式設計的難度可想而知,所以從數字到助記符號的轉譯很快隨之出現,稱作組合語言。比如若是一組數字 0010 0000 可以讓晶片把內部的一個儲存單位,稱作「暫存器 X」,加上一個值 Y,那麼不妨就把這組數字和助記符「ADD」對應起來,上面的指令就可以寫作「ADD X, Y」這樣。一條條類似的指令寫成一串,就是一個對於程式的描述。相對於純數字來說,這是個質的飛躍——終於不必去扳開關了不是嗎?而這樣的一串字元,可以由專用的小程式來「翻譯」成二進位制的機器碼,也就是真正可以輸入處理器去按下電晶體的程式電子訊號。當然,每種處理器的組合語言仍舊是不同的。

    高階語言時代

    更多是考慮到程式的易讀性等等。

    不同的計算機語言擁有不同的「個性」,實際卻都是對於最底層 0 與 1 的抽象和封裝,只是方式與層級不一樣——但人類對於這些方式與層級的選擇態度,是非常難以改變的。也就是說,如果把語言抽象和封裝的層級排成一列,那麼每個人都能在這條線上找到自己的舒適區域(comfortable zone),呆在裡面很舒服;抽象程度再高階一些就會嫌不自由,再低一點卻又覺得麻煩——如果這樣說不夠直觀,那麼不妨搬一個現成的例子:iOS 裝置很好用,老太婆和小孩子都能搞定;但 Android 使用者會說它不夠「開放」(whatever that means),意思其實就是,認為它封裝了太多東西,自己則希望掌控更多細節;可是除了刷 ROM 之外,多數 Android 使用者從未給自己的手機寫過任何一個程式——即便他對於某個理想中的 app 應該如何運作有著非常高深的見解。

    三.這種發展的內在原因

    一個簡單的解釋可以是:不同的領域有不同的需求!

    對於科學和工程計算領域,要大量的處理資料的計算,如矩陣的計算,於是FORTRAN語言,就很好的適應了這一點;對於資料需要能夠很好的查詢、修改等操作,可能SQL語言就是一個不錯的語言;對於一些底層操作的需求,c和c++可能就很好的能夠適應這一點……

    於是為了適應不同的應用場景,一個一個的程式語言誕生了。

    可是又有了另外一個問題:那為什麼不去改造一門語言,讓它的功能無所不包,而是不停的創造新的程式語言呢?

    一個很好的解釋可以是:創造一門新的程式語言的成本有時候會比改進一門程式語言的成本更低!這裡的成本,有一個基本假設:Programmer training is the dominant cost for a programming language。

    (1)創造一門程式語言,有時候只是需要幾個人去寫寫編譯器,再考慮一下其他的需求即可;一旦一門新的程式語言誕生了,這門程式語言對於程式設計人員來說,是一門新的語言,這門語言的語法、API等等都是全新的,程式設計人員不會有其他的負擔;

    (2)而如果改造一門程式語言,需要曾經使用該語言的程式設計人員重新去適應新的改進,有時為了適應新的應用場景,可能的改變是巨大的。可以試想一下,如果將c++進行更新以適應web網頁開發,必然需要改進很多;同樣對一門語言的重大更新,還可能造成其他的影響。

    (3)這也得出一個這樣的結論:那些應用廣泛的程式語言,可能很趨於更少的改變。(如果一門程式語言一直在不停的變來變去,幹嘛還要去學它呢)。於是我們也理解了這樣一個現象:對於中國這麼大的國家,任何政策的微小變化,影響可能也是巨大的。

    所以,與其對一門已有程式語言進行改進,不如重新發明一門程式語言來的清爽。

    只要你能定義一個規則系統(無論多簡單),就等於定義了一個程式語言。

    而開發一門新的程式語言,為了使用者能夠更快更好的學習,往往也會模仿已有語言的一些特性,所以我們看到的程式語言,長得往往都很像。即把一些語言特性像積木一樣堆起來,比如函式式正規化、面對物件正規化。

    一旦我們理解了為什麼有這麼多的程式語言,我們也不會再糾結於這麼多的程式語言的選擇,進而能夠專心的根據不同的應用場景,選擇合適的程式語言;剛開始學習不同的程式語言的時候,也許會有些混亂,可是學的多了過了混亂期,也就清楚了。

    更重要的一點:有時間再去學學基礎的東西,例如編譯原理、組合語言、計算機系統、演算法等等知識,這些東西學的時候看似無用,一旦學明白了,後面再學習新的東西,會發現自己學的速度飛快。

    四.我的思考

    計算機世界的推動皆是因為具體的問題和需求來推動的,人的前進也是如此。

    模擬自己置身於當時當地的遇到同樣的問題,會怎麼樣去解決這個問題,你就可以切身處地的想明白為何會出現這門技術。

    問題、需求、目的是推動這個社會不斷向前發展的根本因素。

    人類的社會發展也是如此,工業社會、資訊社會等等,每一波浪潮都是因為人類自身發展的問題和需求。

  • 中秋節和大豐收的關聯?
  • ANSYS出現下面錯誤提示,應該怎麼解決啊?