From bd0893c21f63151d55f561382a4fdbefde4790c2 Mon Sep 17 00:00:00 2001 From: PanSi21 Date: Sun, 5 Jan 2025 00:30:17 +0100 Subject: [PATCH] DLL --- index.js | 41 ++++++------------------------- index.js.backup | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ libfibonacci.so | Bin 0 -> 15824 bytes test.c | 31 ++++++++++++++++++++++-- 4 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 index.js.backup create mode 100755 libfibonacci.so diff --git a/index.js b/index.js index 433cdb3..ade04b8 100644 --- a/index.js +++ b/index.js @@ -1,39 +1,14 @@ -import { cc } from "bun:ffi"; -import source from "./test.c" with { type: "file" }; +import { dlopen, FFIType, suffix } from "bun:ffi"; +const path = `./libfibonacci.so`; -const { - symbols: { fibonacci }, -} = cc({ - source, - symbols: { - fibonacci: { - args: [], - returns: "uint64_t", - }, +const { symbols } = dlopen(path, { + fibonacci_gmp: { + args: [], + returns: FFIType.cstring, }, }); -const risultato = fibonacci(); +const result = symbols.fibonacci_gmp(); +console.log("Fibonacci(25000) =", result); -console.log("fibonacci serie 250 000: ", risultato ); - -// - -function fibonacci_js() { - const n = 250000; - let a = 0n; - let b = 1n; - let c; - - for (let i = 2; i <= n; i++) { - c = a + b; - a = b; - b = c; - } - - return b; -} - -const result_js = fibonacci_js(); -console.log("Fibonacci(250 000) =", result_js.toString()); diff --git a/index.js.backup b/index.js.backup new file mode 100644 index 0000000..0199399 --- /dev/null +++ b/index.js.backup @@ -0,0 +1,63 @@ +import { cc } from "bun:ffi"; +import source from "./test.c" with { type: "file" }; + + +const { + symbols: { fibonacci }, +} = cc({ + source, + symbols: { + fibonacci: { + args: [], + returns: "uint64_t", + }, + }, +}); + +const risultato = fibonacci(); + +console.log("fibonacci serie 25 000: ", risultato ); + + + + + + +const { + symbols: { fibonacci_gmp }, +} = cc({ + source, + symbols: { + fibonacci_gmp: { + args: [], + returns: "cstring", + }, + }, +}); + +const result_gmp = fibonacci_gmp(); +console.log("Fibonacci(25000) =", result_gmp); + + + + + +// + +function fibonacci_js() { + const n = 25000; + let a = 0n; + let b = 1n; + let c; + + for (let i = 2; i <= n; i++) { + c = a + b; + a = b; + b = c; + } + + return b; +} + +const result_js = fibonacci_js(); +console.log("Fibonacci(25 000) =", result_js.toString()); diff --git a/libfibonacci.so b/libfibonacci.so new file mode 100755 index 0000000000000000000000000000000000000000..525c72c96a0e332316f78245b49c3c9657d61bb0 GIT binary patch literal 15824 zcmeHOZ)_CT5r22!#3{r!2@nU;aHY^fDTgtJk|2jO=FE~};sCA^wRCg7JKNWs@2tB$ zz(^r(QBf?{ksGzDROJIo6or1MO8-cqQi@DyF^QVSN!6-Im1@yYoz*BcsnWVt!*%Ap z`Q4qDJN3_ps%rOHyEF5fnKy4|-|oHj&ORC5*Wvg16xssyfGSB!g+wvF4Hk@TSBq%> zVRetTU071x%-t#wXoHbCMh&wfyJ_nJV+RU7`{{TAqgO8aj=-Shez%Y=ztI@vTj$e9 z{6>Ciy`k`9nEmF&Z%+I`rzBaRwc^fW!ty*19kgd7C$##BYvP9gWJJtPVC=_ z*Cl@LJVI_U-78SUdzkz0x=rg2dKed=P?w7}J(H06B>~`W`T=GQA$qju! zA+}=UF$5}To+Ipz3i$ad_&2KHJgxw3?)F^*D)m251^-GF{F8(SXmht=0xI?2LHKI7 zG0C>JuT#z9bVF>q1;4Vy0FMf;Y`bqDowBn|B;(k&viBb9v}5s1yf2Y;;+aF8?a6d1 zekjtDj2m5LjU7D}v3nD#NHTFeu6h$a=~N^dO_Vr_GN@w>9=8*zgkxvpj-5-CL*OH^ z7+5j_+eh|UCj&8>j7M0YaYrAwqy3NDy^%yxB@;aqD40zLH#e~mWp(y!i=JmS8E`^A*xc~06uzFt`G6Lhc zb{T01@m?v$agSlSF~oa=^H|XWA;YmfZ)od6hGPuJ%t%v+_r~@^hV}Md2D}V-8SpaT zWx&gTmx2Gw4E(YF-oIKW->J1mYc6b}$DuDzIR3(vb@Iox7j-@gTVEr%u=c04uU{2X zY~RnCnX83Dp?6%%ynvi}t0eP+Z|0Sf%nQAl@0Da;;LSW&l6j#y^Gr$Rh2G4UigID? zHj3U`ziPMA@e6A^T=D}h*=-+m=|AR@?{&$`i?TJ=dN&EySj`s;c4G!czQ?p z?GwLX-QkPqm}X5^%o<&|b{%(1uA3(&!!PStW8n#Y?j>|GKT4yu#==wQIVuCk4KU68 z)5K4P&*_o0S!3N()>!8RS(EZ-tpB{WWjH)xjr@|Kl?IyTJ_V{J=w$dDjq}`&@XIG& zGOAb3^E#hS+z|cihCMHQphrR-P3Er|o_d(fUokwzoXo$j`I-)P8SS2nSsRw><8x~A z&yea>ef0WzDPAFbpkDJb;AOzefR_O;16~Ha40svvGT>#v%fNqs27D_Q?BF+4{0JVH zEfl(lo+f&X=vkuUM6X;g6wVNBey>otOq3hHYvtxUen9z-HTYI8zO{Co9`V)?b`Ncr z|4=9l6IFE$9d(Tl)-O6*JFIrDxbG8N)~sfj{poRD$HcoY;GZL=kzx-rAdUNUXj@NX z(eD()bq%Nd?YH0J@1n>i=GREyLwfx#vZ#Mw>!llycp30A;AOzefR_O;16~Ha40svv zGT>$4e?9}K6GUAgzm4Peh9SioK(0mP#x=6K$-@~HA?nt2r=fR?jC#bCBGaRoZYzYM zE|H(#xIzE^jY68`S$_9N4Yh{-{BD>UYW*6eNDwu9e=};TKR2yWC~67wQjaLzsxzX; z^D1fu?-KkG2?YGC3Znt@=A}dT8@eSFCt@{68=9%P_OO| z*d*sSB(zKDV?qao4htO@iaOFg?d|sm)^+#fQcfmya{pRIzw zNO-03T&QCII^nD5Wk7^z#>qOl-ritTmCEI9XTXkf!F-lV(_?A7FPZL%B<+}!&SdRK z?wE?E2L_XICmstnRkq+F`h*?HWFkX$JmqADRBt9S5VvEwfq@}%DU(bceYvR<&pI@o zOgx)QIyyqffws=D9p1m2OZ&NNj+#x|{gG6REBbdoy1%V+Z#$v%afThXY~x_}3houYDbU{$@aGIwK3ULV*^l}t|9qi1HvU>b1+zl~PNavZlQFa(Tq^Cv zgMF!7a4?e|jAxu76)ZwMxkNIyF%eVRpg)rBSHaj&iaIltzGTpvBk@c&kxtDMY|>@o z$p||LH<)x(P>(f8Y_Km)A~V@|R0W;*F%tFJ4aWOriuA{*7f8m}Oe{uWjIu^$%zl-6y#5vVvLoV_kBPFkWN8AL}Vlte?n4 zH|Y+d`Ydt0mVrOkFQ8b*Vf?TI?I(X;8$rhU2((EexyO$I93_VPhCkM0pl8Go@!iM& zMe*Myc39tmmisR!8@K-`VVo1JKa0O(@_UALu5>@|TNTDm(N^vs5I@jiHY#iQnFReR z>B{|2ivkpO=mIk6H(mZ`MFBbpN1^Zoect7dbr)y@PK?VR-G0mEk97$so+Dt7^9cDn z;$I9C5RK3l5kcJkKOzO^5B}Q&#uD@gMl9}e{sBx9!)r^d)3MIO_ljn?w+Kesm-N7$hoxBO>PFoyAmLdG&A{!OxeHt5aA!}m8H zznH^J!GA*$F$~*sE2o${Mq~Dah%W=<`@k~VFn-*B`8g3|H=bsHdW)fX1QMl7RQxzo Q$^R)@B5@~ literal 0 HcmV?d00001 diff --git a/test.c b/test.c index 096876a..4682846 100644 --- a/test.c +++ b/test.c @@ -1,7 +1,8 @@ #include +#include uint64_t fibonacci( void ) { - const int n = 250000; + const int n = 25000; uint64_t a = 0, b = 1, c; for (int i = 2; i <= n; i++) { @@ -11,4 +12,30 @@ uint64_t fibonacci( void ) { } return b; -} \ No newline at end of file +} + + +char* fibonacci_gmp() { + const int n = 25000; + static char result[10000]; // Assicurati che sia abbastanza grande per contenere il numero + mpz_t a, b, c; + + mpz_init_set_ui(a, 0); + mpz_init_set_ui(b, 1); + mpz_init(c); + + for (int i = 2; i <= n; i++) { + mpz_add(c, a, b); + mpz_set(a, b); + mpz_set(b, c); + } + + mpz_get_str(result, 10, b); + + mpz_clear(a); + mpz_clear(b); + mpz_clear(c); + + return result; +} +