什么是編譯型語言烈涮?
什么是解釋型語言?
有沒有既是編譯型的又是解釋型的語言炕檩?
編譯型語言
從我們?nèi)腴T接觸到的C語言斗蒋,到C++,這幾個基礎常見的都是編譯型語言,對應我們常用的IDE(叫做編譯器)泉沾,有Visual Studio
編譯型語言由編譯器編譯成二進制文件(我們叫機器語言)捞蚂,再由操作系統(tǒng)來執(zhí)行。一次性編譯完整個文件跷究。程序語言--》機器語言--〉執(zhí)行
優(yōu)點:編譯器一般會有預編譯的過程對代碼進行優(yōu)化姓迅。因為編譯只做一次,運行時不需要編譯俊马,所以編譯型語言的程序執(zhí)行效率高队贱,可以脫離語言環(huán)境獨立運行。
缺點:編譯之后如果需要修改就需要整個模塊重新編譯潭袱。編譯的時候根據(jù)對應的運行環(huán)境生成機器碼柱嫌,不同的操作系統(tǒng)之間移植就會有問題,需要根據(jù)運行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件屯换。
總結(jié):執(zhí)行速度快编丘、效率高;依靠編譯器彤悔、跨平臺性差些嘉抓。
解釋型語言
聽的最多的是python,對應常用編譯器Pycharm晕窑,其次可能是JS(JavaScript抑片,像我剛開始自學前端學到這三劍客最后一劍),編譯器好多杨赤。這兩種是解釋性語言敞斋,直接由解釋器來執(zhí)行的。
解釋器將程序語言先翻譯成中間代碼疾牲,在運行時才將中間代碼翻譯成機器語言來執(zhí)行植捎。解釋器是解釋一行,就執(zhí)行一行阳柔。程序語言--》中間代碼--〉機器語言--》執(zhí)行
優(yōu)點:有良好的平臺兼容性焰枢,在任何環(huán)境中都可以運行,前提是安裝了解釋器(虛擬機)舌剂。靈活济锄,修改代碼的時候直接修改就可以,可以快速部署霍转,不用停機維護荐绝。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言谴忧。
總結(jié):執(zhí)行速度慢很泊、效率低;依靠解釋器沾谓、跨平臺性好委造。
二者得兼?
我們來看Java均驶,一個.java文件如果不進行編譯昏兆,什么也干不了,從這點上看屬于編譯型語言妇穴。但是一個.java文件需要先經(jīng)過編譯變成.class(字節(jié)碼)文件爬虱,才可以被虛擬機JVM所執(zhí)行。從“編譯成.class文件”這點看腾它,.class文件不能直接執(zhí)行跑筝,它更像是一種中間代碼,所以認為它是解釋型語言瞒滴。如果要對程序進行修改曲梗,又必須重新編譯,這點看又屬于編譯型語言妓忍。
但是虏两,我們在談到Java語言時,都說它好在跨平臺的特性世剖,所以個人更傾向于說Java說解釋型語言定罢。