[問題] 有C語言的包裝工具嗎?(像moonscript之類)

看板C_and_CPP作者 (下一夜)時間7年前 (2016/11/28 10:19), 7年前編輯推噓16(17140)
留言58則, 14人參與, 最新討論串1/1
有些環境只能使用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

11/28 10:52, , 1F
超長的變數或函式會有什麼問題嗎?
11/28 10:52, 1F

11/28 11:05, , 2F
轉組語比較有可能吧
11/28 11:05, 2F

11/28 11:45, , 3F
我覺得你應該先說說為什麼你的用途裡一定要有 C
11/28 11:45, 3F

11/28 11:46, , 4F
每個個案最好的解法不見得相同
11/28 11:46, 4F

11/28 11:47, , 5F
那是超古早 llvm 才有的功能吧…
11/28 11:47, 5F
因為是低階的嵌入式系統所以才用C語言 超長的變數命名實在讀的很不舒服 寫那麼長就只為了避開命名衝突 我有試著用巨集來縮短命名,不過這做法看起來有點危險 另外像zip或lua之類的專案會使用C語言來寫是為了移植性跟速度吧? 我有計畫寫些通用工具發表出來 如果能用C語言實作會比較理想(找不到適當工具的話還是會回去用C++實現) 所以才想找工具來用更好的風格來寫C 這工具如果能控制生產出來C程式碼要使用什麼前綴就更好了 這樣遇到跟其他library命名衝突還可以改名字 C++對命名問題就處理的還ok 名字一樣很長,但是允許你省掉namespace名稱 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 13:27:25

11/28 13:16, , 6F
你有那麼缺空間嗎
11/28 13:16, 6F
不光是想摳那些記憶體 C語言的定位本來就是原始不花俏的基礎工具 語法上就是沒那麼方便 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 13:59:56

11/28 14:12, , 7F
推坑 agda 啦 先做出 C&C++ denotational semantics 再寫
11/28 14:12, 7F

11/28 14:12, , 8F
agda 互轉 :p
11/28 14:12, 8F
Agda -> Epic -> C 這樣轉嗎? 我不排斥functional programming,但是怕駕馭不了這種寫法 Agda勉強算是可以考慮的選項 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 15:20:09

11/28 15:22, , 9F
可以考慮用cython寫純c的程式,兼具python的語法和c的速度
11/28 15:22, 9F

11/28 15:24, , 10F
好奇變數/函式名稱是長到什麼程度 XD
11/28 15:24, 10F
cython我前面有提過了,python語法是很好沒錯 但是cython生出來的C程式碼看起來不大優,我沒認真研究啦 這個我再實際用看看 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 16:29:58

11/28 16:35, , 11F
我在想直接做個 compiler + runtime 會不會更方便點
11/28 16:35, 11F

11/28 16:36, , 12F
例如 mulle-objc 是純 C11 寫的, 直接把 runtime 移植上
11/28 16:36, 12F

11/28 16:36, , 13F
去, 然後就寫 Objective-C 直接 compile 跑在上面
11/28 16:36, 13F

11/28 17:59, , 14F
嵌入式系統轉來轉去的效率更糟吧
11/28 17:59, 14F
mulle-objc的做法不是我想要的 ※ 編輯: eye5002003 (118.167.54.161), 11/28/2016 18:35:38

11/28 18:40, , 15F
我記得 clang 是可以直接把 objc 編成 c 的 有這個印象
11/28 18:40, 15F

11/28 18:40, , 16F
好像是啥 rewrite 什麼的 不太確定
11/28 18:40, 16F

11/28 18:41, , 17F
如果 objc 可接受的話可以試試看
11/28 18:41, 17F

11/28 18:42, , 18F
...長串是正常的
11/28 18:42, 18F

11/28 18:44, , 19F
名稱空間+用途+目的物 不長名稱能獨立?
11/28 18:44, 19F

11/28 18:44, , 20F
又不是c++有name space 就算有還是常常很長
11/28 18:44, 20F

11/28 18:44, , 21F
我錯了 那只能變成 c++…
11/28 18:44, 21F

11/28 18:45, , 22F
隨便舉例boost::numeric::ublas::matrix
11/28 18:45, 22F

11/28 18:45, , 23F
變成C還比較短 少八個冒號咧
11/28 18:45, 23F

