范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

编程语言的本质是什么?

  作者: 神说要有光zxg来源: 神说要有光zxg
  本文转载自微信公众号「神说要有光zxg」,作者说要有光zxg。转载本文请联系神说要有光zxg公众号。
  作为程序员,我们会接触到各种各样的语言:
  我们会用 Javascript、Typescript 来写前端应用,用 Java、Go 等来写后端应用,也会用 Python 来写一些工具脚本。
  每种语言都有自己的语法和擅长的领域,那不同的编程语言的区别是什么呢?编程语言的本质是什么呢?
  这篇文章我们尝试探究一下。 从硬件到语言
  不同的语言最终都是控制计算机的一些硬件来工作的,从硬件层面来看他们是没有区别的。各种语言只不过描述逻辑的方式、 api 的封装方式不同而已,底层都跑在同一套硬件上。
  那硬件层面做了啥呢?
  就拿打印机来说,它本身是一个机械的结构,但是控制机械工作的确是通过电子的方式,也就是 0 和 1 的电信号,一般控制它工作的芯片都有不同的引脚,传高低电平代表不同的含义,那么就可以通过高低电平来控制打印机做不同的工作。
  控制硬件工作的程序就叫做驱动程序,它把硬件的能力做了封装,提供了各种 api。这样,我们就可以通过程序控制各种硬件了。
  这些硬件中最特殊的是 CPU,其他硬件提供的指令都是控制该硬件工作的,而 CPU 提供的指令确是可以描述各种逻辑,可以读写内存,进而控制其他硬件。
  这样我们就不用直接控制其他硬件,而是可以通过 CPU 来间接的控制各种硬件,所以,它叫做中央处理器。这些机器指令叫做指令集,由它所描述的逻辑,就是机器语言。
  硬件是通过电子来控制机械,提供了驱动程序,然后又通过 CPU 来实现各种通用的逻辑,进而控制其他硬件。CPU 提供的指令集所描述的逻辑,就叫做机器语言,这是我们写的程序最底层的样子。 为什么要有操作系统
  计算机上肯定不能只跑一个程序,那是最早的计算机,现在的计算机都是支持多个程序的并发的。但是不管跑了多少了程序,都是在同一个硬件上跑,只是做了顺序、优先级等的安排,这种叫做调度,实现多个程序的调度的程序就是操作系统。
  既然是为了让多个程序都能跑在同一个硬件上,那得先给这个跑起来的程序一个名字,就叫做进程。进程调度是 CPU 最主要做的事情。进程要用各种硬件,那也就还需要内存调度、I/O 调度等。
  总之,操作系统主要做的事情就是支持了程序的并发执行,把各种资源统一管理了起来,实现了进程、内存、IO 等等调度。
  同时,为了安全性,操作系统会把程序的运行状态分为用户态和内核态,只有内核态可以访问驱动,来控制硬件,然后提供了系统调用给用户态来用,因为如果任何程序都能随意操作硬件,那就不安全了,所以要管控起来。
  为什么讲编程语言会讲到操作系统呢?
  因为我们写的应用层的代码都是在操作系统上跑的,用的各种 api 也最终都是操作系统提供的系统调用来实现的。
  但我们不是直接使用系统调用,而是用各种语言的标准库,这些标准库就是对系统调用做了进一步的封装,比如创建进程、访问网络、访问内存等等。Node.js 的 api、JDK 的 api 都是基于系统调用封装的。
  操作系统实现了多个程序在同一套硬件上的并发执行,为了安全,还把程序的运行分为了内核态和用户态,提供了系统调用来使用操作系统能力,各种语言对系统调用做了封装,这样,我们就能通过这些 API 来控制计算机了。 编程范式与描述方式
  我们讲了如何通过机器语言来控制 CPU 进而控制其他硬件,讲了操作系统的功能和它提供的系统调用是怎么被编程语言封装的,这些都是我们能够控制计算机的基础。
  但是我们现在还停留在机器语言呢,用这个来写逻辑也太麻烦了,既要考虑怎么表达逻辑,又要考虑计算机是怎么执行的,比如要访问那个寄存器、读写哪个内存等。
  能不能简化一些呢?
  首先想到的是把机器语言做成一些有含义的字符串,叫做汇编语言,这样描述起来就简单很多。
  但是这依然要考虑表达的逻辑、计算机执行细节这两个方面,而执行细节其实与逻辑没关系,而且不同机器和操作系统的执行细节也可能不同。
  能不能我只管怎么表达逻辑,然后通过一种方式来转成带有执行细节的机器语言呢?
  这种就是高级语言了,它的特点就是没有具体的执行细节,只关心逻辑的表达,实现这种转换的就是编译器。(当然,也可以做成一个解释执行其他程序的中间程序,叫做解释器)
  而描述逻辑这件事情有不同的方式,比如我可以通过一个个函数来组织逻辑,把数学那套思维拿过来,这叫函数式,也可以通过一个个对象来组织逻辑,这叫做面向对象,这些不同的描述逻辑的思路就是编程范式。
  编程语言主要就是实现了某几种编程范式,这样,程序员就可以通过不同的方式来描述逻辑,由编译器去转成带有计算机执行细节的机器代码。
  不同语言实现的编程范式不同,也就是描述逻辑的方式不同,这是语言之间最大的区别。 至于能做什么,这个不是区别,只要对系统调用封装一下,做成一些库就可以支持。
  比如 Javascript 最开始只可以在浏览器上跑,描述渲染逻辑,但后来有了 Node.js 后,它同样可以用来描述一些脚本或者服务端逻辑。
  像现在的跨端引擎,不就是对操作系统能力做了封装,通过 Js 来描述逻辑,然后由 native 来调用操作系统能力么?
  还有 electron、hybrid 等等,这些都是 Javascript 的 runtime,他们扩展的是 api,并没有扩展 js 语言本身。
  那什么扩展了 Javascript 语言本身呢?是 Typescript 这种编译成 Javascript 的语言,它提供了类型系统,可以静态检查出程序中的一些错误。
  为了分离逻辑的表达和程序执行的细节,我们实现了高级语言,这样程序员只需要专注逻辑的表达,然后通过编译器/解释器来转换成带有执行细节的机器语言代码。而逻辑表达有不同的方式,比如面向对象、函数式等,每种编程语言会实现其中的几种,这是语言之间最大的区别。语言只是表达逻辑用的,至于能做什么,则是 api的事情,只要对系统能力做下封装,就可以扩展其他的 api,进而可以写该领域的逻辑,比如 Node.js、Electron、跨端引擎等都是 api 的扩展。 总结
  我们从硬件、操作系统、编程范式三个层次来探讨了编程语言的本质:
  硬件是用电子控制机械,通过驱动程序来驱动硬件工作,而 CPU 可以描述通用的逻辑,进而控制其他硬件,我们就是通过控制 CPU 来间接控制各种硬件的,所以它叫做中央处理器。它提供的指令集所表达的逻辑叫做机器语言。
  操作系统实现了程序的并发执行,让一套硬件上可以同时跑多个程序,叫做进程。操作系统支持了进程、内存、IO 等各种调度。为了安全,把程序的执行分成了用户态和内核态两个状态,内核态才可以通过驱动控制硬件,然后把它做成了系统调暴露给用户态。各种语言的标准库就是通过系统调用来使用操作系统的能力的。
  机器语言是我们控制计算机最根本的方式,但是它要逻辑的表达和计算机执行细节两方面,为了分离两者,我们做了编译器/解释器来完成这种转换,这样我们只需要表达逻辑即可,这叫做高级语言。描述逻辑有不同的方式,叫做编程范式,每种编程语言都实现了某几种编程范式。不同编程语言的区别只是表达逻辑的方式不同,至于可用的 api,这个可以通过库或者 runtime 来扩展。
  所以,如果让你做一门编程语言,你要做什么呢?
  你要先选择一种编程范式,用它来表达逻辑,然后要设计细节的语法。
  之后实现编译器/解释器来让它能够转成控制计算机运行的机器语言。
  之后要实现对操作系统能力做了封装的标准库。
  然后如果你要表达不同领域的逻辑,则要实现不同领域的一些库,比如图形领域的、桌面端的、web 服务器的等等。
  这是实现编程语言的思路,也是我们理解编程语言的思路。

