libera/#lisp - IRC Chatlog
Search
15:52:05
ak-coram
jackdaniel: I managed to greatly reduce the scope of the issue, it's now just repeatedly calling a single C function via cffi: https://termbin.com/tqwg
16:23:45
ak-coram
yeah, it's much better after updating everything to the latest ultralisp: "only" 111MB consed
16:26:51
ak-coram
I can shave some more off if I pretend the function has a :void return type (71MB consed)
16:55:55
ak-coram
I see, what's the best practice for setting this up? are users supposed do it and I shouldn't worry about it as a library maintainer?
16:56:16
jackdaniel
it is not the default universally, because ecl may be built w/o c compiler, and specifically because cpilers complain on casting pointers to void* in declarations (ecl does that - this is fixable)
17:00:34
jackdaniel
i.e ecl may include stdlib.h and it may have a declaration "extern foo * bar()", ecl will declare "extern void * bar" - on abi level it is 100% fine
17:01:53
ak-coram
I'm still a bit stumped: I can't really tell how people will use my library either, but it would be nice to have this set automatically if a C compiler is available
17:01:55
jackdaniel
we could teach cffi/ecl to handle these declarations conformingly (from c perspective) but that's some extra woerk I don't have time for currently
17:03:07
ak-coram
I mean it took me long enough to find out about this, users probably won't look into this stuff and just think ECL is slow
17:07:02
ak-coram
no worries, I'll definitely add it to my benchmark run at least and refer to it in the README
17:10:50
ak-coram
so I imagine this needs to be set after cffi is loaded, but before my code is compiled
18:10:15
ak-coram
hmm, how do I make sure CFFI can include the header files of the library I'm calling when I set *cffi-ecl-method* to :c/c++? I imagine it needs them.
18:24:22
jackdaniel
you declare your functions with cffi abstractions, and c/c++ emits appropriate extern [type] [fun] [args]; in the file
18:25:04
jackdaniel
although it would indeed make life easier if cffi demanded to specify the header file, then we wouldn't need to generate declarations
18:46:46
ak-coram`
thanks, I think it might be related to functions with function pointers as parameters
21:02:55
harovali
hi! , I'm struggling a little bit trying to get a do loop exit nicely on eof, using read-line to get liens one by one off a text file
21:04:04
harovali
for instance https://privatebin.net/?6d7677dd0a44518f#2AnmhAwEawqwLYpar8gKa8RaEhAQSHG6v3BxhkRmN71Z
21:10:59
jackdaniel
harovali: you supply eof-error-p as :eof-value (which is a generalized boolean "true") - the function will error according to that flag
21:11:44
jackdaniel
or (read-line stream nil :eof-value nil) ,but then you'll need to test for (eq texto :eof-value) instead of (null texto)
21:12:53
jackdaniel
the condition at the beginning of the do body is also unnecssary, you already test for that in the second DO clause
21:14:39
jackdaniel
you may rewrite the same form as (do ((text #1=(read-line s nil) #1#)) ((null text)) (format t "~a~%" (cl-ppcre:split "\\|" text)))
23:00:46
ak-coram`
jackdaniel: sorry, it only worked for the small example I tested the original issue with