C是一种古老的语言。例如,你知道使用它没有问题吗?运算符而不是 - >运算符指针和 - >由于遗留原因而维护? see here
研究几个C代码,可以注意到大多数时间结构是使用指针而不是值传递的。数组也通过指针传递。
是否可以更改语法以默认将结构作为指针传递?例如,请考虑以下示例:
struct Point {
float x;
float y;
};
struct Line {
Point! p0; // ! means that we want a value, not a pointer
Point! p1;
};
struct Line2 {
Point p0; // would be the same as Point*
Point p1;
}
void foobar(Line line) { // would mean Line* line
...
}
void foobaz(Line! line) { // would mean Line line
...
}
我们不考虑可读性,例如,有些人认为 - >明确指出这是一个指针。这不是重点。
以下是一个问题:使用此类语法可能会出现哪些问题或可能出现的问题?例如:'使用这样的语法,就不可能做到这一点或那个'
Java实际上与此提议类似:一切都是引擎盖下的指针。区别在于Java具有垃圾收集器,并且对象总是在堆中分配(对象本身,而不是“指针”),而在C中,结构可以在堆栈中分配(尽管我看到在堆中分配的大部分时间) 。
如果有人想知道我为什么这么问,那是因为我正在为低级开发创建一种编程语言,我想优化常见情况的语法。虽然我喜欢C语言本身,但我不得不使用头文件(例如,在两个地方更新函数签名),缺乏对函数重载的支持(我不喜欢编写int_list_add,float_list_add)和类似。
感谢所有已经回复的人,但我并不是要修改C.这是对我语言的研究,我没有其他人可以使用。
我的语言是针对低级开发尝试尽可能使用高级内容,如OO内容,高级函数,闭包等。使用类似于C的存储模型(类似,不相等),它不会是带有收集器的收集器。
语言将像C一样有指针:你可以得到一些变量的地址,参考指针。
如果提出我问的问题非常重要,那么请转到我的语言语法,顺便说一下,它与C完全不同,这是我不想创建C克隆的证据。< / p>
record Point:
x : float
y : float
record Line:
p0 : Point!
p1 : Point!
record Line2:
p0 : Point
p1 : Point
function foobar : void
@line : Line
function foobaz : void
@line : Line!
正如我所说,我想为常见情况选择语言的语法。因此,如果我几乎一直都要通过指针,我不想再次使用*,一次又一次。唯一的问题(这与我的编程技巧无关,但是哲学问题)是我看不到明确指定指针可能引起的问题。
答案 0 :(得分:6)
您可以更改C的语法和semantics(实际上比语法更重要),但不应再调用该语言C.
C是标准语言;首先阅读C11上的wikipage和n1570草案(或者从ISO或您的国家标准机构购买相应的纸张)
我不是律师,我不知道ISO是否以及如何合法地保护标准。 (但是,请确保如果你打电话给你的东西C,人们肯定会嘲笑你)。
例如:'使用这样的语法,就不可能做到这一点或那个'
不可能(您的语言和C语言都是Turing-complete)。有些事情可能会变得更加不方便。
顺便说一下,你没有准确地描述你在想什么(例子不是描述编程语言,而是你没有解释语义方面)。所以我们不能评论它。阅读几种编程语言规范,不仅包括n1570,还包括n3337(接近C ++ 11规范),当然还有R5RS(一些简短的,写得很好的,一些Scheme方言的规范)
最后,请确保 实施您的编程语言(并以与C不同的名称命名)。我建议将其作为一些free software(例如,在github上)和bootstrap编译器实现。
因此,请尝试指定您的语言以及指定C或C ++或Scheme。然后实施。你可能需要几十年的工作,而你肯定需要几年时间。
首先阅读Dragon Book,SICP&amp; Lisp In Small Pieces。另请阅读Denotational Semantics
考虑在GCCJIT或LLVM等图书馆或compiling it to C等图书馆的帮助下实施您的语言。然后你将有一个“概念验证”实现。玩得开心。
通过实现您的语言,您将发现其语义陷阱。 (我喜欢这样做。)
另请参阅其他语言,例如Ada,Go,Ocaml,Rust,Modula,Cyclone,{{3} },C ++(也许你正在重新发明它的引用,或者它的智能指针),Scheme ....
阅读Scott的Common Lisp书。