类似于CoffeeScript的C / C ++语言

我一直在寻找一种提供与Coffeescript相同function的语言,但是对于C / C ++。 我的意思是一种将代码转换为C的语言,但是可读,就像CoffeeScript转换成Javascript,可读和全部。

我认为这是可能的,甚至是可取的(在编写Node.js原生模块时,我勉强处理C ++),但是比使用JavaScript这样的高级语言更具挑战性。

你所要求的是一种能够提供语法糖而不牺牲性能或灵活性的语言。 一些语法糖(比如语法空白或者Ruby风格的def/end块,而不是大括号)将很容易被添加。 但增加更先进的东西,你会遇到两个主要障碍:静态打字和垃圾收集。

例如,假设您想要添加隐式返回。 它看起来像一个小function,但想一想:为了使这个function有用,当最后一个expression式的值不匹配时,你至less必须抛出一个编译时错误函数的返回types。 这意味着你的编译器需要检查一行

 a->b 

并找出它是什么types。 原则上这是可能的,但是它比CoffeeScript编译器的工作量要多得多。

或者说你添加了列表parsing。 这意味着你正在分配一个数组,这个数组的长度在编译时是不知道的,这意味着你以后需要自己释放它。 所以语法糖实际上可能会伤害你。 如果编译器为你添加malloc ,规则“如果你malloc它,你free它”不起作用,除非它可以找出在哪里把free (这也是一般可能,但需要很多工作的)。

所以,当我喜欢有人给C ++ CoffeeScript处理的时候,我不希望它很快发生 – 如果有的话。 我认为世界最终会转向像D或Go这样的系统级编程。

我认为OOC可能是最接近Coffeescript的C语言。它是一种编程语言,它具有许多直接编译到C99中的dynamic语言(对象,头等函数,纯语法)所期望的function。

http://ooc-lang.org/

SugarCpp是一种可以编译为C ++ 11的语言。 这应该是你在找什么。 访问https://github.com/curimit/SugarCpp了解更多详情。;

你可能想知道Jacindas列表中缺less的一个项目: Vala / Genie是一个编译器,它的目标是用Gnome编写的GObject库实现对象。 Vala是一种类似C#的语法,Genie是一种类似Python的语法,但其余的则是相同的系统。 它实际上是因为C + GObject和Gnome家伙的合作变得太痛苦了。 Vala基于引用计数或所有权跟踪来执行对象和自动内存pipe理,以及许多其他您希望用C#语言编写的内容。

至于类似CoffeeScript的属性,我只是 看到有一个实验性的function来禁用GObject上生成的代码的依赖关系,所以它只生成纯C的,没有任何运行时依赖关系。 这样做会禁用许多更高级的面向对象function,但它仍然会为您提供更好的语法,基本对象系统和(半)自动内存pipe理。

我不知道输出的可读性如何,但是如果你通过一个漂亮的打印机来运行它,它可能会非常接近你要找的东西。

对于Python专门来说,看看这个问题: 将Python程序转换为C / C ++代码?

他们提到了Shed Skin ,它将采用纯Python的子集并转换为独立的C ++代码。

Cython通常用于创buildPython扩展模块,但如果embedded Python解释器,则可以创build独立程序。 这听起来不像你要找的东西,但是。

Cython基于Pyrex ,它们在很多方面是相互兼容的。

对于你提到的其他一些语言,似乎有类似的项目: Ruby和PHP 。 Toba for Java(尽pipe不再维护), Marst for Algol, BCX for BASIC, COB2C , PtoC for Pascal和我应该在这里变成“从Foo到C / C ++的转换器列表”。

希望有所帮助!

既然vala和genie已经被提到,那么我会把BaCon(基本转换器)放在那里,让那些回忆每月印刷出版物的手工编码程序的人,但是想用现代的GUI来使用它。

 Must run on each Unix/Linux/BSD platform, including MacOSX Converted sourcecode must be compilable with GCC Must resemble genuine BASIC with implicit variable delarations Spoken language constructs are preferred 

网站http://www.basic-converter.org/有很多的例子(一些主题非常复杂的“BASIC”)和几乎所有的开源IDE插件,或者你可以使用BACON IDE。

看看这个新的新项目: https : //bixense.com/coffeepp/

咖啡++

Coffee ++是编译成C ++的一种小语言。 已经创build了与C ++的CoffeeScript类似的东西。 目前Coffee ++处于alpha状态,根本不可用或最终。 查看Github上的源代码。

Coffee ++的黄金法则是:“只是C ++”。 代码一对一编译为等效的C ++,并且没有运行时库。 您可以从Coffee ++中无缝地使用任何现有的C ++库(反之亦然)。

概述:

源文件Test.cf ++

 include iostream int main(): age := 5 dog := Dog(age) if age != 7: dog.bark() class Dog: public Dog(int age): this->age := age public void bark(): std::cout << "Woof!\n" private int age }; 

编译Test.hpp

 #pragma once int main(); class Dog { public: Dog(); void bark(); private: int age; }; 

编译Test.cpp

 #include "test.hpp" #include <iostream> int main() { auto age = 5; auto dog = Dog(age); if (age != 7) { dog.bark(); } } Dog::Dog(int age) : age(age) { } void Dog::bark() { std::cout << "Woof!\n"; } 

那么,这是不是你想要的,但..: http : //www.campbell.nu/oscar/cython/index.html – 这个cython / cytoc是一个重要的空间(pythonish)的C / C ++编译器,我编码大约在1999/2000年左右,与七年后到来的cython项目没有任何关系。

坦率地说,我是用Perl编写的,它使用正则expression式是启发式的。 我用它来完成一个Gameboy Color游戏的整个项目(常规的ansi C)。 但是我不相信它……这就是为什么我也在环顾四周,而不是用那个尘土飞扬的老东西;)

后续工作:我一直在Onyx( https://github.com/ozra/onyx-lang )工作一年,现在终于意识到要做的事情是将其重写为C ++而不是LLVM, IR。 重新定位的想法是品牌新鲜,所以重写仍然是蒸气。 但是如果你喜欢这个语言的想法,你的input将会在RFC中得到很好的使用,这是你塑造它的机会。