【问题标题】:What tools are built using themselves? [closed]哪些工具是使用自己构建的? [关闭]
【发布时间】:2010-09-20 11:59:42
【问题描述】:

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

例如,Delphi 早就声称“Delphi is written in Delphi”。

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

还有哪些其他自行编写的工具示例?

【问题讨论】:

  • 这提出了一个古老的问题:“什么先出现,C 还是 C 编译器?”
  • 旁白:有没有人提到过 Delphi 是用 Delphi 编写的断言?
  • 程序员构建自己的下一个版本!
  • @Conrad:我曾经参加过 Delphi 2010 的演示,Nick Hodges 在他的笔记本电脑上打开了 Delphi,在 Delphi 中。然后房间爆炸了。

标签: bootstrapping


【解决方案1】:

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

【讨论】:

  • 所以 C# 不是用 C# 编写的,但这个答案得到了 6 票赞成......这将是一个反例或可能是对不同问题的答案。这有多酷?
  • 我认为 C# 编写的 C# 编译器将出现在 VS2010 中是不正确的——我认为它是在那之后的。
  • @S.Lott:这个答案被赞成,因为它包含有用或有趣的信息。虽然不知道为什么它被标记为接受。 :)
  • 他们可以只使用 mono 的编译器(它是 X11/MIT 许可的)但是 NIH! NIH! NIH! ;)
  • @S.Lott 和@Alexander Prokofyev - 你们可能是对的 - 将其作为公认的答案是没有意义的。尽管这仍然很有趣,但我已将其移至其他答案。
【解决方案2】:

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

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

第一个 C++ 编译器 (Cfront) 是 用 C++ 编写。为了构建它,我首先 用C写了一个“C with “类”到 C 预处理器。“C 与 Classes”是一种 C 方言,后来成为 C++ 的直接祖先。那 预处理器翻译为“C with 类”构造(例如类 和构造函数)到 C 中。这是一个 没有的传统预处理器 了解所有语言,离开 大多数 C 的类型检查 编译器来做,并编译 没有完整的单个构造 知识。然后我写了第一个 “C with Classes”中的 Cfront 版本。

【讨论】:

    【解决方案3】:

    这是题外话,但严格来说,它是一个自建工具的例子。

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

    我喜欢这种东西。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 不,那是作弊。 PyPy 不仅仅是对 eval 的调用 :-)
        【解决方案6】:

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

        【讨论】:

        • 另一种正常的方法是使用 gcc 交叉编译器为新平台编译它。
        • gcc 通常只编译非常有限的 gcc 版本。
        【解决方案7】:

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

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

        【讨论】:

        • 我希望我知道当您下载完整源代码并进行编译时,C# 编译器是如何引导的。
        • 我也是 :) [十个字符...]
        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          甚至它的虚拟机也完全用 Smalltalk 编写,因此易于调试、分析和更改。

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

              我们使用 RealBasic 进行开发。 IDE 是自己编写的,或者我一直相信。

              【讨论】:

              • 是的,从 REALbasic 2005 开始,IDE 是用 REALbasic 编写的。然而,编译器不是。
              【解决方案12】:

              ghc,Haskell 编译器,大部分是用 Haskell 编写的。

              【讨论】:

              • 运行时系统的一部分是用 C 和 C-- 编写的(后者是为在 GHC 中使用而开发的中间语言)。
              【解决方案13】:

              tcc 是另一个用于 x86 和 ARM 的自托管 C 编译器。它声名鹊起的是,嗯,很小(预处理器、编译器、汇编器和链接器大约 100k)。

              【讨论】:

                【解决方案14】:

                我认为作为典型开发过程一部分的几乎所有工具都将在其自身的开发中涉及到,无论其程度如何。这包括:

                • 某些编程语言,尤其是编译语言
                • IDE
                • 文本编辑器
                • 版本控制系统
                • 错误跟踪器
                • 构建系统

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

                【讨论】:

                  【解决方案15】:

                  对于 AmigaOS,有一个第三方基本解释器(不记得名称),您以后可以为其购买编译器。编译器是作为源代码交付的,所以你必须使用解释器来运行编译器来编译自己...

                  引用肯特贝克的话:

                  ...这看起来有点像给自己做脑部手术。

                  【讨论】:

                  • 这样的东西太酷了!想想看:我们在内部都是这样工作的。 DNA,有人吗?
                  【解决方案16】:

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

                  【讨论】:

                  • 嗯。不,他们不是。他们在开发时确实使用了 Team Foundation 服务器;但 TFS 不是 Delphi、C++、C# 等开发语言
                  • 你说得对,我读的不是刚刚编译的 build,而是因为他们使用了它,这可以解释为对此的回答。无论如何,这是一个相当模糊的问题。
                  【解决方案17】:

                  Oracle Application Express 是一个自建的网络应用开发工具。

                  【讨论】:

                    【解决方案18】:

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

                    【讨论】:

                      【解决方案19】:

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

                      【讨论】:

                        【解决方案20】:

                        Maven2 是使用 Maven2 构建的。 好的,它不是使用自己构建(即编写)的,因为它是构建(即编译)项目的工具,但它使用自己的代码进行编译.. .

                        【讨论】:

                          【解决方案21】:

                          我对@9​​87654321@ 感到惊讶

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

                          【讨论】:

                            【解决方案22】:

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

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

                            【讨论】:

                              【解决方案23】:

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

                              【讨论】:

                                【解决方案24】:

                                Jetbrains 团队自然会使用自己的 IDE IntelliJ IDEA 来开发这个 IDE。

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

                                【讨论】:

                                  【解决方案25】:

                                  据我所知,从源代码构建 EMACS 时,所有 ELISP 代码都是自举的。我觉得这很值得注意。

                                  【讨论】:

                                    【解决方案26】:

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

                                    【讨论】:

                                      【解决方案27】:

                                      艾达和福斯

                                      【讨论】:

                                        【解决方案28】:

                                        我给了 Smalltalk-80 的答案。我能想到的最好、最优雅的例子。这个问题也让我想起了一个曾经很流行的稍微相关的问题:编写一个输出自身的程序。不是相同级别的引导程序,而是一个有趣的小编程难题,供您娱乐。也许不是所有语言都可以?

                                        【讨论】:

                                          【解决方案29】:

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

                                          【讨论】:

                                            【解决方案30】:

                                            Kragen Sitaker 的Ur-Scheme 是一个很好的例子,它是一个small 自己编写的非平凡编译器。该页面链接到更多类似的好资源。

                                            【讨论】:

                                              猜你喜欢
                                              • 1970-01-01
                                              • 2010-09-06
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2015-06-12
                                              • 1970-01-01
                                              • 2010-10-05
                                              • 1970-01-01
                                              相关资源
                                              最近更新 更多