C26是哪种型号的设备,能详细介绍一下吗?
摘要:我希望的 c++26 本文使用 macbook pro m4 + vscode 编写, 我使用的编译器是 g++-15 + glib
我希望的 c++26
本文使用 macbook pro m4 + vscode 编写, 我使用的编译器是 g++-15 + glibc++.
本文讲了我希望的 c++26.
我立个 flag, 如果 iso wg21 给 c++26 搞出了任何一条不符合我这些期望的, 我就要 fork g++-16 写一个 g++-1970 -std=b++-2026. 其中 b++ 是致敬了我们的根, bell labs.
我写的 c++ 是 c 派 心直嘴快
让 k&r 收拾 graydon 的鬼怪
rust 写的真有样 用 c++ 重写的时候我得在
手捧着《c++ 之旅》 这范儿传递到每代
我喜欢写代码直截了当不喜欢去绕弯子
讨厌安全性 也不喜欢被编译器管的太宽了
看站上 wg21 的是那帮支持 rust
快删了你的 hazard 过来仰望 bs 吧
我四句话有人就关了
有 graydon 的货 有 hoare 的憨子 都叫的正欢呢
讲安全性 那为什么 unwrap 炸了 cloudflare
别用安全性当借口 赶紧滚过来学 k&r 吧
所有 c++23 代码都能通过编译
在目前的 iso c++26 下, c++23 允许的一些危险操作, 需要加上 [[unsafe]].
我支持的 iso c++26 提案特性
线性代数
这个不管设计成什么样我都能接受, 因为打 icpc 有用.
加强了 constexpr 和 consteval
非常好的 constexpr, 使我的常量在编译期完成.
std::expected
这个值得重点讲, 非常好的错误处理.
比如说我有一个带取模的快速幂函数, 我希望模数非 \(0\), 就可以这么写:
std::expected<long, std::string> pow(long x, long y, long mod) {
if (mod == 0)
return std::unexpected<std::string>("数学错误"s);
long yt = 1;
x %= mod;
while (y) {
if (y & 1)
yt = yt * x % mod;
x = x * x % mod;
y >>= 1;
}
return yt;
}
然后就可以这样处理结果:
auto ans = pow(x, y, m);
if (ans)
std::println("{}", *ans);
else
std::println("{}", ans.error());
我个人习惯使用 std::abort() 作为错误处理, 不过这样好像有点合理?
std::flat_set 和 std::flat_map
用 std::vector 存储的排序数组, 可以当成平衡树用, 适合查询多而插入删除修改少的情况.
我当然还是手写 wblt 的了.
std::is_within_lifetime
可以检测对象是否还活着, 遥遥领先了属于是.
对像我这样不手动操内存的人来说应该没啥用.
我非常反对的 iso c++26 提案特性
如果所有语言都在使劲浑身解数想要变成 rust, 那设计这个语言本来的目的是什么呢?
java 是为了替代 c++, 而 java 发明了一次编译到处运行的 jvm.
go 是为了替代 c++, 而 go 有通讯和可以比肩 python 的标准库.
rust 是为了替代 c++, 而 rust 搞出的是借用和可变借用.
我从来没说过 rust 不好, 我承认我用 rust 写过 opengl.
java 没有被 rust 同质化, java 依然到处都是空引用.
go 也没有被 rust 同质化, go 依然在用 java 发明的垃圾回收.
如果 c++ 变成了用 c 语法写的 rust, 那么 c++ 还有什么存在的意义吗? 难道是为了让 c 程序员过渡到 rust 中间有个缓冲吗?
我不是说 k&r 的设计优秀, 但我觉得作为包括了 java 和 go 甚至 c# 和 python 在内的 c like 语言, 危险当然是有危险的价值的.
可以是速度, 可以是自由度, 可以是任何东西, 重要的是危险本身可以带来价值.
hazard 指针
从提案设计来看, 很显然是 son of graydon.
[[unsafe]]
无论无论如何, 你认为的危险操作可能是我需要的.
而且这会导致使用了这些危险操作的 c++23 代码无法通过 c++26 的编译, 这违背了 c++ 的 较新的 c++
