一种不使用'C'的语言?

Pie*_*rre 11 c compiler-construction programming-languages

只是好奇.我可能错了,但据我所知,大多数语言都是使用"C"创建的.

例如:perl,php, python,java(?),go ...

是否有任何语言不使用C作为低级解释器/编译器?(fortran?)

out*_*tis 22

在C之前的任何编译语言都有(有?)编译器,这些编译器本身并不依赖于C.

有一个旧的Lisp编译器是用Lisp编写的(当Lisp是唯一的Lisp时).

Fortran,Algol,SNOBOL,Forth,Smalltalk,Simula,Pascal,APL,COBOL,MUMPS,LOGO和BCPL也完全没有C.


Nic*_*kis 16

如果在A中编写语言B,则可以稍后在B中编写B编译器.
检查Bootstrapping

Bootstrapping是计算机科学中使用的术语,用于描述在目标编程语言中编写编译器(或汇编程序)所涉及的技术.这种技术也称为自托管.

大部分编程语言都是自助式的,包括 BASIC,C,Pascal,Factor,Haskell, Modula-2,Oberon,OCaml,Common Lisp, Scheme,Clojure等.

编辑:考虑到评论:

  • Haskell的运行时系统仍然是C的一大块
  • Clojure尚未(尚未)引导,但它是用Java实现的

  • 不正确......这仅适用于B功能充分的情况.我可以用C编写一种语言,其唯一的命令是print和goto; 这种语言不能用于编写自己的独立实现. (4认同)

Vij*_*hew 11

如果您正在寻找某些流行/优秀语言的非C实现,请考虑以下因素:


nos*_*nos 7

SBCL

  • Spice Lisp生CMUCL,CMUCL生SBCL.看起来,Spice Lisp是用微代码编写的(对于Perq).来自:http://www.cons.org/cmucl/doc/cmucl-history.html (4认同)

Kos*_*801 6

Delphi是用Pascal编写的,AFAIK Pascal(最初)是用Fortran编写的,但之后用Pascal 编写.


pli*_*nth 5

启动和运行语言的过程非常有趣.FORTH特别有趣的是,语言的核心可以在相当小的空间内实现,然后其他所有东西都可以用于骑行.从我自己的记忆中,你可以在组装中实现@,!,+和 - - 也许是一两个堆栈杂耍运算符,你就完成了.有关更多信息,请参见此处

特别有趣的是,当引导过程中的事情开始出错时.很多年前,我读到了一个在大学创建的Pascal编译器作为研究项目.它是用Pascal编写的,使用现有的Pascal编译器并最终取代它.问题是在特定情况下代码生成中存在错误,并且编译器源中的修复导致现有编译器中的错误,使得无法使用常规方法应用.备份到非bug的版本已经过时了.最终,作者最终对现有的编译器进行了非常仔细的二元手术.

虽然C是一种主导系统语言,但它肯定不是创建其他语言的基础语言.早期的Macintosh机器是用Pascal创建的,大多数第一批工具和语言都是基于Pascal(或汇编)的.

  • 另一个例子是故意错误引导.请参阅:http://cm.bell-labs.com/who/ken/trust.html (3认同)

Bri*_*ell 5

C是大多数现代操作系统编写的语言,因此几乎所有其他想要在现代操作系统和现代硬件上运行的语言都必​​须具有与C接口的能力,如果它想要与C的其余部分进行交互.世界.此外,正因为如此,C编译器无处不在,因此您几乎总是依赖于C编译器可用于您感兴趣的任何平台.出于这两个原因,许多语言都是用C实现的(至少部分是),或编写为C编译(因此编译为C的版本可用于引导).

也就是说,仍有一些语言与C语言很少接触.Clozure Common Lisp(以前的OpenMCL,之前的Macintosh Common Lisp,在Coral Common Lisp之前)完全用Common Lisp编写.您需要为某个平台下载它的二进制文件才能编译它.Lisp用Lisp编写是很常见的(有时候是另一种方言,有时是同一种方言),因为Lisp比C语言早得多.1970年代和80年代甚至有Lisp机器用来运行Lisp,整个运行系统和开发环境都写在其中.

有许多语言有编译器和一些用该语言编写的库,而运行时的一些库和位用C语言编写.例如,CMUCL(及其派生的SBCL)主要用Common Lisp编写,但它们有一个小C运行时.格拉斯哥Haskell编译器GHC也是如此; 它是用Haskell编写的,所以你需要一个现有的Haskell实现来构建它(通常是Hugs,因为它是用C编写的,因此使引导更容易),但它在运行时有一些C代码.

方案48是用PreScheme编写的方案,PreScheme是Scheme的有限方言,可以编译为C,它本身是用Scheme编写的.它编译为C的事实使得自举更容易; Scheme 48发行版附带了已编译为C的代码,因此您只需使用系统C编译器对其进行编译即可使自己运行起来.

还有许多其他语言也用C语言编写.有Pascal,用Pascal编写的Pascal版本.有很多用Java编写的语言,虽然JVM本身大多用C语言编写.Erlang最初是用Prolog编写的(它强烈影响了它的语法),但不是用C和Erlang的组合编写的.

如果您希望它们在实际计算机上运行,​​则必须以某种方式编写所有编程语言.一开始,唯一的选择就是直接编写机器代码.不久之后,人们编写汇编程序(最初使用机器代码,后来自己编写汇编程序),以便更轻松地编写机器代码.然后是高级语言; FORTRAN,Lisp,COBOL,ALGOL,以及后来的Simula,Smalltalk,C,Pascal,ML,Prolog.每一件都必须写成某种东西; 最早的是用汇编语言编写的,后来有些是用自己编写的,有些是用另一种高级语言编写的.到了80年代,C几乎是主流的系统编程语言,因此它成为了编写新语言的默认选择; 这一直持续到今天.但是回想一下之前的语言,你会发现很多用其他语言实现的,甚至是自己.