當前位置:首頁 » 編程軟體 » 編譯和解釋可以結合使用嗎

編譯和解釋可以結合使用嗎

發布時間: 2023-01-14 10:27:23

A. python師先編譯後解釋的嗎

1、C++和C都是屬於編譯型語言,本來的.c文件都是用高級語言編寫的,計算機是不能識別高級語言的,所以,必須要通過編譯,鏈接等手段,將.c文件轉換成可執行文件,可執行文件就是純二進制文件,然後計算機才能夠執行。

unix>./p:(p是可執行文件)

上述命令的過程,是外殼(shell)調用操作系統一個叫載入器的函數,它拷貝可執行文件p中的代碼和數據到存儲器,然後將控制轉移到這個程序的開頭。

2、

1. Python是一門解釋型語言?

我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。如果是解釋型語言,那麼生成的*.pyc文件是什麼呢?c應該是compiled的縮寫才對啊!

為了防止其他學習Python的人也被這句話誤解,那麼我們就在文中來澄清下這個問題,並且把一些基礎概念給理清。

2. 解釋型語言和編譯型語言

計算機是不能夠識別高級語言的,所以當我們運行一個高級語言程序的時候,就需要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。

編譯型語言在程序執行之前,先會通過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。

解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,通過解釋器對程序逐行作出解釋,然後直接運行,最典型的例子是Ruby。

通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程序運行之前就已經對程序做出了「翻譯」,所以在運行時就少掉了「翻譯」的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優化來在對程序做出翻譯時對整個程序做出優化,從而在效率上超過編譯型語言。

此外,隨著java等基於虛擬機的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。

用Java來舉例,Java首先是通過編譯器編譯成位元組碼文件(不是二進制碼),然後在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯後解釋的語言。

總結:將由高級語言編寫的程序文件轉換為可執行文件(二進制的)有兩種方式,編譯和解釋,編譯是在程序運行前,已經將程序全部轉換成二進制碼,而解釋是在程序執行的時候,邊翻譯邊執行。

3. Python到底是什麼

其實Python和Java/C#一樣,也是一門基於虛擬機的語言,我們先來從表面上簡單地了解一下Python程序的運行過程吧。

當我們在命令行中輸入python hello.py時,其實是激活了Python的「解釋器」,告訴「解釋器」:你要開始工作了。可是在「解釋」之前,其實執行的第一項工作和Java一樣,是編譯。

熟悉Java的同學可以想一下我們在命令行中如何執行一個Java的程序:

javac hello.java(編譯的過程)

java hello(解釋的過程)

只是我們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也一樣,當我們執行python hello.py時,他也一樣執行了這么一個過程,所以我們應該這樣來描述Python,Python是一門先編譯後解釋的語言。

4. 簡述Python的運行過程

在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc文件。

我們在硬碟上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。

當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。

當python程序第二次運行時,首先程序會在硬碟中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。

所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式。

總結:Python也是先編譯後解釋的一門語言,當python程序運行時,編譯的結果是保存在內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。也就是說保存,pyc文件是為了下次再次使用該腳本時避免重復編譯,以此來節省時間。也就是說,只執行一次的腳本,就沒必要保存其編譯結果pyc,這樣只是浪費空間。下面舉例解釋。

5、運行一段Python程序

我們來寫一段程序實際運行一下:


不用仔細看代碼,我們可以很清楚地看到原理,其實每次在載入之前都會先檢查一下py文件和pyc文件保存的最後修改日期,如果不一致則重新生成一份pyc文件。

8. 寫在最後的

其實了解Python程序的執行過程對於大部分程序員,包括Python程序員來說意義都是不大的,那麼真正有意義的是,我們可以從Python的解釋器的做法上學到什麼,我認為有這樣的幾點:

A.其實Python是否保存成pyc文件和我們在設計緩存系統時是一樣的,我們可以仔細想想,到底什麼是值得扔在緩存里的,什麼是不值得扔在緩存里的。只有要重用的模塊才是值得編譯成pyc文件的。

