IDE的本质

经过十几个小时的折腾vim中的IDE,我不得不回去思考一下到底什么叫做IDE。IDE全名叫集成开发环境(Integrated development environment)。

IDE简史:

先来看看IDE的发展历史。在50年代的时候,人们是通过打孔卡来作为机器的输入。程序员都是先离线的用打孔机将程序写好后,放到读卡机中,作为输入,然后,计算机中的monitor(原始操作系统)将程序调入内存,再将编译器调入内存,再编译一下。如果,没有出错,那么就执行程序。如此这般的写程序方式,自然没有IDE的说法,因为程序员和机器都是相隔离的。后来,计算机的历史进入了分时系统的时代,一个大型计算机身上挂着很多个终端,程序员通过终端来写程序调试程序。这样才使得IDE成为可能。根据维基百科上的说法,Dartmouth BASIC(1964)是第一个拥有IDE的语言。此时的IDE与我们现在的IDE,完全不同,没有GUI,没有menu,没有鼠标。更奇特的是,他使用的是叫做行编辑器,传说中这种编辑器只能让你看到一行的代码,然后修改也只能指定哪一行然后修改,相比之前那个打孔卡的方式可是先进了很多。之所以叫他是IDE我想大概因为,它编辑代码和执行普通命令行命令(包括run命令)是可以一起进行的吧。Maestro I(1975)成了世界上第一个IDE.(维基上就是这么说的,到底谁是第一个?)Softbench(1989)是世界上第一个有插件功能的IDE,它运行在unix上,使用unix的工具以及X windows,也就是说它是由GUI的。

现在的几种IDE:

历史发展到如今,现在常见的IDE大约有那么几个。Eclipse (2001)最初来自IBM的项目,现在变成了一个提供多种语言开发的,开源的IDE。之前,用它写过python程序(用一个pydev包),感觉非常舒心,真是写程序成了一种享受。也许是因为之前在用notepad++在写python,既没有补全也没有调试有错误也要找老半天。

Microsoft Visual Studio(1995-4)可以说是windows下开发的标准IDE,同时也是一个巨型航母,包含了VC++,C#,VB等等。回想起高中的时候,我的第一个GUI程序就是用VB6.0写的。现在写程序也基本上都在用VC。最近也已经发展到了2012版。在这上面写程序感觉也挺好,主要的问题是它太臃肿了,不管是启动还是调试的时候都比较慢。另外,就是他是商业软件,价格不菲。虽然,现在在中国不是问题,但未来总有可能成为问题。

Qt Creator是一个跨平台的C/C++开发IDE,主要是用来写Qt程序的。我当时也是为了写跨平台的界面才接触到Qt。如果要写Qt,那么它就是不二选择。Qt有点类似于微软的MFC,但是,不得不说它比MFC要简单明了易学得多。加上Qt Creator写界面什么的就快很多了。

还有其他一些比如:Code Blcok,dev c++,Xcode,NetBeans等等,虽然听过,但是没有用过。看了看维基中的IDE比较,发现开源的比商业不开源的要多。

IDE的本质:

有人将上面的那种IDE比喻成品牌机,然后就有对应的组装机了,也就是通过拼凑一些程序来组成自己的IDE。传说中,黑客(常常就指linus了)一般都是用自组IDE的,或者连IDE都是不需要的。有时候,我都怀疑他们不会是用行编辑器的吧。好吧,这就是个传说。在说自制IDE之前,不妨先来看看到底IDE的本质是什么。

写程序的最低工具要求:

level1:说的极端点,其实只要有人就可以了,计算机都可以不需要。图灵机就是程序,所以可以用大脑想想就行了。

level2:打孔卡那个年代,有台机器,然后程序员用打孔卡作为程序和数据输入。

level3:当然,在现实中,写程序,毕竟是希望程序要干活的,所以计算机是需要的。

  1. 计算机(包括键盘和显示器的),性能好坏不论。要是能跑程序的。
  2. 编辑器,也许是行编辑器。
  3. 最基本的汇编器,以及连接器如果需要的话。

在这个情况下,写程序的方式就是:先用编辑器写代码,然后编译执行。如果,出错了,回去静态的看代码,可能需要改改代码,或者用print大发调试。unix(1969)最初就是这么写出来的,(当然,后来又用C重写了一遍。)现在有没有呢?就我所知,一个叫os-z的个人爱好操作系统就是用x86汇编写的。

level4:。。。。

历史的发展:

在当下,level3应该是可能的最低要求了,其他的条件都是发展需求了。站在这样一个点上,来看后来的写程序方式的发展。它们都为了一个目的,那就是更高效的写程序。历史大概做了如下发展:

