应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

编程语言的本质是什么?

  作者:神说要有光zxg来源:神说要有光zxg
  本文转载自微信公众号神说要有光zxg,作者说要有光zxg。转载本文请联系神说要有光zxg公众号。
  作为程序员,我们会接触到各种各样的语言:
  我们会用Javascript、Typescript来写前端应用,用Java、Go等来写后端应用,也会用Python来写一些工具脚本。
  每种语言都有自己的语法和擅长的领域,那不同的编程语言的区别是什么呢?编程语言的本质是什么呢?
  这篇文章我们尝试探究一下。从硬件到语言
  不同的语言最终都是控制计算机的一些硬件来工作的,从硬件层面来看他们是没有区别的。各种语言只不过描述逻辑的方式、api的封装方式不同而已,底层都跑在同一套硬件上。
  那硬件层面做了啥呢?
  就拿打印机来说,它本身是一个机械的结构,但是控制机械工作的确是通过电子的方式,也就是0和1的电信号,一般控制它工作的芯片都有不同的引脚,传高低电平代表不同的含义,那么就可以通过高低电平来控制打印机做不同的工作。
  控制硬件工作的程序就叫做驱动程序,它把硬件的能力做了封装,提供了各种api。这样,我们就可以通过程序控制各种硬件了。
  这些硬件中最特殊的是CPU,其他硬件提供的指令都是控制该硬件工作的,而CPU提供的指令确是可以描述各种逻辑,可以读写内存,进而控制其他硬件。
  这样我们就不用直接控制其他硬件,而是可以通过CPU来间接的控制各种硬件,所以,它叫做中央处理器。这些机器指令叫做指令集,由它所描述的逻辑,就是机器语言。
  硬件是通过电子来控制机械,提供了驱动程序,然后又通过CPU来实现各种通用的逻辑,进而控制其他硬件。CPU提供的指令集所描述的逻辑,就叫做机器语言,这是我们写的程序最底层的样子。为什么要有操作系统
  计算机上肯定不能只跑一个程序,那是最早的计算机,现在的计算机都是支持多个程序的并发的。但是不管跑了多少了程序,都是在同一个硬件上跑,只是做了顺序、优先级等的安排,这种叫做调度,实现多个程序的调度的程序就是操作系统。
  既然是为了让多个程序都能跑在同一个硬件上,那得先给这个跑起来的程序一个名字,就叫做进程。进程调度是CPU最主要做的事情。进程要用各种硬件,那也就还需要内存调度、IO调度等。
  总之,操作系统主要做的事情就是支持了程序的并发执行,把各种资源统一管理了起来,实现了进程、内存、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服务器的等等。
  这是实现编程语言的思路,也是我们理解编程语言的思路。

