第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

3 回答

?
青春有我

TA貢獻1784條經(jīng)驗 獲得超8個贊

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

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

當(dāng)然,像往常一樣,罪惡在于細節(jié)。

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

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

當(dāng)然,Go接口,通道甚至內(nèi)存管理(垃圾收集的內(nèi)存)都沒有標(biāo)準(zhǔn)的C語言。


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

TA貢獻1875條經(jīng)驗 獲得超5個贊

我?guī)缀蹩梢钥隙]有這樣的工具,但是恕我直言,每種語言最好以自己的“編碼樣式”編寫。

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

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

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


查看完整回答
反對 回復(fù) 2021-05-10
  • 3 回答
  • 0 關(guān)注
  • 408 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號