小型编译器有多难
① 写一个编译器大概多长时间
写一个简单的编译器,很简单,一个星期够了,但是,它肯定没有实用价值。
你懂的,编译器要把源程序编译为目标机器语言的,不熟悉机器指令,可以用汇编作为目标代码。
② 编译原理难吗
编译原理我觉得不是最难的,或者是读得很浅所以不觉得难。在计算机基础课中最难的我觉得是操作系统,很难很重要,但是很少人会去重视,基本都是草草的上课草草的学了,不得精髓;次之算法也很难,不止是理论,实际用用也难。
国内985本科编译能教的大约是半本龙书组成的前端加一个基本的后端,不难。但是实践的工作量大。认真做一个编译器至少两三万行C++的工作量,只有半个学期的时间,压力很大。当然,compiler的可玩性不错,不那么枯燥。
③ 新手如何学习编程
熟悉以下关键东西,可以边学边做,定期训练,经常思考,长期积累:
1、语法。
2、基础理论(数学、数据结构、算法等)。
3、设计方法(编程原则、设计模式、框架设计等)。
4、库(核心、基础、UI、扩展、游戏引擎等)。
5、计算机相关(操作系统、网络、图形学等)。
6、领域知识(游戏设计、网站设计等)。
7、开发工具(编辑器、IDE、自动部署等)。
8、项目管理(进度管理、分工协作、Bug管理、版本控制等)。
最普遍也是最重要的能力:创造力。努力分析并理解好做什么以及怎么做。要知道上面那些东西一开始都是不存在的。
具体方法包括:
1、快速阅读入门教程和书籍,适合学习语言和基础库。比如我学Java读的《Java编程思想》,练习题做过一点,然后学ActionScript就没读过书,只读过Adobe官方文档《ActionScript 3.0编程》。
2、阅读库的文档、实例、源码。比如Flash、Flex开发,熟悉官方API很重要,很多细节要具体使用时才注意到,这时候最好做个笔记,虽然我从没看过我的笔记。
3、做一个自己感兴趣或熟悉的小项目,比如我就以黑白棋游戏作为多个语言的试水项目,一样的逻辑,便于把关注点放在语言特点上。
4、自己动手丰衣足食。厨师有菜谱,程序员可没菜谱。比如我做游戏,最关键的游戏编程知识全部是动手学出来的,很少有专门针对某个业务领域(如游戏)的编程书籍,要么是入门书,要么是模式书(如算法)、理论书(图形学),很少有书籍教你如何开发一个45度角地图系统加编辑器的,全靠自己思考,以及看前人的代码,需要时找些网络资料。关键是,可以培养最重要的创造力。
对于算法和设计模式,可以研读下,但是关键还是靠平时如何使用了。新手勉强不来的。
项目管理方面的,就得靠工作经验了,多思考多提意见不要只走流程。
④ 开发一个 C++ 编译器的难度有多大,难点又在哪里
C++的前端是出了名的复杂度和可靠性要求并驾齐驱的软件。
(这两点都比它高一个数量级的大概就只有OS了)
对于这种系统,唯一的办法就是烧钱。
烧钱的作用主要包括:
1.留人;
2.填坑;
3.买买买。
先说留人:复杂度一般是“细节”的代名词。现实中的编译器大多数以递归下降为主,自底向上的归纳推导为辅。这两样在教科书上也就是几页纸的事情。但是现实总是很残酷的,人们总想让语言更加“易用”,这就意味着各种上下文相关的情况都会出现。
对于C++来说,你要判断一个符号是类型或者变量(比如这个符号被用在模板参数中),要看前面的声明/定义。这就是一个上下文相关的推导。然后你就会写大量的if else switch case之类的代码来解决各种各样的可能分支。写它的人当然知道它是做什么的,但是如果这个人离职了,新来一个人,就呆掉了,这写的都是什么煞笔玩意儿。因为它不知道现实中怎样的需求会导致奇形怪状的逻辑。所以人员的稳定,对于这种长周期迭代、逻辑复杂的项目是很重要的。但是人的水平要求高吗?不算高也不算低。总结来说就是:有逻辑,知好歹。技术什么都可以培养,但是态度和基本智商是比较难培养起来的。
至于怎么保证人员稳定?很简单:加薪。
再说填坑:编译器是对正确性要求很高的基础软件。这里的正确性既包括产生的代码的正确性,也包括编译器自身对于各种问题的容忍度和足够丰富的错误提示。容错和错误提示本身也是代码,也有很大的出错几率。所以这些软件,bug少不了。但是作为基础软件,你又不能随便就2+3搞成了2*3,这样还怎么让别人相信爱情。所以要烧很多钱来养一帮debugger。
再说买买买:古人日:我们不用很麻烦很辛苦也可以成佛。既然这么费神我们自己做干什么,不如买别人的吧。于是MS就干脆不自己做了,直接去EDG整了个前端,这样就可以少了不少人年。这就是传统土豪和水果这种新暴发户想的不一样的地方。
传统土豪想的是:我们有这么多钱为什么还要自己解决问题呢?买买买!
水果新贵则是:啊呀,不小心有了这么多钱,我们要不要给自己制造点问题好把这些钱花出去?
⑤ 本科独立用c语言完成没有优化的C语言编译器属于什么水平
我觉得水平还是很高的,但意义恐怕不大。编译器技术是非常成熟的领域,而且由于应用场景的限
制实时,复杂的算法已经自动出局了,你可选的东西是有限的。编译器可能有很多实现的形
式,虚拟机/解释器/静态编译器 等,也有成熟的开源实现。作为本科生,而非专门研究该分支的学生,应该合理分配自己学习的时间,如果做这个编译器就干
掉了大半年,那计网和OS这些课程该咋办?
我知道很多人会认为没有做编译器优化特指中段优化,不考虑机器码上的优化比较划水。但编
译器优化是一个很复杂的东西:首先它和你用的IR表示有关而且是强烈耦合,SSA IR基本还
好,有开源代码和文献记载,你想要的都能在网上挖到但这怎么体现你的水平是吧。你
要考虑编译器的性能,尽管编译器的后端优化基本上可以纳入到某种PEabstract interpretation的
范畴中。
要不然你可以通过编写插件的方式白嫖例如visual studio code这类软
件的强大编辑功能,如果你写的不是c compiler,你也可以尽量把语法设计得很像c,这样你又能进一步
白嫖其强大的intellisense code,当然仍然有不少人或者应该说团队达到了这一步,到这里,应该卷死
了99.99%的同行应该毫无问题。
⑥ 用c++写c语言编译器(输出汇编语言)有多难{自学成才}
首先要有一定的英语数学基础,和强的逻辑思维
⑦ 编程复杂吗
编程本身其实不难,因为我们学习编程的时候,接触到的都是高级语言。因为这个最接近我们平常的思维,所以学起来也比较容易。
但为什么有的童鞋觉得编程很难呢?一方面,没有接触过,只是听人说,另一方面,一般编程方面的职业薪酬都比较高,可能会想那么高的工资,那这个编程肯定比较难了。
其实这都是整个职业环境带给我们的感觉,在我看来,编程本身不难。那么问题来了,障碍是在哪个地方?我觉喊乎得蚂手有两点,一,在编程语言问世的时候,它的编译器也会随之出现,要不然就无法开发,因为编程最核心,最底层的东西就是编译原理,如果郑物悉这个自己学会了,那任何语言都只是简单工具;二,编程并不仅仅是if else等等这些逻辑语句,更关键的是一个软件或者项目的设计,这就需要我们有一个大局观,要有设计思想,这是我们开发中非常重要的。如果没有这种思想,就算开发出来了软件,也会是漏洞百出,bug不断。
所以,综合来讲,编程也是一种技能,和其他职业技能没有多大差别,它也需要积累,需要学习,最终成为专家。
⑧ 为什么安装个VC++6.0编译器这么难
初学C++还是不要用VC6.0了。这个编译器除了速度快一些,不标准、BUG多,一无是处。
推荐Dev-C++,一个小巧、标准、免费的C++开发环境,有中文版,各个软件站都有下。
⑨ 编译原理很难吗
说实话有点难,但是好好学肯定能学好呢。我编译原理上85了,而且期末还写了个编译器。相信你也没问题的!
⑩ 操作系统内核和编译器哪个难度更大
整体而言,是同级别的难,但难点各有侧重。
若论算法,编译器更难,而且难不止一个级别。操作系统的算法难度只能算一般水平。
但是操作系统涉及的东西更多,本身结构更复杂,硬件处理也更加复杂。