最近有点纠结是用ide还是用editor,对应的就引来的操作系统的问题。

首先,由于windows各种支持linux子系统了,所以有点开始想去试试。不过最后放弃了。一:子系统的耦合性没有那么理想。毕竟还不能像mac这样直接对接(毕竟mac是unix的底层啊)。二:他用的是ubuntu。

而ide有相当多可观的优势啊。这些是编辑器怎么也无法做到的。

开发项目

最先要明确一点,写mac/ios,不可能去用windows,写windows也不可能去用mac。写linux的你可以用mac(但如果内核相当过大,也不能用mac)。开发平台相关的SDK,肯定是用特定IDE来得好太多,大量的编译依赖,手写肯定不如编译器官方设置好的来的好。而且也没见哪家提供了非IDE用的makefile什么的。而且也没有人用vs去写Linux内核的是吧。

当然要用编辑器来写SDK也可以,只是会各种不方便。

其它情况

当开发是底层了,和系统无关了。这里就出来很多选项了,是用编辑器,还是用IDE。是用windows,还是用mac或者是linux,更甚是bsd。bsd做为生产环境可以,做为开发环境多少有点不太舒服。工具链不是非常全。

OS

这里先说OS。去掉编程用的工具链以外,OS提供的其它工具链是选择的主要选择因素。在这一点上mac会相对占优。omni家的全套,以及alfred的快速查找,都很方便。windows上虽然也有对应的工具,但整体用下来不如人意。再来就是界面。win的界面虽然不然算坏,但mac看起来更舒服。一些软件也针对mac做过界面优化,比如印象笔记。windows上的客户端简直无法直视。

其中,最大的问题就是字体。windows上的字体各种不舒服。当然这和显示器也有关系。

工具链

系统直接决定了用什么工具链,在mac上,主流的linux工具链全部是支持的。对于C/C++的情况而言Clang和llvm也是苹果自家在推的,这一点在感性上要优于ms。现在vs虽然也能使用clang了。但在dos下面用linux这类工具链有点不伦不类的。

这一点mac也相对占优。所有底层的工具全部可以和linux配合,除了dtrace什么的是阉割版本有点让人不太舒服。windows的工具链相对薄弱。而且目前除开ide以外的依赖,有相当是直接放弃windows兼容的。还有那难用的powershell。

编写,调试,分析

编写

写代码是占整个开发时间最短的过程。对于小项目来说,根本没有使用ide的必要,反而过于榜单的系统会降低开发效率。但对于大项目而言,ide相比于编辑器提供了大量的高级功能。但这些功能在现在已经大部分在不同的编辑器上都有实现。至少在代码的跳转与补全上两者差别可以说是非常少了。更何况vsc出了lsp后,怕是已经没有差别了。编辑器最大的问题在于项目管理。跳转与补全,很多只针对于当前的buffer,其实这些也能用插件来处理,只是没有什么人这样做罢了。部分比较优秀的工具上面也已经实现了这些。比如emacs上开发c++用的irony以及haskell的intero,都是基于特定项目来实现的。如果不用这些而去配合lsp更是如此了。只是lsp的功能基本还在开发中,用得不人不多,而且不稳定。

在编写上面ide与编辑器差别其它不大。编辑器还能非常方便的去自定义按键呢。

这里推荐一下本人的dotfiles

调试

vs的调试可以说是非常强大,不过这些功能在lldb上也是有的。只不过我们没有界面罢了。对于这一点而言,界面对于那些不熟悉调试指令的人而言会比较方便,而且更为直观。但对于二者都会的人来说,其实差别不大。再怎么好的工具,也是人去思考原因。只是对于非windows而言,可选的调试器非常的多就是了。

当然也有专门的调试用的工具,不过很少会去这样子使用。现在主流的调试工具全部整合在ide里了。剩下的只有像gdb这类。

分析

代码分析,这个是vs中诱人的一个功能。不过好像大概只有C#有。以及类图等等的。这些东西在一般编辑器上基本是不存在的。当然也是有实现的方便,都相对会麻烦一点。这是唯一一个我目前能想到让我去主动使用IDE的理由。不过在有gtags的情况下跳转以及依赖已经不是问题了,主要问题在于直观性。

这里说一下understand和codechecker,这两都是针对C/C++的分析,同时也是基于LLVM和Clang的。就整体上而言和vs不会差太大,就是界面不是很美观。而在纯终端下……我能想到的大概只有lldb慢慢打时间代码来完成各种性能分析了。

测试

在win上测试完全可以配合docker来使用,只是多少会有点麻烦。而mac上也是同理。

生活

以前在什么地方看到过这样一句话,“Where is a shell, there is a way.”。但在界面下,你只能依靠别人写好的选项。命令行下,这个工具没有这样的选项,我们可以换一个工具,或者几个工具非常轻松的耦合起来使用。

用什么工具,完全取决于个人的爱好。在功能而言没有什么是ide处理不了的。但是在command line之下,我们所有的每一个工具都是一个atom。我们可以任意选择,在ide上就不行了。定制性上ide也不会比命令行上的工具链来得强。

有一种生活叫,Geek。有人喜欢在界面上点点点,有人喜欢手离鼠标,只用键盘。编写而言键盘要远高于鼠键。调试而言没有什么差别,关键看人。但分析工具,界面会有更直观的体验。用什么完全看个人。我喜欢命令行,那我就用大量的工具链。我喜欢折腾,我喜欢一切尽在掌控,那么IDE基本就和我说白白了。

写了这么多,还是有点想要ide的部分功能呢。不过既然没有工具,那么我们就自己写一个好了嘛。