libera/#clasp - IRC Chatlog
Search
5:30:33
drmeister
whereiseveryone: yes - we just added the feature to start/run/shutdown clasp as a library
5:35:48
drmeister
We haven’t set up clasp to build as a library yet. That would require a bit of work with the build system.
14:51:31
nij-
I mean, in theory, CFFI is "enough", right? There maybe a whole lot of extra work to do to connect CL and C++ via CFFI, but I guess the amount is still uch less than implementing CLASP. In this sense, CLASP must have achieved other things that my naive approach would not. What are those things?
15:32:31
jackdaniel
nij-: defining common lisp class as c++ class and using c++ class as lisp class, as pointed out above
15:41:11
nij-
> class -- I see. Is it because both CL and C++ are compiled into LLVM, the classes can be made essentially the same? In my naive "approach", we would have to transform CL class to C data and then to C++ class, which makes it slower and seamful?
15:58:21
drmeister
I'm going to start adding support for llvm15 while continuing to support llvm14 and older versions going forward. llvm14 has the minimum of what we needed to support fast startup.
15:59:44
drmeister
nij: C and C++ are not safe languages, they use plain old data. You can't have that in CL without a lot of work to guarantee safety.
16:01:00
drmeister
nij-: Common Lisp makes guarantees about safety - it is never supposed to segfault.
16:07:48
nij-
jackdaniel That's alright. I'm not proposing to replace clasp. I just want to understand the advantage of clasp approach, by proposing a naive approach and ask for why it's worse.
16:10:08
drmeister
nij-: With Clasp we have the ability to write code that combines C++ for fast numerical calculations and Common Lisp for fast complex logic.
16:10:43
drmeister
You can do that with CFFI but you are going to spend a lot of time writing C wrappers.
16:11:22
drmeister
C++ template programming provides the basic tools you need to automate generation of wrappers.
16:12:44
nij-
drmeister I understand with CFFI we need to spend a lot of time writing C wrappers. Do you think that amount of time surpass the amount of time of designing, implementing, and maintaining CLASP?
16:13:19
yitzi
drmeister: I've split load from the repl here https://github.com/clasp-developers/clasp/pull/1394
16:15:07
drmeister
nij-: I am quite certain that going forward exposing other C++ libraries is a lot easier.
16:15:56
nij-
Being naive, I thought writing those C wrappers will definitely take much less time. But since you're not certain about it, I found I should "update" my naive thought.
16:16:18
drmeister
Not an environmentally friendly analogy - but do you keep fishing with a rod or do you build a trawler?
16:17:10
drmeister
I spent years maintaining Python wrappers using boost::python - that was terrible and it drove me to develop Clasp.
16:18:18
yitzi
I second that. Having written wrappers for Lisp, Python, Lua, etc. ... I can say that automatically generated wrappers are usually terrible. Hand written ones are tedious to write and difficult to maintain.
16:19:04
drmeister
Here's an example. Last year we worked with collaborators who had custom DNA analysis software implemented in "R". That code took several days to work through 150 GB of DNA sequence data.
16:19:55
drmeister
I exposed the seqan DNA alignment C++ library to Clasp over the course of a week and wrote a Clasp sequence analysis program that processes the same data in 20 minutes.
16:20:30
drmeister
seqan is a C++ template/header-only library. The thought of writing CFFI wrappers makes me shudder.
16:21:49
drmeister
Now, our team here has spent a LOT of time developing Clasp at all levels. Does that one seqan example justify this - probably not. But there will be a tipping point.
16:23:56
yitzi
Got it. I'd appreciate if you could let me know if that is generally what you were thinking.
16:27:23
drmeister
yitzi: It's a very large PR - it's hard to wrap my head around it. Does it compile Cando?
16:29:43
yitzi
Yes, it passes the tests also. There is more that I'd like to do, but I am thinking it is best to do it incrementally. I can explain the jist if you want. One of the issues I am concerned with is changing the signature of the startupClasp function to account for exit codes.
16:33:56
nij-
If I may continue, here are some more. -- seqan.cc looks for me like a C++ wrapper. In both approach, some wrappers must be written. And whats good about clasp is that the wrapper you need to write is much smaller and more easily to maintain than C wrappers?
16:35:23
yitzi
drmeister: The options "--noinit, --ignore-image, --base, --image <file>, --snapshot <file>" are all mutually exclusive.
16:36:57
yitzi
drmeister: To develop cando on the base image (previously called cclasp) you'd just do iclasp -B or iclasp --base .... that would load the base image but continue to load extensions. Boom! solving that probably also.
16:39:43
yitzi
Sounds good. Once you are satisfied with it I can handle the merging Cando branch, etc.