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

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
我相信,請
core.memory.GC
記住我是否記得正確。不,不應該。只需致電
malloc
或您需要的任何電話,并確保GC看不到它即可。是的,與C代碼互操作非常容易。
警告:您可能也不想依賴GC,因為它不是“精確的”(即,如果不幸的話,會并且確實會泄漏內存)。但是對于小塊數據,通常沒問題。

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