看板 C_and_CPP 關於我們 聯絡資訊
有些環境只能使用C語言 但是C真的很不適合大型專案 因為太容易產生命名超長的變數或函式 雖然還有struct可以讓函式命名簡短些 但是那需要浪費指標空間 有沒有什麼工具是使用適合大型專案的語法 然後輸出成C語言的? 我目前有查到llvm有可以將C++轉成C的功能,不過還沒詳細看 各位有什麼工具可以介紹一下嗎? 下面列一下版友的建議跟我目前查到的 很意外這種東西很少人做,可能只有C可用的環境大多不會建立大型專案 *cython *agda *mathematica -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.54.161 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480299585.A.D96.html
james732: 超長的變數或函式會有什麼問題嗎? 11/28 10:52
stupid0319: 轉組語比較有可能吧 11/28 11:05
uranusjr: 我覺得你應該先說說為什麼你的用途裡一定要有 C 11/28 11:45
uranusjr: 每個個案最好的解法不見得相同 11/28 11:46
CoNsTaR: 那是超古早 llvm 才有的功能吧… 11/28 11:47
因為是低階的嵌入式系統所以才用C語言 超長的變數命名實在讀的很不舒服 寫那麼長就只為了避開命名衝突 我有試著用巨集來縮短命名,不過這做法看起來有點危險 另外像zip或lua之類的專案會使用C語言來寫是為了移植性跟速度吧? 我有計畫寫些通用工具發表出來 如果能用C語言實作會比較理想(找不到適當工具的話還是會回去用C++實現) 所以才想找工具來用更好的風格來寫C 這工具如果能控制生產出來C程式碼要使用什麼前綴就更好了 這樣遇到跟其他library命名衝突還可以改名字 C++對命名問題就處理的還ok 名字一樣很長,但是允許你省掉namespace名稱 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 13:27:25
firejox: 你有那麼缺空間嗎 11/28 13:16
不光是想摳那些記憶體 C語言的定位本來就是原始不花俏的基礎工具 語法上就是沒那麼方便 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 13:59:56
CoNsTaR: 推坑 agda 啦 先做出 C&C++ denotational semantics 再寫 11/28 14:12
CoNsTaR: agda 互轉 :p 11/28 14:12
Agda -> Epic -> C 這樣轉嗎? 我不排斥functional programming,但是怕駕馭不了這種寫法 Agda勉強算是可以考慮的選項 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 15:20:09
gozule: 可以考慮用cython寫純c的程式,兼具python的語法和c的速度 11/28 15:22
saxontai: 好奇變數/函式名稱是長到什麼程度 XD 11/28 15:24
cython我前面有提過了,python語法是很好沒錯 但是cython生出來的C程式碼看起來不大優,我沒認真研究啦 這個我再實際用看看 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 16:29:58
uranusjr: 我在想直接做個 compiler + runtime 會不會更方便點 11/28 16:35
uranusjr: 例如 mulle-objc 是純 C11 寫的, 直接把 runtime 移植上 11/28 16:36
uranusjr: 去, 然後就寫 Objective-C 直接 compile 跑在上面 11/28 16:36
james732: 嵌入式系統轉來轉去的效率更糟吧 11/28 17:59
mulle-objc的做法不是我想要的 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 18:35:38
CoNsTaR: 我記得 clang 是可以直接把 objc 編成 c 的 有這個印象 11/28 18:40
CoNsTaR: 好像是啥 rewrite 什麼的 不太確定 11/28 18:40
CoNsTaR: 如果 objc 可接受的話可以試試看 11/28 18:41
Sidney0503: ...長串是正常的 11/28 18:42
Sidney0503: 名稱空間+用途+目的物 不長名稱能獨立? 11/28 18:44
Sidney0503: 又不是c++有name space 就算有還是常常很長 11/28 18:44
CoNsTaR: 我錯了 那只能變成 c++… 11/28 18:44
Sidney0503: 隨便舉例boost::numeric::ublas::matrix 11/28 18:45
Sidney0503: 變成C還比較短 少八個冒號咧 11/28 18:45
Sidney0503: 還是你的程式不需要架構? 那我教你 11/28 18:49
Sidney0503: 二十六個字母十個字就有26^10種組合 保證用不完 11/28 18:49
uranusjr: 講話沒邏輯只會無腦護航的基本教義廚實在很難相處 11/28 22:08
xvid: 老實說我寧願看冒號至少可以區分是命名空間 11/28 22:11
xvid: 一堆底線看到暈喔 11/28 22:11
littleshan: 你應該是反過來,用高階語言去實現整個架構 11/28 22:17
littleshan: 需要用C的部份就用C寫成能讓高階語言呼叫的library 11/28 22:17
littleshan: 用其它語言產生C code再與自己寫的整合並不恰當 11/28 22:20
Sidney0503: 我是故意舉例 C語言本來就沒有封裝 11/29 09:57
Sidney0503: 在沒有封裝特性的語言尋求封裝很好笑 11/29 09:58
Sidney0503: 上層明明可以用cpy去包好介面 原PO感覺不想用高階 11/29 09:59
CoNsTaR: 樓上 原 Po 是想用高階語言 但環境要求原始碼必須是 C 11/29 10:19
ronin728: 翻譯成C的高階語言一堆,不過大多都吃 POSIX,沒問題? 11/29 11:22
Sidney0503: 對不起我沒看仔細 c就是沒有封裝 大型專案多的是 11/29 11:22
Sidney0503: 所以是回到前面有人說的 環境是什麼?就算嵌入式也說一 11/29 11:24
Sidney0503: 下硬體是哪些 11/29 11:24
soheadsome: lua 或其他語言的FFI 11/29 11:29
soheadsome: c++ to c 你可以去用cfront compiler 11/29 11:30
不光是因為環境啦 C建立的library會比C++建的library用途更廣 所以才用C FFI跟我講的東西不一樣吧? 我想要的就是用更簡潔的方式來維護一個C專案 POSIX沒關係啊,介紹一下這種高階語言吧 ※ 編輯: eye5002003 (118.167.50.236), 11/29/2016 18:15:05 ※ 編輯: eye5002003 (118.167.50.236), 11/29/2016 18:51:46
ah7675: glib vala 11/30 00:35
ah7675: 不過如果限制在uclibc可能真的就沒什麼辦法了 11/30 00:42
firejox: C可以封裝啊@@ 11/30 04:05
firejox: 比起包裝成C 也要考量轉過去吃的空間吧@@ 11/30 04:10
soheadsome: 我都忘記有vala了 11/30 07:36
POSIX: 害我以為是控制碼 11/30 22:52
ronin728: 樓上 POSIX 本尊出現了... 12/04 17:43
ronin728: POSIX 沒關係的話,我推薦 OCaml,是 ML 家族的語言 12/04 17:45
ronin728: 優點很多..不但速度快(接近C++) 表達能力也很強 12/04 17:48
ronin728: 缺點就是語法比較醜(個人感覺) 學習資源少 現成工具少 12/04 17:49
ronin728: 除了ML家必備的pattern matching、algebraic data type 12/04 18:01
ronin728: OCaml 還有一系列 parametric 開頭的泛型編程語言特性 12/04 18:03
ronin728: 能類比 template(c++) 與 type class(haskell) 12/04 18:06
ronin728: 其實還有ANIS Common Lisp to C、Scheme to C的Compiler 12/04 18:09
ronin728: 但我覺得一般人應該不想被((()))弄花眼..所以就不介紹了 12/04 18:10
ronin728: 補充:OCaml也有OO但語法醜,例如cat.meow寫成cat#meow 12/04 18:24
ronin728: 很惡意的讓你不會想用他的OOP .... XDDD 12/04 18:25