1. 程式人生 > 其它 >檔案和程式語言

檔案和程式語言

檔案的概念

檔案是作業系統中的一個重要概念,是作業系統暴露給使用者可以簡單快捷操作硬碟的”介面“。檔案是以計算機硬碟為載體儲存在計算機上的資訊集合,檔案可以是文字文件、圖片、程式等等。關於檔案的一些相關知識都羅列在下圖之中,如圖所示:


計算機內部儲存資料的原理

"""計算機內部只認識01二進位制資料(不是很嚴謹,只是作為一個解釋)"""
計算機是基於電工作的 而電訊號只有高低電頻兩種狀態,使用低電頻表示0,使用高電頻表示1.

# 儲存單位
位元位(bit):二進位制位數,是計算機最小的儲存單位。以0或1來表示位元位的值。愈多的位元位數可以表現愈複雜的影象資訊。
    8bit = 1bytes
    1024bytes = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB
     ......
在計算機內部,資訊都是釆用二進位制的形式進行儲存、運算、處理和傳輸的。資訊儲存單位有位、位元組和字等幾種。各種儲存裝置儲存容量單位有KB、MB、GB和TB等幾種。    

程式語言的分類

  • 機器語言

    由於計算機內部只能接受二進位制程式碼,因此,用二進位制程式碼0和1描述的指令稱為機器指令,全部機器指令的集合構成計算機的機器語言,用機器語言程式設計的程式稱為目標程式。只有目標程式才能被計算機直接識別和執行。但是機器語言編寫的程式無明顯特徵,難以記憶,不便閱讀和書寫,且依賴於具體機種,侷限性很大,機器語言屬於低階語言。

    用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令程式碼和程式碼的涵義。手程式設計序時,程式設計師得自己處理每條指令和每一資料的儲存分配和輸入輸出,還得記住程式設計過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程式花費的時間往往是實際執行時間的幾十倍或幾百倍。而且,編出的程式全是些0和1的指令程式碼,直觀性差,還容易出錯。除了計算機生產廠家的專業人員外,絕大多數的程式設計師已經不再去學習機器語言了。

    機器語言是微處理器理解和使用的,用於控制它的操作二進位制程式碼。

    儘管機器語言好像是很複雜的,然而它是有規律的。

    存在著多至100000種機器語言的指令。這意味著不能把這些種類全部列出來。

以下是一些示例:

~~~python
#指令部份的示例
    0000 代表 載入(LOAD)
    0001 代表 儲存(STORE)
     ...

    #暫存器部份的示例
    0000 代表暫存器 A
    0001 代表暫存器 B
     ...

    #儲存器部份的示例
    000000000000 代表地址為 0 的儲存器
    000000000001 代表地址為 1 的儲存器
    000000010000 代表地址為 16 的儲存器
    100000000000 代表地址為 2^11 的儲存器

    #整合示例
    0000,0000,000000010000 代表 LOAD A, 16
    0000,0001,000000000001 代表 LOAD B, 1
    0001,0001,000000010000 代表 STORE B, 16
    0001,0001,000000000001 代表 STORE B, 1[1]
~~~

總結機器語言的優缺點:

~~~python
#優點:
編寫的程式可以被計算機無障礙理解、直接執行,執行速度快,效率高 。