为了防守,我派出了全部前锋,组成无锋阵(上一期心血来潮选择了一个十一名首发球员全是守门员阵容,个人考虑难免不够周全,网友们在评论区提出了很多建议和看法,感谢大家的支持!作为一名实况玩家,总有一些莫名的收集癖好,尝试各种当今足坛谁能接替梅西的位置?当今足坛,梅西C罗巅峰已过,谁能代替他们的位置了?有以下几个人选内马尔姆巴佩格列兹曼萨拉赫菲利克斯。这几位人选当中内马尔格列兹曼萨拉赫年龄都有点偏大相对于姆巴佩跟菲利克斯,当内马尔崩坏3呆鹅身份实锤后,才知K琪生活不易,脑子不好使真不能怪她呦,大家好!这里是新年新气象,除了游戏抽卡依然接连沉船外,整个人都已焕然一新的一只舰长!(次生银翼的20片脚毛GET!)事情的经过是这样的!虽然关于幽兰黛尔真实身份的剧情,在崩坏3穷游自驾的省钱方法盘点单纯的想体验穷游的感觉,真不是因为穷自驾穷游最省钱的方法有几种随着国民超前消费观念被金融业所谓的收割产品创新洗脑后建立了大量的韭菜群体,越来越多的年轻人陷入小资穷人行列,负债累累者何止过亿,压力山大,不敢随意诉说不知肝癌防不胜防?身体出现这四个症状时,肝癌已经露出马脚肝脏,身体的解毒大师,却又被称为哑巴,不同于肠胃,只要受到一点损伤,身体就会有明显的反应,肝脏即便受到了损伤,身体几乎没有太大的反应,这才导致很多肝病早期很难被发现,最终一拖再拖,产后身体恢复慢?做到5早,让身体快速恢复年轻态无论是顺产还是剖腹产都大伤女性元气,生殖器官受到严重损害,因此需42天的坐月子来修复。产后前3天恢复至关重要,只要做到以下几点就能促进生殖器官修复,防止月子病,促进产妇身体恢复年轻骨头汤有什么营养?经常喝对身体好吗?营养师告诉你真相骨头汤味道鲜美,是很多人心目中的滋补佳品。特别是到了秋冬季节,喝下一碗浓浓的骨头汤,暖身又开胃。那么骨头汤有什么营养?经常喝对身体好吗?一提起骨头汤,大多数人想到的是补钙。动物体内首届斗神争霸赛开启!九大头部主播齐聚一堂,冠军头衔竞争激烈最近国内电子竞技游戏圈可谓是充满了话题度,各种不同风格专业游戏赛事的举办也令无数网友眼前一亮。此前由虎牙平台所举办的王者荣耀首届KPI杯赛事圆满落幕,期间通过面向全网各大平台主播战坐月子要不要洗头?这个问题众说纷纭,女明星亲身经历给你答案坐月子,对于这个大家都不陌生的词汇,我相信许多女性朋友也是既甜蜜又苦恼,因为这代表一个新生命的诞生,自己也成为了妈妈。由于坐月子期间,身体抵抗力差,稍有不慎就容易生病,所以在这段时教育出优秀孩子的父母都有这7个共性虽然培养一个成功的孩子没有一套完全可以复制的模板,但那些成功孩子的家长身上,都有我们普通父母值得学习的地方。毕竟有句话说的好要培养一个牛逼的孩子,自己首先得是一个牛逼的父母。什么样致家长2022年请善待每位严厉的老师,给孩子一个美好的明天璞玉不琢,任其蒙尘,终究无法变成美玉小孩不教,任其骄纵,终究无法出人头地。教育,一定会有严格的成分,孩子,一定需要严格的老师。凡是家长不与学校配合的结果都是悲剧一直以来,人们总在讨
刘畊宏直播说昆凌目前以产下三胎,是个小公主昆凌1993年生,妥妥的九零后,长相秀气,甜美,皮肤白皙,和周杰伦婚后,生有一男一女,两人时常公开秀恩爱,感情也是非常不错前段时间,昆凌公开自己怀三胎的消息,消息一公开,祝福声也是打造独一无二的世界,这款游戏用3年时间做到了三年前,多数从业者或许不会想到,一款小众的塔防二次元产品,能成为当时手游市场的黑马,持续走红至今,一并抬升了国产二次元的审美质感。塔防黑马设计感没错,这款游戏正是明日方舟。在逐步开西蒙斯复出时间确定,奥尼尔毛遂自荐湖人主帅,要价数字离谱NBA常规赛已经结束,季后赛正在进行,首轮对决过半,有人欢喜有人愁,篮网的状态显然远低于球迷预期,他们面对凯尔特人一胜难求,甚至连外界预测的抢七大战都有可能不会发生,如果把握不住接避免胎儿畸形,错过这个时间,宝妈基本可以放心了怀孕对于一个宝妈来说一定是幸福感爆棚的,但同时也是担忧的,最大的焦虑来自于这个腹中未曾谋面的孩子发育的是否良好。其实,这份担忧可以有,但不必持久,因为只要能够错过怀孕的头三个月,胎从半场8中6到全场16中9!从一换到五满场都是维金斯飞奔的场景如果说,最后时刻汤普森的那记三分没进,嘴哥能够再跳的高一点也许补扣就能补进了。再如果说,波特的吊球位置再给的远一点,嘴哥再跳的高一点,那么接到球可能就是篮下双手暴扣追平比分了。实际董洁晒13岁儿子,顶顶与爸爸潘粤明越来越像,桌上多了一副碗筷引猜测近日,董洁在社交平台上晒出一则在家做饭视频,从中可以看出,董洁做饭的手法还是非常娴熟的,菜品也是有荤有素,十分健康。此外,她还在线教学,教网友怎样做糖醋排骨好吃,看来这道菜她真是没惠英红一家八口一夜贵族沦为乞丐从皇族公主到街头乞丐,再到武打影后惠英红的童年充满了戏剧性,惠英红祖上是满族正黄旗叶赫那拉氏,他们家当时在山东是名门望族。惠英红父亲是惠家庄庄主的少爷从小娇生惯养长大,走路都是被佣2018年韩慧景去世,整容上瘾毁掉了自己,曾在脸部注射色拉油韩慧景为变美注射色拉油2018年12月15日,57岁的韩慧景不幸离世,大家除了震惊之外,她过度整容的故事也再度被翻了出来。想当初,韩慧景凭着出众的漂亮脸蛋和傲人的身材,成功跻身韩国42岁殷桃又美出圈!看了她无修生图,终于明白啥叫人间水蜜桃殷桃这两年凭借演技跟颜值,成功圈粉无数,顺利出圈。让观众看到女明星不仅身材好颜值高,演技作品这块更不在话下,人能够让想不爱都难。特别是在人世间里的表现,哪怕绑着麻花辫也藏不住风情万盘点梦断豪门的4位女星,大S闪婚初恋气前夫,刘涛替夫还债5年娱乐圈里不乏存在一些渴望嫁入豪门的女星,然而豪门似海深,她们有的隐忍数年仍不被接纳,有的却拿着数亿分手费远走他国,及时抽身。更有甚者,直接沦为豪门的生育机器。这些梦想当阔太,最终却杨丞琳又被说是形婚了?他俩又被说形婚了,不是同妻形婚的形婚,而是形式婚姻的形婚他俩自从19年领证以后,长期分居两地,女方并没有像其他嫁给大陆男明星的艺人一样,把家搬到北上,而是领完证,仍然不住在一起。粉