题
我很好奇使用什么工具来构建自己的下一个版本。
例如,德尔福长期以来声称“Delphi是用Delphi编写的".
我假设 Visual Studio 是使用 Visual Studio 编写的。
还有哪些其他自行编写的工具示例?
解决方案
Bjarne Stroustrup在 C ++的设计和演变中提到过第一个C ++编译器是用C ++编写的。
我刚刚注意到这也是他的 FAQ 一个>:
第一个C ++编译器(Cfront)是 用C ++编写。为了建立它,我首先 用C写了一个“C with with 类“-to-C预处理器”。 “C with 类"成为了一种C方言 C ++的直接祖先。那 预处理器翻译为“C with with 类"构造(例如类 进入C.这是一个 传统的预处理器没有 了解所有的语言,离开了 大多数类型检查C 编译器要做,并翻译 个别构造没有完整 知识。然后我写了第一篇 “C with Classes”中的Cfront版本。
其他提示
有趣的是,VB.NET& C#编译器本身是用非托管C ++编写的(导致C ++团队的T-Shirt:“我的编译器编译你的”)。 C#团队希望为VS2010提供一个完全托管的C#托管C#编译器。
一般来说,C编译器通常用C语言编写...... * nix内核在* nix等编译。
此外,还有 pypy 项目,它提供了一个Python解释器用Python编写。
当gcc(Gnu C编译器 http://gcc.gnu.org/ )不是广泛使用,您必须从源代码编译它,编译stage1编译器,然后使用stage1编译stage2,直到您拥有最终编译器。我认为今天一定是一样的。
这是另一个例子:Mono的C#编译器是自托管 - 即它是写的在C#中用于编译自己。
狗食是指公司内部使用自己的产品,尤其是在开发过程中使用自己的产品的更一般做法。
很多人都喜欢看 Lisp可以在Lisp中实现。
Squeak 是一个Smalltalk-80实现的。
即使它的虚拟机完全用Smalltalk编写,也很容易调试,分析和更改。
Sun的Java编译器早已用Java编写。但是,最近的工作也是用Java编写JIT编译器。这是将Java字节代码转换为本机处理器指令的JVM组件。
我们使用RealBasic进行开发。 IDE是自己编写的,或者说我已经开始相信了。
ghc,Haskell编译器,主要是用Haskell编写的。
tcc 是x86和ARM的另一个自托管C编译器。它声名鹊起的声音非常小(预处理器,编译器,汇编器和链接器都是100k左右)。
我认为几乎所有属于典型开发过程的工具都会尽可能地参与其自身的开发。这包括:
- 某些编程语言,尤其是编译语言
- IDE
- 文本编辑器
- 版本控制系统
- 错误跟踪器
- 构建系统
如果您所在的团队正在构建其中一种工具,并且您不是针对不适用于您的团队的特定利基市场开发它,那么我不知道您为什么不使用它来构建它自己。让开发人员成为产品的用户是寻找可能的改进的最佳方法之一。
对于AmigaOS,有一个第三方Basic解释器(不记得名称),您可以在以后购买编译器。编译器作为源提供,因此您必须使用解释器来运行编译器来编译自己...
引用肯特贝克:
......看起来有点像对自己进行脑部手术。
Visual Studio和Team Foundation Server自行构建。它被称为 dogfooding ,这个术语如果不是源于微软,那肯定是喜欢
Oracle Application Express 是一个Web应用程序开发工具这本身就是建立的。
Eclipse IDE 通常使用Eclipse IDE构建和开发。
使用自己的语言编写语言编译器是很典型的。这称为自托管或 bootstrapping 。
Maven2 是使用Maven2构建的。 好吧,它没有使用自己构建(即编写),因为它是一个构建(即编译)项目的工具,但它正在使用自己的代码进行编译。
我对 JSLint
感到惊讶简而言之,它被描述为Javascript“编译器”。使用javascript。
我正在构建一个基于IDE的代码生成器,我正在使用它来构建自己。事实上,正如Stroustrup所做的那样,我首先构建一个有效的生成器模型并使用预处理器来构建最终的C ++代码进行编译。一旦我有一个良好的IDE工作版本,我将开始使用它来构建自己的更多版本。
这就像为“递归编程”的含义赋予了新的维度!
AFAIK的 OpenJDK 首先使用已安装的java构建自身,然后自行构建。
当然,Jetbrains团队使用自己的IDE IntelliJ IDEA 来开发此IDE。
我认为对大多数IDE供应商来说都是如此。
据我所知,从源代码构建EMACS时,所有ELISP代码都是自引导的。我发现这非常值得注意。
不是你要求的,而是革命的整个开发环境 http://www.runrev.com 是使用Revolution本身构建的,源代码(执行许可证的小部分除外)完全以源代码形式公开。因此,如果您不喜欢开发环境的实现方式,您可以更改它。找一个bug,修复它。您还可以轻松构建其他开发工具并进行集成。
Ada和Forth
我对Smalltalk-80的回答有所提升。我能想到的最好,最优雅的例子。这个问题也让我想起过去流行的一个稍微相关的问题:写一个输出自己的程序。不同级别的引导,但一个有趣的小编程拼图为您的娱乐。也许在所有语言中都不可能?
旧的Watcom C / C ++编译器是使用自己构建的。
Kragen Sitaker的 Ur-Scheme 是小的非平凡的编译器本身。该页面链接了几个更好的来源。