libera/#commonlisp - IRC Chatlog
Search
8:01:13
mfiano
beach: I would, I really would, but I fear it is out of my domain of expertise and I would be wasting time and money acquainting myself with it before work could even progress.
8:03:29
mfiano
Ask me again if you are unable to find anyone willing. I just don't want to disappoint.
8:04:09
beach
mfiano: And someone like you would require a lot less time investment on my part, so that's fine too.
8:13:14
pl
beach: only slightly related question as I don't have time to hit the paper right now - did Second Climacs have any optimization for long lines?
8:14:08
beach
It uses Cluffer which has a gap buffer for each line, but since that's a protocol question, it is easy to supply a different implementation of the protocol.
8:14:33
beach
I mean, Cluffer has a protocol for editing a single line, and you can supply your own implementation.
8:15:41
pl
it's just that recently I talked with someone regarding very long lines in emacs and other editors, and I wondered how 2nd climacs would deal with it
8:17:11
beach
Sure. It can't be worse than Emacs (unless Emacs has changed), since Emacs uses a single gap buffer for the entire buffer (or used to at least).
8:17:50
beach
The worst case for a gap buffer is if you go to the beginning, edit, go to the end, edit, etc.
8:18:59
beach
But normally, editing is done with some spatial locality, and then a gap buffer is great.
8:54:56
beach
Qwnavery: Yes, I did. The particular project I had in mind is taken for now, but I am willing to discuss other projects.
8:55:44
beach
Qwnavery: The general idea is that I need help to make progress on several projects, but there are very few people who are both qualified and available.
8:56:07
Qwnavery
well, I'm looking for projects to study (reading others code) and perhaps contribute too.
8:56:21
beach
Qwnavery: So my thinking is that, if there is a "relative newbie" who would like to invest in something like that, I could be that person's "mentor".
8:57:31
Qwnavery
I have projects in mind i.e. a clone of Total Commander (midnight commander is doodoo) but I would like to have some other projects to work on.
9:00:07
Qwnavery
By Lisp Operating system I hope you refer to the components to interact with it, not the management of programs and low-level operations the language should handle :)
9:07:39
beach
Qwnavery: A "relative newbie" who doesn't want a mentor sounds strange to me. I think it would be best, then, that you work on independent projects, rather than that you contribute to existing ones.
9:08:35
beach
Qwnavery: What I mean is that, without a mentor, you are unlikely to pick up on conventions, whether general or specific to a particular project.
9:09:18
kakuhen
beach is right -- i'm helping someone with a game in CL for fun and they pretty much teach me everything I now know about common lisp conventions etc
9:09:43
kakuhen
sometimes i would unnecessarily pollute a namespace without even realizing it, and he would point it out to me so i could fix it
9:10:31
beach
kakuhen: Right. And I don't know Qwnavery very well (yet), but we get a significant number of newbies here who explicitly reject any idea of adhering to conventions.
9:10:37
Qwnavery
Isn't it just write functional, try sticking tail recursion in for speed, keep side-effects to a minimum, use ASDF, write portable code?
9:10:59
mfiano
beach: 404 for "this document": http://metamodular.com/Common-Lisp/graph-layout-library.html
9:11:04
beach
Qwnavery: For one thing, none of the code I write (or want) is written in a functional style.
9:12:06
kakuhen
Qwnavery: CLOS feels very different than OOP in languages like Python and C++ imo; you'll just have to ask people around here how they do things in CLOS so you can see it
9:12:27
kakuhen
if you want to see the tip of the iceberg of what CLOS can do, check out the dynamic-mixins library
9:12:51
hayley
I remember that cl-decentralise1 was (probably) my first independent CL project, and I remember it used to be subtly unidiomatic in ways.
9:13:38
beach
mfiano: Right now I am doing way too many things simultaneously, and I also need lunch and more sleep than I got last night, so it won't be immediate.
9:13:44
Qwnavery
beach: well, I mean no offence, I'm of the idea that most do not wish to be a mentor to newbs.
9:13:52
lisp-newbie
Hi guys, I've been reading PCL and I'm trying to do a simple macro based on what I read on chapters 3, 7 and so far in 8, and I keep getting a unbound variable error. Can you please take a look: https://pastebin.com/xYC6VuMR
9:14:21
hayley
For example, rather than using a generic function, I had slots in each server instance contain functions to perform database actions (write object, read object, get iterator for all object names, etc). That was corrected eventually, but only after someone on #lisp pulled me up on it.
9:14:27
beach
Qwnavery: Well, since there are very few people who are both available and qualified, that's the solution I came up with. I am a teacher, so I can do that kind of stuff.
9:15:21
beach
rain3: That can definitely be discussed. What kind of project would you like to work on?
9:15:42
hayley
Well, I think you are calling a different function, as the macroexpansion mentions |user-GET|, which is notably not the same as USER-GET.
9:15:55
lisp-newbie
The pastebin has the goal of the macro, the short macro, the macroexpand, and the error... https://pastebin.com/xYC6VuMR
9:16:25
rain3
beach: clim related would be fine, since I have started learning CLIM . I'd like to work on pretty much any project that is useful
9:16:30
lisp-newbie
hayley I don't know how the || got in there, but it seems that's what I'm calling because the error references model-class
9:17:25
lisp-newbie
hayley doing (|user-GET| 4) I get Evaluation aborted for #<SB-KERNEL:CASE-FAILURE expected-type: (OR SYMBOL STANDARD-CLASS) datum: (CLASS-OF *JOHN*)>
9:18:42
kakuhen
rain3: depending on what you mean with "accounting system," i may be interested in helping with such a project
9:18:51
hayley
No, only a web UI. But the whole project stinks of "someone set an arbitrary deadline and timeline on me" in a way, so I think it deserves a rewrite.
9:19:42
hayley
...in the case that you would ask to use Clomptroller for the backend. Oh, and "someone asked me to write an algorithm, so I wrote a lousy compression algorithm" too :)
9:20:37
beach
rain3: I desperately need a long-ish lunch break, but let's discuss this later or in the near future.
9:21:15
hayley
lisp-newbie: So, when making symbols in a program you wrote, you do not have the reader to upcase symbol names. Thus you either have to use an all-upcase string, or upcase the name before creating a symbol using SYMBOLICATE.
9:22:43
hayley
The other problem, which you just found, is that you have quoted (CLASS-OF *JOHN*) and thus FIND-DAO is passed that list as (I assume) a class specifier. Just remove the quote before ,model-class
9:23:58
nij-
I've been thinking about this for a while. Doesn't have too much idea, as shell is mostly text..
9:25:02
hayley
What kind of objects do you need to pass between them? Generally, I don't think you can easily pass anything more than strings and integers.
9:35:00
Qwnavery
whyyy (ql:quickload "mcclim") (mcclim:define-application-frame myapp () (...) => "package mcclim not found.
9:35:52
Qwnavery
and the manual says to use (inpackage :common-lisp-user) which doesn't work either.
9:38:21
hayley
What process threads thing? I think I've never used CLIM from outside SLIME, funnily enough.
9:40:10
jackdaniel
if you call run-application-frame in the slime repl, then the prompt will wait until it finishes running, is that what you mean?
9:41:24
Qwnavery
herm I swear I read somewhere in the McClim docs that because of the event loop thread replacing the execution thread it won't run in slime because it doesn't make a new thread
9:42:26
jackdaniel
the only thing to remember is that run-frame-top-level blocks until you close the frame, so you either need to start it from a new thread, or use find-application-frame (which does it for you)
9:43:50
mfiano
There is a way to trick SLIME into thinking it isn't blocked, and update the prompt and allow time sharing to evaluate things in the same thread
9:49:25
jackdaniel
oh, luis3 joined; what I've meant is that slime is *the* emacs integration of course ;)
10:53:33
nij-
How about the other way around? I hope to have a running lisp server that a C client can talk to.
10:58:07
jackdaniel
nij-: cffi has also an interface to define callbacks that may be passed as pointers to C
11:01:42
nij-
jackdaniel: Does that also work if I want to write a little client in C that starts up any time, search for a lisp server, and talk to it?
11:05:23
jackdaniel
no, it is not remote, but you've mentioned that talking to c from lisp via cffi is acceptable
11:06:01
jackdaniel
a few years back I've adapted a common lisp backend for thrift (which is a full blown rpc)
11:06:22
jackdaniel
mind, that the original author was someone else, I've just cleaned it up for inclusion mainline
11:07:54
jackdaniel
from lisp to c via cffi is not remote. as noted above, for rpc you may use thrift
11:09:55
jackdaniel
shka: while I haven't read it myself I've been recommended this in the past: https://dspace.mit.edu/bitstream/handle/1721.1/6503/AIM-1102.pdf?sequence=2
11:11:50
jackdaniel
(and, for the information completness, this adaptation was sponsored by rigetti computing)
11:16:45
rain3
"I like this macro example from http://common-lisp.net/cgi-bin/viewcvs.cgi/cl-selenium/?root=cl-selenium It's a Common Lisp binding to Selenium (a web browser test framework), but instead of mapping every method, it reads Selenium's own API definition XML document at compile time and generates the mapping code using CL macros. You can see the generated API here: common-lisp.net/project/cl-selenium/api/selenium-package/index.htm
11:16:46
rain3
l This is essentially driving macros with external data, which happens to be an XML document in this case, but could have been as complex is reading from a database or network. This is the power of having the entire Lisp environment available to you at compile time."
11:23:07
nij-
rain3: Oh seems that they are different things. Worth trying though.. did you figure out how to automatically login to a bank account using that?
11:23:42
nij-
jackdaniel: IIUC to talk to lisp from C i should follow this tutorial - https://thrift.apache.org/tutorial/c_glib.html ?
11:25:18
rain3
nij-: if the bank sends an sms check at login, I don't know yet how to easily send that code from the phone to the computer . phone<->computer interaction through some network protocol is needed
11:25:24
jackdaniel
I don't remember, try installing thrift and experiment with it. basically it is an rpc where you have a server and various clients
11:26:33
jackdaniel
I would follow the tutorial I've linked above, because it is aimed at cl (and then I'd try to connect from C client)
11:26:39
nij-
Cool! Will give it a try. The only problem is that I only know lisp, and a little bit of python. But ill try :)
11:27:34
nij-
jackdaniel: iiuc the tutorial you posted above requires the client to call another lisp in order to talk to tahe lisp client.
11:27:51
jackdaniel
pl: depends on your definition of usability, but as stated above - there is one merged upstream
11:28:56
jackdaniel
nij-: since it is rpc it doesn't matter what is either side. start server in lisp - first try client in lisp, and then try client in, say, python
11:33:09
nij-
Btw, is it possible to launch subthreads (of a thread)? In the sense that if the main thread is killed, all of its subthreads are killed as well.
11:50:43
hayley
Generally killing threads is a Bad Idea, so hopefully you don't kill the main thread, and so you'll never kill any other threads.
11:54:50
hayley
On the other hand, the "opposite" of having a thread finish only when threads it creates are finished is common. Sometimes the pattern is called "parbegin", sometimes fork-join, sometimes "structured concurrency", but the general idea holds.
11:58:09
hayley
I am sure someone implemented "supervisor trees" in Common Lisp, but I am not going to give you any information on that because it is still difficult to write anything where threads can arbitrarily be killed.
12:02:05
hayley
Hah, if you look up "supervisor tree common lisp" on Google, it comes up with a Clozure-only actor library. If you look up '"supervisor tree" common lisp' with quotes, it comes up with the library I need to finish one day (which does not _kill_ things, rather ask them to stop politely).
12:02:34
hayley
shka: Yes, destroying a thread causes it to phase out of reality rather than shut down nicely.
12:03:50
rain3
so, is it possible and recommended to launch subthreads (of a thread)? In the sense that if the main thread is politely stopped, all of its subthreads are politely stopped as well
12:04:38
hayley
pl: First, you have to have safepoints. Most, perhaps except for ABCL because the JVM uses safepoints, do not. But you can interrupt threads with a function that signals some error, causing unwinding.
12:05:37
rain3
nij- https://stackoverflow.com/questions/55638774/how-to-properly-terminate-a-thread-which-is-blocking-lparallel-common-lisp
12:06:25
hayley
(See bt:destroy-thread: "Terminates the thread THREAD, which is an object as returned by MAKE-THREAD. This should be used with caution: it is implementation-defined whether the thread runs cleanup forms or releases its locks first.")
12:08:16
hayley
Yeah, picking critical sections would also be a pain though. Generally I would assume that someone doesn't want to be interrupted while holding a lock; they want to get from state A to B cleanly, and politely destroying oneself in the middle would lead to something strange.
12:09:51
pl
doing it full erlang style would probably bulldoze locks anyways, but then one should be aware of what it means to go full erlang style ;)
12:10:27
hayley
And then if one uses finer-grained locking, there may still be the expectation that we eventually finish the second critical section after the first, which also isn't nice.
12:11:14
hayley
pl: I am aware of it, but I am foolishly trying to find a middle-ground with all my fine-grained locking code. If you squint hard enough, any ol mutable structure is equivalent to an actor.....
12:15:27
hayley
pl: That said, the plan for SICL is to use GC safepoints to handle other interrupts.
12:25:49
hayley
In the case of locks, I think some languages rather make it an error to try to grab a lock that some thread "died" while holding, which is another option.
12:31:51
scymtym
not recommending this as a safe practice, but SBCL generally does run cleanups when destroying threads. try (let ((thread (bt:make-thread (lambda () (unwind-protect (sleep 100) (princ "cleaning up" *trace-output*)))))) (sleep 1) (bt:destroy-thread thread)). this is, of course, super racy. for example, without the (sleep 1) the thread may be destroyed before the unwind protection gets established
12:40:56
scymtym
i think this behavior is essential for interactive development since otherwise interrupting a thread, which has gone off the rails, using the SLIME debugger and choosing the ABORT restart would leave locks locked and possible corrupt the image or application state in other ways
12:42:49
hayley
I guess it would hit UNWIND-PROTECT and thus unlock locks, but there is still the problem that you can leave critical resources halfway between states.
12:42:51
scymtym
i think conceptually (destroy-thread th) == (interrupt-thread th (lambda () (invoke-restart '%abort-thread)))
12:44:34
scymtym
so (let ((f (open …))) (unwind-protect … (close f))) could be interrupted between OPEN and UNWIND-PROTECT
12:45:53
scymtym
this can be improved, but for example (let ((f nil)) (unwind-protect (progn (setf f (open …)) …) (when f (close f)))) is still unsafe since the interrupt can occur after returning from OPEN but before assigning to F
12:45:56
jackdaniel
(without-interrupts (let ((open …)) (unwind-protect (with-interrupts-enabled …) (close f))
12:47:29
hayley
I guess I need to invent a portable WITHOUT-INTERRUPTS which doesn't interfere with any other usage of it, but that is doable as I control the unwinding convention.
12:50:08
hayley
But, again, I just use a handler for a condition type only I signal, so I could bind a new handler which defers unwinding until finishing some critical section.
13:00:56
scymtym
hayley: https://github.com/Bike/clhs-extension/tree/concurrency/concurrency/interruptions is probably related work
13:02:51
rain3
beach: what's the goal with the accounting app ? I have played with https://github.com/robert-strandh/compta and I am reading Finance for Non-Financial Managers
13:10:03
rain3
https://www.reddit.com/r/Common_Lisp/comments/7lb8s7/clledger_double_accounting_system/ "BTW, I do my accounting in Lisp also. I studied double-entry accounting and found it idiotic."
13:12:24
hayley
I think that the "zero sum accounting" is trivially convertible to double-entry bookkeeping and vice versa, but it is too late for me to think of how exactly.
13:13:18
jackdaniel
antoszka wrote a tool to issue invoices in common lisp, I've used it for some time
13:13:30
hayley
It is presented in the linked comment, and I suspect the author came up with the name.
13:15:09
nij-
CL-Ledger official: "CL-Ledger is a Common Lisp port of the Ledger double-entry accounting system."
13:15:29
hayley
Or rather, this comment states that it is also double entry bookkeeping in spirit: "How you describe your system is exactly how I was taught double-entry accounting in school, and AFAIK, the way its still taught here in Norway. The other way you described is just syntactic sugar for those used to that way of thinking (for those new to double-entry accounting it just leaves a bitter aftertaste in my experience), otherwise they are identical."
13:18:41
beach
The main tricky part with such an application is not the "business logic" which is almost trivial. Mainly, it is the GUI, and McCLIM is perfect for such an appliation.
13:19:21
beach
Let me go check CL-Ledger. It may very well be that it could be the "business logic" part of the final system.
13:19:56
hayley
I think it is a port, but there is a submodule for the original C code for some reason, and the code looks kind of odd but not necessarily bad.
13:21:22
hayley
A "port" is some code which was modified in a way to run on another platform. Admittedly that definition does not make sense when you rewrite all the code to "port" to another language...
13:30:09
hayley
I don't see the appeal of human-readable file formats necessarily, as attributing any actual meaning to the data tends to require a program.
13:32:25
tfeb
In the presence of humans I think human-readable (and thus human-editable if need be) is occasionally useful. Of course we could just eliminate the humans
13:34:00
hayley
To compute the balance of accounts, we need to do some parsing and accumulation. Thus we find we would need a program pretty quickly.
13:34:50
jackdaniel
human readable file formats are better if the format is meant to be interchangable between different programs -- programs tend to be written by people, and people are bad with unreadable formats. still, binary formats are OK if they do not assume some certain structure of the program handling them
13:35:22
beach
In CL-Ledger, an account seems to have data stored in it. I think that makes the system unnecessarily complicated.
13:35:41
tfeb
The question is how brittle you want to make it. Without the program, do you want the files to be useless, or just less useful?
13:36:16
jackdaniel
(and, even better, if you stipulate only one client, then you may use the program abstractions -i.e serialize clim output records as a format for graphics)
13:36:18
beach
Account balance can be computed from the list of transactions. So the only real data structure required is a list of transactions.
13:41:17
aeth
The problem with binary formats is that you have complete and total control so you are tempted to optimize it and frequently revise it as long as you have a versioning scheme. Plus, the only authoritative documentation is the source code of the program that uses it. Human readable constrains what you do.
13:41:38
hayley
nij-: Maybe I am too imaginative, but it couldn't be easier than not having to render and parse the data.
13:42:17
hayley
Hm, I haven't optimized the one binary format I wrote, and I am pretty sure the BNF grammar still is correct.
13:43:55
scymtym
regardless of the representation, be it human-readable plain text or some binary format, specifying the syntax /and/ semantics is the only way to get interoperability
13:44:06
hayley
It's a bit easier, sure, but ideally I would have the transaction log in persistent memory.
13:45:31
hayley
What I mean is that, with a mere text editor, you are limited in what you can reasonably do with a textual transaction log, and "human readable" is pretty vague (e.g. COBOL and SQL on the worse end).
13:48:28
aeth
scymtym: yes, but if it's human readable, it will probably look the same over time, while if it's binary, and it has versioning, then everything after the version number can be radically different as you bikeshed the most optimal way to do it
13:48:31
tfeb
Well, some of us have written quite hairy systems to process machine-generate SGML using 'a mere text editor' Certainly helped me do so that it was human-readable.
13:48:51
hayley
nij-: Yes, but you have to come up with a relation between the S-expressions and object graph in memory. Though beach instead uses the printer and reader to serialize the object graph directly.
13:50:48
scymtym
aeth: i get that human readability lowers the initial barrier. but look at markdown. now people can't agree how to parse and interpret it exactly
13:51:20
nij-
hayley: In any case, at the end of the session, if you want to store the data, what would you do?
13:51:46
tfeb
scymtym: that's because markdown is inadequately specified, not because it is human readable
13:52:00
aeth
That's only because Markdown is underspecified for its role (even CommonMark doesn't specify tables or colors yet) and, crucially, it became too popular before it became specified.
13:52:22
hayley
When I had to serialize a more interesting object graph, have fast incremental updates, and have durability, I mostly just lost my mind trying to do it with files. Next I guess I will repeat that with a relational database.
13:52:50
aeth
When you're both underspecified and popular, there are now 5+ ways to do a common task and standardization becomes way harder.
13:53:01
jackdaniel
markdown is an excellent example of human-readability value - it has succeeded because it was friendly for the human reader; it could be better specified though :)
13:53:20
hayley
nij-: I'd leave the transaction log in the persistent memory, and come back to it tomorrow.
13:53:29
beach
rain3: It is almost 3pm here and I haven't gotten anything done yet today on my own projects, so I need to do that for a while. What forum do you prefer for the discussion? Maybe #clim is the best since the main thing will be the GUI?
13:53:36
aeth
markdown has a few straze design flaws, like _foo_ being the same as *foo* (and having no way to do underlining!)
13:56:33
hayley
nij-: Loosely speaking, you just save everything in memory. (It can be made fast, don't worry about that.) The nice thing is that you only need one policy for how to update state.
13:57:40
hayley
Compare that to serialization, where you have one set of operations in memory, another for objects on disk, and perhaps another with version control. (If we needed versioning, we could use a transactional memory scheme too.)
14:06:53
nij-
That sounds nice. At most, if someone wants a human readable format, I can write a printer and a parser on top of that.
15:24:43
Michal
Where should I write my defgeneric forms - within packages.lisp? And also does anyone recommend a way to organising code when using ASDF?
15:25:45
Bike
you might have a dedicated generic-functions.lisp, or you could put generic function definitions in whichever file defiens their behavior
15:44:25
mfiano
Hmm. Arity overloading is one thing I continually wish CL had, but monomorphized instead of dispatched at runtime.
15:46:02
lotuseater
mfiano: I once wrote me a macro to experiment with that like Erlang has it. So you can define functions with the the same name but different (fixed) arity, no &KEY, &OPTIONAL, &REST. so (defun foo (x y z) ...) gets exported and callable by FOO/3
15:47:51
mfiano
specialization-store has it, and supports key/optional/rest, but like other CLtL2 dependent libraries, it is subject to breakage once in a while. I don't think such a thing will be robust with implementation support.
15:49:03
mfiano
That's what I'm after, something implementation-specific that could be made into an extension like PLN, rather than half-baked libraries that when they break, it's hard to blame the implementation, the CLtL2 portability layer, or the library itself
15:50:26
mfiano
I meant I don't think an attempt will be robust _without_ implementation support above.
15:52:39
mfiano
With a proper lambda list parser, which beach might have modularized come to think of it, a naive version that doesn't depend on environment introspection could be written easily.
16:05:45
Bike
having it monomorphized seems like it would entail some subtle but far reaching semantic changes
16:07:35
mfiano
Perhaps. I haven't thought too deeply into it. Just one feature I like from Clojure, but not enough to actually use it :)
17:29:53
mfiano
It's what Rust does for example, and what contributes to incredible compilation times
17:36:56
pve
then the types of each argument would need to be declared/known at compile-time? or would that part be run-time?
18:26:17
White_Flame
mfiano: it could be interactive, if the notion of recompiling was part of the CL image model. I don't think the two are incompatible, but since there's no interface to such a mechanism, nobody builds in that style
18:26:39
White_Flame
to be more clear, recompiling already-compiled functions based on new assumptions
18:28:52
White_Flame
either that, or a manual "bake" command which takes the current dynamic code and bakes in all the currently known assumption, preventing further dynamicism, unless unbaked
19:05:24
lisp123
https://ashok-khanna.medium.com/persistent-in-memory-data-storage-in-common-lisp-b-k-n-r-37f8ae76042f
19:13:06
dieggsy
Does SBCL have an equivalent of Allegro's interactive-stream-p, which forces output for certain functions if a stream is marked interactive? it's described here: https://franz.com/support/documentation/9.0/doc/streams.htm#force-finish-output-2
19:13:50
dieggsy
basically this helps me have sly handle output more similarly to slime and i'm wondering if other implementations have an equivalent setting
19:15:12
nij-
lisp123: what does satellite mean? how does this approach differ with that of mito (db based)? should I worry about memory overflow?
19:18:08
lisp123
nij-: Ignore the term satellite, its just a buzzword. BKNR serialises your lisp data objects to file and then reloads them the memory on startup. So basically you will have all your data in memory always
19:18:56
lisp123
Unless your data is too large, it should be fine for your uses - how much data do you need to keep in memory?
19:19:55
lisp123
Mito / Elephant as I understand are traditional databases, so are much slower than BKNR and also BKNR is very nice in easy it is to use (once you get the hang of it) :)
19:21:21
lisp123
Think of it as working in memory and just saving the results to file to give you persistence and then loading back on startup
19:22:31
mfiano
CLtL2 says: "Nearly all functions that operate on the contents of a vector will operate only on the active elements. An important exception is aref...". I cannot find anything in CLHS about this. Why do I ask? Well loop :across may be unspecified on arrays with fill pointers.
19:24:19
lisp123
Josh_2: That's fine too, do you use Postmodern? Good thing about database solutions is that you can remove the lisp part (!) and reuse elsewhere a bit easier (although BKNR has XML export so I don't think its an issue tbh)
19:25:08
Josh_2
One of the reasons I swapped to Postgres was because I thought about the possibility that I would need to scale my project, pomo makes that pretty easy
19:25:23
lisp123
nij-: "BKNR is a software launch platform for LISP satellites. You could replace “launch platform” with framework and “satellites” with “applications”, but that would be too many buzzwords."
19:26:22
lisp123
nij-: Sounds good doesn't it, imagine going into space with a rocket from Baikanur ;)
19:27:10
Josh_2
All bknr needs is to be able to interconnect with multiple instances and you have a competitor to allegrocache, however thats not a trivial task
19:28:36
Bike
serializing compiled functions is not something you're going to be able to do in standard lisp, and probably not in portable lisp either
19:29:28
jmercouris
if you want inspiration, look in the Nyxt source code, where we tackle this exact problem
19:29:52
Josh_2
Elephant looks cool as well, shame its unmaintained lisp123 I have looked through the source and cant say I had any idea at all what was going on
19:30:38
jmercouris
I believe beach said something about it existing for commercial Lisps or something
19:31:01
lisp123
Josh_2: Elephant or BKNR? From my understanding, Postmodern is pretty much perfect for db solutions (if one is willing to go with PSQL)
19:32:12
nij-
so apparently hayley suggested there are black magics that help persistentize functions and closures https://irclog.tymoon.eu/libera/%23commonlisp?around=1628863135#1628863135
19:32:44
edgar-rft
mfiano: the HyperSpec AREF page says that AREF ignores fill-pointers, but I still have found nothing in the LOOP chapter what that means for : ACROSS -> http://www.lispworks.com/documentation/HyperSpec/Body/f_aref.htm
19:34:57
lisp123
nij-: I have been trying to get my gf into lisp, at least she's been telling all her IT friends that they should program in lisp if they want to be successful :S It's a start
19:35:52
Bike
i would think that loop-as-across respects the fill pointer, but i don't see any explicit language either way
19:39:58
mfiano
edgar-rft: Right, that was the bit in CLtL2 about aref being an exception. I don't see anywhere where it specifies what loop uses
19:41:02
edgar-rft
mfiano: CLHS 6.1.2.1.5 "The for-as-across subclause" says "Iteration stops when there are no more elements in the supplied array that can be referenced" but AREF ignores fill-pointers, so elements after the fill-pointer *can* be referenced. I don't think that's what's meant but the explanation indeed is somewhat ambiguous.
19:48:58
edgar-rft
I often think the glossary only exists because the committee folks permanently lost track of what they were talking about :-)
19:51:55
edgar-rft
don't laugh too loud, the ANSI Spec is a pretty much complex thing, andif I had been member of the committee the glossary would probably be bigger than the internet
19:53:25
edgar-rft
if I had been member of the committee the glossary would need its own internet :-)