Ian*_*Ian 37 c c++ compiler-construction
我一直在寻找一种语言,它提供与Coffeescript相同的功能,但是对于C/C++.我的意思是一种语言,将代码转换为C,但可读,就像CoffeeScript转换为Javascript,可读和所有.
Tre*_*ham 22
我认为这是可能的,甚至是可取的(我在编写Node.js本机模块时勉强处理C++),但比使用像JavaScript这样的高级语言更具挑战性.
您所要求的是一种能够在不牺牲性能或灵活性的情况下提供语法糖的语言.添加一些句法糖(比如句法空白或Ruby风格的def/end块而不是花括号)是微不足道的.但是添加更高级的东西,你会遇到两个主要障碍:静态类型和垃圾收集.
例如,假设您想要添加隐式返回.它似乎是一个小功能,但请考虑一下:为了使该功能有用,当最后一个表达式的值与之不匹配时,您必须至少抛出一个编译时错误.函数的返回类型.这意味着您的编译器需要检查一行
a->b
Run Code Online (Sandbox Code Playgroud)
并弄清楚它是什么类型.原则上这是可能的,但它比CoffeeScript编译器的工作要多得多.
或者说你添加了列表推导.这意味着你要分配一个在编译时不知道长度的数组,这意味着你需要自己以后再释放它.所以句法糖实际上可能会伤害你.如果编译器正在为你添加malloc,那么规则"如果你,你就是free它"不起作用malloc,除非它可以找出放在哪里free(这通常是可能的,但需要做很多工作).
所以,虽然我喜欢有人给C++做CoffeeScript处理,但我不认为它会很快发生 - 如果有的话.我认为世界最终可能会转向类似D或Go的系统级编程.
max*_*ins 13
我认为OOC可能是最接近Coffeescript的C语言.它是一种编程语言,具有许多你期望从动态语言(对象,一流函数,干净语法)中直接编译成C99的功能.
Jan*_*nis 10
您可能想知道的Jacindas列表中缺少一个项目:Vala/Genie是一个编译器,目标是使用GObject库实现对象,由Gnome编写.Vala是一种类似C#的语法,而Genie是一种类似Python的语法,但对于其他语法,它们是相同的系统.它实际上是因为裸露的C + GObject与Gnome家伙一起工作变得太麻烦了.Vala基于引用计数或所有权跟踪以及C#类语言中的许多其他内容来进行对象和自动内存管理.
至于类似CoffeeScript的属性,我刚 看到有一个实验性功能来禁用生成的代码对GObject的依赖性,因此它只生成普通的C而没有任何运行时依赖性.这样做会禁用许多更高级的OO功能,但它仍然会为您提供更好的语法,基本对象系统和(半)自动内存管理.
我不知道输出的可读性如何,但是如果你通过漂亮的打印机运行它可能非常接近你正在寻找的东西.
对于Python,请看一下这个问题: 将Python程序转换为C/C++代码?
他们提到了Shed Skin,它将采用纯python的一部分并转换为独立的C++代码.
Cython通常用于创建Python扩展模块,但如果嵌入了Python解释器,则可以创建独立程序.但这听起来并不像你想要的那样.
Cython基于Pyrex,它们在很多方面相互兼容.
对于你提到的其他一些语言,似乎有类似的项目:Ruby和PHP. Toba for Java(虽然不再维护),Marst for Algol,BCX for BASIC,COB2C,PtoC for Pascal和我应该在此之前停止转变为"从Foo到C/C++的转换器列表".
希望有所帮助!