forked from xxq250/Nasal-Interpreter
⚡ add new ways of calling dylib function
This commit is contained in:
@@ -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();
|
||||
Reference in New Issue
Block a user