粉丝18.3万获赞286.4万

大家好,上一个视频给大家介绍了如何搭建一个岁月的开发环境,但实际上还不够, 因为上一个环境搭好之后呢,他只能运行,他不能调试,所以,呃,这个视频呢,主要给大家进行一定的补充,通过这两个视频呢,大家搭建的环境就完整了。 我觉得做这个视频啊,真的很费时间,因为我刚才录了一段呢,又感觉到不是很好,有些持续啊,有些内容又缺失了呀,又重新做了一下,真的挺费时间的。 主要要配置三个文件,这里我要给大家说一下这个配置呢, 有两个层面,一个是基于这个软件层面的配置,也就是说我们通过这个软件开发 呃,不同的项目,对吧?有些配置是一样的,不同的项目配置是一样的。那么如果是这种配置呢,我们应该放在这个软件的场面,这种配置应该从这个地方进去。 还有一类配置是卸于这个项目的,就在每个项目里面,他的配置有可能都不太一样。 比如说有一项目你开发汽罗斯这个型号的 cpu, 另外一个项目开发不同的型号 cpu, 对吧?那肯定是只系局限于这个项目的,像那种配置呢,就应该在这个地方局项目里面的这个配置,他各种 追胜文件。首先我们看一下这个全局的一种配置,全局的要配置什么呢? 比如说我们的 b 七是吧?我这里呢就配置一个全局的这个 b 七的路径。 他的配置方法也有两种,一个是这个是用户界面可视化界面的方式,对吧?还有一种呢,就是追胜文件, 我喜欢在这写元代码的那种方式,你随便点一个,这里有这里就可以了,要不然特别难找, 他的内容非常丰富,很难找,我打开就行了。在这里呢我要跟大家说,呃,你不用看我的代码具体是什么样的, 我最后会出一个头条的这个文章,我把三个不同的配置文件的源代码的拷贝上去。然后我这里呢就给大家说一下哪个地方你需要进行修改就行了。 在这个地方呢需要修改的是这个,这个就是我们配置这个变异器的路径, 这个地方要指指定的,因为我安装的路径跟你的可能不太一样,这里需要修改一下,其他的你都可以直接拷贝的。 第二个呢就是在 变异的时候,我们变异的时候 要让这个项目进行变异,我们运行的叫任务,他这里叫任务,我们配置一下这个 啊,对,他这个就实际上打开了这个了,天使这里是空的,你这里配置好之后他这个文件才能在这里立出来。 同样的呢,嗯啊,这个地方已经有一个,我把这个这是点击之后他新加了一个,我把他删掉,你们是不需要的,因为我已经有了。 看这个这个有的是吧?到时候往回贴出来的我就给大家指明一下。这个看慢的就是比起刚才比起的路径,这是一个你可以有两种汽车是也可以, 都没关系的。 然后这里呢就是变异运行这个变异的气的时候呢,他 要附带的一些参数,这个参数啊,我们变异就是把,呃,我们写的这个程序是一个文本文件,对吧?转换为,嗯,电脑可以识别的目标文件吗?那么这个就是原文件 格式,然后这是原文件,然后这是目标文件。欧,就是奥布这个,然后深层的文件的名称,深层的文件名称呢? 你看他这里就一个同样的名字,就是基础杨文杰,不带这个后缀的的,基础杨文杰的名称加上 yes e, 我们这个基 文件就是 man, 对吧?那么他这里生成的目标文件就是 man 点 ex e, 所以啊,其他的都可以直接用,你就要修改的就在这里。那这个文件怎么用呢?我们就是 这个就行,一行这个就行了,用快捷键写着 ctrlift 的笔, 然后他就直接执行了,生成了这个 mandyex e 文件,如果你的程序代码有误,对吧?那么他这里会爆出的是不可能成功的, 下一步还要进行调试,对吧?调试的话我们要指明调试器,在这里,我们打开配置文件, 当然我这里也配置好了,对吧? 这个内幕呢,是你写四的一个名称,你可以随便写,根据你自己的喜好,对吧? 然后呢,这个地方,呃,就是我们前面编一好的这个可知性文件,当然我这里直接写了个妹,应该把这个原来的考过来,可能会更好一些, 就是把这个这样的话就一致了,对吧? 对,就可以了。 这个就是我们需要调试的格子井文件,然后呢, 调试器是这个参数,指明调试器的位置贴在调试器,我们用的是 gdp, 所以你要根据你的情况指明一下位置就可以了,其他的你都可以直接用。这里有一个要给大家说明一下的,我刚才就忘了。呃, 这个是我自定义的名称,你也可以修改成任意你喜欢的名称,对吧?与加载任务,他这个任务是什么? 你自己设这里,这个设一个名称,那么这个任务就是我们刚才这里设置的任务, 看到没有?这两个任务的名称必须一致啊,这个大家千万别挖 了,数字的话也是不行的。好了,这三个全部配置好之后,我看才笔也好了吗?我们再调试,就是三点八根,快点进去,是 f 五 啊,这里按下一个断点,你看他就执行到这个断点这个地方停下来了,我们如果代码更多的话就可以进行调试了, 我们后面再给给大家看。怎么刚才变练啊之类的,因为一个视频太长了。

