1# runtime - what the program can know about the machine it runs on.2#3# Only what a shared object can answer on its own. The numbers of the4# interpreter itself, how many tau routines are alive or how full the heap is,5# are private to it and no shared object can reach them.67# Called the raw way and not through the ffi module, which is the one module8# that cannot use it: ffi asks runtime for the OS and the architecture to9# work out how wide a C int is, so an import here would be a circle.10rt = dlopen("libruntime.so")1112# NumCPU returns how many cores the program may run on, which is the number to13# size a pool of tau routines with. It never returns less than 1.14NumCPU = fn() { int(rt.rt_numcpu()) }1516# OS returns the system this was built for, named the way Go names it:17# "linux", "darwin", "windows", "freebsd", "openbsd", "netbsd".18OS = fn() { string(rt.rt_os()) }1920# Arch returns the architecture this was built for, again named the way Go21# names it: "amd64", "arm64", "386", "arm", "riscv64".22Arch = fn() { string(rt.rt_arch()) }