计算机语言:从最初的敲0101,到汇编语言,再到现在的高级语言,程序语言的发展是越来越贴近人类语言,也越来越贴近人类思维(比如:OO),也越来越远离机器硬件(比如:java,C#这样的虚拟机语言,python,ruby这样的解释语言,或者是js这样的网页语言)。

计算机语言的库:语言也不断表现出一种拼包的特点,只是为了让语言标准库充足,写程序更为方便。

计算机语言的编译器(or解释器):编译器也变得越来越复杂,一方面做着更强的代码优化,另一方面也希望给出有意义的报错甚至纠错。C/C++的编译器也是种类繁多,msvc,gcc,clang,intel c++等等。

编辑器:必须不是行编辑器。基本都有代码作色,自动缩进,代码折叠,查找,替换,复制,粘贴等等(这样类似的编辑器我也写过)。跟进一步的要求就是代码的补全,实时的代码错误提醒。

调试器:print大发,毕竟太局限了,调试器必须是有的。单步进入,单步跳过,查看堆栈,查看变量,条件断点等等都是一个调试器该有的。

make:谁也不想一个文件一个文件的手工编译过去,所以make就出现了。IDE中的工程管理大致是类似的功能。

版本控制:管理代码版本,方便多人协同工作。

建模软件:构建程序框架模型,可能还有输出代码的功能。比如:UML建模软件就可能有这功能。

重构,文档管理等等。

IDE:本文所讲的东西。它是将上面这些全部集合在一个环境中,极大方便了使用。

自制IDE:

写程序基本上是用在编辑器里面写,所以IDE不管是不是品牌机都是以编辑器为中心,然后其他的工具挂在旁边。品牌机它可以特别制造一个编辑器,但是组装机,就需要自己去找现成的编辑器了。现在的编辑器大致可以分为两类(排除notepad和word之类的编辑器)。GUI编辑器和命令行编辑器。GUI编辑器代表有notepad++(windows),utraledit(windows) , gedit(linux)。命令行编辑器代表有vim(Cross-platform),emacs(Cross-platform)。因为,这些编辑器的目标就是编辑器,而不是IDE。所以,要想让它们变成IDE,就需要利用它们本身的扩展。否则,就没有办法做了。最为简单比如将某个键盘按键组合定义成编译,另一个又定义成执行。

在GUI编辑器中,以我常用的notepad++为例,它本身自带多种语言的着色,有简单的代码补全,可以将键盘按键映射到某个命令,有命令行组件,也有简单的工程管理。可以组成一个轻量级的IDE。

在命令行编辑器中,以我正在做的vim为例,它本身有很强的扩展能力,可以用vim,python,pearl等来扩展它。所以,为架设复杂且高度定制的IDE打下了很好的基础。但它的问题也是比较大的,由于,他不是天生要做IDE的,像在vim中调试代码和补全代码这类功能,即便是能通过插件加入到vim中,但是整合的还是不好,与品牌机还是有差距。

品牌机vs组装机:

各有好处,具体就看使用着跟看重那些 因素了。

  1. 品牌机省心,下载了,安装一下就可以用了,什么该有的都有了。相比组装机非常之费神,什么东西都要自己去找。而且组装机不流行,资料什么的少得很。时间投入是个无底洞啊,我在做的时候就想砸电脑了,各种麻烦,各种问题。
  2. 品牌机他们是专业做这个的,一般来说总比业余的要强。各种麻烦的问题,也会去提前解决,不会给用户留麻烦。
  3. 做一件事情才有可能把它做到最好,什么都做那就什么都做不好了。组装机,可以找各种优秀的产品然后组装在一起。但是,品牌机又不是什么都做,它几乎就是在做一个外壳,他为什么不在选择时,选择优秀的产品呢?
  4. 组装机提供了个性化的机会,每个人可能需求不同,但是品牌机能够修改的就少得多了。就像vim首推可定制。

上面说的这些对比是本质上都存在的,下面这些是现阶段的差异:

  1. 品牌机比组装机流行,哪怕都是开源,后者的支持相对要少得多,结果就是更多的麻烦,会让更少的人去使用,也会有更少的人愿意去开发。比如:vim中的代码补全clang-complete已经1年多没什么更新了,代码中存在一些问题,比如平台间的问题,python2与python3的问题,clang的问题。又比如gdb很早就出来了,但是vim中的源代码调试工具一直不怎么样。但是,各种开源IDE都是使用gdb作为调试后端的。
  2. 各自工具可能都很优秀,但是要将其组装在一起,未必是简单的事情。结果未必好用。更加未必比品牌机好用。

总的来说,组装机的唯一优势就是可定制。品牌机可以在平均情况下取得最好,但是如果个人针对个人进行定制有可能达到更好。这也就是为什么现实世界是这样的。大部分人使用品牌机,而小部分人使用组装机,并且坚信组装机好。(在使用vim和emacs的人中大有存在。)

而我花费大量时间来做将vim变成IDE,也就是希望做一个我自己的定制,能让我自己喜欢,比如我希望界面简洁,但是不喜欢功能残缺。可是,我遇到了很多的问题,虽然,到现在已经实现了代码补全和调试这两个关键功能。但是,实现结果是差强人意的,与品牌机的功能还有差距,功能整合的不太好。原本希望是之后基本只用这个平台,但现在看来,这也只能是其中一个选项。具体如何将vim变成IDE,会有后续博文出现。

后记:

虽然,我也曾经用过各种各样的IDE,但直到最近才幡然醒悟,原来我可以不用VS写windows程序的。之前,总是有种惯性,写windows程序一定是用VS/VC++的。最近想来,就算是我要用windows API,也不见着非要用VS,单纯的MingGW也可以啊。用VC写代码,有时候都搞不清楚这到底是C/C++标准里面的还是VC创造的,平白无故的失去了平台间的可移植性。IDE的本质就是如此,完全没有必要死抱着哪一个。

参考:

维基百科。

发布了35 篇原创文章 · 获赞 2 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章