Ⅰ 什麼是「腳本語言」
很多人用 shell 寫一些「腳本」來完成日常的任務,用 Perl 或者 sed 來處理一些文本文件,很多公司用「腳本」來跑它們的「build」(叫做 build script)。那麼,到底與「非腳本語言」的區別呢?其實「腳本語言」與「非腳本語言」並沒有語義上,或者執行方式上的區別。它們的區別只在於它們設計的初衷:腳本語言的設計,往往是作為一種臨時的「補丁」。它的設計者並沒有考慮把它作為一種「通用程序語言」,沒有考慮用它構建大型的軟體。這些設計者往往沒有經過系統的訓練,有些甚至連最基本的程序語言概念都沒搞清楚。相反,「非腳本」的通用程序語言,往往由經過嚴格訓練的專家甚至一個小組的專家設計,它們從一開頭就考慮到了「通用性」,以及在大型工程中的可靠性和可擴展性。首先我們來看看「腳本」這個概念是如何產生的。使用 Unix 系統的人都會敲入一些命令,而命令貌似都是「一次性」或者「可拋棄」的。然而不久,人們就發現這些命令其實並不是那麼的「一次性」,自己其實一直在重復的敲入類似的命令,所以有人就發明了「腳本」這東西。它的設計初衷是「批量式」的執行命令,你在一個文件里把命令都寫進去,然後執行這個文件。可是不久人們就發現,這些命令行其實可以用更加聰明的方法構造,比如定義一些變數,或者根據系統類型的不同執行不同的命令。於是,人們為這腳本語言加入了變數,條件語句,數組,等等構造。「腳本語言」就這樣產生了。然而人們卻沒有發現,其實他們根本就不需要腳本語言。因為腳本語言裡面的這些結構,在任何一種「嚴肅」的程序語言(比如 Java,Scheme)裡面,早就已經存在了,而且設計得更加完善。所以腳本語言往往是在重新發明輪子,甚至連輪子都設計不好。早期腳本語言的「優勢」,也許只在於它不需要事先「編譯」,它「調用程序」的時候,貌似可以少打幾個字。腳本語言對於 C 這樣的語言,也許有一定的價值。然而,如果跟 Scheme 或者 Java 這樣的語言來比,這個優勢就非常不明顯了。比如,你完全可以想一個自動的辦法,寫了 Java 代碼之後,先調用 Java 編譯器,然後調用 JVM,最後刪掉 class 文件。或者你可以選擇一種有解釋執行方式的「嚴肅語言」,比如 Scheme。很多人把 Scheme 誤稱為「腳本語言」,就是因為它像腳本語言一樣可以解釋執行,然而 Scheme 其實是比 C 和 Java 還要「嚴肅」的語言。Scheme 從一開頭就被設計為一種「通用程序語言」,而不是用來進行某種單一簡單的任務。Scheme 的設計者比Java 的設計者造詣更加深厚,所以他們對 Java 的一些設計錯誤看得非常清楚。像 Chez Scheme 這樣的編譯器,其實早就可以把 Scheme 編譯成高效的機器代碼。實際上,很多 Scheme 解釋器也會進行一定程度的「編譯」,有些編譯為位元組碼,有些編譯為機器代碼,然後再執行。所以在這種情況下,通常人們所謂的「編譯性語言」與「解釋性語言」,幾乎沒有本質上的區別,因為你看到的「解釋器」,不過是自動的先編譯再執行。跟Java 或者 Scheme 這樣的語言截然不同,「腳本語言」往往意味著異常拙劣的設計,它的設計初衷往往是目光短淺的。這些語言裡面充滿了歷史遺留下來的各種臨時的 hack,幾乎沒有「原則」可言。Unix 的 shell(比如 bash,csh,……),一般都是這樣的語言。Java 的設計也有很多問題,但也跟「腳本語言」有天壤之別。然而,在當今現實的工程項目中,腳本語言卻占據了它們不該佔有的地位。例如很多公司使用 shell 腳本來處理整個軟體的「build」過程或者測試過程,其實是相當錯誤的決定。因為一旦這種 shell 腳本日益擴展,就變得非常難以控制。經常出現一些莫名其妙的問題,卻很難找到問題的所在。Linux 使用 shell 腳本來管理很多啟動項目,系統配置等等,其實也是一個歷史遺留錯誤。所以,不要因為看到 Linux 用那麼多 shell 腳本就認為 shell 語言是什麼好東西。如果你在 shell 腳本里使用通常的程序設計技巧,比如函數等,那麼寫幾百行的腳本還不至於到達不可收拾的地步。可是我發現,很多人頭腦里清晰的程序設計原則,一遇到「寫腳本」這樣的任務就完全崩潰了似的,他們彷彿認為寫腳本就是應該「鬆散」一些。很多平時寫非常聰明的程序的人,到了需要處理「系統管理」任務的時候,就開始寫一些 shell 腳本,或者 Perl 腳本。他們寫這些腳本的時候,往往完全的忘記了程序設計的基本原則,例如「模塊化」,「抽象」等等。他們大量的使用「環境變數」一類的東西來傳遞信息,他們忘記了使用函數,他們到處打一些臨時性的補丁,只求當時不出問題就好。到後來,他們開始耗費大量的時間來處理腳本帶來的麻煩,卻始終沒有發現問題的罪魁禍首,其實是他們錯誤的認為自己需要「腳本語言」,然後認為寫腳本的時候就是應該隨便一點。所以我認為腳本語言是一個禍害,它幾乎永遠是錯誤的決定。我們應該盡一切可能避免使用腳本語言。在沒有辦法的情況下(比如老闆要求),也應該在腳本裡面盡可能的使用通常的程序設計原則。
Ⅱ 你平時會用腳本語言,完成哪些常用的工作或生活問題呢
小編平時不太會用腳本語言,但是小編之前查過腳本語言,可以用於完成生活當中的一些工作問題,比如可以用來定時關機或者直接進行項目編譯的自動化,還可以用於文件夾同步,這對於職場上班族來說是非常方便的,而且能夠節約一些時間。
最後腳本語言能夠解決的問題還是非常多的,但是腳本語言在進行重構的時候是容易出現一些問題的,這也意味著在做的時候一定要細致一些,不然很容易讓效率變低。
Ⅲ PHP主要是用來做什麼呢,和JAVA有什麼區別是
PHP主要使用來做網站以及Web應用開發的。跟JAVA區別如下:
一、語言優勢不同
1、PHP:即「超文本預處理器」,是一種通用開源腳本語言。在伺服器端執行的腳本語言。
2、JAVA:是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念。
二、語法不同
1、PHP:語法混合了C、Java、Perl以及 PHP 自創的語法。
2、JAVA:作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
三、特點不同
1、PHP:利於學習,使用廣泛,主要適用於Web開發領域。
2、JAVA:具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。
Ⅳ 腳本語言和編程語言的區別是什麼
1、腳本語言:又被稱為擴建的語言,或者動態語言,是一種編程語言,用來控制軟體應用程序。
2、編程語言:一種計算機語言讓程序員能夠准確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。
二、特點不同
1、腳本語言:腳本通常以文本(如ASCII)保存,只在被調用時進行解釋或編譯。
2、編程語言:程序在運行時可以改變其結構,開發快速,接近自然語言,易於理解,更方便的代碼管理。
三、優缺點不同
1、腳本語言:腳本語言極大地簡化了「開發、部署、測試和調試」的周期過程。大多數腳本語言都能夠隨時部署,而不需要耗時的編譯/打包過程。
2、編程語言:任何編程語言的使用都需要確保編寫的程序能夠根據實際需要及時調整。因此,快速原型開發環境非常重要,在這種環境下,動態語言和相關庫的結合可以大大增強其優勢。