【问题标题】:Can a language be written in itself? [closed]语言可以自己编写吗? [关闭]
【发布时间】:2012-09-26 00:12:58
【问题描述】:

是否有可能以一种可以自己编写的方式来构建一种语言?你能用c写一个c编译器,还是用python写一个python解释器?如果不是,那么源代码本身是否可以重新编写?如果是这样,您是否必须使用其他语言的任何组件(即在 python 脚本中运行编译的 c)?现实中有这样的例子吗?

【问题讨论】:

  • Mono C# 编译器是用 C# 编写的..
  • 是的。它被称为“bootstrapping”。
  • 仅供参考,PyPy 是 Python 中的 Python 解释器。 gcc 和 g++ 很长一段时间都是用 C 编写的,现在是用 C 和 C++ 混合编写的。
  • 是的,编译语言习惯上自己编写编译器。在这个编译器中你不需要其他语言的组件——但你最初需要一个用现有语言编写的辅助解释器或编译器。
  • 基本答案是否定的。当然,如果一种语言已经存在编译器,那么您可以使用该编译器以该语言为该语言编写另一个编译器。这与您可以使用编译器以该语言编写程序这一事实一样明显,因此,这不算数。另一个不重要的原因是这个编译器或其前身不能用那种语言编写。所以不,您实际上无法使用编译器所针对的语言构建编译器,因为这要求编译器已经存在,如果存在,您就不需要制作它。

标签: recursion programming-languages


【解决方案1】:

您要查找的关键字是self-hosting

通常自托管的其他程序包括内核、 汇编器、shell 和版本控制软件。

自托管的编程语言包括 Ada、BASIC、 C、CoffeeScript、F#、FASM、Forth、Haskell、Java、Lisp、Modula-2、 OCaml、Oberon、Pascal、Python、Scala、Smalltalk 和 Vala。

我使用过的另一个不在列表中的编译器是Mercury

以及相关术语Self-interpreter

有些语言有一个特别优美和优雅的 自我解释器,例如 Lisp 或 Prolog。

【讨论】:

    【解决方案2】:

    是的

    Is gcc C compiler written in C itself?

    它只需要前任。在某些时候,有人在 asm 中编写了一个没有编译器的编译器。 我会假设。

    【讨论】:

      【解决方案3】:

      是的,一种方法是写一个metacircular interpreter,它的优点是非常容易理解或写一个简单的。这方面最著名的教科书示例可能是Structure and Interpretation of Computer Programs 的第 4 章,它探讨了如何实现 Scheme 的一个子集。虽然如果您想了解解释器和一般编程语言,我认为PLAI 是一个更好的起点。

      对于生产语言,您通常需要的不仅仅是一个简单的解释器,但您仍然可以在某些时候引导实现。举一个最近的例子,Rust 编译器是自己编写的。

      【讨论】:

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