我一直在寻找一种与Coffeescript相似的语言,但是用于C/C++。我的意思是一种将代码转换为C语言的语言,但是保持可读性,就像Coffeescript转换为Javascript一样,易于阅读。
我一直在寻找一种与Coffeescript相似的语言,但是用于C/C++。我的意思是一种将代码转换为C语言的语言,但是保持可读性,就像Coffeescript转换为Javascript一样,易于阅读。
def/end
块而不是花括号)很容易添加。但是,如果添加任何更高级的内容,你将遇到两个主要障碍:静态类型和垃圾回收。a->b
理论上可以弄清它是什么类型,但这比CoffeeScript编译器做的要多很多。
或者说你添加了列表推导式。这意味着你正在分配一个长度在编译时不确定的数组,这意味着你以后需要自己处理它的释放。因此,语法糖实际上可能会对你造成伤害。规则"如果你malloc
它,你就需要free
它"是行不通的,除非编译器为您添加了malloc
并且能够找出放置free
的位置(通常是可能的,但需要大量的工作)。
因此,虽然我希望有人能够像对待CoffeeScript一样对待C++,但我不指望它会在不久的将来,甚至是永远。我认为更有可能的是世界最终会转向像D或Go这样的系统级编程语言。
我认为OOC可能是最接近Coffeescript的C语言。它是一种编程语言,具有许多动态语言的特性(对象、一级函数、简洁的语法),可以直接编译成C99。
SugarCpp是一种可以编译成C++11的语言。这可能是你要寻找的东西。访问https://github.com/curimit/SugarCpp获取更多详细信息。
杰辛达列出的一项你可能想知道的是:Vala/Genie 是一个针对使用 GObject 库实现对象的 C 编译器,由 Gnome 编写。 Vala 是类似于 C# 的语法,而 Genie 则类似于 Python 的语法,但在其余方面它们是相同的系统。实际上,它是因为裸的 C + GObject 对于 Gnome 的人来说太难处理了而被创建的。 Vala 做了对象和基于引用计数或所有权跟踪的自动内存管理,以及其他许多你在类似于 C# 的语言中期望的东西。
至于像 CoffeeScript 一样的属性,我 刚刚 看到 有一个实验性功能可以禁用生成的代码对 GObject 的依赖,因此它只生成没有任何运行时依赖关系的纯 C 代码。这样做会禁用许多更高级的 OO 功能,但仍然给你留下了更好的语法、基本的对象系统和(半)自动内存管理。
我不知道输出的可读性如何,但如果你通过一个漂亮的打印机运行它,它可能非常接近你要找的东西。
Coffee++是一种编译成C ++的小语言。它的创建是为了让C ++有类似于CoffeeScript的东西。目前,Coffee++处于α状态,不可用或最终版本。请在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";
}
既然已经提到了Vala和Genie,那么我想为那些怀念从月刊手工编写程序但又想使用现代GUI的人介绍BaCon(Basic Converter)。
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。
嗯,这不是你想要的,但是... : http://www.campbell.nu/oscar/cython/index.html - 这个Cython / Cytoc是我在1999/2000年编写的一个重要的空间(类似python)转换器,用于C / C ++,它与七年后到来的Cython项目没有关系。
坦白地说,我用Perl编写了它,它是启发式的,使用正则表达式。我将其用于Gameboy Color游戏项目(常规ansi C)。但我不会相信它...这就是为什么我也在寻找其他替代方案,而不是使用那个陈旧的老家伙的原因 ;)
跟进: 我已经在Onyx(https://github.com/ozra/onyx-lang)上工作了一年多,最终意识到明显的事情是将其重写为编译成C ++,而不是LLVM-IR。重新定位的想法非常新鲜,因此重写仍然是虚无缥缈的。但是,如果您喜欢该语言的想法,则可以在RFC中很好地利用您的输入,这是您塑造它的机会。