我用 llvm 实现了 bb 语言的加法和减法,也套娃的实现了打印功能,那怎么实现更高级的,如 http 请求功能呢,该怎么套娃呢?套 c 语言吗
我一开始选择学 llvm,是发现 llvm 可以把代码编译成各种平台上的二进制,llvm ir 可以跨平台,我就想着,把自己的代码 转换为 llvm ir 就可以了
llvm ir 里默认有 加法和减法的指令
比如加法:
; ModuleID = "ttt" target triple = "unknown-unknown-unknown" target datalayout = "" define double @"fpadd"(double %".1", double %".2") { entry: %"res" = fadd double %".1", %".2" ret double %"res" }
打印功能,我 间接调用了 c 语言的 printf (我看到网上其他人也是如此的,我就抄来了):
; ModuleID = "" target triple = "unknown-unknown-unknown" target datalayout = "" define i32 @"main"() { main.entry: %".2" = getelementptr inbounds [5 x i8], [5 x i8]* @".str0", i32 0, i32 0 %".3" = call i32 (i8*, ...) @"printf"(i8* %".2") ret i32 0 } declare i32 @"printf"(i8* %".1", ...) @".str0" = constant [5 x i8] c"1111 0"
假如我要读取硬盘里的文件,请求某个网址, 是不是无法基于 llvm ir 来实现,只能想办法 间接调用 c 语言的接口?
可是这样的话,那 llvm ir 对于我就没有存在的价值了, 那我为什么不直接用 c 语言开发一门语言,类似 python 基于 c 语言那样? 不是更简单吗
有大哥能解释一下吗?
谢谢