本科独立用C语言完成没有优化的C语言编译器属于什么水平?

如题所述

我觉得水平还是很高的,但意义恐怕不大。编译器技术是非常成熟的领域,而且由于应用场景的限
制实时,复杂的算法已经自动出局了,你可选的东西是有限的。编译器可能有很多实现的形
式,虚拟机/解释器/静态编译器 等,也有成熟的开源实现。作为本科生,而非专门研究该分支的学生,应该合理分配自己学习的时间,如果做这个编译器就干
掉了大半年,那计网和OS这些课程该咋办? 

我知道很多人会认为没有做编译器优化特指中段优化,不考虑机器码上的优化比较划水。但编
译器优化是一个很复杂的东西:首先它和你用的IR表示有关而且是强烈耦合,SSA IR基本还
好,有开源代码和文献记载,你想要的都能在网上挖到但这怎么体现你的水平是吧。你
要考虑编译器的性能,尽管编译器的后端优化基本上可以纳入到某种PEabstract interpretation的
范畴中。

一、但是直球实现这些算法都在指数级,所以只能折中成某种图论算法 ,理解这些奇怪的算
法变体就要花时间了。最后,所有命令式语言必须考虑pointer alias 的问题,这个课题本身都足够
开一门形式验证的课。在C编译器里做这个更加复杂,因为你有pointer cast与arithmetic,没法直
接用TBAA得到好的结果,然后光是整个这玩意就够呛的。 

做一个功能完整的C编译器是相当困难的:首先最重要的原因,做这个耗时,且完全没有资
金回馈,会导致动力不足。要考虑到学生的时间也是金钱,不是可以随便浪费的。很多功能
本来就是有问题而做不出来/做不对的,比如restrict语义以及和某些弱内存模型/多线程的优化,以
至于近些年不得不让PL学者在上面打了无数补丁来修正这些有问题的东西。 

二、这就是为什么实现Lisp编译器是对于学习者来说更简单的选择,Lisp不需要有这些乱七八糟的、理
论上不清晰的构造其实还是有的,就是如果你要做Lisp静态编译,那有够你受的,不过这个全天
下也没几个人做的出来的,所以也不用妄自菲薄;可变性少,因此pointer的问题不用太在意;基
于AST或某种ANF形式的优化更加直观等等。

放在中国大学来说,是中等偏上水平,放在国际一流计算机名校哪里,是基本水平。并不是危言耸
听,自己去看下那些名校编译课的课后大作业。
中国的大学编译原理 课程更多的是古老过时的原理概念,真正的编译器课程是从头写实践一个编
译器。
中国的大学编译原理基本篇幅都在讲分词和ast,真正的编译器课程教你怎么设计IR ssa cfg 优化。 

三、C语言编译器其实算是有丁点难,主要是因为细节太多,如果要真正实现一个能完整编译开源项目
比如编译libc 的c语言编译器,很少人能做到,大部分大学生写的c语言编译器只能编译基础的c代
码 ,比如我,要完成一个完整的支持全部c语言能编译libc的c编译器需要做很多工作,我并没有持
续下去而是更专注后端。简历里可以写一笔,但意义不大,因为这只是从无到有的过程,从有到
精的过程是个无底洞,不考虑时间精力你都基本是吃不下的,到头来只是造了个玩具。

每个程序员
都有造轮子的理想,但是我觉得操作系统编译器这种太底层的对普通人来说意义不大。个人建议可
以去造框架这一层,因为这是实实在在有利于你以后的业务开发,只要你肯投入时间精力你完全可
以吃得下且通过你的不懈努力完全有可能造出成熟的生产级的被广泛使用的框架。那时候你获得的
成就感将远大于你造个玩具编译器或操作系统,甚至还会给你带来可观的收入。至于造哪方面的轮
子,推荐和你以后想要从事的领域一致,前端就前端框架,后端就后端框架,或者细化到相关的库
走精品化路线。

四、你已经在编译器这块卷死了99.9%的同行,但是到这里这仍
然是只是一个能用但不是好用的编译器,你看github上的tiny compiler很多,你用么?你敢用么?不,
你不敢,且不说小作坊编译器存不存在各种各样奇奇怪怪的bug,你把代码写好了怎么调试都是个大问
题,所以为什么叫toolchain toolchain,脱离编辑器,调试器和分析工具的单打独斗的compiler就是玩
具,而一个好用的编辑器和调试器。

这两个哪个是省油的灯,你试试写个editor试试,我们就算不扯永恒
屎山编码问题,光一个富文本编辑的渲染问题都够你醉生梦死了,调试器更是和编译器实现高度相关,
如果你编译器一开始就没有考虑好如何做好符号表映射一类的调试问题,那等重构吧,有的你酸爽了。不要问我怎么知道的.如果你想从头建立整个toolchain,你首先要考虑的不是技术问题,而是你有多少
钱和多长命的问题,整个时候。

