Greetings!

Grégory Vanuxem <g.vanu...@gmail.com> writes:

> Hi Waldek,
>
> Many thanks for this quick response and fix. Just tested on official FriCAS 
> and the 2 problems you mentioned previously gone away.
>
> The .fricas.input file is still not "read" but for my mid-term work it is not 
> a big problem, my startup file is just displaying computation times and 
> augmenting line
> length of output to 110. Maybe this is related to my Kali distribution on 
> WSL2, I don't know.
>
> The )read command is to blame on my settings:
>
> (1) -> )sys pws
>
>    >> System error:
>    INTERNAL-SIMPLE-ERROR: The assertion !posix_spawnp(&pid, *p1, 
> &file_actions, &attr, (void *)p1, environ) on line 65 of o/unixsys.c in 
> function vsystem failed:
> No such file or directory
>
> (1) -> )sys pwd
> /home/greg
> (1) -> )sys ls -l .fricas.input
> -rw-r--r-- 1 greg greg 35 Feb 11 09:42 .fricas.input
> (1) -> )read .fricas.input
>
>    The file .fricas.input is needed but does not exist.
>
> BTW great improvements have been done for gcl-2.7.1, thanks to you and
> Camm, it's a very good thing for me since I plan to code a wrapper in
> Common Lisp using my C wrapper to Julia compatible with GCL. I did one
> for Axiom in the past, a coding LISP game for me containing only
> "and", "or "and "not" keywords (no

Most happy to see a satisfied customer!

> loops or conditionals). A direct wrapper to Fortran BLAS in fact. Now
> I have to look at documentation changes for the GCL-2.7 series FFI.
>

I turn your attention to defdlfun.  In 2.7.x we can establish persistent
(across image saves) bindings to new external shared libraries on the
fly, with the call overhead being a single pointer dereference:


