我很好奇使用什么工具来构建自己的下一个版本。
例如,Delphi 长期以来一直声称“ Delphi 是用 Delphi 编写的”。
我假设 Visual Studio 是使用 Visual Studio 编写的。
还有哪些其他自行编写的工具示例?
我很好奇使用什么工具来构建自己的下一个版本。
例如,Delphi 长期以来一直声称“ Delphi 是用 Delphi 编写的”。
我假设 Visual Studio 是使用 Visual Studio 编写的。
还有哪些其他自行编写的工具示例?
有趣的是,VB.NET 和 C# 编译器本身是用非托管 C++ 编写的(导致 C++ 团队的 T 恤:“我的编译器编译了你的”)。C# 团队希望为 VS2010 提供一个完全托管的 C# 托管 C# 编译器。
Bjarne Stroustrup 在The Design and Evolution of C++中提到,第一个 C++ 编译器是用 C++ 编写的。
我刚刚注意到这也是他的常见问题解答中的一个问题:
第一个 C++ 编译器 (Cfront) 是用 C++ 编写的。为了构建它,我首先使用 C 编写了一个“C with Classes”-to-C 预处理器。“C with Classes”是一种 C 方言,成为 C++ 的直接祖先。该预处理器将“带有类的 C”结构(例如类和构造函数)翻译成 C。它是一个传统的预处理器,不能理解所有语言,将大部分类型检查留给 C 编译器来完成,并翻译个别在没有完整知识的情况下构建。然后我在“C with Classes”中编写了 Cfront 的第一个版本。
一般而言,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)。
我会假设作为典型开发过程一部分的几乎所有工具都将尽可能地参与其自身的开发。这包括:
如果您在一个构建这些工具之一的团队中,并且您不是为不适用于您的团队的特定利基开发它,我不知道您为什么不使用它来构建自己。让开发人员成为产品的用户是找到可能改进的最佳方法之一。
对于 AmigaOS,有一个第三方基本解释器(不记得名称),您以后可以为其购买编译器。编译器是作为源代码交付的,所以你必须使用解释器来运行编译器来编译自己......
引用肯特贝克:
...这看起来有点像对自己进行脑部手术。
Visual Studio 和 Team Foundation Server 自行构建。它被称为dogfooding,这个术语如果不是源自微软,它当然喜欢
Oracle Application Express是一个自身构建的 Web 应用程序开发工具。
Eclipse IDE通常是使用 Eclipse IDE 构建和开发的。
Maven2是使用 Maven2 构建的。好的,它不是使用自己构建(即编写)的,因为它是构建(即编译)项目的工具,但它使用自己的代码进行编译...
简而言之,它被描述为使用 javascript 的 Javascript“编译器”。
我正在构建一个基于 IDE 的代码生成器,并使用它来构建自己。事实上,正如 Stroustrup 所做的那样,我首先构建了一个有效的生成器模型并使用预处理器构建最终的 C++ 代码以进行编译。一旦我有了 IDE 的良好工作版本,我将开始使用它来构建它自己的更多版本。
这就像给“递归编程”的含义赋予了新的维度!
AFAIK首先使用已安装的 java 构建OpenJDK,然后再构建自身。
Jetbrains 团队自然使用自己的 IDE IntelliJ IDEA来开发这个 IDE。
我认为大多数 IDE 供应商都是如此。
据我所知,从源代码构建 EMACS 时,所有 ELISP 代码都是自举的。我发现这很值得注意。
不完全是您所要求的,但 Revolution http://www.runrev.com的整个开发环境都是使用 Revolution 本身构建的,并且源代码(除了执行许可证的小部分)完全以源代码形式公开. 所以如果你不喜欢开发环境的实现方式,你可以改变它。找到一个错误,修复它。您还可以轻松构建其他开发工具并集成它们。
我给了 Smalltalk-80 的答案。我能想到的最好、最优雅的例子。这个问题也让我想起了一个曾经很流行的稍微相关的问题:编写一个输出自身的程序。不是同一级别的引导程序,而是一个有趣的小编程难题,供您娱乐。也许不可能在所有语言中都有?
艾达和福斯
旧的 Watcom C/C++ 编译器是使用自己构建的。
Kragen Sitaker 的Ur-Scheme是一个用自己编写的小型非平凡编译器的一个很好的例子。该页面链接到这方面的几个更好的资源。
我正在开发一个名为nWire的 Eclipse 插件,它可以帮助和加速代码探索。从它足够稳定的那一刻起,我就一直将它作为我开发的一部分,而我现在不能没有它(嗯,它有很快成为一种习惯的趋势:-)。
对我来说,这是“吃你自己的狗粮”,但它真的很有帮助。这也增加了我对产品的信心。
这就是大多数编译器的工作方式。是的,我知道,有例外,但列出这些例外实际上可能更短。
同时,我知道gnat需要一个 Ada 编译器(gnat 可以)从源代码编译。GCC 需要某种 C 编译器,并且有一个引导阶段来使用自己构建自己(或者至少在 15 年前我最后一次经历这种痛苦时它是这样做的)。我相信 Draco 的创造者告诉我它是用 Draco 编写的。