我正在开发自定义语言,一切正常,但我停止添加对标准函数的支持,如getchar(),fopen()等。我的想法之一是解析可视 .lib 文件,但这是一项艰巨的任务(例如,由于缺乏规范)。你还有其他想法吗?它是如何用像 D 这样的语言制作的?
编辑:我想要实现的是能够使用系统功能(例如打开文件,使用套接字),但不需要从头开始编写。我需要某种方法来访问已经编写的库/dll。
最简单的解决方案是加载例如 C 标准库并调用这些函数(之前设置堆栈),但我需要一些方法来获取此代码(组装)。
通常,你会创建自己的标准库,这对你的语言有意义,而不是使用 C 标准库。你为什么要编写自己的语言,这不应该融入你的标准库的设计中吗?
为了与 C 库的兼容性,我发现最常见的方法是用不同的语言重新表达库的接口。Python 为此提供了 ctypes 模块。在 .NET 中,您将使用 P/Invokes。这会带来一些手动工作和翻译界面时出错的机会,但它比自动化过程更简单、更强大。
此外,.NET 的设计使得可以从 .NET 中的任何语言实现访问 .NET 库,只要库和语言设计正确。特定语言可能有自己的需求,这些需求由自己的标准库满足,但控制台 I/O 等内容位于一个地方,不需要由每种语言重新发明。