嗨,大家好,我是周敏,最近忙的实在有点焦头烂额,所以呢,更新的频率变慢了啊。今天呢,我们来到 ai 变异器的第二节,主要是讲讲变异器的发展, 今天的内容呢比较轻松愉快,主要是为下面两节课进行铺垫的,而下面两节课呢也会稍微有点硬呵,所以今天我们就来点轻松点的内容。 其实今天的这个标题呢,我是想改成两大开元兵器的相爱与相杀,或者两大开元兵器的恩怨情仇。不过呢,这两个标题都有点哗然取众,所以呢,我就改成编译器的发展,这个比较文艺的名字,或者比较比较研发的一个 名字了,绝对不可能。下面呢我们来回顾一下上一节的内容。什么是编译器?我们可以看到下面的这个图呢,首先编译器呢就是我们实现的一些高级的语言,通过这些高级语言,机器是没办法去识别,也没办法去跑的,这是给我们人去看的。 现在呢,我们有一个黑盒子,这个黑盒子呢叫做编译器,那编译器这个程序呢,把我们刚才写的或者我们人读的一些高级语言作为输入输进去,接着呢他输出是一堆零一零一的一些二进字码, 那右边的这些二进制码呢,才是真正被我们的硬件,被我们的计算机,被我们的不同的芯片所识别,所运行的真正去咨询的程序。所以说呢,编译器非常重要,它是连接我们人类跟 机器的一个重要的桥梁。下面我们来看看一个变异器的组成。首先像我们刚才所说的,我们把一些 south co 就是高级语言输进去变异器,变异器吐出一些可直行的凹进字码, 中间的变音器。我们实际在程序里面或者在开发阶段呢,分成三段,第一段是前端,第二段呢是优化的阶段,第三段呢叫做 back and 后端。 下面我们来看看编辑里面的每一段都有哪些作用。首先第一段就是我们的前端,主要是负责对我们的原程序 进行一些转换,做一些吃法分析,语法分析,把它呢变成一个抽象的语法术。那这时候呢,我们不需要知道语法术是什么,我们后面会简单的去给大家讲讲什么叫做语法术。接着 在优化器阶段呢,就是中间的这个阶段呢,我们会基于前端的基础之上呢,在上一节里面呢,我们叫做哎呀进行优化,使得我们的代码呢更加高效,那这个高效呢,主要是指执行起来的更加高效和简洁。 那在后端呢,就是将我们刚才已经优化得到的一些中间代码,或者中间表达哎呀转换成为针对各自平台的一些机器码。那可能叉八六他有一种独特的方式, 那么里面又有独特的方式在 gpu 上面去执行,他又有独特的机器码,每种机器码都是不一样的,是后端会对接到不同的硬件上面。 下面呢我们来真正的进入我们的相爱相杀系列,去讲讲 gcc 和 lvm 之间的爱恨情仇和他们之间的发展方向。 gcc 其实已经是上个世纪的 一个产物了,比我的年龄还要早那么几年,在一九八七年的时候呢, wechats 锻炼呢就发布了 gcc 的第一个版本,第一个版本不是零点一,而是一点零哦,一点零的 gcc 呢,主要是作为 gnu 的一个 c 语言的变异器, 那个时候刚发明,其实只能够处理 c 语言, 他已经支持了非常多的语言, 有 c 家家呢, fart 呢, pascal, optopusc 了,还有交往等非常丰富的语言。那讲完他能做啥?下面我们来看看他具体的故事。 具体的故事其实我在 viki 百科里面呢,做了一个简单的摘录,上面那段话没什么好看的,我们来看看下面的这个图图。上面这个胡子拉扎的兄弟叫做 wechat stomach, 他在一九八七年的时候呢,就记 gnu, 那 gnu 又是个什么鬼呢? gnu 的名字呢,我们又可以调侃成另外一个故事。不过这里面呢,我们不再展开 gnu, 他不是一个 newness, 虽然 newness 这个单词呢,对大家来说不陌生,我们大部分时候用的开源系统叫做 gnu is not new next, 就是指 next 一系列一类型的开源操作系统。 ims 呢,就基于这个开源操作系统了,去发明了一套变异器,那这套变异器呢,就是基于 gnu 去开发的,当时候开发指这是 c 语言变异器。 为什么要讲这个故事呢?在八十年代,美国非常支持一种或者非常流行一种 tp 的文化,也就是披头饰,那时候的披头饰讲究的就是自由散漫,所以这个丝绸呢,已经波及到我们的软件界了。左边这个胡子拉大的胸 地呢,其实看着有点不修边幅,实际上呢,他是非常推崇一种自由、博爱、民主的思潮, 其实这个思潮之下呢,他就孕育出了一个非常自由博爱、知识开源的 gcc 的变异器,在 pcc 之上呢,又构筑了非常多的开源软件。 谈到开源软件的另外一个对立面就是 apple。 谈到 apple 的一个印象啊,就是他的生态很开放,但是他的操作系统和内核非常的封闭。 其实在八十年代,九十年代的时候啊,苹果没有那么多钱,或者他没有那么多大的心思去改为一个自己的变音器,那时候的苹果想蹭就蹭,能蹭多少蹭多少,我绝不吝啬安排。虽然我们现在去苹果, 发现苹果店里面白白的桌子上面其实就放了几台 iphone, 但实际上苹果它有非常多自己的一个系列,在一九九八年的时候,它已经推出了自己的个人笔记本,然后还有 ipad, my book 的笔记本,还有 iphone 系列的软硬件非常多。而这里面我们看到它的操作系统也是非常复杂的,从 macos、 ios, washos 到 tvos, 在语言方面呢,同时支持 c c 加加、 to c 还有 switch。 而 cpu 方面呢,一开始从 ibm 合作推出了 powerpc, 然后引进了叉八六, 在最近的这几代呢,居 m 的 v 六 v 七 v 八加购开发了属于苹果自己的芯片。苹果这时候就看到了,我有这么多语言,我还有这么多的硬件,中间是不是应该来一个厉害点的编辑呢?苹果本着能蹭就蹭的一个原则,采用了一个 免费的开源的编译器 gcc。 苹果使用了 gcc 编译器之后呢,不是基于开源之上的,而是要进行一些定制的,例如 optionsc 这些语言,而且有自己的一些独特的需求,还有商业上的决策。那这个时候呢,我们从 gcc 的开源代码舱里面 可能某段时间去和进去,某段时间我们想把一些重要的特性和回我们的开元仓,有时候我们希望从开元的代码里面又获取一些新的特性。到里面使用了一段时间之后,苹果发现怎么我的版本管理越来越乱, 版本管理的成本都已经比我从头开发一个 gcc 还落后了。而且到了后来发现 gcc 的包袱实在太重了,与其使用 gcc, 我还不如自己造一个。于是呢,在两千年左右,苹果就引入了一个人才叫 做 crystal。 拿听呢,我不知道我这个名字读了对了没对,如果我读错了,欢迎大家弹幕来投诉。 别看 chris 这么帅,其实他是一个学霸,在他本科毕业的时候,他已经把 comply as principal technology and talks 这版编译器的胜书已经翻烂了。翻烂之后,他觉得现在的编译器啊,实在写的太烂了。 于是呢,他发表了一篇又一篇关于编译器的论文。在他硕士期间就提出了编译链接运行,甚至闲时的优化, 整一套从体系的编译的思想。在他读博的时候呢,还跟着导师做了一个小程序,这个小程序就是 l l v m 的雏形。等他零五年毕业的时候呢,已经是编译器领域的一位专家了,一毕业马上就进了, 就开始大展身手。首先第一个大展身手的地方就是欧喷 glopgl, 也是苹果主推的一个图形图像处理的语言。一开始的时候,苹果并没有平息到 gcc 而直接使用 lvm, 而是把 gcc 作为高级语言的前端,把 lvm 呢作为变异器的后端,通过 llvm 的变异器能够对接到苹果的不同的硬件上面。 在十几年前,二零一一年的时候啊, gcc 占比其实还比 lvm 高,但是呢,到了后来, lvm 逐渐的成熟, gcc 的占比越来越低。而 lvm 也不是一个苹果专属的软件,而是作为开源界一个非常重要的软件开源开放给大家,前端也不再使用 gcc, 而是使用 ceon。 所以我们在苹果 bbc 加加代码的时候呢,会经常看到 c 浪 讲完两代开元编译器的相爱和相杀,你以为到这就结束了吗?并没有, 这个就是爱情。 gcc 编译器呢,主要是基于 gnu 或者 linears 类的操作系统, 而 lvn 呢,则是基于苹果操作系统而开源实现的。两个大的操作系统都有自己的编辑器,而 windows 又怎么样呢?我们的蓝色居然去了哪里呢? 其实针对微软,从九七年到现在啊,他已经推出了一系列的编译器,只是我们很少去感知,而以为他就是一个 id。 从一九九七年到二零一七 七年,我们一直都用的是 visual studio, 也是周敏上大学的时候经常去用到的,而这些边下其实都要收钱的。你以为 views of studio 是个打代码的 id, 实际上它是一个 microsoft windows 的变异器。 随着开元浪潮的兴起,后来 vcoast 丢丢呢,就改成 vcoat, 而 vcoa 呢,是一个纯粹的 ide, 里面编辑呢,就结偶出来插件的方式使用另外的编辑,所以我们可以看到小的 vscoat 呢,只有几十兆,而 vcoast 丢丢呢,大致只有好几个 g。 当初中米在读书的时候就没少折腾过 visose 丢丢二零零八的盗版软件啊,真香。哎呀,卷的不行了,卷的不行了,记得一键三零加关注哦,所有的内容都会开源,在下面这条链接里面摆了个摆。


