[閒聊] Herb Sutter 展示 cppfront 編譯器
看板C_and_CPP (C/C++)作者nh60211as (xXx_5354M3_31M0_xXx)時間2年前 (2022/09/21 20:18)推噓2(2推 0噓 1→)留言3則, 2人參與討論串1/1
在今年的 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://www.ptt.cc/bbs/C_and_CPP/M.1663762710.A.FDD.html
推
09/21 20:29,
2年前
, 1F
09/21 20:29, 1F
推
09/21 23:47,
2年前
, 2F
09/21 23:47, 2F
→
09/21 23:47,
2年前
, 3F
09/21 23:47, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章