亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將C轉換(翻譯)為Go的工具?

將C轉換(翻譯)為Go的工具?

Go
千萬里不及你 2021-04-30 14:15:51
使用什么工具將C源代碼轉換為Go源代碼?例如,如果C代碼包含:struct Node {    struct Node *left, *right;    void        *data;};char charAt(char *s, int i) {    return s[i];}該工具生成的相應Go代碼應為:type Node struct {    left, right *Node    data        interface{}}func charAt(s string, i int) byte {    return s[i]}該工具不一定是完美的。如果生成的Go代碼的某些部分需要手動糾正,則可以。
查看完整描述

3 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

我想今天不存在這樣的(C到Go源代碼轉換)工具。您可能會考慮制作自己的轉換器。問題變成:這值得嗎?如何做到這一點?

可能不值得付出努力,因為Go和C可能以某種方式可互操作。例如,如果您使用GCC 4.6(或將要發布的4.7,即最新快照),則可以小心地將C&Go代碼鏈接在一起。

當然,像往常一樣,罪惡在于細節。

如果需要轉換器,是否要使獲得的Go代碼可讀且可編輯(那么,由于要保留代碼的結構,并且還希望保留注釋,那么任務就比較困難了)?在這種情況下,您可能需要自己的C解析器(這是一項艱巨的任務)。

如果您不關心生成的Go代碼的可讀性,則可以例如擴展現有的編譯器來完成工作。例如,GCC通過插件或MELT擴展是可擴展的,您可以自定義GCC(使用MELT或GCC自己的C插件),以將Gimple表示形式(GCC內部指令的主要內部表示形式)轉換為不可讀的Go代碼。這以某種方式更簡單(但仍需要一周以上的工作時間)。

當然,Go接口,通道甚至內存管理(垃圾收集的內存)都沒有標準的C語言。


查看完整回答
反對 回復 2021-05-10
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

我幾乎可以肯定沒有這樣的工具,但是恕我直言,每種語言最好以自己的“編碼樣式”編寫。

還記得我們都熱愛C預處理器技巧和真正具有指針的藝術作品嗎?還記得處理malloc / free或線程需要花費多少精力嗎?去是不同的。您沒有預處理器,但是有閉包,帶有方法的對象,接口,垃圾收集器,切片,goroutines和許多其他不錯的功能。

那么,為什么要轉換代碼而不是用更好,更簡潔的方式重寫代碼呢?

當然,我希望您沒有C語言中要移植到Go的1000K行代碼:)


查看完整回答
反對 回復 2021-05-10
  • 3 回答
  • 0 關注
  • 412 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號