要不然你可以通过编写插件的方式白嫖例如visual studio code这类软
件的强大编辑功能,如果你写的不是c compiler,你也可以尽量把语法设计得很像c,这样你又能进一步
白嫖其强大的intellisense code,当然仍然有不少人或者应该说团队达到了这一步,到这里,应该卷死
了99.99%的同行应该毫无问题。

温馨提示:内容为网友见解,仅供参考
第1个回答  2022-10-02
这个属于很高水平了,因为很多人本科毕业之后都还对编程一知半解。能独立编程绝对是一个人才。
第2个回答  2022-10-02
在本科学习C语言的过程当中,能够做到这样的成绩,也算是一个中等水平。优秀的学生还可以优化编译器。
第3个回答  2022-10-02
学习C语言的程序员都知道,指针是C语言中最常用也是最基本的,很多程序的BUG都是与指针熟练程度有直接关联,所以老手平时喜欢说新手如果这个你都搞不懂,你就应该再去看看C语言的基础。

本科独立用C语言完成没有优化的C语言编译器属于什么水平?
三、C语言编译器其实算是有丁点难,主要是因为细节太多,如果要真正实现一个能完整编译开源项目比如编译libc 的c语言编译器,很少人能做到,大部分大学生写的c语言编译器只能编译基础的c代码 ,比如我,要完成一个完整的支持全部c语言能编译libc的c编译器需要做很多工作,我并没有持续下去而是更专注后端。

c语言编译器是用什么于语言写的
第一个C语言编译器应该是用汇编写的,但是第一个成熟的C语言编译器应该是由汇编和C语言共同写的。编译原理讲到了“自举编译器”。大意就是先用底层语言(应该是汇编)写一个能运行,但效率极低的C语言编译器(底层语言不好优化),有了C语言的编译器以后,就可以用C语言好好写一个编译器了,用之前...

我是一名在校大学生,还没毕业,学了c语言,但不知道它有什么用,我想...
用C语言挣钱很正常,C语言能完成几乎所有的工作,上到图形界面与网络通信,下到系统内核,如果你想仅仅用C的话可以选择Linux平台,现在在Linux平台C语言还是主流的,如果想选择Windows平台建议还是用C语言写一段时间,然后再选择其他框架,毕竟Windows系统的机制你需要时间熟悉与掌握。争取把计算机专业的核心课...

现在C语言的编译器是否都集成了开发环境?
在当今编程世界,C语言编译器已经从传统的独立工具转变为集成开发环境(IDE)的主导。首当其冲的是Borland C++5.0,它曾是初学者入门C和C++的热门选择,因其用户友好性和广泛的资源支持。如果你在寻找,可以在各大下载平台如迅雷上找到它,但请务必避免绿色版,以确保软件的完整性和安全性。然而,并非...

为什么很多人建议学C语言不用任何IDE,直接用编辑器和编译器
其实对新手学习c语言来说,直接使用编辑器和编译器不是明智的,因为对c语言本身不了解的情况下,IDE会帮助新手解决一些他不需要关注的问题,如果独立使用编辑器和编译器,会加大新手判断问题的难度,不利于学习基本语法和编程方法,只有对c有了一定的了解,知道从编辑,编译,执行的整个过程,再来独立使用...

为什么c语言的编译器可以用c语言来写?
其本质在于对文件的读入,分析,及处理。这些操作,C语言都是可以实现的。所以用C语言来做C语言的编译器是完全可行的。但是,历史上的第一个C语言编译器,肯定不是C语言写的,因为在没有编译器时,无法把C语言转换成可执行文件。只要有了第一版其它语言的编译器,就可以用C语言写编译器了。事实上,...

如果操作系统是C语言开发的,那么C编译器运行在什么上呢?
操作系统是c开发的,跟c编译器运行在机器上,这两个问题一点关系都没有。在没有c编译器之前的那个时代,当然只能用汇编写操作系统了,但是后来用汇编开发了c编译器,就可以用c写操作系统了,用c写了操作系统,经过c编译器编译之后得到的就是机器代码(可以认为是汇编),c编译器只是一个工具,反正你...

c语言软件用什么比较好?
1.C语言编译器:这是手机上的一个C语言编程软件,可以直接在手机上编译运行C语言程序,下面我简单介绍一下这个软件: 首先,下载安装C语言编译器,这个直接在手机应用商店中搜索就行,如下,大概也就12M左右,直接下载安装就行: 安装完成后,打开这个软件,就可以直接编写C语言程序了,效果如下,这里自带有编译器,可以直接编译...

...学习C语言用VC++好还是Microsoft visual studio?或者其他编译器?
果断VC++啊,适合新手,调试方便

学c语言有前途吗?
C语言都有一样的,你等于看了两遍,没有必要,而C++里独有的,你第一次看,一定是发蒙的,很正常,再看一遍不懂的,多学着写点代码,马上就懂了。如果你是学单片机这种的,C语言可以学,因为C语言作为高级语言,编程效率是很高的(前提是要有编译器,否则只能用汇编),但是我个人还是觉得,学...

相似回答
大家正在搜