编译型语言和解释型语言区别之我见
但凡学习编程,总会碰到这个看似清晰实质又模糊的概念:编译型&解释型。
那么到底什么是编译型语言,什么是解释型语言呢?他们之间有什么共同点和区别呢?
下面我从自身的体会去理解和分析一下,希望能对学编程的后来人能起到“抛砖引玉”之效。
编译型语言代表有:C语言,C++
解释型语言代表有:js,php
-----------------------------------共同点-----------------------------------
都要弄成二进制代码,才能执行。
两类编程语言,你手写的源代码 都是那些if,else之类的英文单词,计算机并不认识这些单词,所以都会要转化成二进制才能运行。
区别就在于“转化的方式”。
-----------------------------------区别-----------------------------------
区别1:从效果上来比
编译型语言要全部写完之后,然后通过某个编译器,去生成一个类似*.exe的二进制文件,然后手工双击这个文件才看的到效果;
解释型语言则没生成你看的到的那种.exe文件,而是直接发出效果。
那么区别之一就是:是否显性的生成二进制文件供你去双击。
区别2:运行的时候是否需要编译器
编译型语言运行的是最终的二进制代码了,所以不在需要编译器在身边守护。
但解释型语言则不然,它是边解释、边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要编译器守护(解释型语言把该工具叫:解释器)。那么编译器在哪里?就在浏览器里,所以你要看html效果,必须是用浏览器这种工具,或者有编译工具在内的其他工具,如:模拟浏览器的工具。
区别3:执行速度对比
编译型语言由于运行的已经是完全的二进制内容了,所以运行起来很干净利落,自然速度快。
但解释型语言,运行的不一定是完全的二进制内容,因为它是边解释(成二进制),边运行。所以当它执行看出效果的时候,程序后半部分还不一定解释成二进制呢。所以它是“三心二意”的做事,速度没有前者快,但是CPU的运行速度如果很快,你可能看不出来,偶尔会看到“有点卡”的效果。原因就是:它边解释、边运行,你看到效果了,可能还有一少半的代码没解释成二进制呢,所以你看到的效果会是残缺的,这就是为什么查看网页的时候,很容易就看到这样的情况:先是出现一堆没有布局的文字,然后才出现那种布局好的效果。
区别4:可移植性对比
编译型语言是运行二进制内容,所以:一旦CPU指令系统改变,之前的二进制文件可能运行不了。比如:如果到其他硬件平台上运行,就可能出现错误,就需要根据该平台重新编译出新的二进制文件。所以:可移植性差;
而解释型语言则不然。它并没有实现弄成什么二进制内容,而是在需要的时候才开始编译、运行。所以:它自然具有可移植性,即:在任何平台都可以马上运行起来。
注意:它的解释工具如:浏览器,本身就是编译型语言解释出来的二进制代码,所以浏览器本身不具有移植性,是需要针对不同的平台弄出对应的浏览器最终二进制文件的。这里千万不要混淆了。
区别5:升级上对比
编译型语言弄出来的二进制文件如果要升级,自然要重新下载一个新的二进制文件了。所以重新下载,安装,覆盖是最大的特点。比如QQ的升级,就是要重新下载,重新安装,重新覆盖,等个半天,而且很耗费CPU资源,体验性就不大好;
而解释型的语言,只要重新写好源代码即可。用户提要到最新效果,只要刷新一下即可。所以体验性好。比如:某网站平台升级了,用户只要重新刷新一下......
区别6:应用领域
编译型语言应用领域通常是那些安装软件,如:桌面上的那种安装软件;
解释型的语言的应用领域通常是:互联网,网站等,那种刷新了一下就可以看到最新效果的领域。
-----------------------------------实现原理-----------------------------------
实现原理,简单来说就是:是不是做成了“实时采集”;
编译型语言没有做“实时采集”。它选择了一次性解决问题,表现为:先弄出完整的二进制代码之后,再让用户去执行该二进制代码,这样省事、省力、省心。但造成可移植性差、升级麻烦的后果。
解释型语言,采用了“实时采集”的措施,做成“边解释、边运行”。但这样带来的直接弊端就是:边走边看,因此速度自然要慢一些。不过现在的CPU、内存等硬件能力都很强大,这个方面的影响可以忽略。而它带来的非常便捷的升级,让它更显示出独特的魅力。所以它在移动互联网的领域,在只要刷新一下就可以看到最新效果的领域,是独一无二的霸主。
结论:二者都是客观事物,各有优势和劣势,没有绝对的正确和错误之分,所以学习者也要客观的认识。
宁哥简介
接触编程10年多;
接触PHP长达8年多;
自硕士毕业后
抵制多个公司的高薪诱惑毅然选择闭关修炼PHP,
目的是构建出真正属于自己的完整的PHP知识体系;
写过的PHP小程序不计其数(也写过html,css,js,jquery等程序),功能模块涵盖诸多;
PHP学习经验笔记1G(记事本格式来算)......