C ++中函数的关键字?
Keyword for functions in C++?
为什么 C++ 没有 define/declare 函数的关键字?基本上该语言中的所有其他设计抽象都有一个(struct
、class
、concept
、module
、...)。
它不会使语言 easier to parse 以及更一致吗?大多数 "modern" 语言似乎都是这样的(fn
在 rust 中,fun
在 kotlin 中,...)。
嗯,尽管是一种现代语言(至少,我认为 C++17 是一种现代语言,但这是恕我直言),C++ 必须向后兼容大多数 C 和在过去 50 年左右创建的 C++ 版本。当时这是一个全新的工作领域,没有人真正知道如何做得更好。那是 1978 年! C 创作者认为这就足够了,这完全是他们的决定。
现在实施新关键字会破坏现有代码,所以我认为这样做不合适。
像 Rust、Kotlin 和其他现代语言有大量的时间来考虑什么是好的,什么不是基于当前存在的语言,那些过去使用但后来消失的语言,等等。
老实说,我认为当前的语法还不错,不需要做任何事情。
最令人烦恼的解析当然是一个问题,但对于几乎所有使用 C++ 的人来说都是一个众所周知的问题。
因为函数以另一种方式标识:通过名称后的括号。请注意,函数来自 C
,其中没有提到那些设计抽象。因此,添加一个奇怪的关键字无助于坚持某种语言设计。而且,少一个保留字也不是坏事。
如果你真的想要一个函数关键字,你可以这样做:
#define FUNC auto
FUNC foo() -> Bar {
baz();
}
C++ 的语法主要来自 C,而 C 不提供 function
关键字。相反,它使用某种语法来指示大多数函数:
[return type] [function name]([paramters]) { }
因此,如果引入 function
关键字,我们可以获得更快的解析并提高可读性。但是,你现在有两种不同的方式来声明一些东西,你可以'
由于向后兼容的必要性,不要摆脱旧方法。
但假设我们忽略了向后兼容性参数并假设它被引入:
function int square(int a) { //1
return a * a;
}
//-----------------------------
function square(int a) { //2
return a * a;
}
case 1
简单地表现为关键字指示器,它有优点(可读性、解析)和缺点(使用不必要的噪音向函数声明发送垃圾邮件)
case 2
是一种 javascript 风格的方法,让编译器找出 return 类型(就像这里的 auto
一样)。这可能是最美观的方法,但 C++ 是非常静态类型的,这会在不需要时增加一层混乱(auto
-ness 可能很有用,但肯定并不总是需要)。
所以最终这些中等收益似乎并不能证明引入这样一个关键字所带来的成本是合理的。
额外位:
自 C++11 以来,语言特性允许您争论一个特定的方法:
function square(int a) -> int {
return a * a;
}
这肯定是一个非常可靠的解决方案!但似乎关于 function
关键字的讨论早已平息。当在最新的 C++ 版本上进行创新时,还有许多其他可能更重要的优先事项需要讨论,这是可以理解的。
为什么 C++ 没有 define/declare 函数的关键字?基本上该语言中的所有其他设计抽象都有一个(struct
、class
、concept
、module
、...)。
它不会使语言 easier to parse 以及更一致吗?大多数 "modern" 语言似乎都是这样的(fn
在 rust 中,fun
在 kotlin 中,...)。
嗯,尽管是一种现代语言(至少,我认为 C++17 是一种现代语言,但这是恕我直言),C++ 必须向后兼容大多数 C 和在过去 50 年左右创建的 C++ 版本。当时这是一个全新的工作领域,没有人真正知道如何做得更好。那是 1978 年! C 创作者认为这就足够了,这完全是他们的决定。
现在实施新关键字会破坏现有代码,所以我认为这样做不合适。
像 Rust、Kotlin 和其他现代语言有大量的时间来考虑什么是好的,什么不是基于当前存在的语言,那些过去使用但后来消失的语言,等等。
老实说,我认为当前的语法还不错,不需要做任何事情。
最令人烦恼的解析当然是一个问题,但对于几乎所有使用 C++ 的人来说都是一个众所周知的问题。
因为函数以另一种方式标识:通过名称后的括号。请注意,函数来自 C
,其中没有提到那些设计抽象。因此,添加一个奇怪的关键字无助于坚持某种语言设计。而且,少一个保留字也不是坏事。
如果你真的想要一个函数关键字,你可以这样做:
#define FUNC auto
FUNC foo() -> Bar {
baz();
}
C++ 的语法主要来自 C,而 C 不提供 function
关键字。相反,它使用某种语法来指示大多数函数:
[return type] [function name]([paramters]) { }
因此,如果引入 function
关键字,我们可以获得更快的解析并提高可读性。但是,你现在有两种不同的方式来声明一些东西,你可以'
由于向后兼容的必要性,不要摆脱旧方法。
但假设我们忽略了向后兼容性参数并假设它被引入:
function int square(int a) { //1
return a * a;
}
//-----------------------------
function square(int a) { //2
return a * a;
}
case 1
简单地表现为关键字指示器,它有优点(可读性、解析)和缺点(使用不必要的噪音向函数声明发送垃圾邮件)
case 2
是一种 javascript 风格的方法,让编译器找出 return 类型(就像这里的 auto
一样)。这可能是最美观的方法,但 C++ 是非常静态类型的,这会在不需要时增加一层混乱(auto
-ness 可能很有用,但肯定并不总是需要)。
所以最终这些中等收益似乎并不能证明引入这样一个关键字所带来的成本是合理的。
额外位:
自 C++11 以来,语言特性允许您争论一个特定的方法:
function square(int a) -> int {
return a * a;
}
这肯定是一个非常可靠的解决方案!但似乎关于 function
关键字的讨论早已平息。当在最新的 C++ 版本上进行创新时,还有许多其他可能更重要的优先事项需要讨论,这是可以理解的。