作者nh60211as (xXx_5354M3_31M0_xXx)
看板C_and_CPP
标题[闲聊] Herb Sutter 展示 cppfront 编译器
时间Wed Sep 21 20:18:25 2022
影片连结:
https://www.youtube.com/watch?v=ELeZAKCN4tY
在今年的 CppCon 中,提出了多项 C++ 功能的 Herb Sutter
展示了他自己实验性的编译器:cppfront。
Github 连结:
https://github.com/hsutter/cppfront
这个编译器可以将 Herb Sutter 设计的新语法 C++ syntax 2 (Cpp2)
转译成 C++ 语法 (类似 TypeScript > JavaScript)
以下是 Cpp2 语法:
main: () -> int = {
std::cout << "Hello " << name() << "\n";
}
name: () -> std::string = {
s: std::string = "world";
decorate(s);
return s;
}
decorate: (inout s: std::string) = {
s = "[" + s + "]";
}
看了语法有点类似 Kotlin 等比较年轻的程式语言,
提出一种新语法的目的不外乎是为了让 C++ 更安全、简单,
因为 C++ 为了语法相容性的关系很少提出破坏性的新语法,
因此很多人就算使用的 C++ 编译器可以支援新语法和工具了可能还在使用
raw pointer、NULL 这些旧时代的产物。
为了解决这些问题,Herb Sutter 提出的新语法预设便是以安全性为前提,
例如使用 new 产生 pointer 时 Cpp2 的语法
i := new<int>(0);
会使用 std::unique_ptr 来避免忘记释放记忆体导致的问题,
另外还有很多为了让 C++ 更安全、简单而提出的想法都可以在影片中看到。
感觉这些想法就算不会进入标准也应该可以作为写 C++ 程式的时候可以参考的做法。
个人满喜欢的是其中支援 pattern matching 的语法感觉可以让写 template function
的时候写法更易读:
main: () -> int = {
print_an_int("syzygy");
print_an_int(1);
print_an_int(1.1);
}
print_an_int: ( x: _ ) = {
std::cout
<< std::setw(30) << typeid(x).name()
<< " value is "
<< inspect x -> std::string {
is int = std::to_string(x as int);
is _ = "not an int";
}
<< "\n";
}
目前 cppfront 可以在各个主流的编译器下用 C++20 编译并使用,
Compiler Explorer 也已经支援 cppfront 了:
https://godbolt.org/z/bs371778a
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.228.71.204 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1663762710.A.FDD.html
1F:推 johnny94: 跟carbon不知道那个会胜出XD 09/21 20:29
2F:推 NciscalA: 是说 Circle 也是在实作实验性语法,不过 cppfront 好 09/21 23:47
3F:→ NciscalA: 像比较注重在编译器跟 ABI 的相容性? 09/21 23:47
4F:推 descent: 感谢分享 09/25 17:46
5F:推 ab4daa: 所以以後可以把legacy code用这build了? 09/29 08:48
它可以接受 legacy C++ code,可是不会有什麽效果。
cppfront 只会把它自己的语法转译成合法的 C++ 语法,
接着让 C++ 编译器实际编译程式。
6F:推 yuichanprpr: 虽然我都没用过 但这类次世代C目前是Rust最有利吧 09/29 16:37
7F:推 wulouise: 是新转旧不是旧转新.. 09/29 20:57
※ 编辑: nh60211as (125.228.71.204 台湾), 09/30/2022 20:12:29
8F:推 KMore: 用这怎不直接去rust 10/02 02:14
9F:推 OnlyRD: c++最棒的地方就是你不想要安全只想要速度的时候.. 11/25 02:31
10F:→ OnlyRD: . 11/25 02:31