第一百九十四章 留下(2/2)
《魔法导论》作者:两元五角 2020-03-11 23:34
算机科学跟您!”
李力身心疲惫地抹了把脸,才反应过来水珠已经蒸发了,将玛丽扶起来以后说道:“来了实验室的话我们就是同事关系,当然如果遇到问题,我们可以探讨,共同进步,计算机的知识浩如烟海,它可以应用到人类的方方面面,从抽象到具体,从研究到应用,即便是我也仅仅有一些算不上多的灵感而已。”
“嗯嗯!”玛丽努力地点点头。
“就比如说你对语言的抽象化是怎么想的?”李力伸手将论文翻到了第二章节,指了指上面的文字。
“通过设计好的指令,将机器的执行细节掩埋,这样的话编辑者在编辑时就可以不用记忆和拆解每一个步骤将其指令,就可以开发快速。”突然谈到正题让玛丽一下子兴奋了起来,“很多步骤都可以包裹成一个命令,开发好的程序可以将命令转化为机器执行码。”
“但是你所说的其实已经将两个东西混杂在了一起”,李力指出,“语言和库。
“语言是用来进行逻辑编辑的,它通常基于某种抽象逻辑,比如数学,比如符文学,当然为了能让处理器执行,计算机语言已经将数学语言或者符文学语言复杂化了。而另一种东西则是库,也就是通过语言编写和封装的,可以被别人使用的成熟代码段,两者的关系就好像帝国语和诗词的关系,当你感慨‘念天地之悠悠,独怆然而涕下’的时候,就是在调用登幽州台歌的代码段。”
旁边的樾樾眼前一亮,刚想说话,却猛地捂住自己的嘴。
帝国语贫穷如玛丽,并没有感受到诗词中的韵味,但前面的逻辑她懂了大概,“语言只有我们定义,库不仅仅我们定义,也你们定义,也他们定义,和调用。”
“是的”,强忍着玛丽用错误语法编写的帝国语,李力点点头,“当然为了保证语言使用的简洁,编程环境一般都会自带官方库,我们会写一些通用的库内置进去方便调用,尤其是涉及外部硬件控制的指令,都会进行封装。”
“可是,怎么样能保证使用者按照库的编写者要求调用呢?”玛丽又问道,“我们提供库,要使用者调用正确能使用,但是不正确不能,这样怎么办?”
“哦?有一些没法封装的步骤,但需要使用者按正确方式调用么?”李力抬了抬眉毛,“举个例子。”
“材料加工程序,开始前必须检查材料的形状和纯度,一些半永久转换或者对称转换需要结束的时候转换回来。”
听了这个问题,李力摸了摸自己的下巴,“按照开放程度高的语言设计,这种需要前置或者后置的东西通常只是留出语法让使用者自己调用,当然如果对方没有调用就会出现系统级别的故障,比如内存泄露,比如锟斤拷烫烫烫什么的。。。”
“如果限制呢?”玛丽迫不及待地问道。
“这样的话,就需要运行环境,而且如果你真的要限制使用者使用方式,那么你所写的就不是库了。”
“那是什么?”
“框架”,李力说道:“与库不同的一点在于框架是控制反转,虽然这个词听起来挺高大上,不过意思就是原本是由使用者调用库来完成某些工作,但现在是框架调用使用者所写的一些东西来完成某些工作,既然如此,使用者就必须按照框架的使用规则来写这些东西。
“比方说如果你需要使用者在执行对称转换程序时必须初始化和销毁,那么你就必须留出初始化和销毁的接口,让使用者完善它,这样程序就可以在执行主体程序之前调用初始化内容,并在结束之前调用销毁。”
听了李力的话,玛丽兴奋地叫了起来,“就是它就是它!我在写转换程序时思考过这个问题,但是在编写c语言的时候总是无法将这个想法融入里面,原来是我搞错了!”
“c语言。。。”李力满脸纠结地看着玛丽,心想着要不要建议她换个名字,既然想做框架限制的语言类型,不如建议改叫java?
“当然了,这只是软件级别上的框架,如果你想要做到硬件层面上的框架,要求使用者按照你指定的规则,在你的控制下进行运行,那就是另外一种东西了。”
“什么东西?”
“操作系统。”
李力身心疲惫地抹了把脸,才反应过来水珠已经蒸发了,将玛丽扶起来以后说道:“来了实验室的话我们就是同事关系,当然如果遇到问题,我们可以探讨,共同进步,计算机的知识浩如烟海,它可以应用到人类的方方面面,从抽象到具体,从研究到应用,即便是我也仅仅有一些算不上多的灵感而已。”
“嗯嗯!”玛丽努力地点点头。
“就比如说你对语言的抽象化是怎么想的?”李力伸手将论文翻到了第二章节,指了指上面的文字。
“通过设计好的指令,将机器的执行细节掩埋,这样的话编辑者在编辑时就可以不用记忆和拆解每一个步骤将其指令,就可以开发快速。”突然谈到正题让玛丽一下子兴奋了起来,“很多步骤都可以包裹成一个命令,开发好的程序可以将命令转化为机器执行码。”
“但是你所说的其实已经将两个东西混杂在了一起”,李力指出,“语言和库。
“语言是用来进行逻辑编辑的,它通常基于某种抽象逻辑,比如数学,比如符文学,当然为了能让处理器执行,计算机语言已经将数学语言或者符文学语言复杂化了。而另一种东西则是库,也就是通过语言编写和封装的,可以被别人使用的成熟代码段,两者的关系就好像帝国语和诗词的关系,当你感慨‘念天地之悠悠,独怆然而涕下’的时候,就是在调用登幽州台歌的代码段。”
旁边的樾樾眼前一亮,刚想说话,却猛地捂住自己的嘴。
帝国语贫穷如玛丽,并没有感受到诗词中的韵味,但前面的逻辑她懂了大概,“语言只有我们定义,库不仅仅我们定义,也你们定义,也他们定义,和调用。”
“是的”,强忍着玛丽用错误语法编写的帝国语,李力点点头,“当然为了保证语言使用的简洁,编程环境一般都会自带官方库,我们会写一些通用的库内置进去方便调用,尤其是涉及外部硬件控制的指令,都会进行封装。”
“可是,怎么样能保证使用者按照库的编写者要求调用呢?”玛丽又问道,“我们提供库,要使用者调用正确能使用,但是不正确不能,这样怎么办?”
“哦?有一些没法封装的步骤,但需要使用者按正确方式调用么?”李力抬了抬眉毛,“举个例子。”
“材料加工程序,开始前必须检查材料的形状和纯度,一些半永久转换或者对称转换需要结束的时候转换回来。”
听了这个问题,李力摸了摸自己的下巴,“按照开放程度高的语言设计,这种需要前置或者后置的东西通常只是留出语法让使用者自己调用,当然如果对方没有调用就会出现系统级别的故障,比如内存泄露,比如锟斤拷烫烫烫什么的。。。”
“如果限制呢?”玛丽迫不及待地问道。
“这样的话,就需要运行环境,而且如果你真的要限制使用者使用方式,那么你所写的就不是库了。”
“那是什么?”
“框架”,李力说道:“与库不同的一点在于框架是控制反转,虽然这个词听起来挺高大上,不过意思就是原本是由使用者调用库来完成某些工作,但现在是框架调用使用者所写的一些东西来完成某些工作,既然如此,使用者就必须按照框架的使用规则来写这些东西。
“比方说如果你需要使用者在执行对称转换程序时必须初始化和销毁,那么你就必须留出初始化和销毁的接口,让使用者完善它,这样程序就可以在执行主体程序之前调用初始化内容,并在结束之前调用销毁。”
听了李力的话,玛丽兴奋地叫了起来,“就是它就是它!我在写转换程序时思考过这个问题,但是在编写c语言的时候总是无法将这个想法融入里面,原来是我搞错了!”
“c语言。。。”李力满脸纠结地看着玛丽,心想着要不要建议她换个名字,既然想做框架限制的语言类型,不如建议改叫java?
“当然了,这只是软件级别上的框架,如果你想要做到硬件层面上的框架,要求使用者按照你指定的规则,在你的控制下进行运行,那就是另外一种东西了。”
“什么东西?”
“操作系统。”