libera/#ecl - IRC Chatlog
Search
6:51:05
pls153
psilord: of course, just use Emacs and :slime-connect, by first loading a file like this one (will spawn a separate thread):
7:08:53
jackdaniel
psilord: you may start swank as pls153 pointed out. if you want to call ecl directly from your thread (without a work queue) then you need to import it (it is documented and shiwn in examples)
7:10:26
jackdaniel
Pixel_Outlaw: I'm constantly imprrssed by cool stuff pls does with ecl and qt (eql and lqml projects)
7:11:14
jackdaniel
I think that he has a few commercial aps on ios and android using it, but I might have misremembered
7:11:27
Pixel_Outlaw
jackdaniel: Here is my current little WIP. Along with psilord over there. https://twitter.com/Pixel_Outlaw/status/1622466102457417728
7:14:01
Pixel_Outlaw
The goal is for me to better learn ECL (so I can possibly use it in other C projects) and well GrafX2 was a low hanging fruit since the API is simple. psilord is more of a C guy which I'm not so it helps. :)
7:19:49
Pixel_Outlaw
We use slack at work and it's constanting pinging from the Agile scrummenfuhrer to ask for status reports.
7:31:59
jackdaniel
psilord: I'm sometimes using ecl repl to interactively poke C applications (via swank) and to modify them
10:17:06
psilord
In this case, the embedding of ECL must happen into a program where there is no other process to connect via swank. So the repl has to read from (at this time) the terminal of the program. The program is an image editor, so it'd be nice to have the repl active while the C image editor is wokring. I'll check out those examples which I assume are in the manual.
10:18:06
psilord
Though, on thinking about it, you might be suggesting that swank itself is what the ECL library in the C program runs, therefore allowing emacs to connect to the C program. Hrm. That might very cool.
10:21:37
jackdaniel
https://ecl.common-lisp.dev/static/manual/Manipulating-Lisp-objects.html#si_005fsafe_005feval
10:22:03
psilord
ECL is quite cool. I hadn't really used it for any serious embedding in the past, but after starting to dig into it there are a lot of features for embedding. It is most excellent.
10:22:07
jackdaniel
and such form could be (start-swank) or (stop-swank) if the swank is available in the image
10:27:00
psilord
Is there a TODO list, or a pile of issues or anything like that to help direct people that might desire to poke ECL and add features?
10:28:48
jackdaniel
for example mine is: 1) integrate fast gf (basically finished for over 6 months, but needs final touches - that is 90% of work); 2) add the type inferencer
10:31:08
jackdaniel
regarding embedding c code you may use c-inline and clines (the latter is for top level forms)
10:31:19
jackdaniel
if you are interested in a more complete example, see contrib/sockets/sockets.lisp
10:32:26
jackdaniel
if you spot forms like @(return 0) = err; - it is a syntactic sugar provided by dpp (preprocessor shipped with ecl)
10:32:59
jackdaniel
another example is @"lisp string" and @symbol or @[symbol] (the last one returns the symbol value)
10:33:40
jackdaniel
and as for c-inline, things like #0 #1 #2 are lisp arguments supplied to the form (it is documented)
10:35:28
jackdaniel
there are other interesting ffi abstractions defined in the file src/lsp/ffi.lsp
10:36:53
psilord
Thank you for your time to explain stuff tonight jackdaniel. Time for bed for me. Night!
10:37:04
jackdaniel
it may be also somewhat of interest, but ecl fasls compiled with the main compiler are libraries (.so, .dll etc, depends on the platform)
11:22:24
selwynning
ive been reading more about gc on wasm and it seems that others have arrived to similar conclusions wrt simulating the stack (other suggestions include a shadow stack)
11:32:21
jackdaniel
because when you throw, then the catch must be sticked somewhere in the environment (and that applies to other things too)
11:36:51
jackdaniel
(I didn't read into this stuff for some time so I may confuse concepts - sorry!)
11:38:09
jackdaniel
or maybe not? perhaps we should build our own stack that needs to be "reinstated" when ascyntify returns
11:38:46
jackdaniel
either way asyncify seems to be a key feature that will allow managing the dynamic context
14:15:47
selwynning
are there any dependencies aside from libffi and bdwgc that are likely to need porting?
14:17:27
jackdaniel
ecl dependencies are: libffi (optional, requires porting), threads (optional, requires porting), bdwgc (required, requires porting), gmp (required, has portable "C" implementation)
14:18:06
jackdaniel
there are also platform specific bits in files unixfsys.d and file.d and they may need porting
14:18:29
jackdaniel
but from dependencies I think that only bdwgc must be ported (and libc for exotic platforms without it)
14:19:49
selwynning
libffi is somewhat of a lower priority since im ultimately aiming to run in a sandbox, but i will at least think about it eventually
14:20:37
jackdaniel
if you can afford cross-compiling ffi bindings along with ecl, then libffi is not strictly required
14:28:04
jackdaniel
regarding a "simulated stack", note that we already do something like that - we have a lisp stack in the interpreter
14:28:33
jackdaniel
we have also a frame stack that is shared by all runtimes (these frames basically represent return points)
14:28:55
jackdaniel
and there is ihs frame stack (debugging stack to keep track even of inlined lisp functions along with their "real names")
14:29:49
jackdaniel
these things have somewhat extensive comments in appropriate files (stacks.d stacks.h environment.d etc - I might have missed some)