11/28 18:49, , 24F
還是你的程式不需要架構? 那我教你
11/28 18:49, 24F

11/28 18:49, , 25F
二十六個字母十個字就有26^10種組合 保證用不完
11/28 18:49, 25F

11/28 22:08, , 26F
講話沒邏輯只會無腦護航的基本教義廚實在很難相處
11/28 22:08, 26F

11/28 22:11, , 27F
老實說我寧願看冒號至少可以區分是命名空間
11/28 22:11, 27F

11/28 22:11, , 28F
一堆底線看到暈喔
11/28 22:11, 28F

11/28 22:17, , 29F
你應該是反過來,用高階語言去實現整個架構
11/28 22:17, 29F

11/28 22:17, , 30F
需要用C的部份就用C寫成能讓高階語言呼叫的library
11/28 22:17, 30F

11/28 22:20, , 31F
用其它語言產生C code再與自己寫的整合並不恰當
11/28 22:20, 31F

11/29 09:57, , 32F
我是故意舉例 C語言本來就沒有封裝
11/29 09:57, 32F

11/29 09:58, , 33F
在沒有封裝特性的語言尋求封裝很好笑
11/29 09:58, 33F

11/29 09:59, , 34F
上層明明可以用cpy去包好介面 原PO感覺不想用高階
11/29 09:59, 34F

11/29 10:19, , 35F
樓上 原 Po 是想用高階語言 但環境要求原始碼必須是 C
11/29 10:19, 35F

11/29 11:22, , 36F
翻譯成C的高階語言一堆,不過大多都吃 POSIX,沒問題?
11/29 11:22, 36F

11/29 11:22, , 37F
對不起我沒看仔細 c就是沒有封裝 大型專案多的是
11/29 11:22, 37F

11/29 11:24, , 38F
所以是回到前面有人說的 環境是什麼?就算嵌入式也說一
11/29 11:24, 38F

11/29 11:24, , 39F
下硬體是哪些
11/29 11:24, 39F

11/29 11:29, , 40F
lua 或其他語言的FFI
11/29 11:29, 40F

11/29 11:30, , 41F
c++ to c 你可以去用cfront compiler
11/29 11:30, 41F
不光是因為環境啦 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

11/30 00:35, , 42F
glib vala
11/30 00:35, 42F

11/30 00:42, , 43F
不過如果限制在uclibc可能真的就沒什麼辦法了
11/30 00:42, 43F

11/30 04:05, , 44F
C可以封裝啊@@
11/30 04:05, 44F

11/30 04:10, , 45F
比起包裝成C 也要考量轉過去吃的空間吧@@
11/30 04:10, 45F

11/30 07:36, , 46F
我都忘記有vala了
11/30 07:36, 46F

11/30 22:52, , 47F
害我以為是控制碼
11/30 22:52, 47F

12/04 17:43, , 48F
樓上 POSIX 本尊出現了...
12/04 17:43, 48F

12/04 17:45, , 49F
POSIX 沒關係的話,我推薦 OCaml,是 ML 家族的語言
12/04 17:45, 49F

12/04 17:48, , 50F
優點很多..不但速度快(接近C++) 表達能力也很強
12/04 17:48, 50F

12/04 17:49, , 51F
缺點就是語法比較醜(個人感覺) 學習資源少 現成工具少
12/04 17:49, 51F

12/04 18:01, , 52F
除了ML家必備的pattern matching、algebraic data type
12/04 18:01, 52F

12/04 18:03, , 53F
OCaml 還有一系列 parametric 開頭的泛型編程語言特性
12/04 18:03, 53F

12/04 18:06, , 54F
能類比 template(c++) 與 type class(haskell)
12/04 18:06, 54F

12/04 18:09, , 55F
其實還有ANIS Common Lisp to C、Scheme to C的Compiler
12/04 18:09, 55F

12/04 18:10, , 56F
但我覺得一般人應該不想被((()))弄花眼..所以就不介紹了
12/04 18:10, 56F

12/04 18:24, , 57F
補充:OCaml也有OO但語法醜,例如cat.meow寫成cat#meow
12/04 18:24, 57F

12/04 18:25, , 58F
很惡意的讓你不會想用他的OOP .... XDDD
12/04 18:25, 58F
文章代碼(AID): #1OEvH1sM (C_and_CPP)