我很好奇使用什么工具来构建自己的下一个版本。
例如,德尔福长期以来声称“Delphi is written in Delphi”。
我假设Visual Studio是使用Visual Studio编写的。
有哪些其他工具可以自行编写?
答案 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)
答案 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)
我认为,在任何可能的范围内,任何属于典型开发过程的工具都会参与其自身的开发。这包括:
如果你是一个团队建立这些工具之一,并且你没有为一个不适合你的团队的特定利基开发它,我不知道为什么你不会用它来构建本身。让开发人员成为产品的用户是找到可能改进的最佳方法之一。
答案 15 :(得分:1)
Oracle Application Express是一个自行构建的Web应用程序开发工具。
答案 16 :(得分:1)
Eclipse IDE通常使用Eclipse IDE构建和开发。
答案 17 :(得分:1)
使用自己的语言编写语言编译器是很典型的。这称为self-hosting或bootstrapping。
答案 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构建的。 好吧,它没有使用自己构建(即编写),因为它是一个构建(即编译)项目的工具,但它正在使用自己的代码进行编译。