#缺點:
1、學習難度大,複雜,開發效率低
2、貼近\依賴具體的硬體,跨平臺性差
~~~
  • 組合語言

    組合語言僅僅是用一個英文標籤代表一組二進位制指令,毫無疑問,比起機器語言,組合語言是一種進步,但組合語言的本質仍然是直接操作硬體,因此組合語言仍是比較低階/底層的語言、貼近計算機硬體

    組合語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的識別符號,更容易識別和記憶。它同樣需要程式設計者將每一步具體的操作用命令的形式寫出來。彙編程式的每一句指令只能對應實際操作過程中的一個很細微的動作。例如移動、自增,因此彙編源程式一般比較冗長、複雜、容易出錯,而且使用匯編語言程式設計需要有更多的計算機專業知識,但組合語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高階語言所能夠實現的,而且源程式經彙編生成的可執行檔案不僅比較小,而且執行速度很快。 彙編的hello world,列印一句hello world, 需要寫十多行,如下所示:

    ; hello.asm 
    section .data            ; 資料段宣告
            msg db "Hello, world!", 0xA     ; 要輸出的字串
            len equ $ - msg                 ; 字串長度
    section .text            ; 程式碼段宣告
    global _start            ; 指定入口函式
    _start:                  ; 在螢幕上顯示一個字串
            mov edx, len     ; 引數三:字串長度
            mov ecx, msg     ; 引數二:要顯示的字串
            mov ebx, 1       ; 引數一:檔案描述符(stdout) 
            mov eax, 4       ; 系統呼叫號(sys_write) 
            int 0x80         ; 呼叫核心功能
                             ; 退出程式
            mov ebx, 0       ; 引數一:退出程式碼
            mov eax, 1       ; 系統呼叫號(sys_exit) 
            int 0x80         ; 呼叫核心功能
    

    總結匯編語言優缺點:

    # 1、優點:
    相對於機器語言,使用英文標籤編寫程式相對簡單,執行效率稍低,開發效率稍高
    
    # 2、缺點:
    1、仍然是直接操作硬體,比起機器語言來說,複雜度稍低,但依舊居高不下,所以開發效率依舊較低
    2、學習難度大,依賴具體的硬體,跨平臺性差
    
  • 高階語言

    高階語言是大多數程式設計者的選擇。和組合語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆疊、暫存器等,這樣就大大簡化了程式中的指令。同時,由於省略了很多細節,程式設計者也就不需要有太多的專業知識。

    高階語言主要是相對於組合語言而言,它並不是特指某一種具體的語言,而是包括了很多程式語言,像最簡單的程式語言PASCAL語言也屬於高階語言。

    高階語言所編制的程式不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:

    • 編譯型

      編譯是指在應用源程式執行之前,就將程式原始碼“翻譯”成目的碼(機器語言),因此其目標程式可以脫離其語言環境獨立執行(編譯後生成的可執行檔案,是cpu可以理解的2進位制的機器碼組成的),使用比較方便、效率較高。但應用程式一旦需要修改,必須先修改原始碼,再重新編譯生成新的目標檔案(* .obj,也就是OBJ檔案)才能執行,只有目標檔案而沒有原始碼,修改很不方便。

      編譯後程序執行時不需要重新翻譯,直接使用編譯的結果就行了。程式執行效率高,依賴編譯器,跨平臺性差些。如C、C++、Delphi等

    • 解釋型

      執行方式類似於我們日常生活中的“同聲翻譯”,應用程式原始碼一邊由相應語言的直譯器“翻譯”成目的碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行檔案,應用程式不能脫離其直譯器(想執行,必須先裝上直譯器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,可以動態地調整、修改應用程式。如Python、Java、PHP、Ruby等語言。

總結

#機器語言

優點是最底層,速度最快,缺點是最複雜,開發效率最低

#組合語言

優點是比較底層,速度最快,缺點是複雜,開發效率最低

#高階語言

編譯型語言執行速度快,不依賴語言環境執行,跨平臺差

解釋型跨平臺好,一份程式碼,到處使用,缺點是執行速度慢,依賴直譯器執行

主流程式語言介紹

世界上的程式語言有600多種,但真正大家主流在使用的最多二三十種,不同的語言有自己的特點和擅長領域,隨著計算機的不斷髮展,新語言在不斷誕生,也同時有很多老舊的語言慢慢無人用了。有個權威的語言排名網站,可以看到主流的程式語言是哪些

*2021年10月資料(https://www.tiobe.com/tiobe-index/)

下面介紹幾個主流的程式語言:

  • C語言:

    C語言是一種計算機程式設計語言,它既具有高階語言的特點,又具有組合語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已先後被移植到大、中、小及微型機上,它可以作為工作系統設計語言,編寫系統應用程式,也可以作為應用程式設計語言,編寫不依賴計算機硬體的應用程式。它的應用範圍廣泛,具備很強的資料處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫,具體應用比如微控制器以及嵌入式系統開發。

  • C++:

    C++是C語言的繼承的擴充套件,它既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的面向物件的程式設計。C++擅長面向物件程式設計的同時,還可以進行基於過程的程式設計,因而C++就適應的問題規模而論,大小由之。

    C++不僅擁有計算機高效執行的實用性特徵,同時還致力於提高大規模程式的程式設計質量與程式設計語言的問題描述能力。

  • JAVA:

    Java是一種可以撰寫跨平臺應用軟體的面向物件的程式設計語言,是由Sun Microsystems公司於1995年5月推出的Java程式設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於個人PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。在全球雲端計算和移動網際網路的產業環境下,Java更具備了顯著優勢和廣闊前景。

  • PHP:

    PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文字前處理器”)是一種通用開源指令碼語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域

  • Ruby:

    Ruby 是開源的,在Web 上免費提供,但需要一個許可證。

    Ruby 是一種通用的、解釋的程式語言。

    Ruby 是一種真正的面向物件程式語言。

    Ruby 是一種類似於 Python 和 Perl 的伺服器端指令碼語言。

    Ruby 可以用來編寫通用閘道器介面(CGI)指令碼。

    Ruby 可以被嵌入到超文字標記語言(HTML)。

    Ruby 語法簡單,這使得新的開發人員能夠快速輕鬆地學習 Ruby

  • Go:

    Go 是一個開源的程式語言,它能讓構造簡單、可靠且高效的軟體變得容易。

    Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,後來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候釋出了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社群。

    由其擅長併發程式設計

  • Python:

    Python是一門優秀的綜合語言, Python的宗旨是簡明、優雅、強大,在人工智慧、雲端計算、金融分析、大資料開發、WEB開發、自動化運維、測試等方向應用廣泛,已是全球最流行的語言之一。