[閒聊] Herb Sutter 展示 cppfront 編譯器

看板C_and_CPP (C/C++)作者 (xXx_5354M3_31M0_xXx)時間2年前 (2022/09/21 20:18), 編輯推噓2(201)
留言3則, 2人參與, 2年前最新討論串1/1
影片連結: 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://www.ptt.cc/bbs/C_and_CPP/M.1663762710.A.FDD.html

09/21 20:29, 2年前 , 1F
跟carbon不知道那個會勝出XD
09/21 20:29, 1F

09/21 23:47, 2年前 , 2F
是說 Circle 也是在實作實驗性語法,不過 cppfront 好
09/21 23:47, 2F

09/21 23:47, 2年前 , 3F
像比較注重在編譯器跟 ABI 的相容性?
09/21 23:47, 3F
文章代碼(AID): #1ZAm4M_T (C_and_CPP)
文章代碼(AID): #1ZAm4M_T (C_and_CPP)