【转】编辑器与IDE
编辑器与IDE
无谓的编辑器战争
很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此不屑一顾,说:“打字再快又有什么用。我在 Emacs 里面按一个键,等于你在 vi 里面按几十个键。”
其实还有另外一帮人,这些人喜欢说:“对于 Emacs 与 vi 之争,我的答案是 {jEdit, Geany, TextMate, Sublime…}”这些人厌倦了 Emacs 的无休止的配置和 bug,也厌倦了 vi 的盲目求快和麻烦的模式切换,所以他们选择了另外的更加简单的解决方案。
临时解决方案 - IDE
那么我对此的答案是什么呢?在目前的情况下,我对程序编辑的临时答案是:IDE。
写程序的时候,我通常根据语言来选择最能“理解”那种语言的“IDE”(比如 Visual Studio, Eclipse, IntelliJ IDEA 等),而不是一种通用的“文本编辑器”(比如 Emacs, vi, jEdit, …)。这是因为“文本编辑器”这种东西一般都不真正的理解程序语言。很多 Emacs 和 vi 的用户以为用 etags 和 ctags 这样的工具就能让他们“跳转到定义”,然而这些 tags 工具其实只是对程序的“文本”做一些愚蠢的正则表达式匹配。它们根本没有对程序进行 parse,所以其实只是在进行一些“瞎猜”。简单的函数定义它们也许能猜对位置,但是对于有重名的定义,或者局部变量的时候,它们就力不从心了。
很多人对 IDE 有偏见,因为他们认为这些工具让编程变得“傻瓜化”了,他们觉得写程序就是应该“困难”,所以他们眼看着免费的 IDE 也不试一下。有些人写 Java 都用 Emacs 或者 vi,而不是 Eclipse 或者 IntelliJ。可是这些人错了。他们没有意识到 IDE 里面其实蕴含了比普通文本编辑器高级很多的技术。这些 IDE 会对程序文本进行真正的 parse,之后才开始分析里面的结构。它们的“跳转到定义”一般都是很精确的跳转,而不是像文本编辑器那样瞎猜。
这种针对程序语言的操作可以大大提高人们的思维效率,它让程序员的头脑从琐碎的细节里面解脱出来,所以他们能够更加专注于程序本身的语义和算法,这样他们能写出更加优美和可靠的程序。这就是我用 Eclipse 写 Java 程序的时候相对于 Emacs 的感觉。我感觉到自己的“心灵之眼”能够“看见”程序背后所表现的“模型”,而不只是看到程序的文本和细节。所以,我经常发现自己的头脑里面能够同时看到整个程序,而不只是它的一部分。我的代码比很多人的都要短很多也很有很大部分是这个原因,因为我使用的工具可以让我在相同的时间之内,对代码进行比别人多很多次的结构转换,所以我往往能够把程序变成其他人想象不到的样子。
对于 Lisp 和 Scheme,Emacs 可以算是一个 IDE。Emacs 对于 elisp 当然是最友好的了,它的 Slime 模式用来编辑 Common Lisp 也相当不错。然而对于任何其它语言,Emacs 基本上都是门外汉。我大部分时间在 Emacs 里面是在写一些超级短小的 Scheme 代码,我有自己的一个简单的配置方案。虽然谈不上是 IDE,Emacs 编辑 Scheme 确实比其它编辑器方便。R. Kent Dybvig 写 Chez Scheme 居然用的是 vi,但是我并不觉得他的编程效率比我高。我的代码很多时候比他的还要干净利落,一部分原因就是因为我使用的 ParEdit mode 能让我非常高效的转换代码的“形状”。
当要写 Java 的时候,我一般都用 Eclipse。最近写 C++ 比较多,C++ 的最好的 IDE 当然是 Visual Studio。可惜的是 VS 没有 Linux 的版本,所以就拿 Eclipse 凑合用着,感觉还比较顺手。个别情况 Eclipse “跳转定义”到一些完全不相关的地方,对于 C++ 的 refactor 实现也很差,除了最简单的一些情况(比如局部变量重命名),其它时候几乎完全不可用。当然 Eclipse 遇到的这些困难,其实都来自于 C++ 语言本身的糟糕设计。
终极解决方案 - 结构化编辑器
想要设计一个 IDE,可以支持所有的程序语言,这貌似一个不大可能的事情,但是其实没有那么难。有一种叫做“结构化编辑器”的东西,我觉得它可能就是未来编程的终极解决方案。
跟普通的 IDE 不同,这种编辑器可以让你直接编辑程序的 AST 结构,而不是停留于文本。每一个界面上的“操作”,对应的是一个对 AST 结构的转换,而不是对文本字符的“编辑”。这种 AST 的变化,随之引起屏幕上显示的变化,就像是变化后的 AST 被“pretty print”出来一样。这些编辑器能够直接把程序语言保存为结构化的数据(比如 S表达式,XML 或者 JSON),到时候直接通过对 S表达式,XML 或者 JSON 的简单的“解码”,而不需要针对不同的程序语言进行不同的 parse。这样的编辑器,可以很容易的扩展到任何语言,并且提供很多人都想象不到的强大功能。这对于编程工具来说将是一个革命性的变化。
已经有人设计了这样一种编辑器的模型,并且设计的相当不错。你可以参考一下这个结构化编辑器,它包含一些 Visual Studio 和 Eclipse 都没有的强大功能,却比它们两者都要更加容易实现。你可以在这个网页上下载这个编辑器模型来试用一下。
我之前推荐过的 TeXmacs 其实在本质上就是一个“超豪华”的结构化编辑器。你可能不知道,TeXmacs 不但能排版出 TeX 的效果,而且能够运行 Scheme 代码。
IntelliJ IDEA 的制造者 JetBrains 做了一个结构化编辑系统,叫做 MPS。它是开源软件,并且可以免费下载。
另外,Microsoft Word 的创造者 Charles Simonyi 开了一家叫做 Intentional Software 的公司,也做类似的软件。
转载于:https://www.cnblogs.com/alantu2018/p/8534107.html
【转】编辑器与IDE相关推荐
- dw上的php代码如何预览在浏览器_13个面向开发人员的JavaScript代码编辑器和IDE
根据知乎的说法,JavaScript(JS)是一种解释性的计算机编程语言.它最初是作为Web浏览器的一部分实现的,这样客户端脚本就可以与用户交互.控制浏览器.异步通信以及更改显示的文档内容. 在本文中 ...
- 国内外最流行的 Python编辑器【IDE】 TOP 8
Python 的学习过程少不了集成开发环境(IDE)或者代码编辑器.这些 Python 开发工具帮助开发者加快使用 Python 开发的速度,提高效率.高效的代码编辑器或者 IDE 应该会提供插件,工 ...
- 大学使用python 编辑器_[雪峰磁针石博客]2018 最佳python编辑器和IDE
IDE没有统一的标准,自己习惯就是最好的.本文列出一些较常用的IDE,供大家参考. 一般而言,WingIDE.PyCharm.Spyder.Vim是比较常用的IDE. Spyder Spyder是Py ...
- phpeditor编写php_php常用开发编辑器(ide)
如果有一个好的编辑器或开发工具,能够极大提高我们的开发效率.下面介绍10个免费.强大的PHP编辑器/开发工具.这些编辑器拥有调试器.增量执行PHP脚本,查看每一行的所有变量值等功能. 1.Notepa ...
- 编辑器\编译器\IDE
编译器&编辑器&IDE的区别: 编辑器是用来写代码的,而编译器是对现场高级语言代码翻译成相对低级语言的一段小程序/指令. 集成开发环境(IDE,Integrated Developme ...
- 编译器与编辑器以及IDE的区别【前方高能】
一.编译器 编译器的的概念百度词条上面这样子定义: 简单讲,编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序.一个现代编译 ...
- 推荐3款在线编辑器(IDE)
安装IDE在电脑上会比较麻烦,特别是那种不常用的语言,而且占据了电脑的许多空间,使用在线IDE可以方便我们使用各种语言进行学习,下面推荐几个常用的在线IDE. 1.OnlineGDB 它支持C,C + ...
- Python编辑器与集成开发环境(IDE)选择
上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...
- python文本编辑器_python最好的ide和文本编辑器
python文本编辑器 I cannot stress enough how important the right IDE (Integrated Development Environment) ...
- python手机代码编辑器_10 个 Python IDE 和代码编辑器
2020 版10 个最佳 Python IDE 和代码编辑器 简单的语法和更快的执行速度使Python成为程序员中的首选语言. 它广泛用于创建网站,主要用于大数据操作. 为了简化运行Python程序的 ...
最新文章
- 【C++】动态内存管理/move/以及移动构造与移动赋值运算符
- ads无法启用状态服务器,NAC ADSSO 无法工作在Microsoft 2008服务器版本
- 关于arm处理器 内存编址模式 与 字节对齐方式 (转)
- 1.3 matlab常用的内部数学函数
- 网易云信荣获第十五届中国企业年终评选「IT行业优秀技术奖」!
- NetBeans 7.2引入了TestNG
- linux bash tutorial
- python NoSuchElementException异常处理
- 关于xendesktop外部SQL数据库连接设置的问题
- request如何获取请求路径方法
- intellji External Libraries下依赖包找不到解决方法
- jw player 5去掉share,info,embed页面
- stm32呼吸灯c语言程序,基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)
- 2019年第十届C/C++ B组蓝桥杯省赛真题
- 怦然心动(Flipped)-4
- 数学成绩英语成绩c语言,用链表输入一个正整数n,再输入n 个学生的学号和数学,英语,C语言成绩,要求...
- Android BitMap图片压缩
- UDS诊断系列介绍05-27服务
- c++国密算法SM2加密解密demo
- thinkphp5.1模板中获取资源文件路径
热门文章
- Dubbo 分布式事务一致性实现
- 怎样在IIS下配置PHP
- 如何避免 $_SERVER[PHP_SELF] 被利用?
- JZOJ5143:无心行挽
- java提高篇(十九)-----数组之二
- Spring IoC-02
- sicily 1443 Printer Queue
- 传媒业进入B2C领域:香港商报推爱购商城
- iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due
- CentOS7 - 给VMwear Workstation 15安装VMwear tools