【03|计算机编程思维课-区分编译型语言和解释型语言】

大家好,我是贺哥,五一假期节后第一天,学习不能停,今天我们继续更新专栏,前两讲链接如下


【为什么计算机基础很重要】https://t.zsxq.com/0djQz29X6

【基础语言入门&学习方法】https://t.zsxq.com/0dwJyEbWt



1、静态类型语言和动态类型语言


编程语言按照数据类型大体可以分为两类:一类静态类型语言,另一类是动态类型语言。


(1)静态类型语言


静态类型语言在编译时便已经确定变量的类型。


  1. 静态类型语言的优点首先是在编译时就能发现类型不匹配的错误,编辑器可以帮助我们提前避免程序在运行期间有可能发生的一些错误。其次,如果在程序中明确地规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高程序执行速度。
  2. 静态类型语言的缺点首先是迫使程序员依照强契约来编写程序,为每个变量规定数据类型,归根结底只是辅助我们来编写可靠性搞程序的一种手段, 而不是编写程序的目的。但我们大部分人编写程序的目的是,为了完成公司的需求,来交付到生产环境。另外一个就是说,类型的声明也会增加更多的代码,在程序编写过程中,这些细节会让我们程序员的精力,从思考业务逻辑上分散开来。



(2)动态类型语言


动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。

  1. 动态类型语言的优点编写的代码数量更少,看起来也更简洁,程序员可以把经历更多地放在业务逻辑上面。虽然不区分类型在某种情况下会让程序变得难以理解,但整体而言,代码量越少,越专注于逻辑表达,对阅读程序是越有帮助。
  2. 动态类型语言的缺点无法保证变量的类型,从而在程序的运行期有可能发生类型相关的错误。这就好像在商店买了一包牛肉味辣条,但是真正吃到嘴里才知道是不是牛肉味。


动态类型语言对变量类型的宽容给实际编码带来了很大的灵活性,由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需去考虑它原本是否被设计为拥有该方法。



2、编译型语言和解释型语言


说完了静态和动态,我们再来认识一下编译型和解释型,其实这两种才是讨论比较广泛的。


因为任何程序最终都要经过源码编译或解释转换成二进制,才能被计算机识别。


上面的源码指的是,由程序员使用各种编程语言编写的还未经编译或者解释的程序文本,对于计算机而言,计算机其实完全不认识源代码的,也根本无法执行,计算机只能识别某些特定的二进制指令,在程序真正运行之前必须将源代码转换成二进制指令,才能让计算机真正执行。


编译和解释都是对源代码的处理方式,由于他们的操作方法不同,所以会有不同的运行效果。


  1. 编译是把源代码的每条语句都编译成机器语言, 并最终生成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,在运行时会有很好的性能。
  2. 解释是只在执行到对应的语句时才会将源代码一行一行的解释成机器语言,给计算机来执行,所以使用解释器来执行的语言也被称为动态语言。


(1)编译型语言

程序在执行之前需要一个专门的编译过程,把程序编译成机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了,程序执行效率高,依赖编译器,如 C/C++、Golang 等,比如 Windows 平台,它们可以编译后生成 .exe文件,之后无需再次编译,直接运行 .exe文件即可。


对于编译型语言 ,开发完成后需要将所有的源代码都转换成可执行文件,可执行文件里面包含的就是机器码,只要我们拥有可执行文件,就可以随时运行,不用再重新编译了,也就是“一次编译,无限次运行”。


在运行的时候,只需要编译生成的可执行文件,不再需要源代码和编译器了,所以说编译器语言可以脱离开发环境运行,但编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。


编译型语言不能跨平台表现在:

  1. 可执行文件不能跨平台,因为不同操作系统对可执行文件的内部结构有着截然不同的要求,彼此之间也不能兼容。
  2. 源代码不能跨平台,不同平台支持的函数、类型、变量等有可能不同,基于某个平台编写的源代码一般不能拿到另一个平台下编译。

编译型语言往往会花费较长的编译时间,但编译完成后,会有很好的运行性能,因此,编译型语言编写的程序每次修改都要再次经历一遍完整编译过程后,修改效果才能生效,迭代时间会比解释型语言要长。

由于要经历完整的编译过程,因此程序有任何语法错误都能在编译器被发现,大大降低程序的运行错误。


(2)解释型语言