B. 在跑一個耗時的Python腳本時,我們如何能夠稍微壓榨一些程序的運行時間,就是將模塊從主模塊分開。(雖然往往這都不是瓶頸),那麼再次運行時,就可以不用編譯了,直接使用上次編譯後的結果。

C. 在設計一個軟體系統時,重用和非重用的東西是不是也應該分開來對待,這是軟體設計原則的重要部分。

D. 在設計緩存系統(或者其他系統)時,我們如何來避免程序的過期,其實Python的解釋器也為我們提供了一個特別常見而且有效的解決方案。



總結:Python是編譯+解釋型的語言,執行的時候是由Python解釋器,逐行編譯+解釋,然後運行,因為在運行的過程中,需要編譯+解釋,所以Python的運行性能會低於編譯型語言,比如C++。為了提高性能,Python解釋器,會將模塊(以後要重用的腳本文件放在模塊里)的編譯+解釋的結果,保存在.pyc中。這樣下次執行的時候,就省了編譯這個環節。提高性能。一次性的腳本文件,解釋器是不會保存編譯+解釋的結果,也就是沒有.pyc文件。

B. C語言既可以編譯執行又可以解釋執行嗎

目前我知道的C語言只能編譯執行,就是先編譯成二進制的exe文件才能執行。
腳本語言才可以解釋執行。

C. C語言既可以編譯執行又可以解釋執行嗎 編譯執行怎麼解釋 解釋執行又怎麼解釋

C 語言程序僅可以解釋執行。

解釋程序是將源程序(如BASIC)作為輸入,解釋一句後就提交計算機執行一句,並不形成目標程序。編譯程序是把高級語言(如FORTRAN、COBOL、Pascal、C等)源程序作為輸入,進行翻譯轉換,產生出機器語言的目標程序,然後再讓計算機執行這個目標程序,得到計算結果。

相對於編譯性語言,其優點是可移植性好,只要有解釋器環境,程序就可以在不同的操作系統上運行。

缺點是代碼需要有專門的解釋器,在程序運行時,除要給用戶程序本身分配內存空間外,解釋器也佔用系統資源,所以其運行速度較慢。另外,也很難達到像C、C++那樣操作系統底層操作的目的。

解釋型語言常用於,一是對運行速度要求不高(如一些網頁腳本等)的場合,二是對跨平台(操作系統的兼容性)有要求的場合。

(3)編譯和解釋可以結合使用嗎擴展閱讀

1、Python和Java語言,專門有一個解釋器能夠直接執行Python程序,每個語句都是執行的時候才翻譯。

2、Python代碼在運行前,會先編譯成中間代碼,每個 .py 文件將被換轉成pyc 文件,pyc 就是一種位元組碼文件,它是與平台無關的中間代碼。不管放在 Windows 還是 Linux 平台都可以執行,運行時將由虛擬機逐行把位元組碼翻譯成目標代碼。

D. 解釋型語言和編譯型語言

編譯型是使用編譯器編譯後生成計算機硬體可直接執行的指令,解釋型是在運行時才由解釋器逐語句去執行。編譯型代表:C&C++,C#,Java,解釋型代表:html,javascript。區別有很多。
1、編譯型語言的源代碼有錯誤編譯不通過,無法生成可執行代碼,更無法執行程序;解釋型語言只有執行時才會判斷是否出錯,即使一句出錯,也可以繼續執行下一句。
2、編譯型語言都為強類型,即必須說明數據的類型,如inta;解釋型語言多為弱類型,如js中vara,a可以為字元串也可以為整形。
3、編譯型語言執行效率上大大優於解釋型,主要因為編譯器在編譯過程中會根據不同平台自動優化目標代碼,且特點為1次編譯,N次運行,另外強類型的程序安全性高;解釋型語言無上述過程,逐語句翻譯造成執行效率低下,每次執行都會重復解釋一遍,並且安全性低。
4、編譯型程序適合對通用性,重復性,高效性有要求的系統,如開發操作系統;相比解釋型語言更具靈活性,如開發網站前台頁。
更多關於解釋型語言和編譯型語言,進入:https://www.abcgonglue.com/ask/d95b531616100786.html?zd查看更多內容

