【Linux學習教程】1.5 Linux中大量使用腳本語言,而不是C語言!

      網友投稿 1209 2025-04-01

      說到在 linux下的編程,很多人會想到用C語言,linux 的內核、shell、基礎命令程序,也的確是用C語言編寫的,這首先證明了一點,C語言很強很通用。


      到目前為止,C語言依然壟斷著計算機工業中幾乎所有的系統編程,而且也正因為是C語言,才使得 Unix 以及后來的 Linux 能夠這么廣泛地被人們去研究、去改進、去制作自己的分支,以至于我們能在各種硬件平臺上使用它們。

      但是細心的人會發現,Linux 啟動過程中所涉及的各種程序,很少有C語言的痕跡。它們大多是腳本程序。不單單在啟動過程中是這樣,那些用于安裝軟件的工具 yum、apt-get,甚至是 configure 和 Makefile 也都是腳本程序。而且你可能還沒注意到,那些用于系統管理的工具,如配置 ADSL 撥號上網的工具、配置守護進程的工具等,很多也都是腳本程序。

      【Linux學習教程】1.5 Linux中大量使用腳本語言,而不是C語言!

      大量使用腳本程序,是所有類 Unix 系統不同于其他系統的一個顯著特征,催生人們在 Linux 中大量使用腳本來編寫程序,并不僅僅是因為腳本對人直觀、容易修改這種顯著特性所決定的。另外一個主要的原因就是 Linux 所支持的腳本語言種類十分豐富。

      所有類 Unix 系統所必備的 shell,其本身就是一個強大的腳本解釋器。所以從 shell 誕生的那一天起,shell 就是那些不懂 C 語言,又必須在 Unix 上編寫程序的用戶們的首選工具。

      這就給了人們一種新的選擇,使用 shell 編程不用去理會讓人頭暈的指針;shell 程序可以直接利用系統命令來完成一些需要用大量 C 代碼的功能;shell 編程不用去理會數據類型,不用考慮煩人的數值和字符數據的轉換問題;shell 程序同樣提供順序、選擇分支和循環這三種能夠構建任意算法的基礎設施。因此,shell 很快就能夠被非專業用戶所接受、掌握,并編寫出非常實用的程序。

      隨著時間的推移,這些非專業用戶想往更高的方向發展,遇到了一些 shell 處理起來會很“蹩腳”的問題,比如分析文本和修改文本(別忘了“萬般皆文本”)。這個時候他們會發現 有 awk 和 sed。也只需要寫幾行腳本就能將這些問題處理得很好。而且它們也跟 shell 配合得天衣無縫?;蛟S這個時候會覺得加入了 awk 和 sed 的 shell 腳本有些難看,不過沒關系,還有 Perl 和 TCL。Perl 天生就是為處理文本而存在的,TCL 也不含糊。

      如果覺得這些語言都太老氣了,有些過時了,不要緊,還有 Python、Ruby 等這些現代腳本語言,它們除了不能寫操作系統內核之外,幾乎什么都能干,而且還是面向對象的。

      關注微信公眾號【開源Linux】,后臺回復『10T』,領取10T學習資源大禮包,涵蓋Linux、虛擬化、容器、云計算、網絡、Python、Go等書籍和視頻。

      不管怎樣,在 Linux 下能夠選擇的腳本語言都是極其豐富的。它們最大的特點就是簡單、好學且資料豐富。簡單就意味著容易維護,好學就容易吸引用戶,資料豐富就不會在解決 bug 上出現障礙。即便是專業的程序員,也會因為這些特點而特別偏好腳本語言,導致的一個結果就是腳本程序在 Linux 中的大爆發。

      有讀者可能會問,為什么不選擇 C 語言呢?

      C語言并不是最佳選擇

      C語言是 Unix 的母語,這是毋庸罝疑的。前面也說過,正是因為有了C語言,才使得 Unix 有了今天的成就。但為什么在 Linux 中有這么多程序,甚至是關鍵程序,不用C語言編寫呢?

      腳本程序由于是解釋執行的,在執行效率上自然是會有很大損失的。并且大家都知道,C語言所編寫的程序又是以效率著稱的。但是C語言是一種編譯型語言,要想讓C語言的程序能夠運行,必須經過編譯和鏈接這兩個步驟。

      要知道,能夠將由幾十個源代碼文件構成的C語言程序,有條不紊地編譯完成并能最終鏈接成一個可執行程序,本身就是一件費時又費力的事情,如果一旦程序有問題,還必須使用專門的調試工具一點點地去跟蹤判斷,修正之后再重復那些復雜的編譯和鏈接步驟,這又是一個極需技巧的事情。積累并掌握技巧又是一件費時又費力的事情。

      在早些年,計算機性能不佳的時候,這些付出或許是值得的。但是放到現在,處理器的速度至少快了幾千倍,內存大了幾千倍,硬盤甚至大了幾萬倍,而價格卻更低了。從經濟角度分析,機器的時間成本早己遠遠低于人的時間成本了。那么C語言在機器效率上的優勢根本沒有任何意義。腳本程序能夠給人節省下來的時間成本,則更具經濟效益。

      要論機器效率,匯編語言比C語言要好上幾十倍,但是目前還有誰在用匯編語言編程呢?

      C語言在設計的時候,最主要的一個目標就是能夠讓程序員自己處理內存管理的問題。這使得C語言很強大但又太過于靈活,導致了很多陷阱的出現。稍微一不注意,程序中就會存在難以發覺的 Bug,甚至是嚴重的安全漏洞。程序員們大多是要以時間或失敗為代價去積累經驗,才能盡量避免這些問題的發生。而且效率在大多數應用中根本就不是問題,首要的是正確。腳本程序的簡單和直觀正是正確的起點,C語言的靈活卻是錯誤的根源。

      但是,C語言并不是一無是處,也是 Unix 的精華。C語言作為通用程序設計語言是所向無敵的。C語言本身也非常簡潔和緊湊,資料豐富且容易學習。C語言之后的少數語言設計,為了不被C語言所吞并,不得不進行大的改動,比如引進垃圾回收機制等,以和C語言能夠在功能上保持足夠距離。也正是因為這樣,C語言始終沒有消失,只是它的光輝在 Linux 中稍稍地被腳本程序所遮擋了一下。

      腳本語言也有不足

      雖然效率并不是腳本程序的缺點,但是種類過于豐富卻是一個極大不足。編寫一個復雜的應用,往往很難使用一種腳本語言包桿到底,因為腳本語言都有自己適用的場景,為了能夠快速有效地完成某個應用,就需揚長避短,利用多種腳本語言混合編程。

      多腳本語言的混合編程是一種知識密集型的編程方法,但不是編碼密集型的(這是能夠被普遍接受的原因)。為了能夠良好地使用這種方法,就要求程序員不僅僅要具備相當數量的多種語言知識,還必須具備能夠判斷這些語言的適用場景、以及如何將它們有效地組合在一起的經驗。

      實際上,混合編程并不是腳本語言的專利,任何編程語言都行,只要你能找準那些語言的特點。比如筆者就曾經使用過 Basic 和 C 進行混合編程,去完成一個 DOS 版萬年歷程序。為了支持鼠標點擊操作,用 C 完成了鼠標中斷的處理。余下的部分都用 Basic 來完成。

      在 Linux 中大量應用腳本程序的場景,好多都是這種混合編程的典范。比如 Linux 的啟動過程,主程序 init 是用 C 語言寫的,具體到啟動流程的各個環節則是 shell 腳本程序。

      關注微信公眾號【開源Linux】,后臺回復『10T』,領取10T學習資源大禮包,涵蓋Linux、虛擬化、容器、云計算、網絡、Python、Go等書籍和視頻。

      C 語言 Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:為什么word文檔復制文字就掉到另一頁面去(word復制時如何跳過一部分內容)
      下一篇:cocos2d-lua3.7組件篇(三)-http通信demo
      相關文章
      ass亚洲**毛茸茸pics| 亚洲精品无码av天堂| 亚洲人成无码网WWW| 亚洲大码熟女在线观看| 精品亚洲AV无码一区二区三区 | 亚洲成无码人在线观看| 亚洲A∨无码无在线观看| 亚洲精品国精品久久99热一| 久久久久亚洲av无码尤物| 亚洲色爱图小说专区| 亚洲情综合五月天| 亚洲爆乳精品无码一区二区三区| 亚洲乱码中文字幕综合| 久久精品国产亚洲一区二区| 国产精品亚洲аv无码播放| 久久精品国产亚洲一区二区| 亚洲激情中文字幕| 亚洲视频免费在线看| 亚洲人成电影在线天堂| 夜夜亚洲天天久久| 中文字幕亚洲综合久久男男| 亚洲精品亚洲人成在线| 亚洲s码欧洲m码吹潮| 日韩亚洲综合精品国产| 亚洲国产91精品无码专区| 亚洲高清国产拍精品青青草原 | 亚洲欧洲日产v特级毛片| 亚洲国产成人综合| 精品亚洲456在线播放| 亚洲成av人片天堂网无码】| 国产亚洲精品美女| 国产亚洲精品无码拍拍拍色欲| 亚洲码国产精品高潮在线| 亚洲∧v久久久无码精品| 亚洲视频国产精品| 亚洲一日韩欧美中文字幕在线| 香蕉视频亚洲一级| 国产成人精品日本亚洲专区61| 亚洲国产精品一区第二页| 久久久久亚洲AV无码专区首JN| 亚洲乱码中文论理电影|