相对于编译型,解释型程序不需要编译,程序在运行时才翻译成机器语言,每执行一次,都要翻译一次,因此效率比较低。在运行程序时才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译,依赖解释器,如 Java、C#、PHP、JavaScript、Python 等。



对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成激起码,用不到的不进行任何处理。每次执行程序时可能会使用不同的功能,这个时候需要转换的源代码也不一样。


因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。计算机的一些底层功能或者关键算法,一般都使用 C/C++ 实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。


在运行解释型语言的时候,我们始终都需要源代码和解释器,所以它无法脱离开发环境。相比于编译型语言,解释型语言几乎都能够跨平台,可以做到“一次编写,到处运行”。


解释型语言之所以能够跨平台,是因为有了解释器这个中间层,在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。


注意:

  1. 我们所说的跨平台是指源代码跨平台,而不是解释器跨平台。解释器用来将源代码转换成机器码,它就是一个可执行程序,是不能跨平台的。
  2. 官方需要针对不同的平台开发不同的解释器,这些解释器必须要能够遵守同样的语法,识别同样的函数,完成同样的功能,只有这样,同样的代码在不同平台的执行结果才是相同的。


解释型语言不需要编译,程序执行到了,解释器才会去解释对应的语句,所以更多的时间花费在了运行期间,但这类语言编写的程序的修改不需要经历漫长的编译过程,效果能够很快生效。

由于没有经历编译过程,因此即便语法错误,也只能等到运行期间才会被发现。


3、执行流程

编译型语言和解释型语言的执行流程:



4、差异总结


编译型语言和解释型语言的差异总结如下图:

注意,当我们说“下载一个程序(软件)”时,不同类型的语言有不同的含义:

  1. 对于编译型语言,我们下载到的是可执行文件,源代码被作者保留,所以编译型语言的程序一般是闭源的。
  2. 对于解释型语言,我们下载到的是所有的源代码,因为作者不给源代码就无法被运行,所以解释型语言的程序一般是开源的。



最后,来一张图总结下

作为一个编程开发者,基本的动态类型、静态类型语言要分得清楚,不然下次面试或者和别人交流,还傻傻分不清就岂不是显得你比较菜哈哈 (ง •̀_•́)ง


如果觉得有帮助,动手点个赞 (♡ര‿ര)给我康康




