开发一个IDE难度多大?
我觉得一个开发一个好一点的IDE,至少要包含这几个方面的难点要克服:1.代码和界面编辑器。语法高亮,代码缩进、智能感知之类的基本功能就不提了,源文件、引用类库文件、资源文件等等的组织和管理,代码重构、代码自动生成之类的玩意儿。如果有WYSIWYG功能的话,需要操心的东西就更多了,单开发一个功能完善的编辑器就不容易。2.编译器。如果从0开始构建编译器的话,本身就是一个浩大的工程,首先要研究语言标准,然后还要操心词法分析什么的,这方面我没什么了解,可以看看这方面的牛人的故事:EricLippert(C#编译器)、AndersHejlsberg(之前Borland公司的大牛,TurboPascal编译器作者,后加入微软,Delphi和C#语言之父),要知道像C#这种语言规范还是微软家自己搞出来的,可能编译器相对容易开发一些,但是碰到C/C++这种标准更迭、一堆历史遗留问题的语言,开发编译器真不是普通人能干的事,当然,如果用现成的编译器也的话,难度就下降了很多,我就自己写过一个套用IL编译器的IL开发环境,自我感觉良好。3.调试器,这个如果要从0开始也是非常困难的事情,不过好在有操作系统帮忙,但是要整合到IDE中估计也不是什么轻松的事情。4.其他功能。诸如插件支持(这里安利一下VS下的两个牛逼插件:Wholetomato、Resharp)、代码混淆、版本控制、测试、发布部署,反正只要是和软件开发相关的事情,就可以放在IDE中。5.整合。既然是集成,就不能像那种简单的工具集一样拼凑堆砌在一起,各自为战。IDE能用一种统一的界面去组织这些功能,在IDE中集成完成编译、调试,并且能和源代码挂钩,这也是VS最吸引我的地方(个人觉得VS2008的界面才是最好看的……)。
分几个方面。1.编译器,这个可能是对技术要求最高的,主要是生成的代码优化。2.界面及人性化,这个是难度最小的。3.集成,集成其它的各方面,是最复杂的。不过只要干下去,都谈不上难。
靠谱的ide和不靠谱的差别大了去,根本无从衡量...实现过一个语言,包括运行时和调试断点,在此基础上的ide是同事指导俩实习生做了半年左右--如果也能称的上是个ide的话。在从无到有,实现的难点其实是编译器和运行时的支持。比如语法高亮要靠parser,跳转到定义处编译器要提供symbol和源码位置字典,重构编译器要重写ast,要支持调试窗口里运行表达式甚至直接调用函数,这个要运行时支持。编译器和vm实现了这些,ui层你学个command设计模式就可以写了,这时load个小文件跑跑调调,就觉得这么简单?!然后load一个大文件。然后load一个大项目,几千个文件。然后调试一个已经把机器上swap文件榨的叽叽响的程序。然后调试一个在远程主机的程序。从有到好,这个简直无至尽了。当年用xcode开发某大型cad软件mac版的时候,attach上去调两次xcode就挂一次,连wchar在watch里都显示不了,才发觉原来在格调这么高的mac上用xcode开发大型程序这么生不如死,才知道被自己鄙视的vs原来这么屌。
可能有些人以为IDE最难的是debugger,其实不是,因为这是操作系统会提供的功能,IDE充其量只是在这里做了个GUI。其实最麻烦的事情有两个,第一个是如何支持插件修改和添加编辑器。不要以为编辑器插件很容易做,一个IDE完全可以把它插到不需要文本编辑框也可以把程序写出来。第二个是如何在打代码出intellisense的时候,就算你的代码量超级大,你的内存占用也不会爆炸性增长。IDE少占内存是很重要的,总是有很多人跳出来给他热爱的程序(包括但不限于Chrome和Clion系列)说,连内存都买不起当什么程序员?其实这是不对的,IDE占用内存低,是为了让你可以写占用内存的程序提供了一条方便之路。当你要debugSQLServer,或者debug另一个IDE来让他做profiling的时候,这简直是生与死的区别。只有那些画网页和画app的人才不在乎这种东西。
有人觉得好像读pdb从代码找到内存为之下断点好像是IDE的功劳,实际上不是。因为pdb是编译器产生的,所以如何读pdb,如何映射源代码,如何找到所有的符号的的这个msdiaXXX.dll,是跟着msbuild一起装进去的,VisualStudio不需要自己独立写一遍。把编译器归进IDE本身就是一个巨大的错误。为什么这么说呢?如果编译器产生了pdb,而如何解释pdb缺又是VisualStudio去写的的话,分开两个team做这个根本就无法正确维护这种复杂的逻辑代码,所以这个功能必须不能让IDE来做。
回答请先登录