Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 使用LLVM实现语言时访问本机系统API_User Interface_Compiler Construction_Llvm_Native - Fatal编程技术网

User interface 使用LLVM实现语言时访问本机系统API

User interface 使用LLVM实现语言时访问本机系统API,user-interface,compiler-construction,llvm,native,User Interface,Compiler Construction,Llvm,Native,我对学习编译器及其创建感兴趣,所以我一直在研究各种工具,比如LLVM。这似乎是一个很好的框架,但我有点困惑如何使用它访问本机API 具体来说,我感兴趣的是创建一种具有GUI或至少内置窗口系统的语言。LLVM似乎没有包装该功能,因此我是否需要手动编写调用每个系统(例如Win32)提供的API的程序集 例如,该语言声称内置了“跨平台本机GUI系统”。我假设他们手动编写后端,根据当前系统的不同使用不同的系统调用,或者在Rebol上使用piggy,而Rebol则相反 当使用LLVM(它为您进行大量后端抽

我对学习编译器及其创建感兴趣,所以我一直在研究各种工具,比如LLVM。这似乎是一个很好的框架,但我有点困惑如何使用它访问本机API

具体来说,我感兴趣的是创建一种具有GUI或至少内置窗口系统的语言。LLVM似乎没有包装该功能,因此我是否需要手动编写调用每个系统(例如Win32)提供的API的程序集

例如,该语言声称内置了“跨平台本机GUI系统”。我假设他们手动编写后端,根据当前系统的不同使用不同的系统调用,或者在Rebol上使用piggy,而Rebol则相反


当使用LLVM(它为您进行大量后端抽象)时,这样的事情是可能的还是可行的?

LLVM并没有一个面向使用API抽象的API。您可以做的是为您的语言编写一个运行时库,然后根据需要使用LLVM生成运行时调用。我做了一些实验,发现我更喜欢用C++编写运行时,然后创建一些C绑定。c绑定是必需的,因为C++名称的修改会使它很难链接到运行库,而在C中,共享库中的符号名称与函数的函数相同。p> 因此,如果我理解正确,我会创建一个C/C++库,提供跨平台功能,例如创建和使用windows,然后使用LLVM链接到该库,以便我可以通过他们的API调用它?这个库可以包含在生成的可执行编译器中吗?谢谢你的回答和C绑定的建议,我很感激:)这正是我的建议。请注意,如果使用LLVM的JIT,它只需调用dlsym(或等效平台)即可解析任何符号,因此解释器程序本身必须链接到库。如果你静态编译你的程序,你必须链接可执行文件。太棒了,很好有一些特定的东西来研究。谢谢:)