E. 為什麼高級語言中存在編譯和解釋兩種編譯方式

  1. 編譯方式:事先編好的一個叫做編譯程序的機器語言程序放在計算機中。當高級語言編的源程序輸入計算機時,編譯程序就把源程序自動整個地翻譯成用機器指令表示的目標程序。

  2. 解釋方式:事先編好的一個叫做解釋程序的機器語言程序放在計算機中,當高級語言源程序輸入計算機後,解釋程序自動地逐句翻譯源程序,譯一句執行一句。

  3. 因此往往需要特定的平台,由於程序執行的是編譯好的二進制文件,這種編譯一旦完成,那麼就只能在特定平台上運行了:編譯是指將源語言轉化為目標計算機的可執行二進制代碼兩者互有優劣,因此速度比較快(相對下面的解釋)。

  4. 解釋方式:事先編好的一個叫做解釋程序的機器語言程序放在計算機中,當高級語言源程序輸入計算機後,解釋程序自動地逐句翻譯源程序,譯一句執行一句。 可以這么理解,編譯的結果是另外一種語言,而解釋的就是一種中間語言。

F. 編譯和解釋的區別是什麼

1.定義區別

①編譯原理旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。

②匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。

2.處理方式區別

①編譯過程與解釋挺像,區別就在於編譯是將所有的源代碼指令一次性成翻目標代碼並執行。

②匯編過程就是把匯編指令一對一地翻譯成01機器碼的過程。而採用這種處理方式的語言只有一類:匯編語言。

3.特點區別

①編譯語言的特點就是不需要解釋器的參與,所以運行比較快,但是編譯好的程序只能在當前平台運行,是個局限性。

②匯編語言是當今世界上歷史最早,應用最廣,功能最強大,運行速度最快的編程語言。但是匯編語言開發工期長,可讀性差,並且不能跨平台編程。

G. 編譯程序和解釋程序均能產生目標程序嗎

不能
因為:編譯程序能產生目標程序而解釋程序則不能
補充:解釋程序也稱為解釋器,它或者直接解釋執行源程序,或者將源程序翻譯成某種中間表示形式後再加以執行;編譯程序(編譯器)則是將源程序翻譯成目標語言程序,然後在計算機上運行目標程序。兩種語言處理程序的根本區別是:在編譯方式下,機器上運行的是與源程序等價的目標程序,源程序和編譯程序都不再參與目標程序的執行過程,而在解釋方式下,解釋程序和源程序(或某種等價表示)要參與到程序的運行過程中,運行程序的控制權在解釋程序。解釋器翻譯源程序時不生成獨立的目標程序,而編譯器則將源程序翻譯成獨立的目標程序。
補充:編譯程序(Compiler,compiling program)也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

H. 編譯和解釋的區別是什麼

編譯和解釋的區別是與計算機的交流方式不同、運行環境不同、運行速度不同。

一、與計算機的交流方式不同

編譯是將源程序翻譯成可執行的目標代碼,執行可執行程序文件,翻譯與執行是分開的。

解釋程序不產生目標代碼,它逐條地取出源程序中的語句,邊解釋邊執行,解釋器把源代碼文件邊解釋成機器語言邊交給CPU執行。

二、運行環境不同

編譯程序跨平台性不好,不同操作系統,調用底層的機器指令不同,需為不同平台生成不同的機器碼文件,編譯程序每次修改源代碼,都要重新編譯,生成機器碼文件。

解釋程序可跨平台使用,因為解釋器已經做好了對不同平台的交互處理,用戶寫的源代碼不需要再考慮差異性,源代碼所有平台都可以直接執行,解釋程序可以隨時修改,立刻生效,改完源代碼後,直接運行看效果。

三、運行速度不同

編譯程序執行速度快,因為你的程序代碼已經翻譯成了是計算機可以理解的機器語言。

解釋程序運行效率低,所有的代碼均需經過解釋器邊解釋變執行,速度比編譯型慢很多。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:645
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:936
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:632
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:821
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:731
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1066
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:299
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:160
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:852
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:763