使用 LLVM 实现语言时访问本机系统 API
Access native system APIs when implementing a language with LLVM
我对了解编译器及其创建很感兴趣,因此我一直在研究各种工具,例如 LLVM。这似乎是一个很好用的框架,但我有点困惑如何使用它访问本机 API。
具体来说,我有兴趣创建一种具有 GUI 或至少内置窗口系统的语言。LLVM 似乎没有包装该功能,所以我是否需要手动编写调用提供的 API 的程序集每个系统(例如 Win32)?
例如,Red 语言声称内置了 "Cross-platform native GUI system"。我假设他们手动编写了后端,根据当前系统或 piggy backed 使用不同的系统调用在 Rebol 上是这样做的。
使用 LLVM 时这样的事情可能或可行吗,它为您做了很多后端抽象?
LLVM 没有 API 用于抽象使用 API。您可以做的是为您的语言编写一个运行时库,然后根据需要使用 LLVM 生成运行时调用。我做了一些实验,发现我更喜欢用 C++ 编写运行时,然后创建一些 C 绑定。 C 绑定是必需的,因为 C++ 名称修改将使 link 很难针对您的运行时库,而对于 C,共享库中符号的名称将与函数的名称相同。
我对了解编译器及其创建很感兴趣,因此我一直在研究各种工具,例如 LLVM。这似乎是一个很好用的框架,但我有点困惑如何使用它访问本机 API。
具体来说,我有兴趣创建一种具有 GUI 或至少内置窗口系统的语言。LLVM 似乎没有包装该功能,所以我是否需要手动编写调用提供的 API 的程序集每个系统(例如 Win32)?
例如,Red 语言声称内置了 "Cross-platform native GUI system"。我假设他们手动编写了后端,根据当前系统或 piggy backed 使用不同的系统调用在 Rebol 上是这样做的。
使用 LLVM 时这样的事情可能或可行吗,它为您做了很多后端抽象?
LLVM 没有 API 用于抽象使用 API。您可以做的是为您的语言编写一个运行时库,然后根据需要使用 LLVM 生成运行时调用。我做了一些实验,发现我更喜欢用 C++ 编写运行时,然后创建一些 C 绑定。 C 绑定是必需的,因为 C++ 名称修改将使 link 很难针对您的运行时库,而对于 C,共享库中符号的名称将与函数的名称相同。