0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
#资源# #分享# 微信读书 得到电子书会员能覆盖很多书,找不到的,可以看下下面两个网站 https://zh.z-library.se/ https://zh.annas-archive.org/
22
#资源,好久没有在星球里给大家分享了,最近半年在忙自己的一个大事情,没怎么冒泡(无辜脸.jpg),趁五一假期的小尾巴,给大家分享一个很牛的知识库网站,包括编程语言、算法与软件架构、Web 与大前端、服务端开发、运维与高可用、云与分布式基础架构、人工智能与深度学习等等。 看界面还有完整的技术 & 产品 & 商业知识体系等知识,大家可以收藏学起来! https://ng-tech.icu/ #分享# #经验#
46
#职场# #经验# 隔壁星球小伙伴分享的,觉得写得不错,在分享一下给大家 《对职场的十点建议》 假如您的孩子大学毕业,初入社会,只允许您传授10条经验给他,您会说什么?对于很多像我一样农村出来的穷二代,父母面朝黄士背朝天供养我上大学和维持基本的生活已经拼尽全力,很多经验都需要自己付出实际的代价去获取,太昂贵。没有高人指点,自己悟性又一般,希望您能不音赐教。谢谢您的时间 排序不分先后。 第一是要用心。做什么事情都要用心。同样做一件事情,花不花心思,结果差很多。要么不做,要做就用心做好 第二要受得了委屈。工作不是在家里。想干就干,不想干就不干。稍微被说几句就服负气的玻璃心的人不适合工作,还是在家里呆着吧应该也没有什么成就 第三勤奋。天赋都差不多的情况下。比的就是谁更勤奋更努力。整体而言勤奋努力的运气就会更好一点。 第四就是,做杂事。下闲子,有用没用的事情都做做,整天只做有用的事情。也会错过那些现在看没什么用,但以后可能会很有用的事。 第五就是。多见人,什么人都聊聊,见见。机会更多。别一个人呆自己的世界里闷着,总拿自己的世界观去看这个世界。眼界只会越来越小 第六就是学会扛责任,遇到事情别推责任,错了就是错了,别找理由借口。 第七,别耍小聪明,耍滑头,一眼就看出来的聪明都是小聪明,挑肥拣瘦,偷工减料,损公肥私都是小聪明。时间久了,谁是谁,大多数人都一清二楚,没必要装。 第八,!学会辨别好人坏人,然后选择跟好人一起,离开坏人。所谓好坏未必是违法乱纪更多是没责任心,喜欢蹭你便宜,出了事,责任都推给你,好处都自己占的人,有这种领导赶紧离开 第九,尽量选择自己喜欢的行业,每天问问自己,喜欢什么擅长什么,把自己的长处做到极致,扬长避短能事半功倍 第十,做个好人,做个对世界抱有善意的人积极乐观的看待世界。这个世界永远都会存在各种问题,无论你悲观还是绝望,都依然存在乐观,悲观都改变不了世界,但是乐观能让你走的更远。悲观只会被抛弃。别做悲观的人也远离悲观的人。(校长语)
40
职场分享:PDCA 模型
37
#经验# #职场# 《混大厂,如何找到自己的生态位》 这两天前老板来深圳出差,一起吃了饭聊聊天,聊到一个话题,职场生态位, 大家也知道,现在大厂晋升也是越来越卷了,一方面是组织架构庞大,在降本增效的大目标下每个人要多做更多的活,但其实同质化也很严重,另一个方面,晋升考核越来越严格 职场生态位:指自己在职场生态当中所占据的位置,尤其是为关键岗位提供核心价值的位置。只有抢占了职场生态位,我们的地位才会最稳固,职位晋升才能最快,个人能力获得最大的提高。当然了,也能轻而易举地收获最多的Money。 在团队里面,你能解决问题,提供成果,或者能提供通往业务目标的方向/方法/捷径,替别人替组织赢得一个生存空间,在生态位上有自己的护城河,你就占据很大的优势。 举个例子,我们常见的,酒店前台,外卖小哥、快递员等等这类靠出卖苦力,没有特别技术含量的职位,就处于职场生态位的比较低端的位置,而且随时有被取代的可能。 而工程师、医生、律师、财务、高级管理人才等技术工种,这些随着经验积累,越来越值钱的职业,就处于职场上比较高端的生态位。 当然这里没有任何歧视岗位的意思,只是做一个对比,毕竟,几十年的工作经验很难被取代。 如果你已经在职场上抢占了不错的生态位,那么恭喜,把眼下工作好好做,就能提交一份满意的人生成绩单 微信公众号平台 18 年以后新注册的默认都没有留言功能,其实类比任何行业,早就是优势,比如社群,平台,人脉链接,早点抓住机会,抓住生态位,抱住大佬,靠近大佬,早点付费进群,抓住身边大佬的生态位,就比晚来的人占据极大的优势 那么,普通人如何找到自己的生态位? 《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=精进3》的作者采铜老师说:找到生态位很难,创造生态位却很简单。关键点只有三个字:被需要。  这个点怎么理解,比如说我们组的例子,因为最早和我同级的一个小伙伴呢,他来的最早,他可能大二就开始来这边实习了。 就现在他基本上在组里面工作时间最长的,而且对整个我们这趟业务刚做起来的时候,他是最原始的几个人之一,所以说他现在对整个业务的这个了解熟悉程度,上下游链路,包括和其他团队合作模式都比我们后来的人都要清楚,那么他就能做一个小组长的管理,有带人的经验,这样晋升机会就比别人大很多。 那么说回来,如果说你在一个新团队里面,可能是后面来的人,或者说刚加入不久的。那么如果你要找到自己的生态位的话,有几个建议 首先第一个就是说在这个团队中,你要找到自己熟悉的项目,或者感兴趣的项目,或者说要抢到一个很好的活,然后在这个周期中把这个活做好,做得出色,让领导满意,而且是被领导所关心的问题,把领导关心的问题解决好,自然而然领导就关注到你,机会就多了 另外一个你要就是跟一些合作方去聊,或者说一些历史的一些遗留问题去梳理啊,找到一些解决方案,然后呢把这个事一步步推进去,做一些优化之类的,能够改善我们现在已有系统的性能,这个你也可以做一个就是前期的一个技术积累,去做一个优化的一个方向积累,这样也能形成自己的壁垒。 另外还有就是除了把工作做好,如何把工作成果汇报的好也是一个技能,反正在互联网公司混,能力是一方面,让别人如何看到你的能力,展示出来也是很重要的事情。 先聊这么多,大家加油💪
25
下载 APP