有个朋友说变异软件这个你 c 的话就是 gcc, 或者如果你是像我一样在麦克上的话,他叫 colon cl n g 他是本身就带的有的。然后如果你是在 linox 的话他就是 gcc 啊,如果是 windows 的话你可能需要下名 w 然后加瓦的话,加瓦不是特别熟啊。加瓦你就是那个加瓦虚拟机嘛?加瓦的 sdk 你直接从凹入口的官网去下,他的 sdk 之类都是可以下的。

本期学习代码编辑器的开发,即语言的编译器已经和编辑器分离了,把代码保存到文本文档里就可以编译。先来开发一个最简单的文本编辑器, 在窗体上画个大文本框用来编写代码,再设计小文本框用来写文件路径。然后再设计一个按钮,用来编译程序名称,分别改为文档路径和编译 两个文本框的标题可以改成空值。在点击编译按钮时,读取大文本框内容,保存到指定路径的文件里。 在创体消息这里,判断消息为单机组件,如果参数等于三,也就是点击编译按钮时去调用编译程序这个代码函数。在编译程序这个函数里,申请几个变量, 文件内容和长度这三个整数变量内容是申请一段内存来读取代码,测试代码不会写太多,申请了一 k 内存,读取的内容要保存到文件里, 那应该再加个文本变量名称,申请长度为三十二字结,读取路径这个窗口里面的文字到名称这个变量。通过这个文件名创建一个文件, 应该先读取代码文字到内容缓冲区,指定读取最大长度是一千零二十四字节,读取的真实长度返回到长度的变量,然后把内容数据写入指定长度到文件,写入文件之后要关闭文件才能更新, 然后就可以运行编译器程序进行编译了。编译器程序名称是 sake exc, 还要把代码文件路径加 到启动参数,在运行的程序名后面加上空格,空格的后面写上代码文件的路径名。使用格式化这个函数组合这两段文字当然也可以使用组合式函数,用法一样,中间参数是把名称文字写到 s 这里, 给工程起名叫编译测试。编译失败了,难道是编译程序这个名称起的不对吗?改成编译测试仍然不行,不知道错在哪,就一句一句删除代码,直到编译通过就知道错误出在哪里了。 发现是读窗口字的代码写错,查说明书里是取窗口字,一字之差啊。刚才没加运行编译器的代码, 先运行测试一下写的文字能不能保存,可以写绝对路径,也可以是相对路径, 保存到 txt 文件里的内容是正常的。现在把运行编译器的代码加上,结果输入法调不出来,只能用记事本了,即语言编辑器问题太多,所以要重写一个。现在把运行编译器的代码也加上了。 窗口程序要先写一个夹在窗体的函数,但是编辑框不能换行。把允许多行选上水平滚动和垂直滚动条也顺便选上。编译之后继续写代码测试 的模块已经把入口程序代码都内定了,窗口程序必须有加在窗体这个函数名,然后复制窗口剧中和创建窗口的代码,还有窗体消息这个函数名也内定了。创建窗体之后还要循环读取消息,程序 才能保持运行,否则运行就关闭了。程序图标没加窗口居中移动放大都正常。修改窗口的宽和高,改的数字太小了。在代码的开头加上程序类型等于二,就是设置为控制台程序。 这种只用独字符函数就能保持运行。运行的程序也是个空窗口,使用写文字函数,写一行字到窗口上,文字内容就随便写了,能显示就行。 程序窗口显示的就是代码里的文本,程序类型等于一是 dll 链接库,默认是零,也就是标准窗口程序。如果圆码是多个文件,如何编译呢?比如把创建窗体的代码保存为一 txt, 再把控件事件代码保存为二 t xt 还需要创建一个列表文件,暂时命名为十三,然后打开编辑它,在这个文件里每行写入一个文件名,注意列表文件扩展名必须是大写 sc, 以前的二进制元码是小写四 x, 编译后的程序又是一个代码编辑器。由于编译器 sex 一是有管理权限的程序,刚生成的程序却没有盾牌小图标,所以要用管理员权限运行程序直接双击运行,只能保存代码, 却无权启动编译器,系统权限太麻烦了。用刚生成的编辑器写两个文件名进去,注意文件名要改,扩展名用大写 sic 改成幺二三四 sc 编译测试一下。编译之后直接点击运行,也有管理 权限,手动运行却要选择管理员身份运行。再来编写一个 dllll 链接库程序程序类型写一,随便写个导出函数,点击编译 dllll 文件已经成功编译好了,今天就先到这里,我们下次再见!
