add new ways of calling dylib function

This commit is contained in:
ValKmjolnir
2022-11-11 00:11:01 +08:00
parent ca527ec931
commit 97b3cefe75
14 changed files with 201 additions and 107 deletions

View File

@@ -1,5 +1,6 @@
var libfib=func(){
var (dd,fib,qfib)=(nil,nil,nil);
var invoke=dylib.limitcall(1);
return {
open:func(){
if(dd==nil){
@@ -20,13 +21,13 @@ var libfib=func(){
},
fib:func(x){
if(fib!=nil)
return dylib.dlcall(fib,x);
return invoke(fib,x);
println("[error ] cannot call fib.");
return nil;
},
qfib:func(x){
if(qfib!=nil)
return dylib.dlcall(qfib,x);
return invoke(qfib,x);
println("[error ] cannot call qfib.");
return nil;
}
@@ -36,9 +37,33 @@ var libfib=func(){
println("[keys ] ",keys(libfib));
libfib.open();
libfib.open();
var tm=maketimestamp();
tm.stamp();
println("[result] ",libfib.fib(40));
println("[time ] ",tm.elapsedMSec()," ms");
tm.stamp();
println("[result] ",libfib.qfib(40));
println("[time ] ",tm.elapsedMSec()," ms");
libfib.close();
println("[result] ",libfib.fib(40));
println("[result] ",libfib.qfib(40));
libfib.close();
libfib.close();
var speed_test=func(){
var d=dylib.dlopen("libfib."~(os.platform()=="windows"?"dll":"so"));
var fd=dylib.dlsym(d,"quick_fib");
var vec_call=dylib.dlcall;
var invoke=dylib.limitcall(1);
var tm=maketimestamp();
tm.stamp();
for(var i=0;i<1e7;i+=1)
invoke(fd,40);
println("[time ] limited call: ",tm.elapsedMSec()," ms");
tm.stamp();
for(var i=0;i<1e7;i+=1)
vec_call(fd,40);
println("[time ] dynamic call: ",tm.elapsedMSec()," ms");
}
speed_test();