班列运行版图再次扩大!这里又拓展了开放发展的朋友圈编者按:自2011年3月19日首列中欧班列即重庆杜伊斯堡班列成功开行,历经十余载探索和实践,中欧班列开辟了亚欧陆路运输新通道,通达欧洲24个国家200个城市,逐步连点成线……全球罕见病例男婴四手四脚深圳一男婴出生时4手4脚深圳出现一例全球罕见的寄生胎的婴儿深圳一名男婴出生时,四手四脚这并不是什么值得高兴的事情,因为这个小小婴儿刚刚出生就要面临高难度的手术。……配电智能运维系统管理平台都有哪些功能?易电务配电智能运维智能电力监控系统15年国网电力信息化技术积淀现如今,电力领域的新技术应用飞速提升,其运维智能化管理也慢慢开始发挥作用,这对提升用户侧配电室运行安全、智能……猪身上的这些部位,可能不利于健康,请你谨慎选择我国是一个猪肉大国,猪肉也是我们餐桌上最常见到的肉类食物之一,其实猪肉的用途非常广泛,比如平时炒菜的时候放入一点猪肉,就能够让饭菜吃起来非常美味。同时猪肉还能够做成其他的……人均100元,在长春带爸妈去哪玩?今天来推荐几条路线,绝对是省钱又有趣的旅行!而且很多都是电视剧《人世间》的取景地,追剧的爸妈肯定喜欢!提醒提醒:1。出行前,一定提前了解景区景点开关时间、门票……金顶小记金顶!金黄夺目,流光溢彩。今古奇观,遐迩闻名。人声嘈杂,没掩去其神秘;色彩绚烂,未淡化其玄虚。云海美景,令游客心驰神往;日出奇观,使驴友魂牵梦萦。如巧合,可览圣灯朝佛;若投缘,……全球首套LPL选手藏卡正式发售一起记录荣耀时刻2021年11月7日凌晨,英雄联盟S11全球总决赛中EDG3:2击败DK赢得总冠军,电竞粉丝们彻夜狂欢,大半个娱乐圈明星为之打Call,各赛事直播平台的观看量高达11。7亿。那……颐和园天坛公园300余种公园礼物走进服贸会公园礼物9月1日至5日将第三次走进服贸会,以美丽园林历史名园公园礼物为主题,集中展示颐和园、天坛公园、北海公园、香山公园等北京历史名园带来的300余件文创产品,并开展10余场公……生活并不温柔,想要的东西努力去争取产前已经很用心的在准备了,没有想到还是拉下了一样东西叫乳盾。我是乳房凹陷,所以刚生下来娃吮吸母乳的时候吸不出来奶,娃娃急的哇哇大哭。由于我又是剖腹产肚子特别疼,根本没有办法做起……男篮新教练组!杜锋表态离职,新帅百万薪资,名宿出山分工明确在世界杯预选赛第五窗口期的赛事中,中国男篮先后以8172战胜伊朗男篮、8067战胜巴林男篮,球队取得两连胜,成功晋级世界杯。在比赛结束之后,杜锋表示:祝福大家一切安好,希望中国……提升微观主体信心是经济复苏的根本文丨郭强(某金融机构宏观研究员)今年以来,国内经济遭遇多重因素的冲击。上半年,我国GDP为562642亿元,按不变价格计算,同比增长2。5,其中二季度,按不变价格计算,同……加好友就能送煮饭煲?是诈骗!菜鸟驿站提醒市民谨防冒名诈骗短信双十一购物狂欢过后,以快递短信形式进行诈骗行为的案件随之增多起来。近日,有网友反映,收到一条显示为菜鸟驿站发送的短信,内容显示:【菜鸟驿站】您好,鉴于近期您用菜鸟驿站过9次,加……
20230101迎新年梅里雨崩徒步虎跳峡徒步,领队小团,9天先去虎跳峡第一可以适应高海拔缓解高原反应,第二提前将小强度的徒步作为拉练,让体能快速适应高海拔环境;徒步为主题的活动不同于常规旅行,队员多了体力参差不齐而领队的精力有限,……今日共有19家公司9。57亿股限售股解禁,中国电研普门科技华Wind数据显示,周一(11月7日),共有19家公司限售股解禁,合计解禁量为9。57亿股,按最新收盘价计算,合计解禁市值为379。57亿元。从解禁量来看,11家公司解禁股……芬兰最新调查报告俄军打仗花了1000亿,但卖能源赚了1580普京在第七届东方经济论坛全体会议发言37分钟!这是俄总统普京在第七届东方经济论坛全体会议上的发言时间,这也是普京自参加该论坛以来发言最长的一次。不过发言虽长,总结起来倒也……单依纯为什么连续两年缺席好声音中秋晚会?有三点原因2022《好声音》中秋晚会状况有点多,节目组邀请的彺季学员几乎都是前几季李荣浩战队的学员。仔细看了一下,不是李荣浩战队的,只有赵紫骅、伍珂玥两人。而本季学员中,李荣浩战队……从北京到天津研发进口替代芯片,这家企业今年已获大订单北京日报客户端记者白波一眨眼的工夫,天津见合八方光电科技有限公司在渤海之滨的中新天津生态城落地,已有三年时间。总经理王伟在北京创立的北京见合八方科技发展有限公司,今年已获……央视直播中超!山东泰山队VS武汉三镇队!北京国安队对阵河北队北京时间9月12日消息,中超公司发布中超联赛第18轮转播计划表,央视直播中超比赛。中央电视台直播2022赛季中超第十八轮比赛,涉及山东泰山队VS武汉三镇队、北京国安队对阵河北队……体长超3米重467公斤,首只沪籍小虎鲸胖豆丁今天1周岁中国首只沪籍虎鲸宝宝胖豆丁一周岁了。小虎鲸见面会本文图片均由上海海昌海洋公园提供9月10日一早,就有不少游客前往上海海昌海洋公园,去虎鲸展缸区域看望小寿星。中午,小……130万买理财10年仍未收回本金!理财产品变私募投资者怒告银来源:中国证券报又一起买金融产品纠纷案曝光。裁判文书网日前披露的一则文书显示,家住上海的一名男性曹某于2012年在银行员工推荐下购买了130万元理财产品。曹某回忆,……13900名科学家联名警告地球18个器官已衰竭,人类应该深思综述在电影《流浪地球》中,科学家发现太阳系已经不适合居住,于是全世界联合在一起,通过抽签的方式,将一部分人转移到安全的地下城中生活,以此将人类文明延续下去。人们前赴……华为mate50台积电4nm骁龙8【华为Mate50系列新品售价公布】今晚18:08分开售Mate50E(骁龙778G)8GB128GB3999元8GB256GB4499元Mate……2022昆明高原半程马拉松开跑奔跑春城花都邂逅健康之城图为2022昆明高原半程马拉松在昆明会堂开跑。记者赵伟摄选手在比赛中。选手参与亲子跑。选手冲过终点。昆明信息港讯(昆明日报记者王姗)11月13日,202……中国男篮迎战巴林男篮,杜锋王哲林争夺胜利,球迷热议最近中国男篮已经在世预赛第一场比赛打败伊朗男篮,接下来将会进入11月份最后一场比赛的争夺,面对老对手巴林男篮。这场比赛的目标就是要争夺两连胜,获得两连胜之后后续就大概率能够进入……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网