>(describe 'defdlfun)

DEFDLFUN - internal symbol in COMMON-LISP-USER package
>From ((DEFDLFUN . External Shared Libraries) gcl-si.info):

 -- Macro: DEFDLFUN
     Package:SYSTEM

     Syntax:
          (compile (DEFDLFUN {RETURN NAME &optional LIBNAME) ARGS*))

     GCL specific: Produces an entry function to function NAME in
     external shared library LIBNAME with the specified args/return
     signature.  This function must be compiled to run.  When inlined,
     the function call collapses to a single reference to a pointer
     which is automatically updated to the location of the external
     function at image startup.  The connection to the external library
     is persistent across image saves and re-executions.  The RETURN and
     ARGS specifiers are keywords from the following list corresponding
     to the accompanying C programming types:

     :char :short :int :long :float :double

     Unsigned versions available are:

     :uchar :ushort :uint

     Complex float and complex double types can be access via:

     :fcomplex :dcomples

     Pointers to types available are

     :void* :char* :long* :float* :double*

     Example usage:


          
          
          GCL (GNU Common Lisp)  2.7.0 Thu Oct 26 12:00:01 PM EDT 2023  CLtL1   
 git: Version_2_7_0pre38
          Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
          Binary License:  GPL due to GPL'ed components: (XGCL READLINE UNEXEC)
          Modifications of this banner must retain notice of a compatible 
license
          Dedicated to the memory of W. Schelter
          
          Use (help) to get some basic information on how to use GCL.
          Temporary directory for compiler files set to /tmp/
          
          >(do-symbols (s :lib) (print s))
          
          LIB:|libm|
          LIB:|libc|
          NIL
          
          >(compile (si::defdlfun (:double "cblas_ddot" "libblas.so") :uint 
:double* :uint :double* :uint))
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          ;; Loading #P"/tmp/gazonk_653784_0.o"
          ;; start address for /tmp/gazonk_653784_0.o 0x2700860
          ;; Finished loading #P"/tmp/gazonk_653784_0.o"
          #<function 0000000001a4a860>
          NIL
          NIL
          
          >(do-symbols (s :lib) (print s))
          
          LIB:|libblas|
          LIB:|libm|
          LIB:|libc|
          NIL
          
          >(do-symbols (s 'lib::|libblas|) (unless (find-symbol (symbol-name s) 
:user) (print s)))
          
          |libblas|:|cblas_ddot|
          NIL
          NIL
          
          >(setq a (make-array 3 :element-type 'long-float) b (make-array 3 
:element-type 'long-float))
          
          #(0.0 0.0 0.0)
          
          >(setf (aref a 1) 1.2 (aref b 1) 2.3)
          
          2.3
          
          >(|libblas|:|cblas_ddot| 3 a 1 b 1)
          
          2.76
          
          >(compile (defun foo (a b) (declare ((vector long-float) a b)) 
(|libblas|:|cblas_ddot| (length a) a 1 b 1)))
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          ;; Loading #P"/tmp/gazonk_653784_0.o"
          ;; start address for /tmp/gazonk_653784_0.o 0x2715050
          ;; Finished loading #P"/tmp/gazonk_653784_0.o"
          #<function 0000000001a62140>
          NIL
          NIL
          
          >(compile (defun bar (a b) (declare (inline |libblas|:|cblas_ddot|) 
((vector long-float) a b)) (|libblas|:|cblas_ddot| (length a) a 1 b 1)))
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          ;; Loading #P"/tmp/gazonk_653784_0.o"
          ;; start address for /tmp/gazonk_653784_0.o 0x2729570
          ;; Finished loading #P"/tmp/gazonk_653784_0.o"
          #<function 0000000001a62740>
          NIL
          NIL
          
          >(foo a b)
          
          2.76
          
          >(bar a b)
          
          2.76
          
          >(setq compiler::*disassemble-objdump* nil)
          
          NIL
          
          >(disassemble '|libblas|:|cblas_ddot|)
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          
          #include "gazonk_653784_0.h"
          void init_code(){do_init((void *)VV);}
          /*    local entry for function libblas::cblas_ddot    */
          
          static object LI1__cblas_ddot___gazonk_653784_0(fixnum V6,object 
V7,fixnum V8,object V9,fixnum V10)
          {      VMB1 VMS1 VMV1
                if(!(((char)tp0(make_fixnum(V6)))==(1))){
                goto T8;
                }
                if(!((0)<=(V6))){
                goto T13;
                }
                if(!((V6)<=((fixnum)4294967295))){
                goto T11;
                }
                goto T12;
          
                goto T13;
          T13:;
                goto T11;
          
                goto T12;
          T12:;
                goto T7;
          
                goto T11;
          T11:;
                goto T6;
          
                goto T8;
          T8:;
                goto T6;
          
                goto T7;
          T7:;
                goto T5;
          
                goto T6;
          T6:;
                goto T3;
          
                goto T5;
          T5:;
                goto T2;
          
                goto T3;
          T3:;
                V11= CMPmake_fixnum(V6);
                V6= fixint((fcall.argd=4,/* SYSTEM::CHECK-TYPE-SYMBOL */(object 
)(*LnkLI2)(((object)VV[1]),(V11),((object)VV[2]),Cnil)));
                goto T2;
          T2:;
                switch(tp6(V7)){
                case 428:
                goto T27;
          T27:;
                case 492:
                goto T28;
          T28:;
                goto T25;
          
                default:
                goto T29;
          T29:;
                goto T24;
          
                goto T24;
                }
                goto T24;
          
                goto T25;
          T25:;
                goto T23;
          
                goto T24;
          T24:;
                goto T22;
          
                goto T23;
          T23:;
                goto T21;
          
                goto T22;
          T22:;
                goto T19;
          
                goto T21;
          T21:;
                goto T18;
          
                goto T19;
          T19:;
                V7= (fcall.argd=4,/* SYSTEM::CHECK-TYPE-SYMBOL */(object 
)(*LnkLI2)(((object)VV[3]),(V7),((object)VV[4]),Cnil));
                goto T18;
          T18:;
                if(!(((char)tp0(make_fixnum(V8)))==(1))){
                goto T39;
                }
                if(!((0)<=(V8))){
                goto T44;
                }
                if(!((V8)<=((fixnum)4294967295))){
                goto T42;
                }
                goto T43;
          
                goto T44;
          T44:;
                goto T42;
          
                goto T43;
          T43:;
                goto T38;
          
                goto T42;
          T42:;
                goto T37;
          
                goto T39;
          T39:;
                goto T37;
          
                goto T38;
          T38:;
                goto T36;
          
                goto T37;
          T37:;
                goto T34;
          
                goto T36;
          T36:;
                goto T33;
          
                goto T34;
          T34:;
                V12= CMPmake_fixnum(V8);
                V8= fixint((fcall.argd=4,/* SYSTEM::CHECK-TYPE-SYMBOL */(object 
)(*LnkLI2)(((object)VV[5]),(V12),((object)VV[2]),Cnil)));
                goto T33;
          T33:;
                switch(tp6(V9)){
                case 428:
                goto T58;
          T58:;
                case 492:
                goto T59;
          T59:;
                goto T56;
          
                default:
                goto T60;
          T60:;
                goto T55;
          
                goto T55;
                }
                goto T55;
          
                goto T56;
          T56:;
                goto T54;
          
                goto T55;
          T55:;
                goto T53;
          
                goto T54;
          T54:;
                goto T52;
          
                goto T53;
          T53:;
                goto T50;
          
                goto T52;
          T52:;
                goto T49;
          
                goto T50;
          T50:;
                V9= (fcall.argd=4,/* SYSTEM::CHECK-TYPE-SYMBOL */(object 
)(*LnkLI2)(((object)VV[6]),(V9),((object)VV[4]),Cnil));
                goto T49;
          T49:;
                if(!(((char)tp0(make_fixnum(V10)))==(1))){
                goto T70;
                }
                if(!((0)<=(V10))){
                goto T75;
                }
                if(!((V10)<=((fixnum)4294967295))){
                goto T73;
                }
                goto T74;
          
                goto T75;
          T75:;
                goto T73;
          
                goto T74;
          T74:;
                goto T69;
          
                goto T73;
          T73:;
                goto T68;
          
                goto T70;
          T70:;
                goto T68;
          
                goto T69;
          T69:;
                goto T67;
          
                goto T68;
          T68:;
                goto T65;
          
                goto T67;
          T67:;
                goto T64;
          
                goto T65;
          T65:;
                V13= CMPmake_fixnum(V10);
                V10= fixint((fcall.argd=4,/* SYSTEM::CHECK-TYPE-SYMBOL 
*/(object )(*LnkLI2)(((object)VV[7]),(V13),((object)VV[2]),Cnil)));
                goto T64;
          T64:;
                {object V14 = 
make_longfloat(((double(*)(uint,double*,uint,double*,uint))(dlcblas_ddot))((uint)V6,(double*)V7->v.v_self,(uint)V8,(double*)V9->v.v_self,(uint)V10));
                VMR1(V14);}
          }
          static object  LnkTLI2(object first,...){object V1;va_list 
ap;va_start(ap,first);V1=(object )call_proc_new(((object)VV[0]),0,262147,(void 
**)(void *)&LnkLI2,0,first,ap);va_end(ap);return V1;} /* 
SYSTEM::CHECK-TYPE-SYMBOL */
          (9 (MAPC 'EVAL *COMPILER-COMPILE-DATA*))
          static object LI1__cblas_ddot___gazonk_653784_0(fixnum V6,object 
V7,fixnum V8,object V9,fixnum V10)
          ;
          static void *dlcblas_ddot;
          #define VMB1  object  V13 ,V12 ,V11;
          #define VMS1
          #define VMV1
          #define VMRV1(a_,b_) return((object )a_);
          #define VMR1(a_) VMRV1(a_,0);
          #define VM1 0
          static void * VVi[9]={
          #define Cdata VV[8]
          (void *)(&dlcblas_ddot),
          (void *)(LI1__cblas_ddot___gazonk_653784_0)
          };
          #define VV (VVi)
          static object  LnkTLI2(object,...);
          static object  (*LnkLI2)() = (object (*)()) LnkTLI2;
          NIL
          
          >(disassemble 'foo)
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          
          #include "gazonk_653784_0.h"
          void init_code(){do_init((void *)VV);}
          /*    local entry for function COMMON-LISP-USER::FOO  */
          
          static object LI1__FOO___gazonk_653784_0(object V3,object V4)
          {      VMB1 VMS1 VMV1
                
if(!(((char)((fixnum)((uchar*)((fixnum)V3))[(fixnum)2]&(fixnum)1))==(0))){
                goto T5;
                }
                goto T2;
          
                goto T5;
          T5:;
                V5= ((fixnum)((uint*)((fixnum)V3))[(fixnum)4]&268435455);
                goto T1;
          
                goto T2;
          T2:;
                V5= 
(((fixnum)((uint*)((fixnum)V3))[(fixnum)1]>>(fixnum)3)&268435455);
                goto T1;
          T1:;
                {object V6 = (/* libblas::cblas_ddot */(object 
)(*LnkLI2)(V5,(V3),(fixnum)1,(V4),(fixnum)1));
                VMR1(V6);}
          }
          static object  LnkTLI2(object first,...){object V1;va_list 
ap;va_start(ap,first);V1=(object )call_proc_new(((object)VV[0]),0,5,(void 
**)(void *)&LnkLI2,1092,first,ap);va_end(ap);return V1;} /* libblas::cblas_ddot 
*/
          (2 (MAPC 'EVAL *COMPILER-COMPILE-DATA*))
          static object LI1__FOO___gazonk_653784_0(object V3,object V4)
          ;
          #define VMB1  fixnum  V5;
          #define VMS1
          #define VMV1
          #define VMRV1(a_,b_) return((object )a_);
          #define VMR1(a_) VMRV1(a_,0);
          #define VM1 0
          static void * VVi[2]={
          #define Cdata VV[1]
          (void *)(LI1__FOO___gazonk_653784_0)
          };
          #define VV (VVi)
          static object  LnkTLI2(object,...);
          static object  (*LnkLI2)() = (object (*)()) LnkTLI2;
          NIL
          
          >(disassemble 'bar)
          
          ;; Compiling /tmp/gazonk_653784_0.lsp.
          ;; End of Pass 1.
          ;; End of Pass 2.
          OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, 
Speed=3
          ;; Finished compiling /tmp/gazonk_653784_0.o.
          
          #include "gazonk_653784_0.h"
          void init_code(){do_init((void *)VV);}
          /*    local entry for function COMMON-LISP-USER::BAR  */
          
          static object LI1__BAR___gazonk_653784_0(object V3,object V4)
          {      VMB1 VMS1 VMV1
                {fixnum V5;
                
if(!(((char)((fixnum)((uchar*)((fixnum)V3))[(fixnum)2]&(fixnum)1))==(0))){
                goto T5;
                }
                goto T2;
          
                goto T5;
          T5:;
                V5= ((fixnum)((uint*)((fixnum)V3))[(fixnum)4]&268435455);
                goto T1;
          
                goto T2;
          T2:;
                V5= 
(((fixnum)((uint*)((fixnum)V3))[(fixnum)1]>>(fixnum)3)&268435455);
                goto T1;
          T1:;
                {object V6 = 
make_longfloat(((double(*)(uint,double*,uint,double*,uint))(dlcblas_ddot))((uint)V5,(double*)V3->v.v_self,(uint)1,(double*)V4->v.v_self,(uint)1));
                VMR1(V6);}}
          }
          (2 (MAPC 'EVAL *COMPILER-COMPILE-DATA*))
          static object LI1__BAR___gazonk_653784_0(object V3,object V4)
          ;
          static void *dlcblas_ddot;
          #define VMB1
          #define VMS1
          #define VMV1
          #define VMRV1(a_,b_) return((object )a_);
          #define VMR1(a_) VMRV1(a_,0);
          #define VM1 0
          static void * VVi[2]={
          #define Cdata VV[1]
          (void *)(&dlcblas_ddot),
          (void *)(LI1__BAR___gazonk_653784_0)
          };
          #define VV (VVi)
          NIL
          
          >(si::save-system "ff")
          $ ./ff
          GCL (GNU Common Lisp)  2.7.0 Thu Oct 26 12:00:01 PM EDT 2023  CLtL1   
 git: Version_2_7_0pre38
          Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
          Binary License:  GPL due to GPL'ed components: (XGCL READLINE UNEXEC)
          Modifications of this banner must retain notice of a compatible 
license
          Dedicated to the memory of W. Schelter
          
          Use (help) to get some basic information on how to use GCL.
          Temporary directory for compiler files set to /tmp/
          
          >(foo a b)
          
          2.76
          
          >(bar a b)
          
          2.76
          
          >
          

Take care,


>

> - Greg
>
> PS / I Cc-ed to gcl-devel 
>
> Le sam. 24 mai 2025 à 15:30, Waldek Hebisch <de...@fricas.org> a écrit :
>
>  On Fri, May 23, 2025 at 09:56:29PM +0200, Grégory Vanuxem wrote:
>  > Hello,
>  > 
>  > I don't know if you can reproduce this: if I start FriCAS from $HOME it
>  > starts nicely but if I start in another directory see the snippet below.
>  > I tried with gcl2.7.1-4 from a Debian based distribution and after with the
>  > official Debian sid and the same happens:
>  >
>  <snip> 
>  > 
>  >    >> System error:
>  >    INTERNAL-SIMPLE-PARSE-ERROR: "/home/greg//.fricas.input" is not a valid
>  > pathname on host NIL
>  > 
>  > 
>  >    >> System error:
>  >    INTERNAL-SIMPLE-ERROR: The tag |top_level| is undefined.
>
>  Should be fixed now.
>
>  -- 
>                                Waldek Hebisch
>
>  -- 
>  You received this message because you are subscribed to the Google Groups 
> "FriCAS - computer algebra system" group.
>  To unsubscribe from this group and stop receiving emails from it, send an 
> email to fricas-devel+unsubscr...@googlegroups.com.
>  To view this discussion visit 
> https://groups.google.com/d/msgid/fricas-devel/aDHJ1HqJwLlykCMl%40fricas.org.

-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to