使用自己构建了哪些工具?

时间:2008-11-03 14:21:19

标签: bootstrapping

我很好奇使用什么工具来构建自己的下一个版本。

例如,德尔福长期以来声称“Delphi is written in Delphi”。

我假设Visual Studio是使用Visual Studio编写的。

有哪些其他工具可以自行编写?

32 个答案:

答案 0 :(得分:11)

有趣的是,VB.NET& C#编译器本身是用非托管C ++编写的(导致C ++团队的T-Shirt:“我的编译器编译了你的”)。 C#团队希望为VS2010提供一个完全托管的C#托管C#编译器。

答案 1 :(得分:9)

Bjarne Stroustrup在The Design and Evolution of C++中提到第一个C ++编译器是用C ++编写的。

我刚刚注意到这也是他FAQ中的一个问题:

  

第一个C ++编译器(Cfront)是   用C ++编写。为了建立它,我首先   用C写了一个“C with with   类“-to-C预处理器。”C with   课程“是一种C方言,成为了   C ++的直接祖先。那   预处理器翻译“C with   类“构造(如类   进入C.这是一个   传统的预处理器没有   了解所有的语言,离开了   大多数类型检查C   编译器要做,并翻译   个别构造没有完整   知识。然后我写了第一篇   “C with Classes”中的Cfront版本。

答案 2 :(得分:8)

这是偏离主题的,但严格来说,它是一个自我构建工具的例子。

reprap - 一个开源的3d原型制作机器,最近“诞生”了“它的第一个完整的复制副本”。

我喜欢这种东西。

答案 3 :(得分:5)

一般来说,C编译器通常用C语言编写...... * nix内核在* nix等编译。

答案 4 :(得分:5)

此外,还有pypy项目提供了一个用Python编写的Python解释器。

答案 5 :(得分:4)

这是另一个例子:Mono的C#编译器是self hosting - 即它是用C#编写的,用于编译自己。

狗食是指公司内部使用自己的产品,尤其是在开发过程中使用自己的产品的更一般做法。

答案 6 :(得分:4)

当gcc(Gnu C编译器http://gcc.gnu.org/)不能广泛使用时,你必须从源代码编译它,编译stage1编译器,然后用stage1编译stage2,直到你得到最后的编译器。我认为今天一定是一样的。

答案 7 :(得分:3)

很多人都喜欢看Lisp can be implemented in Lisp

答案 8 :(得分:3)

Squeak是一个自己编写的Smalltalk-80实现。

  

即使它的虚拟机完全用Smalltalk编写,也很容易调试,分析和更改。

答案 9 :(得分:3)

Sun的Java编译器早已用Java编写。但是,recent work也在用Java编写JIT编译器。这是将Java字节代码转换为本机处理器指令的JVM组件。

答案 10 :(得分:2)

我们使用RealBasic进行开发。 IDE是自己编写的,或者说我已经开始相信了。

答案 11 :(得分:2)

ghc,Haskell编译器,主要是用Haskell编写的

答案 12 :(得分:2)

对于AmigaOS,有一个第三方基本解释器(不记得名称),您可以在以后购买编译器。编译器作为源提供,因此您必须使用解释器来运行编译器来编译自己...

引用肯特贝克:

  

......看起来有点像对自己进行脑部手术。

答案 13 :(得分:2)

tcc是另一个用于x86和ARM的自托管C编译器。它声名鹊起的声音非常小(预处理器,编译器,汇编器和链接器都是100k左右)。

答案 14 :(得分:2)

我认为,在任何可能的范围内,任何属于典型开发过程的工具都会参与其自身的开发。这包括:

  • 某些编程语言,尤其是编译语言
  • 的IDE
  • 文字编辑
  • 版本控制系统
  • bug trackers
  • 构建系统

如果你是一个团队建立这些工具之一,并且你没有为一个不适合你的团队的特定利基开发它,我不知道为什么你不会用它来构建本身。让开发人员成为产品的用户是找到可能改进的最佳方法之一。

答案 15 :(得分:1)

Oracle Application Express是一个自行构建的Web应用程序开发工具。

答案 16 :(得分:1)

Eclipse IDE通常使用Eclipse IDE构建和开发。

答案 17 :(得分:1)

使用自己的语言编写语言编译器是很典型的。这称为self-hostingbootstrapping

答案 18 :(得分:1)

Visual Studio和Team Foundation Server自行构建。它被称为dogfooding,这个词如果不是源于微软,那肯定是likes

答案 19 :(得分:0)

我正在开发一个名为nWire的Eclipse插件,它可以帮助并加速代码探索。我一直把它作为我发展的一部分,因为它足够稳定,我现在就不能没有它(好吧,它很快就会成为一种习惯: - )。

对我来说,这是“吃自己的狗粮”,但这确实有帮助。这也提高了我对该产品的信心。

答案 20 :(得分:0)

Kragen Sitaker的Ur-Scheme是一个很好的 small 非平凡编译器的例子。该页面链接了几个更好的来源。

答案 21 :(得分:0)

这就是大多数编译器的工作方式。是的,我知道,有例外,但列出这些例外实际上可能更短。

与此同时,我知道gnat需要Ada编译器(gnat会这样做)从源代码编译。 GCC需要某种类型的C编译器,并且有一个自举阶段用自己构建自己(或者至少它是在15年前,当我最后一次经历这种痛苦时)。我相信Draco的创造者告诉我它是用Draco写的。

答案 22 :(得分:0)

旧的Watcom C / C ++编译器是使用自己构建的。

答案 23 :(得分:0)

Ada和Forth

答案 24 :(得分:0)

我对Smalltalk-80的回答有所提升。我能想到的最好,最优雅的例子。这个问题也让我想起过去流行的一个稍微相关的问题:写一个输出自己的程序。不同级别的引导,但一个有趣的小编程拼图为您的娱乐。也许在所有语言中都不可能?

答案 25 :(得分:0)

不完全是你所要求的,但Revolution http://www.runrev.com的整个开发环境都是使用Revolution本身构建的,而源代码(执行许可证的小部分除外)完全以源代码形式公开。因此,如果您不喜欢开发环境的实现方式,您可以更改它。找一个bug,修复它。您还可以轻松构建其他开发工具并进行集成。

答案 26 :(得分:0)

据我所知,从源代码构建EMACS时,所有ELISP代码都是自引导的。我发现这非常值得注意。

答案 27 :(得分:0)

Jetbrains团队自然使用自己的IDE IntelliJ IDEA开发此IDE。

我认为对大多数IDE供应商来说都是如此。

答案 28 :(得分:0)

AFAIK首先使用已安装的java进行OpenJDK构建,然后自行构建。

答案 29 :(得分:0)

我正在构建一个基于IDE的代码生成器,我正在使用它来构建自己。事实上,正如Stroustrup所做的那样,我首先构建一个有效的生成器模型并使用预处理器来构建最终的C ++代码进行编译。一旦我有一个良好的IDE工作版本,我将开始使用它来构建自己的更多版本。

这就像为“递归编程”的含义赋予了一个新的维度!

答案 30 :(得分:0)

我对JSLint

感到惊讶

简而言之,它被描述为使用javascript的Javascript“编译器”。

答案 31 :(得分:0)

Maven2是使用Maven2构建的。 好吧,它没有使用自己构建(即编写),因为它是一个构建(即编译)项目的工具,但它正在使用自己的代码进行编译。