我想為我正在設(shè)計(jì)的一種編程語言編寫一個(gè)解釋器并跟蹤JIT。我已經(jīng)有多年使用C ++編程的經(jīng)驗(yàn),但是我一直在想,也許新的替代方法可能更好。在我的C ++時(shí)代,我最沮喪的事情之一就是不得不使用頭文件來處理笨拙的一遍編譯器模型。問題在于,并非所有語言都同樣適合于此目的。對(duì)于我的跟蹤JIT,我需要能夠?qū)⒖蓤?zhí)行代碼寫入內(nèi)存并具有對(duì)該代碼的解釋器調(diào)用。我還將需要生成的代碼,以便能夠回調(diào)到主機(jī)函數(shù)中。我開始看Go,發(fā)現(xiàn)該語言有指針但沒有指針?biāo)阈g(shù)。這立即使我震驚,成為一個(gè)巨大的問題。我可能很想編寫自己的分配器和垃圾收集器。我將需要嚴(yán)格控制語言對(duì)象在內(nèi)存中的布局方式,并能夠獲取特定字段的地址并對(duì)其進(jìn)行寫入。除非有解決方法,否則Go似乎不足以達(dá)到我的目的。D語言似乎很有希望。它具有指針運(yùn)算法則和調(diào)用D所需的ABI的清晰輪廓。我聽說過很多關(guān)于它的好東西。它還具有垃圾回收,這對(duì)于編譯器的編寫非常有用,但是我仍然有一些不確定的地方:D是否有標(biāo)準(zhǔn)庫使我可以將內(nèi)存塊標(biāo)記為可執(zhí)行文件?如果我使用自己的GC分配了自己要管理的大量?jī)?nèi)存,并且有一堆指針插入其中,那么D的垃圾收集器會(huì)帶來問題嗎?根據(jù)您的經(jīng)驗(yàn),D與C代碼的互操作性如何?加載C動(dòng)態(tài)庫并調(diào)用它們相當(dāng)容易嗎?最后,還有整個(gè)支持方面。對(duì)于那些在linux上使用過D的人來說,工具鏈有多好?有什么問題嗎?有沒有人用D編寫過JIT編譯器,如果是的話,經(jīng)驗(yàn)如何?
3 回答

12345678_0001
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
我相信,請(qǐng)
core.memory.GC
記住我是否記得正確。不,不應(yīng)該。只需致電
malloc
或您需要的任何電話,并確保GC看不到它即可。是的,與C代碼互操作非常容易。
警告:您可能也不想依賴GC,因?yàn)樗皇恰熬_的”(即,如果不幸的話,會(huì)并且確實(shí)會(huì)泄漏內(nèi)存)。但是對(duì)于小塊數(shù)據(jù),通常沒問題。

慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
Go確實(shí)允許指針?biāo)阈g(shù),但是您必須導(dǎo)入unsafe
包才能這樣做(或使用C函數(shù))。指針運(yùn)算是錯(cuò)誤的常見來源,并轉(zhuǎn)到了其他機(jī)制,如片,它提供了安全的方式做一些需要在C指針運(yùn)算用同樣的活動(dòng),unsafe
你可以將任何指針uintptr
和背部,且uintptr
是普通數(shù)字類型,可讓您進(jìn)行算術(shù)運(yùn)算。
- 3 回答
- 0 關(guān)注
- 224 瀏覽
添加回答
舉報(bào)
0/150
提交
取消