CoffeeScript是一种受Ruby启发的具有清晰语法的语言,可以转换为JavaScript。有没有类似的语言可以转换成C语言,从而在不影响性能的情况下提供更具可读性的代码?如果没有类似的东西存在,是否有充分的理由不创建它?
CoffeeScript是一种受Ruby启发的具有清晰语法的语言,可以转换为JavaScript。有没有类似的语言可以转换成C语言,从而在不影响性能的情况下提供更具可读性的代码?如果没有类似的东西存在,是否有充分的理由不创建它?
Answers:
CoffeeScript编译为JavaScript的原因很简单,JavaScript是事实上的客户端语言,如果浏览器供应商提供的是另一种语法,那么期望浏览器供应商本地支持CoffeeScript是不合理的。
以非常相似的方式,高级语言对C转换器的重点是即时可移植性,因为几乎每个平台都有一个C编译器和丰富的C库。例如,Vala 旨在:
GNOME是一个传统的面向C的项目,而GObject是专门用C编写的,如果Vala编译成机器代码,无论其友好的性质(和语法)如何,Vara都不会在GNOME开发人员中找到很多爱。并不是每个人都喜欢这种语法,以至于要开发另一种语言Genie来改进它。
对于一个C ++示例,Facebook开发了HipHop,这是PHP到C ++的转换器。他们试图解决一个非常具体的问题,即CPU使用率,而不必替换所有PHP代码并重新培训工程师(或者更糟糕的是,替换他们)。这是一个更为具体的示例,因为Facebook可伸缩性问题非常独特,并且再次访问中间C ++代码可能很有用,因为PHP扩展是用C和C ++编写的。
因此,从高级语言到另一种语言的翻译是一个好主意,主要是在需要访问中间代码时。对于CoffeeScript,由于广泛使用浏览器,因此JavaScript代码是必需的;对于Vala,Genie和HipHop,由于现有代码库,因此JavaScript代码是必需的。显然,可以访问中间代码意味着您可以根据需要进一步优化它。
但是总的来说,如果您不使用生成的代码,那么构建一种可转换为C的语言或任何其他语言并不是一个好主意。那里有很多语言,如果您不能应付C语言,请选择其他语言。碰巧的是,由Bjarne Stroustrup编写的第一个C ++编译器CFront是将类从C转换为C的C语言,但这主要是因为作为一种新语言,不可能用类来引导 C。
我要讲的是Yannis Rizos在他原本不错的答案中没有提到的几点。
是的,存在多种语言。C是编译器后端的通用目标,因为它具有难以置信的可移植性,并且经过了高度优化,尽管使用LLVM并没有太多意义。
我知道可以这样做的一些实现是:
与原始C程序一样快
不,仅仅因为它使用C作为中间语言并不意味着您会达到它的速度。C之所以快是因为编写代码的方法与其他语言明显不同。它只是一个便携式组件,没什么特别的。