jackdaniel changed the topic of #lisp to: Common Lisp, the #1=(programmable . #1#) programming language<http://cliki.net/> logs:<https://irclog.whitequark.org/lisp,http://ccl.clozure.com/irc-logs/lisp/> | SBCL 1.4.5, CMUCL 21b, ECL 16.1.3, CCL 1.11.5, ABCL 1.5.0
cl-arthur has quit [Quit: Lost terminal]
Kaisyu has joined #lisp
Kundry_Wag has joined #lisp
Pixel_Outlaw has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
equwal has joined #lisp
Kundry_Wag has joined #lisp
anewuser has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
jusss has joined #lisp
SenasOzys has quit [Ping timeout: 240 seconds]
SenasOzys has joined #lisp
Kundry_Wag has joined #lisp
makomo has quit [Ping timeout: 246 seconds]
Kundry_Wag has quit [Ping timeout: 272 seconds]
nckx has quit [Ping timeout: 240 seconds]
nckx has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 244 seconds]
asarch has joined #lisp
djeis has quit [Quit: Page closed]
esrse has joined #lisp
dented42 has joined #lisp
marvin2 has joined #lisp
lavaflow has quit [Ping timeout: 246 seconds]
<PuercoPop> Xach: Hi, what would be required for Quicklisp to update the ASDF version it updates to? Is there any reason besides not being a priority that Quicklisp doesn't update ASDF past 2.26?
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 245 seconds]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
dddddd has quit [Remote host closed the connection]
robotoad has joined #lisp
Kundry_Wag has quit [Ping timeout: 272 seconds]
rtypo has quit [Ping timeout: 244 seconds]
foom2 has joined #lisp
Kundry_Wag has joined #lisp
foom has quit [Ping timeout: 252 seconds]
lavaflow has joined #lisp
Kundry_Wag has quit [Ping timeout: 272 seconds]
ealfonso has quit [Disconnected by services]
Roy_Fokker has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
Pixel_Outlaw has quit [Remote host closed the connection]
Kundry_Wag has quit [Read error: Connection reset by peer]
pierpa has quit [Quit: Page closed]
Kundry_Wag has joined #lisp
nirved_ has joined #lisp
koenig1 has joined #lisp
kdas_ has joined #lisp
nowhere_man has quit [Remote host closed the connection]
koenig has quit [Ping timeout: 252 seconds]
Kundry_Wag has quit [Ping timeout: 252 seconds]
nowhere_man has joined #lisp
kushal has quit [Ping timeout: 256 seconds]
Kundry_Wag has joined #lisp
nirved has quit [Ping timeout: 272 seconds]
Kundry_Wag has quit [Ping timeout: 272 seconds]
bheesham has quit [Ping timeout: 252 seconds]
SlashLife has quit [Ping timeout: 252 seconds]
bheesham has joined #lisp
SlashLife has joined #lisp
meepdeew has quit [Remote host closed the connection]
pierpal has quit [Read error: Connection reset by peer]
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
pierpal has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
<beach> Good morning everyone!
dented42 has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
ebzzry has joined #lisp
Kundry_Wag has quit [Ping timeout: 246 seconds]
lavaflow has quit [Quit: WeeChat 2.2]
<no-defun-allowed> morning beach
moei has quit [Ping timeout: 240 seconds]
kdas_ is now known as kushal
Oladon has joined #lisp
Bike has quit [Quit: Lost terminal]
jack_rabbit has quit [Ping timeout: 252 seconds]
Kundry_Wag has joined #lisp
Lycurgus has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
steiner has joined #lisp
AdmiralBumbleBee has quit [Ping timeout: 252 seconds]
AdmiralBumbleBee has joined #lisp
pierpal has quit [Read error: Connection reset by peer]
steiner has quit [Read error: Connection reset by peer]
anewuser has quit [Ping timeout: 272 seconds]
jack_rabbit has joined #lisp
pierpal has joined #lisp
ober has joined #lisp
housel has quit [Read error: Connection reset by peer]
anewuser has joined #lisp
housel has joined #lisp
nirved_ has quit [Quit: Leaving]
pierpal has quit [Ping timeout: 252 seconds]
Kundry_Wag has joined #lisp
pierpal has joined #lisp
nirved has joined #lisp
vlatkoB has joined #lisp
Oladon has quit [Quit: Leaving.]
Kundry_Wag has quit [Ping timeout: 252 seconds]
pierpal has quit [Ping timeout: 245 seconds]
Inline has quit [Quit: Leaving]
robotoad has quit [Quit: robotoad]
pierpal has joined #lisp
igemnace has joined #lisp
SenasOzys has quit [Ping timeout: 246 seconds]
pierpal has quit [Read error: Connection reset by peer]
pjb has quit [Ping timeout: 252 seconds]
slyrus1 has joined #lisp
makomo has joined #lisp
lemonpepper24 has quit [Ping timeout: 246 seconds]
johnjay has quit [Ping timeout: 252 seconds]
pierpal has joined #lisp
NB0X-Matt-CA has quit [Quit: WeeChat 2.0.1]
pierpal has quit [Ping timeout: 252 seconds]
_whitelogger has joined #lisp
<asarch> Is there any way to know all the packages that have been loaded with QuickLisp?
Kundry_Wag has quit [Ping timeout: 252 seconds]
<|3b|> do you mean CL packages defined by systems loaded specifically through quicklisp?
<|3b|> (and not packages defined by systems loaded through ASDF directly or modules loaded by REQUIRE)
<Shinmera> There's no connection between systems and packages, so there is not. You can just list all packages with list-all-packages though.
<jack_rabbit> I don't see anywhere quicklisp is tracking the packages it loads.
<|3b|> if so, ^ what they said :)
<|3b|> (though you could probably add hacks to track them as they were loaded)
koenig1 is now known as koenig
<jack_rabbit> Yes, it wouldn't be difficult to add that functionality.
pierpal has joined #lisp
<|3b|> actually, i guess just grabbing before and after and diffing the list
<Shinmera> the staple-package-recording system does this
<ober> asarch: (map nil (lambda (p) (bt:make-thread (ql:quickload (ql-dist:package-name p)))) (ql:system-list))
<ober> then you'll have them all loaded
<ober> ql-dist:name rather
* |3b| suspects that would break on package name conflicts
<Shinmera> also why are you making threads
<|3b|> with threads you'd at least get them all downloaded
Kundry_Wag has joined #lisp
<ober> because I'm on a 32 cpu core system. :P
<Shinmera> loading things in multiple threads is a recipe for bad juju
<ober> Shinmera: clearly :P
<Shinmera> I don't see what's ":P" about giving bad advice to someone who doesn't know better
<|3b|> also, make sure you want to waste the bandwidth/storage before you do that
pierpal has quit [Ping timeout: 246 seconds]
<|3b|> asarch: (in case you miss the intervening discussion, what ober told you to do probably isn't a good idea, it will start a few thousand threads and try to download and load all of the things available in quicklisp)
Kundry_Wag has quit [Ping timeout: 252 seconds]
<|3b|> how big is ql these days? thought i remembered hearing it was over a GB, but can't find any concrete #s
<jack_rabbit> |3b|, run your form there and find out.
* |3b| doesn't want to waste the disk space/bandwidth :p
<jack_rabbit> mmm
<asarch> All the packages that have been installed with (ql:quickload ...)
<|3b|> (if only the fraction of a $ it would cost the ql servers)
<asarch> Like the dpkg -L in Debian-based systems
<jack_rabbit> asarch, There's currently no way to know that.
<|3b|> so "systems" rather than "packages"
<ober> ls ~/quicklisp/dists/quicklisp/software
igemnace has quit [Quit: WeeChat 2.2]
<|3b|> in (ql:quickload 'x), X is a 'system' in CL terms
<jack_rabbit> ober++
<|3b|> since 'package' means something else
<jack_rabbit> asarch, You can't know for a particular lisp image, but you can see anything that's been downloaded in quicklisp's dists directory.
pierpal has joined #lisp
<asarch> Thank you
<Shinmera> or query ql. (ql-dist:installed-systems (ql-dist:find-dist "quicklisp"))
<asarch> Thank you very much guys :-)
igemnace has joined #lisp
pierpal has quit [Ping timeout: 272 seconds]
scymtym has quit [Ping timeout: 245 seconds]
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
hjudt has joined #lisp
pierpal has joined #lisp
SenasOzys has joined #lisp
hjudt_ has quit [Ping timeout: 246 seconds]
shka_ has joined #lisp
anewuser has quit [Quit: anewuser]
pierpal has quit [Read error: Connection reset by peer]
<jasom> QL does have a partial database mapping packages to systems I think.
frgo has quit [Ping timeout: 250 seconds]
Kundry_Wag has joined #lisp
<jackdaniel> asarch: if you want to see which packages were added after load (it is not the same, because ql may load packages which were already defined on your system!), you may compare list-all-packages before and after calling quickload
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 244 seconds]
<aeth> i.e. (let ((packages (copy-seq (list-all-packages)))) (ql:quickload :foo) (set-difference (list-all-packages) packages))
shka_ has quit [Ping timeout: 252 seconds]
shrdlu68 has joined #lisp
schweers has joined #lisp
<asarch> Wow!
* asarch takes notes...
<asarch> Thank you!
<asarch> Thank you very much guys :-)
<asarch> One last question: is there any way to know what provides a package? (e.g. "cl-glut-examples")?
* |3b| would just M-. on it to find the source and then see what directory it is in :p
scymtym has joined #lisp
Kundry_Wag has joined #lisp
xificurC has quit [Quit: http://www.kiwiirc.com/ - A hand crafted IRC client]
Kundry_Wag has quit [Ping timeout: 246 seconds]
<shrdlu68> What's that memo bot called?
<jackdaniel> minion and Colleen allow passing memos
<jackdaniel> minion: help memo
<minion> To send a memo, say something like ``minion: memo for nick: the memo''. I'll remember the memo for any nick which is the same as the given nick, +/- differences in punctuation, and any nick which is an alias for it, and give it to them when they next speak.
<shrdlu68> dim: I'm getting an error building pgloader in a debian container: https://gist.github.com/shrdlu68/64aec53821d4d02389229bac5b638474
Kundry_Wag has joined #lisp
<jackdaniel> v0|d: on this issue you may find how to use perf to profile ecl: https://gitlab.com/embeddable-common-lisp/ecl/issues/451 (you have command in comments and a screenshot in a descriptions)
<jackdaniel> description*
asarch has quit [Quit: Leaving]
<|3b|> shrdlu68: might need newer ironclad or older sbcl
ober has left #lisp ["ERC (IRC client for Emacs 26.1)"]
<dim> shrdlu68: hi! thanks for building pgloader, it denotes some interest that I like seeing ;-) the bug has been reported as a gihtub issue to, and only happens with very recent SBCL; it's either a SBCL or ironclad/nibbles bug
<dim> I think I've been told that current HEAD of nibbles fixes it
<dim> but I didn't get around to trying it
<dim> can you edit the pgloader Makefile and make it download nibbles from github in QL local-projects in the build directory, copying what the Makefile does for some other packages?
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<dim> or if you're doing that at the REPL, just do it the normal/classic QL way
Kundry_Wag has quit [Ping timeout: 245 seconds]
dented42 has joined #lisp
orivej has joined #lisp
<shrdlu68> dim: Let me try that.
nowhere_man has quit [Remote host closed the connection]
varjag has joined #lisp
nowhere_man has joined #lisp
frgo has joined #lisp
gpiero has joined #lisp
dented42 has quit [Ping timeout: 240 seconds]
frgo has quit [Ping timeout: 250 seconds]
nowhere_man has quit [Ping timeout: 250 seconds]
<v0|d> jackdaniel: maybe its my fault, no idea.
<v0|d> the issue seems I can run the profiler only once, then it starts breaking.
<v0|d> never seen this inline issue before.
<dim> there's also this issue that only happens on sbcl/linux and PostgreSQL 10 at https://github.com/dimitri/pgloader/issues/810, shrdlu68, so if that's your environment you might want to know about it then help me fix it ;-)
<jdz> dim: does pgloader use cl-ppcre?
<jackdaniel> v0|d: inline issue is irrevelant here, I just wanted to show you how I use perf
<jdz> dim: nvm, that's also irrelevant.
<v0|d> jackdaniel: ok, I had to disable noscript, otherwise imgs do not appear:)
buffergn0me has quit [Remote host closed the connection]
<jackdaniel> imgs?
<v0|d> jackdaniel: there is a jpeg showing the profiler output, right?
<v0|d> anyway got the idea, thnx, I've bookmark'd it.
<Demosthenex> sabrac: i just noticed you did the common lisp logging comparison in addition to the postmodern examples. thank you so much for your documentation!
frgo has joined #lisp
Kundry_Wag has joined #lisp
<jackdaniel> v0|d: ah, right. the most important part though is the command in the comment
<jackdaniel> sudo perf top -p $PID
frgo has quit [Ping timeout: 250 seconds]
shka_ has joined #lisp
Kundry_Wag has quit [Ping timeout: 264 seconds]
heisig has joined #lisp
dented42 has joined #lisp
frgo has joined #lisp
<dim> jdz: it does yes, allowing users to express things with regexps
frgo has quit [Ping timeout: 246 seconds]
panji has joined #lisp
<jdz> dim: I've had control stack exhaustion on some BIG inputs and funky regular expressions with cl-ppcre, so I've come up with https://github.com/jdz/cl-ppcre/commit/c407ac2947fa1a13ee59f347c4c0e83e24a75570, which seems to be working for me. But I seriously doubt this is your problem since it seems to be related to different Postgres versions. Too bad there's no backtrace (I did not notice any).
Kundry_Wag has joined #lisp
<dim> I have been given small sources to reproduce, but of course I couldn't make the bug happen on PostgreSQL 10 on Macos (my laptop), and I'm too busy to setup a docker environment or an EC2 or something
<dim> sometimes I wish pgloader was more part of daily job, but I also have a day job that I like and that is mostly Open Source, so...
<dim> (it just happens to involve writing code in C)
<dim> essay assignment: are time contraints overall beneficial or detrimental to Open Source projects maintenance? ;-)
<jdz> I have Postgres v10.5 on my machine.
<jdz> But I don't have pgloader :/
<Demosthenex> can i ask a second pair of eyes? https://bpaste.net/show/a829ec9980fc this worked when i had it output a concatenated string
<dim> jdz: git clone in ~/quicklisp/local-projects? (so that you have the master's branch rather than the latest release, and when we fix bugs, you can easily git pull)
Kundry_Wag has quit [Ping timeout: 272 seconds]
frgo has joined #lisp
<jdz> dim: Do you have a test case that triggers the problem and involves just Postgres, because I don't have MySQL (duh!).
<jdz> Demosthenex: also, you're recursively calling dedup-columns, not dedup-columns-raw.
milanj has joined #lisp
<dim> jdz: the simplest is going to be with a SQLite source, see https://github.com/dimitri/pgloader/issues/810#issuecomment-406624413
<dim> jdz: the bugs happens when working on the source system catalogs introspection, so a database is needed to repro I think
<dim> I think you can repro with pgloader https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite_AutoIncrementPKs.sqlite pgsql://localhost/pgloader or something
<dim> Demosthenex: (let ((a '(("MATCHES" . "GAMEID") ("MATCHES" . "MAPID") ("MATCHES" . "QUEUEID") ("MATCHES" . "SEASONID") ("MATCHES" . "GAMEMODE")))) (remove-duplicates a :test #'string= :key #'car)) returns (("MATCHES" . "GAMEMODE"))
<dim> when using :from-end t, then (("MATCHES" . "GAMEID"))
frgo has quit [Ping timeout: 252 seconds]
<jdz> dim: what would the pgleader call look like in the REPL?
<jdz> (pgloader:load-data :from ... :to ...)?
<jdz> s/:to/:into
<dim> yes
<jdz> Right, now I'm getting to yak shaving.
<dim> the CL API is maybe not as nice as it could yet...
<jdz> Problems with lparallel and invalid type declarations.
<dim> (pgloader:run-commands "load database from ... into ...;" :client-min-messages :debug) is another way to do it, and you can have :data if you want the full story, but you will see every row of data twice (in/out)
<dim> ouch, new SBCL release has improved its type system?
<jdz> It's probably because I'm running with (sb-ext:restrict-compiler-policy 'safety 1).
<jdz> I just hate it when libraries declare (safety 0).
<beach> jdz: It could be justified for code that is called only internally in the library and where the safety has already been verified before that code is called.
<jdz> Apparently in this case the safety has not been verified.
<beach> That's bad.
<jdz> FATAL: Failed to start the monitor thread. The value 338796000000 is not of type (MOD 1000000000)
<loke> jdz: Which library is this?
<jdz> lparallel
<jdz> Last time I tried to use it I also had similar problems.
<loke> (MOD 1000000000) seems to arbitrary as well
<loke> like someone just asssigned some integer type because it was a nice round number.
<loke> s/to/so/
orivej has quit [Ping timeout: 272 seconds]
orivej has joined #lisp
Kundry_Wag has joined #lisp
marvin2 has quit [Ping timeout: 244 seconds]
Kundry_Wag has quit [Ping timeout: 244 seconds]
<jdz> This particular problem might be because of my changes to cl-log: https://github.com/jdz/cl-log
<no-defun-allowed> jdz: i used (safety 0) to do a very fast weighted "blend" between two arrays i've already checked the bounds of
trittweiler has joined #lisp
<Demosthenex> jdz: damn, that was it
<Demosthenex> dim: remove duplicates would have to operate on the complete pair, not just the car. but thats ok, i was blind to the change i made to teh function name
<jackdaniel> Demosthenex: remove-duplicates takes both key and test keywords
<jackdaniel> so you may i.e say :key #'cdr :test #'string=
<Demosthenex> jackdaniel: cool!
<dim> the monitor thread error comes from pgloader, right?
<dim> it just reports whatever happened to lparallel IIRC, in that case
<jdz> dim: I now think it's nothing to do with lparallel, but it was tricky to find the place where it is triggered because lparallel transfers errors across threads.
<dim> yeah debugging is sometimes not as easy as it should, when running from the REPL pgloader should show you the base error though, I think
<Demosthenex> jackdaniel: omg, that's so much smoother :P
<no-defun-allowed> this macro i wrote made me think about useless parallelisation, how do i stop it from doing that?
jusss has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
<shrdlu68> dim: Didn't work, I used sharplisper/nibbles.
<shrdlu68> s/sharplisper/sharplispers/
<jdz> dim: OK, the problem was that in my version of cl-log the timestamp fraction is already in nsecs, and your print-object method assumes it is in internal-time-units-per-second.
<jdz> dim: the bad news is that I don't get any error when loading the data.
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 252 seconds]
Kundry_Wag has joined #lisp
frgo has joined #lisp
Kundry_Wag has quit [Ping timeout: 272 seconds]
ym has quit [Ping timeout: 245 seconds]
ym has joined #lisp
Kundry_Wag has joined #lisp
runejuhl has quit [Ping timeout: 252 seconds]
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
milanj has quit [Quit: This computer has gone to sleep]
Kundry_Wag has quit [Ping timeout: 245 seconds]
<Demosthenex> _death: ooo!
<Demosthenex> _death: is there source on that somewhere?
<_death> my laptop.. likely put something up on github when it's a bit more fleshed out
<jackdaniel> _death: I like your website oldschool design
Kundry_Wag has joined #lisp
<_death> jackdaniel: heh... I've an idea to write a bbs-on-the-web thingy.. though that may take a while
pierpal has joined #lisp
<jackdaniel> I'm planning (given some free time [ha ha, free time :-]) to dive into gopher
runejuhl has joined #lisp
<jackdaniel> that would be cool to be able to share (say) lisp function via internet protocol and simply run it directly from clim gopher browser :)
Kundry_Wag has quit [Ping timeout: 272 seconds]
<_death> do you know any lisp-related gopher sites.. I think I saw one a while ago
t0adst00l has joined #lisp
<jackdaniel> I think knusbaum will be able to answer such question, as asserted above I didn't dive there yet :)
dddddd has joined #lisp
Kundry_Wag has joined #lisp
<_death> cool
pierpal has quit [Ping timeout: 252 seconds]
Kundry_Wag has quit [Ping timeout: 246 seconds]
ober has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 240 seconds]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 240 seconds]
kooga has joined #lisp
<makomo> _death: i like it as well. :-) the excerpts are really interesting btw.
<_death> I mostly use it as a private server to do all kinds of scraping and such so there's not much content ;) .. once I'll get my bbs thing going it'll be more interesting
rumbler31 has quit [Remote host closed the connection]
rumbler31 has joined #lisp
scymtym has quit [Remote host closed the connection]
Kundry_Wag has joined #lisp
scymtym has joined #lisp
orivej has quit [Ping timeout: 240 seconds]
trittweiler has quit [Ping timeout: 245 seconds]
Kundry_Wag has quit [Ping timeout: 250 seconds]
<_death> looking at it though the "ansi art" is pretty terrible.. result of spending around 20m in aciddraw (I also have a project for an aciddraw clone..) after years of nonpractice.. I should replace it with older art :)
Kundry_Wag has joined #lisp
rumbler31 has quit [Remote host closed the connection]
Kundry_Wag has quit [Ping timeout: 272 seconds]
<dim> shrdlu68: ok, so the bug isn't fixed in current HEAD/master versions of ironclad/nibbles, and depends on latest SBCL on linux?
<dim> jdz: I think I need more context from you to understand here...
<makomo> _death: the oldschool/scene feel is what matters :D
milanj has joined #lisp
<jdz> dim: the context is that it "works for me™".
<russellw> is there a way to make case work with strings? Or is it just accepted that with strings, you have to fall back on cond... equal?
<makomo> russellw: there's an interesting string-case macro written by pkhuong
Kundry_Wag has joined #lisp
<jackdaniel> russellw: use alexandria's switch
<russellw> thanks!
<jackdaniel> it takes key and test so may be used as case's generalization
<makomo> oh nice, i didn't know about switch
<dim> jdz: and that's great, right?
<jackdaniel> one difference, when you have clauses, then element is evaluated
<jackdaniel> so you may put a variable in there (unlike case)
<jdz> dim: yes, except I wanted to help fix the problem.
<jdz> But along the way I found another problem, so all is good.
Kundry_Wag has quit [Ping timeout: 245 seconds]
esrse has quit [Ping timeout: 245 seconds]
<dim> jdz: ok that part is unclear to me, which bug are you chasing down? same as shrdlu68?
pierpal has joined #lisp
m00natic has joined #lisp
<jdz> dim: no, the problem with my version of cl-log and broken declarations.
Kundry_Wag has joined #lisp
panji has left #lisp [#lisp]
Kundry_Wag has quit [Ping timeout: 252 seconds]
Kundry_Wag has joined #lisp
<shrdlu68> dim sbcl--version => SBCL 1.3.14.debian
Kundry_Wag has quit [Ping timeout: 250 seconds]
frodef has joined #lisp
SenasOzys has quit [Ping timeout: 250 seconds]
Kundry_Wag has joined #lisp
<Demosthenex> i saw jackdaniel's post on cl-charms, and he used some rudimentary async keyboard io there which he said was poor. what's a better alternative?
<jackdaniel> I've just presented how such model could be build from scratch
<jackdaniel> I have an intent (temporarily suspended due to other tasks) to make a terminal backend for McCLIM
<jackdaniel> in such case io will be handled by McCLIM itself. that's what I meant by saying, that functions in this tutorial are ad-hoc (as a pun loosely based on greenspun 10th rule)
<Demosthenex> yep. i recall reading that ;]
<Demosthenex> and it was an impressive demo
<Demosthenex> ah, so mcclim's got an input model you'd rely on, i guess i'll go look at that
<Demosthenex> i have no idea how CL would do async inputs, that's got to be a good example code
<jackdaniel> sadly important improvements are usually mundane and unimpressive (but they enable impressive demos after they are done)
Kundry_Wag has quit [Ping timeout: 245 seconds]
<Demosthenex> i'm sure we've discussed before i'm just looking to make terminal CRUD interfaces for small databases
<jackdaniel> well, event loop in McCLIM has some limitations (which we have plans to mitigate)
trittweiler has joined #lisp
Kundry_Wag has joined #lisp
<jackdaniel> (and the mentioned demo, as some people pointed out, is based on ffi and some people have ffi-o-phobia)
slyrus1 has quit [Ping timeout: 272 seconds]
orivej has joined #lisp
Kundry_Wag has quit [Ping timeout: 240 seconds]
<Demosthenex> indeed
<Demosthenex> though i'd expect using the upper level api to cl-charms, only a handful of basic terminal handling operations are needed if mcclim is going to manage all the other logic
<Demosthenex> (ie: windows, frames, fields, buttons, menus, etc)
<Demosthenex> which would make it fairly agnostic?
<jackdaniel> if such backend is written some day (I certainly hope so, because that will reveal many weird bugs, I'm sure about that), you wouldn't have to care about terminal at all
<jackdaniel> you'll be able to run mcclim application in a terminal (of course terminal limitations will be still in place)
<Demosthenex> yep
<Demosthenex> i'm a complete noob, but if there were a way i could contribute, i'd be happy to
<jackdaniel> I even have a screenshot somewhere, where I managed to start "Hello world" application side-by-side in a window and in a terminal
Kundry_Wag has joined #lisp
<jackdaniel> there are many ways to contribute. first step is learning clim basics ;) there is #clim channel if you are intersted in socializing
<Demosthenex> i'm a jaded old fart. i despise webapps, i strongly dislike gui apps, i live on the command line and in emacs. if i'm going to make a small db for personal use, it'll be there.
<Demosthenex> i just despair regarding reinventing the wheel. i feel like a whole generation of code has been lost regarding TUIs
SenasOzys has joined #lisp
<Demosthenex> emacs has a widget library, but i prefer cl and a standalone app
pierpal has quit [Quit: Poof]
pierpal has joined #lisp
Kundry_Wag has quit [Ping timeout: 244 seconds]
<jdz> dim: BTW, this is how I set up cl-log without "monkey patching" PRINT-OBJECT for cl-log:timestamp.
pierpal has quit [Read error: Connection reset by peer]
kushal has quit [Quit: ZNC 1.7.0 - https://znc.in]
kushal has joined #lisp
zooey has quit [Ping timeout: 256 seconds]
zooey has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Read error: Connection reset by peer]
<_death> makomo: there, I've updated the logo :)
<no-defun-allowed> I'm alright with guis but there should be a good keyboard alternative after I've memorised enough of my workflow.
<no-defun-allowed> GTK/Emacs is the first example that comes to mind since you can navigate by menus but you'll pick up keyboard chords relatively quickly.
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Ping timeout: 240 seconds]
<Xach> PuercoPop: I am much more likely to drop asdf from quicklisp. Implementations should provide the asdf that best suits their users.
zfree has joined #lisp
ogamita has joined #lisp
rumbler31 has joined #lisp
rumbler31 has quit [Ping timeout: 244 seconds]
igemnace has quit [Ping timeout: 272 seconds]
Kundry_Wag has joined #lisp
FreeBirdLjj has joined #lisp
Kundry_Wag has quit [Ping timeout: 240 seconds]
FreeBirdLjj has quit [Ping timeout: 246 seconds]
t0adst00l has quit [Ping timeout: 256 seconds]
zfree has quit [Quit: zfree]
danielxvu has quit [Ping timeout: 252 seconds]
housel has quit [Read error: Connection reset by peer]
slyrus1 has joined #lisp
SenasOzys has quit [Read error: Connection reset by peer]
t0adst00l has joined #lisp
shifty has quit [Ping timeout: 245 seconds]
warweasle has joined #lisp
LiamH has joined #lisp
Kundry_Wag has joined #lisp
ogamita has quit [Ping timeout: 240 seconds]
Kundry_Wag has quit [Ping timeout: 272 seconds]
brandonz has quit [Ping timeout: 252 seconds]
slyrus1 has quit [Ping timeout: 252 seconds]
brandonz has joined #lisp
tripty has quit [Ping timeout: 252 seconds]
nbunjeva3 has joined #lisp
nbunjevac has quit [Ping timeout: 272 seconds]
kingcons has joined #lisp
nowhere_man has joined #lisp
pierpal has joined #lisp
vimal2012 has joined #lisp
<oni-on-ion> no-defun-allowed: i've been using no mouse for about a month. my secret is 'keynav' for the gui apps
vimal2012 has left #lisp [#lisp]
<shrdlu68> What's the CCL package for debian?
<Shinmera> there is none
Inline has joined #lisp
igemnace has joined #lisp
Inline has quit [Read error: Connection reset by peer]
Inline has joined #lisp
Kundry_Wag has joined #lisp
Bike has joined #lisp
<jackdaniel> shrdlu68: debian policy requires each thing to be boostrappable from C
<jackdaniel> CCL is bootstrapped from CCL
<shrdlu68> Huh?
<jackdaniel> otoh SBCL is boostrappable from any conforming implementation, so one could build clisp with gcc, and then sbcl with clisp
<djeis[m]> Does it have a cross compiler then?
<jackdaniel> djeis[m]: I don't understand
SumoSud0 has joined #lisp
<dlowe> I don't believe clisp is conformant enough. Wasn't last time I checked.
<djeis[m]> If CCL isn't implemented for a given architecture how does one port it?
<jackdaniel> well, it is said, that everything must be possible to build from source, but they look at building ccl with ccl that way afaik
<pfdietz> At some point in the distant past some proto-CCL must have been built from something else, but that's probably long dead.
<jackdaniel> djeis[m]: ah, I don't know. I suspect you may cross compile ccl from ccl
<djeis[m]> jackdaniel: Fair enough.
jack_rabbit has quit [Ping timeout: 252 seconds]
Kundry_Wag has quit [Ping timeout: 252 seconds]
<shrdlu68> "the problem is that ffigen, needed to build CCL, embeds old GCC sources"
varjag has quit [Quit: ERC (IRC client for Emacs 24.5.1)]
Kundry_Wag has joined #lisp
SumoSud0 has quit [Quit: 8y3 8y3]
Kundry_Wag has quit [Ping timeout: 245 seconds]
<makomo> oni-on-ion: hmm, interesting. how efficient are you with it?
SumoSud0 has joined #lisp
<oni-on-ion> makomo: got quite good with it. took me a couple days of having fun because i never learned hjkl movement. it does directionals too, and shift+(key)
<dlowe> I learned hjkl movement, and then switched keyboard layouts :(
<oni-on-ion> makomo: i am happy to find that most UI elements are in that pattern of "subdivision", which is also quite interesting philosophically =)
<makomo> dlowe: what are you using now?
<makomo> oni-on-ion: hmm very nice. i wonder how efficient one could get it. at first it seems "horrible", but i suppose i would think differently after a few days of using it/practicing
<makomo> s/it//
slyrus1 has joined #lisp
<makomo> oni-on-ion: cool observation :-)
<oni-on-ion> the fingers learn which directions for which button quite quickly. ie. dark mode toggle on firefox is 3 keys to hit, or the youtube search bar is 2 key.
<dlowe> makomo: colemak
heisig has quit [Ping timeout: 252 seconds]
flazh has quit [Ping timeout: 252 seconds]
SumoSud0 has quit [Quit: 8y3 8y3]
SumoSud0 has joined #lisp
housel has joined #lisp
dyelar has joined #lisp
Lycurgus has quit [Quit: Exeunt]
<shrdlu68> dim: Compiling with ccl seems to have worked.
tripty has joined #lisp
<shrdlu68> Hopefully I can just copy the binary over the systems where it will run.
<shrdlu68> Gotta go, I'll be back.
shrdlu68 has quit [Quit: WeeChat 2.0.1]
slyrus2 has joined #lisp
sabrac has quit [Ping timeout: 245 seconds]
slyrus1 has quit [Ping timeout: 245 seconds]
regreg has joined #lisp
slyrus2 is now known as slyrus1
jmercouris has joined #lisp
igemnace has quit [Quit: WeeChat 2.2]
Kundry_Wag has joined #lisp
slyrus1 has quit [Quit: slyrus1]
slyrus1 has joined #lisp
meepdeew has joined #lisp
Kundry_Wag has quit [Ping timeout: 272 seconds]
FreeBirdLjj has joined #lisp
scymtym has quit [Ping timeout: 250 seconds]
tripty has quit [Ping timeout: 250 seconds]
rumbler31 has joined #lisp
rumbler31 has quit [Ping timeout: 252 seconds]
orivej has quit [Ping timeout: 244 seconds]
sauvin has quit [Ping timeout: 244 seconds]
cl-arthur has joined #lisp
Kundry_Wag has joined #lisp
bradcomp has joined #lisp
trittweiler has quit [Ping timeout: 252 seconds]
FreeBirdLjj has quit [Remote host closed the connection]
Kundry_Wag has quit [Ping timeout: 264 seconds]
FreeBirdLjj has joined #lisp
orivej has joined #lisp
flazh has joined #lisp
jasom has quit [Ping timeout: 264 seconds]
FreeBirdLjj has quit [Ping timeout: 244 seconds]
lemonpepper24 has joined #lisp
Kaisyu has quit [Quit: Connection closed for inactivity]
jasom has joined #lisp
<Demosthenex> no-defun-allowed: so i prefer my tiling wm with terminals pre-allocated. guis and i don't get along. yes, good hotkeys and keyboard support in a gui make it better, but if i'm writing something it'll be text only. and firefox sucks now that they've forced end user windoze hotkeys on everyone forever.
shka_ has quit [Quit: WeeChat 1.9.1]
<Demosthenex> bet i could use that for async input for keyboards and a shared locked queue of input events
dale has joined #lisp
scymtym has joined #lisp
pfdietz has quit [Remote host closed the connection]
pfdietz has joined #lisp
FreeBirdLjj has joined #lisp
Bike has quit [Ping timeout: 252 seconds]
<phoe> I think Erlang has affected my object-oriented Lisp design.
FreeBirdLjj has quit [Remote host closed the connection]
<phoe> I'm designing a server for a text-based game, and I noticed that I base literally everything around queues and message-passing in there.
FreeBirdLjj has joined #lisp
gpiero has quit [Remote host closed the connection]
<phoe> And threads that block until a message is received, at which point they parse the message, do their job, and block again, waiting for a queue to get a message again.
<oni-on-ion> Demosthenex: agree with your first thing there
<oni-on-ion> been using exwm+emacs+keynav for some time, no mouse, firefox only when necessary
Bike has joined #lisp
frodef has quit [Ping timeout: 240 seconds]
tripty has joined #lisp
frodef has joined #lisp
Fare has joined #lisp
Lycurgus has joined #lisp
cage_ has joined #lisp
slyrus1 has quit [Ping timeout: 240 seconds]
pjb has joined #lisp
ober has left #lisp ["ERC (IRC client for Emacs 26.1)"]
Folkol has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
astalla has joined #lisp
foom2 is now known as foom
<makomo> _death: great excerpts on your page, i read all of them :D
<Demosthenex> oni-on-ion: firefox used to have firemacs, which let me have real emacs bindings... now its all windoze crap. i'm so mad
<Demosthenex> phoe: do you have an example? that's an architecture i'd love to learn more about
schweers has quit [Ping timeout: 252 seconds]
Fare has quit [Ping timeout: 246 seconds]
asarch has joined #lisp
<oni-on-ion> Demosthenex: it and chrome has extensions for using emacs to edit text in text fields, used one for a bit it was quite nice. brings up an emacsclient but thats isnt much. i am looking forward to the "next" browser.
varjag has joined #lisp
<jackdaniel> phoe: assuming erlang was public around 1986 it can't be true, because commonloops (direct predecessor of clos) was proposed the same year
prometheus_falli has joined #lisp
<Shinmera> jackdaniel: the keyword in what he said is "my"
<jackdaniel> oh, I've missed that word, how insightful. thank you
t0adst00l has quit [Ping timeout: 256 seconds]
astalla has quit [Ping timeout: 252 seconds]
<phoe> jackdaniel: yep, it's the way I'm thinking right now
<phoe> Demosthenex: gimme a while, I'm writing it down right now
sauvin has joined #lisp
rumbler31 has joined #lisp
rumbler31 has quit [Ping timeout: 250 seconds]
m00natic has quit [Remote host closed the connection]
<Demosthenex> oni-on-ion: my biggest complaint is search and save.
<phoe> in there, connection is a data structure that doesn't act on its own. Acceptor has a thread that's waiting on connections to its listening socket, listener has a thread that's waiting on input on the connection sockets, writer has a thread that's waiting on jobs inside its internal lparallel queue.
<phoe> And the game logic has more threads inside.
<phoe> Most likely implemented via a lparallel kernel.
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
lumm has joined #lisp
frgo has quit [Ping timeout: 250 seconds]
Lycurgus has quit [Quit: Exeunt]
holycow has joined #lisp
<phoe> There is a function VECTOR-PUSH that adds an element to its end. Is there a function like VECTOR-REMOVE that accepts a vector and an index, removes the element from that position, copies the last element to that position, and decreases the fill pointer?
Fare has joined #lisp
Pixel_Outlaw has joined #lisp
<phoe> Something like (vector-remove 2 #(a b c d e f)) ;=> c, #(a b f d e)
<phoe> Obviously this doesn't preserve order, but order isn't necessary in my case.
orivej has quit [Ping timeout: 250 seconds]
<jackdaniel> vector-push adds at the vector end, so its counterpart is vector-pop (which removes from the end)
<Bike> there is not a function likethat.
<phoe> sounds like one more commit into my utility library, then.
danielxvu has joined #lisp
<phoe> jackdaniel: I know - I need to "pop" from arbitrary places in the vector though.
<Shinmera> Colleen: tell phoe about array-utils vector-pop-position
<Colleen> phoe: Unknown command. Possible matches: 8, set, say, mop, get, about self, logout, grant, block, award,
<Shinmera> err
<Shinmera> Colleen: tell phoe look up array-utils vector-pop-position
<Colleen> phoe: Function array-utils:vector-pop-position https://shinmera.github.io/array-utils#FUNCTION%20ARRAY-UTILS%3AVECTOR-POP-POSITION
frgo has joined #lisp
cage_ has quit [Quit: Leaving]
<Shinmera> that does about half of what you want I believe? Not sure if I quite understand
FreeBirdLjj has quit [Remote host closed the connection]
<phoe> Shinmera: your function preserves order of elements and is therefore O(n). I don't need to preserve order and therefore it can be O(1).
<phoe> (vector-remove 2 #(a b c d e f)) ;=> c, #(a b f d e)
<pjb> phoe: it's called rotatef.
<phoe> Note that F is now out of order
shrdlu68 has joined #lisp
FreeBirdLjj has joined #lisp
<pjb> (progn (rotatef (aref v zombie) (aref v (1- (length v)))) (decf (fill-pointer v)))
<phoe> pjb: hm, rotatef and vector-pop
<phoe> that's a combo that will work - thanks.
<Shinmera> right, so just rotatef and decf f- what pjb said
orivej has joined #lisp
<pjb> (defun vecto-remove (v zombie) (rotatef (aref v zombie) (aref v (1- (length v)))) (vector-pop v))
<phoe> rotatef will put the element I seek into the vector's tail, and vector-pop will fetch it for me and decrease the fill pointer.
<phoe> That's what I want.
frgo has quit [Ping timeout: 252 seconds]
<oni-on-ion> Demosthenex: in firefox?
<pjb> (Let ((v (make-array 6 :initial-contents '(a b c d e f) :fill-pointer t))) (values (vecto-remove v 2) v)) #| --> c ; #(a b f d e) |#
dyelar has quit [Quit: Leaving.]
<phoe> pjb: exactly. Thanks!
<pjb> Perhaps it'd be better to use (defun vecto-remove (v zombie) (decf (fill-pointer v)) (shiftf (aref v zombie) (aref v (length v))))
<pjb> since this avoids a write in memory.
<pjb> (and a read).
<pjb> s/vecto-/vector-/
<phoe> pjb: yep, one write less.
<phoe> and we use the fact that aref ignores fill pointers.
FreeBirdLjj has quit [Ping timeout: 252 seconds]
<phoe> Shinmera: does this sound like something you'd include in array-utils?
<Shinmera> sure, why not
shrdlu68 has quit [Ping timeout: 272 seconds]
<phoe> Okay then - I'll make a PR
<Shinmera> not sure what to name that though
<phoe> with VECTOR-POP-FRONT* and VECTOR-POP-POSITION*
<phoe> how does this sound?
<pjb> Bah! In a library, you'll want to add check-type for the arguments, and check that the fill-pointer is >0, etc.
<_death> should also handle #(a) ...
<phoe> _death: it's possible for a vector to have fill pointer 0
<pjb> And also, indeed, add a case when no fill-pointer is in there…
<phoe> oh, if there's no fill pointer, we want to signal an error methinks
<pjb> With &key option for filling nils at the end, or creating a new shorter vector.
<phoe> just like VECTOR-POP does
shka_ has joined #lisp
<pjb> or an error: &key (no-fill-pointer :error) (check-type no-fill-pointer (member :error :copy nil))
<_death> right.. I actually wanted #()
<pjb> see com.informatimago.common-lisp.cesarum.array:vector-delete
<pjb> (defun vector-remove (v i) (prog1 (aref v i) (vector-delete nil v :start i :end (1+ i) :test (constantly t))))
<_death> note that you can also use remove-if/delete-if with appropriate start/count
<pjb> The thing here, is that in a given program, you can have a lot of nuances and conditions that makes it simplier to write the exact function you need, rather than use a library function, even (or exactly because!) if it's very versatile with lot of different &key options..
jmercouris has quit [Remote host closed the connection]
<flip214> does anyone have the link to csrhodes' PDF from June where he reports about the final results of 'Using Lisp-based pseudocode to probe student understanding' for his class?
<flip214> pjb: that says "published april", and the graphics only go to october.
<flip214> ISTR that there was one with times up to May or June.
lemonpepper24 has quit [Ping timeout: 252 seconds]
<shka_> oh
<shka_> this sound interesting
<shka_> and fun!
<Shinmera> I'll take a look tomorrow.
<phoe> Okiedokie.
<flip214> pjb: but thanks anyway.
<phoe> I'll make a PR and leave it until tomorrow then.
<flip214> hmmm, is "Xof" the nick I'm looking for?
<flip214> yeah, guess so.
<flip214> minion: memo for Xof: please send me the link with the full results (whole year) of your 'Using Lisp-based pseudocode to probe student understanding' Moodle experiments; ISTR that you posted that in June or so. I'd like to forward that. Thanks a lot!
<minion> Remembered. I'll tell Xof when he/she/it next speaks.
nowhere_man has quit [Ping timeout: 252 seconds]
<shka_> phoe: lol, you have separate trash repo? :D
<shka_> or account even
<phoe> shka_: actually a github organization that has only one member
<shka_> it is funny to me
<phoe> I really prefer to keep my main account clean.
<phoe> I only want to have projects that I'm proud of there.
<shka_> coward!
<shka_> you should also put you favorite porn list in there
<phoe> the list wouldn't fit inside the github 2GB-per-repo limit
<phoe> but that's already #lispcafe material
<holycow> phoe: masterpiece
<shka_> lol
<phoe> holycow: that's the magnum opus I want to be remembered for
<holycow> it's magnum allright
<holycow> :)
shrdlu68 has joined #lisp
rumbler31 has joined #lisp
<holycow> that was funny :) thx. bbl.
holycow has quit [Quit: leaving]
<_death> should pokemonize the LiCeNsE file as well
<phoe> _death: the license should be readable by all parties.
<phoe> I wouldn't want to scare off any potential parties, would I?
<dlowe> why is that making things more like pokemon anyway
<phoe> take a look - that logo actually reads PoKéMoN.
marvin2 has joined #lisp
<dlowe> ah, okay. To match the katakana, presumably.
shrdlu68 has quit [Read error: Connection reset by peer]
<_death> huh, neat.. I was thinking about pokemons and that I should update a program that scrapes UN "concerned" statements and generates a ban-ki-moon image with them as think bubbles.. at some point I disabled it.. now that I generated an image, however, I see that I don't need to update anything, as it reflects reality: https://adeht.org/img/ban.png
jack_rabbit has joined #lisp
vlatkoB has quit [Remote host closed the connection]
dueyfinster has joined #lisp
Kundry_Wag has joined #lisp
Kundry_Wag has quit [Remote host closed the connection]
orivej has quit [Ping timeout: 240 seconds]
Cymew has quit [Remote host closed the connection]
Jesin has quit [Quit: Leaving]
shifty has joined #lisp
stacksmith has quit [Remote host closed the connection]
Jesin has joined #lisp
dueyfinster has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
dueyfinster has joined #lisp
jasom has quit [Ping timeout: 252 seconds]
frgo has joined #lisp
orivej has joined #lisp
<whartung> just curious if any of the current lisps support the idea of “volatile” variables.
sixbitslacker has left #lisp ["Started wasting time elsewhere"]
<phoe> whartung: volatile? what do you mean?
carmack has joined #lisp
<phoe> as in, volatile from C language, meaning, "don't optimize this stuff, don't touch it, don't do anything with it"?
nowhere_man has joined #lisp
dueyfinster has quit [Ping timeout: 240 seconds]
jasom has joined #lisp
<whartung> well, I’m thinking of the Java language where volatile variables will see changes done across cores in multi-threaded applications.
<whartung> I don’t know if C’s volatile makes the same guarantee
<White_Flame> usually it means "always perform a real read & write when the source code says to" instead of caching it
<whartung> yea, basically.
<White_Flame> and yeah, interacting with hardware memory barriers and such
<White_Flame> in all the multithreading lisp stuff I've done, using your basic mutexes & such, I've never had a problem with multi-threaded access to shared variable
<White_Flame> s
<whartung> but that’s with mutexes, O
<whartung> I’m thinking about atomiic “read and set” type of things, and “lockless” algorithms
<White_Flame> the locking mechanisms don't actually affect the shared variable
<White_Flame> oh, well those aren't volatile
<phoe> whartung: you have some CAS mechanisms in SBCL for example
<White_Flame> I know I've seen libs and/or implementation specifics for CAS
<White_Flame> (compare-and-swap, not computer algebra system :-P)
<whartung> yea
<whartung> taht
<whartung> that
<pjb> whartung: threading is not considered by the CL language. An implementation that has threads could provide a declaration. You could (declaim (declaration volatile)) and (defun foo (x) (declare (volatile x)) …)
<pjb> whartung: and then bully your vendors to implement the volatile declaration.
<whartung> I simply don’t know if the CAS stuff alone is enough, I’ve used both in java.
<whartung> I think mutexes solve the problem, but they’re pretty heavy weight I dont know what their impact is on the caches when they happen.
longshi has joined #lisp
meepdeew has quit [Remote host closed the connection]
igemnace has joined #lisp
prometheus_falli has quit [Ping timeout: 256 seconds]
prometheus_falli has joined #lisp
<AeroNotix> Does stmx quickload for anyone else here on SBCL?
<AeroNotix> I'm getting errors just quickloading it: "Lock on package SB-VM violated when interning EMIT-SKIP while in package: SB-X86-64-ASM."
warweasle has quit [Quit: away]
moei has joined #lisp
<phoe> AeroNotix: trying now
<phoe> errors here
<phoe> SBCL 1.4.11 here
<AeroNotix> Wonder why it's still in quicklisp, thought the CI process caught stuff like this.
<phoe> AeroNotix: perhaps Xach still uses .10
<AeroNotix> phoe: ah, perhaps. What OS are you on out of interest
<phoe> it seems that 1.4.11 no longer has the SB-VM::EMIT-SKIP symbol
<phoe> debian sid
<AeroNotix> ok
<AeroNotix> looking into it now, wonder why arch is still only providing 1.4.10 though!
<AeroNotix> debian sid more bleeding edge than arch!?!? dun dun dunnnnn
<phoe> it'll likely need to be dealt with in #sbcl since stmx is using internal symbols of sb-vm package
<phoe> AeroNotix: ...
<phoe> I use roswell
<AeroNotix> ahhh ok
<phoe> (;
<AeroNotix> gotcha, makes sense
shka_ has quit [Ping timeout: 250 seconds]
Lycurgus has joined #lisp
<AeroNotix> Xach: which version of SBCL does quicklisp's test/CI pipeline use?
<Demosthenex> oni-on-ion: yeah, windows swaps search and save vs emacs in firefox. control-s is save not search, adn control-f is find with a F key to cause repeates
<phoe> It failed even on 1.4.10
<AeroNotix> wait, what
<AeroNotix> why is it in quicklisp then?
<phoe> looks like it wasn't removed... yet
<AeroNotix> Weird, I thought they were removed if they didn't pass tests. Perhaps this is an omission/Xach thought it wise not to break dependencies?
<phoe> I think the latter
<phoe> given how popular STMX is on github
<AeroNotix> haha, it's actually weird. I had an idea on hacking on sbcl's internals with stmx as well actually. Whole reason why I loaded it up
<AeroNotix> phoe: derp di derp: https://github.com/cosmos72/stmx/issues/14
<AeroNotix> well that scuppers my plans
<oni-on-ion> Demosthenex: ahh right. and ctrl+g is search again etc . putting FF tabs as individual emacs buffers with EXWM does help a bit.
<phoe> AeroNotix: yes, exactly
carmack has quit [Quit: Lost terminal]
cl-arthur has quit [Quit: Lost terminal]
pierpal has quit [Ping timeout: 252 seconds]
<jasom> whartung: C's volatile is very lightly specified. It essentially says that accessing a volatile is a side-efect, and C does define when previous side effects must complete by (i.e. sequence points). This means it cannot remove accesses (since only side-effect free expressions can be removed) and it cannot reorder accesses across sequence points.
<whartung> I don’t know how that differs from the java definition, or how they differ in practice.
<jasom> whartung: most implementations give some additional guarantees, often specified in relation to the ISA, and in some cases the microarchitecture
<jasom> one common additional guarantee is that the size of the access will match (e.g. a read write a pointer to a volatile 8-bit value won't cause a 32-bit read-modify-write on the bus, but it might for non-volatile accesses)
<jasom> s/read write/write
<jasom> whartung: the spec as-written would guarantee that cores see volatile accesses on other cores only if a memory-write from one core is visible on other cores. For proper ordering, more synchronization may be needed (especially on non-x86oids)
<whartung> ok
<jasom> as some microarchitectures do not enforce that issuing write instructions in order will be seen in the same ordering on another core
<jasom> I think C11 now provides enough levers to do it in pure C, prior to C11, compilers would offer intrinsics that would essentially place synchronization instructions in the emitted code.
<whartung> ok
<whartung> right, that’s what I thought something like that happens — some kind of hard sync between the cores.
<pfdietz> And compilers were notorious for getting volatile wrong anyway.
orivej has quit [Ping timeout: 250 seconds]
<jasom> pfdietz: compiler customers are notorious for overestimating what volatile is required to do as well :)
<whartung> and I may be wrong, but it seems to be that volatile’s are important to lockless algorithms, but maybe CAS alone is adequate.
<whartung> I haven’t got that deep in to them yet
<jasom> CAS removes the need for volatile in many cases because it explicitly performs the read and writes.
<whartung> right
<jasom> The typical CAS intrinsic has (nearly?) a superset of the guarantees that volatile provides
<jasom> lockless Atomic modify can be implemented with a CAS, and atomic modify gets you many useful lockless algorithms, though there may be either forward-progess issues or slow performance for some algorithms if you build on top of that tower of abstraction.
<jasom> and on multicore systems volatile will almost certainly not be enough, since cross-core synchronization is also going to be needed.
<whartung> right
<jasom> whartung: anyways when you get to gritty details, feel free to pick my brain since I've implemented a few simple lockfree algorithms on x86, arm and power.
<whartung> great thx!
Roy_Fokker has joined #lisp
nowhere_man has quit [Ping timeout: 252 seconds]
oni-on-ion has quit [Quit: WeeChat 1.9.1]
<whartung> casually it looks like only SBCL exposes CAS primitives anyway.
nowhere_man has joined #lisp
jmercouris has joined #lisp
moei has quit [Quit: Leaving...]
robotoad has joined #lisp
<asarch> I've done a few (ql:quickload...) and some (in-package...). Is there any SBCL command to wipe your session and start over again (anything else besides exit and restart again)?
Lycurgus has quit [Quit: Exeunt]
<phoe> asarch: the best way is to restart it.
<phoe> in case you're in slime, hit the , key and issue the restart-inferior-lisp command.
Fare has quit [Ping timeout: 272 seconds]
lumm has left #lisp [#lisp]
<whartung> but it’s an interesting question. For example, if I do (make-package “FOO”), then (in-package “FOO”), then (defun xxx ()), when I do a DELETE-PACKAGE, assuming no other binding, will FOO:XXX “go away” and be GCd?
<phoe> when you delete a package, all symbols from that package are uninterned.
<phoe> so, if that symbol is not referenced anywhere in the image, it is free to be collected.
<whartung> right, so, in theory, to “reset” he could delete all of the packages that he’s quick-loaded.
<jasom> whartung: there are still things like DLLs that have been loaded, files that have been opened, &c.
<whartung> of course, I didn’t say it was perfect.
<whartung> outside of out-of-spec finalizers, there’s not much of a formal lifecycle for things.
<|3b|> also lots of things will keep references
<whartung> like what?
<|3b|> don't forget to delete all the print object methods, whoch keep refs to classes which ref names which ref ...
<|3b|> and probably random caches
jkordani_ has quit [Ping timeout: 252 seconds]
<whartung> from a LispOS perspective (not wanting to open that, at all, really), I was always keen to understand how things were “forgotten”.
<whartung> but that’s an interesting point regarding generic functions, and what holds on to them.
<phoe> beach has an idea to store method references in the environment, not in the GFs
<phoe> that's how he want to tackle the problem of methods lingering around
<Bike> that doesn't sound right... methods have to be associated with the gfs anyway
<whartung> well it interesting in the GFs transcend package boundaries.
<Bike> more like they're unrelated
<Bike> I guess the list of methods of a gf could be "weak" so that methods specialized on otherwise unused classes could be gced
<Bike> messes up a bunch of caching strategies though
<jasom> beach recalculates the dispatch function whenever a method is added or removed though, right?
<Bike> that would be the messed up strategy, yes
<jasom> well it would require recalculation on a GC potentially
<jasom> weak pointers are a PITA for GC in any event
<Bike> but if a method is collectable in this way, the discriminator doesn't actually need to be recomputed, since there's no way to call the gf with arguments of the gc'd classes
<phoe> doesn't the discriminator hold the references to the methods though?
<phoe> you'd need to explicitly make the method references in the discriminator weak, somehow
<Bike> depends on how you do it.
<phoe> if you do it indirectly, then sure thing
<phoe> the naïve way wouldn't work well in that case though
<Bike> there's certainly a complex network of dependencies.
<Bike> but conceptually there's no reason for a generic function to keep a method alive, i think.
<phoe> yep, and you need to take them all into account when designing the CLOS implementation to make sure that methods are actually garbage-collectible.
<phoe> Bike: basically, when a class becomes collected, then all methods specializing on that class are free to be collected, too, correct?
<Bike> i would say so, yes.
<phoe> it should work the same with eql specializers that aren't numbers/characters.
<Bike> yes
stacksmith has joined #lisp
<Bike> that is, an eql specializer only weakly uses its object
<frodef> Wouldn't any live method also keep its specializing classes alive?
<Bike> i don't think it should do
<Bike> so
<phoe> frodef: (defclass bar () ()) (defmethod foo ((bar bar)) 42) (setf (find-class 'bar) nil)
<phoe> literally the only way for you to be able to call that method now is CLOS introspection
<asarch> Thank you phoe
<asarch> Thank you very much :-)
<phoe> so you manually extract the method function and call it
<phoe> asarch: no problem
<phoe> Bike: the issue is when you have (defmethod foo ((bar bar) (baz baz) (quux quux))) and when one of the classes becomes unreachable
<phoe> there's still two holding the method in place
<frodef> phoe: not if you have any bar objects lying around?
<Bike> an instance of a class presumably refers to that class
<whartung> but generic functions aren’t bound to a class
je4i has joined #lisp
<phoe> whartung: what do you mean?
je4i has quit [Quit: ERC (IRC client for Emacs 25.3.1)]
<phoe> frodef: if you have uncollected instances, then they refer to their class, so the class is reachable even if it's deleted
<phoe> when all instances are unreachable, that's when you can collect the class itself
<Bike> just putting a finalizer on classes would probably be okay. it's not like they're destroyed very often.
oni-on-ion has joined #lisp
<phoe> sounds good, sure thing
<whartung> well, it’s not like you have a class and a list of generic functions. You have a list of generic functions and the dispatch arguments.
<phoe> yep, that's right
<whartung> by that point, yes, in theory, if a class goes away then any generic function that is dispatched based on that class is “unreachable” via the dispath mechanism and could “go away".
<phoe> whartung: exactly, except s/generic function/method/
<whartung> right
<phoe> when in a (defmethod foo ((bar bar) (baz baz) (quux quux)) 42) any of classes BAR, BAZ, QUUX are collected, then the method itself could freely be collected
<phoe> because you have no means of invoking that method anymore that aren't CLOS hacks
<whartung> but methods ARE bound to symbols.
<Bike> no. what.
<phoe> sure, what's the problem?
<Bike> what symbols.
<whartung> in theory you would have a hard reference from teh symbol to the method, and a weak link from the “list of methods” to the method.
<phoe> a generic function is named after a symbol
<phoe> and a method refers to its generic function
<Bike> i already said the list of methods would conceptually have weak references...
<phoe> still can't see how a symbol would keep a method alive
<whartung> yea, that’s right you’d have several meethods ostensibly with the “same” symbol.
<Bike> symbols are not relevant here
<Bike> do you mean the generic functions?
<whartung> I mean both.
<Bike> symbols just name generic functions. there are other ways to keep a generic function live.
<phoe> a generic function is a function, a function is reachable in one of two cases
<phoe> 1) you have references to it anywhere, d'oh
<phoe> 2) it has a global definition, so obviously it has a reference
hitchhikingcoder has joined #lisp
<phoe> you could (defvar *something* #'my-generic-function) and then (fmakunbound 'my-generic-function)
<phoe> and 2) is lost but 1) is still live, since now a global variable refers to that function.
LiamH has quit [Quit: Leaving.]
<phoe> which brings me to another interesting question, storing methods for anonymous generic functions in the environment.
<whartung> it just seems that “normally”, the “hard” references to the function would be tied to the naming symbol. Anything else (within the CLOS infrastructure) should probably be a weak reference.
<phoe> woo boy, 'tis getting weirder and weirder
<Bike> you can have anonymous generic functions
<Bike> and just throw them in a list you're dealing with or something
<phoe> yes, I know
<Bike> i know you knew, but whartung doesn't
<phoe> okay
<phoe> I just wonder, if your generic function gets collected, you also need to collect its methods
<phoe> though that might be pretty obvious, we're already doing it after all
<phoe> okay, nevermind, not an interesting question after all
<whartung> that’s fine, but that doesn’t mean that the CLOS infrastruture should maintain hard references to them.
<phoe> in that case, yep, I guess so
<phoe> weaknesses would be good for garbage collection if we're dealing with such a system.
<frodef> perhaps the protocol for removal of classes is underspecified?
<Bike> how so?
ebzzry has quit [Ping timeout: 244 seconds]
<whartung> doesn’t this sort of work now since I assume the systems don’t leak memory when a generic function/method is redefined?
<phoe> frodef: the protocol is fine, it's its implications that are interesting
<phoe> whartung: it does work like that
<Bike> i think your assumption may be wrong
<phoe> a GF redefinition is basically a fmakunbound + defgeneric, UNLESS
<phoe> (defgeneric foo (bar)) (defgeneric foo (baz)) for example
<phoe> this doesn't change anything in the methods
<Bike> doesn't that just reinitialize the gf
jmercouris has quit [Remote host closed the connection]
<jasom> whartung: when a method is redefined, it still keeps the reference to the class around, so it's not really a parallel case
<phoe> it does - it doesn't touch the methods though
nowhere_man has quit [Ping timeout: 252 seconds]
terpri has quit [Quit: Leaving]
<phoe> (defgeneric foo (bar)) (defmethod foo ((bar number)) 42) (defgeneric foo (baz)) (foo 1.0) ;=> 42
<frodef> there isn't really any protocol for removing a class, is there?
<phoe> there is
<phoe> clhs find-class
<Bike> that's just unnaming it
<phoe> "if the new class given to setf is nil, the class association is removed (but the class object itself is not affected)"
<Bike> actually destroying the object doesn't have a standard protocol any more than destroying any object does
<pfdietz> method qualifiers should be weak references to their classes (or to objects, if EQL method qualifiers).
pjb has quit [Ping timeout: 252 seconds]
<Bike> what is the class of a qualifier
<Bike> ?
<phoe> Bike: EQL-qualifier?
<Bike> yeah what is that
<Bike> there's eql specializers
<Bike> qualifiers are something else
<pfdietz> Gah, mixed up terms.
<phoe> oh
<phoe> hmm
pjb has joined #lisp
terpri has joined #lisp
<phoe> qualifiers are :before :after :around nil
<phoe> with the standard method combination
<phoe> that's what (remove-duplicates (mapcar #'mop:method-qualifiers (mop:generic-function-methods #'print-object)) :test #'equal) tells me
pierpal has joined #lisp
<|3b|> oh yeah, and the refs in the class hierarchy
<Bike> qualifiers are basically arbitraryobjects.
<phoe> pfdietz: specializers you mean?
<Bike> not that hardly anybody uses anything other than keywords.
<|3b|> mop class-direct-subclasses
<phoe> actually
<|3b|> user defined types
<phoe> if I defclass FOO, BAR as subclass of FOO, BAZ as subclass of BAR
<phoe> and then remove FOO
<Bike> how do you remove FOO?
<phoe> then BAR and BAZ are still valid
<phoe> uh, (setf (find-class 'foo) nil)
<phoe> I can't do much more
<Bike> unname it, then
<phoe> it just removes the association
<phoe> yep
<phoe> and the rest of the class tower is not touched
<Bike> it's still live as a superclass, assuming BAZ or BAR are alive.
<phoe> ayup.
<phoe> .....it's time for me to sleep
<phoe> I am sitting here at midnight discussing CLOS internals
<Bike> but i guess there's probably no reason to keep subclasses alive.
<whartung> nn phoe
<phoe> Bike: subclasses?
<phoe> as long as they're named, they are reachable
<phoe> and as long as they're unnamed, then we're already doing it in our garbage collection algorithms
<frodef> so... underspecified? :)
<Bike> yes obviously. i meant that the subclass links shouldn't be strong
<phoe> frodef: not really
<phoe> note that we aren't talking about ANSI CL here
<Bike> because as 3b mentioned, classes link to their subclasses
<phoe> we're talking about implementation details
<phoe> we're talking about the cross-section of a CLOS implementation and a garbage collection algorithm
<phoe> this is as implementation-defined as you can get without growing grey hairs
<phoe> so it's not about the protocol that is the ANSI CL standard
<frodef> really? isn't the issue something like "how can you completely remove a class?"
* |3b| is talking about ansi CL + mop
<Bike> no.
<phoe> frodef: what do you mean, completely remove a class?
<Bike> there's no need to manually destroy a class any more than there is to manually destroy any object.
<|3b|> lots of the same problems that make automatic tree shaking hard :)
<phoe> the answer is simple, (setf (find-class name) nil) and clear all references to it
<phoe> just like with anything else
<phoe> a hash-table, a symbol, a pprint dispatch table
<frodef> ..a method :)
<phoe> yep
<|3b|> yeah, if you can find all the refs, removing a class, symbol, package works same as anything else
<phoe> as long as you have at least one reference though, it'll stay alive
<|3b|> just that for those, there are a lot, many of which are cyclic (but linked to other things so the whole cycle can't be collected), and some are hidden (like internal caches in GF dispatch or whatever)
<phoe> and if you dare to have a reference to that class on a method on an anonymous generic function lingering in a closure inside some random instance somewhere inside a separate thread, then good luck finding that
<|3b|> and that's before conservative GC, or some random half-dead loop variable somewhere up the stack happens to hit one
<makomo> wow, i didn't know Lucid Inc. were the creators of XEmacs
<makomo> huh
<phoe> but hey, that's already the beauty of having memory leaks
* phoe drops asleep
<makomo> and they were also the creators of a Lisp system that is today LispWorks
orivej has joined #lisp
<frodef> makomo: wasn't it first called lemacs, I seem to remember..
<makomo> i have no idea
<makomo> also, Jamie Zawinski who worked on early Netscape Navigator releases and thought of the name Mozilla, used to work for Lucid, Inc.
<makomo> amazing how connected all of this stuff is :-D
<whartung> no, it’s amazing how small the community is.
<makomo> true
<makomo> of course, "Zawinski first attained prominence as a Lisp programmer"
Bike has quit [Ping timeout: 252 seconds]
jasmith has joined #lisp
ebrasca has joined #lisp
nowhere_man has joined #lisp
ebrasca has quit [Remote host closed the connection]
ebrasca has joined #lisp
phadthai has quit [Quit: brb]
varjag has quit [Quit: ERC (IRC client for Emacs 26.1)]
phadthai has joined #lisp
nonlinear has joined #lisp
orivej has quit [Ping timeout: 240 seconds]
<_death> the cmu-ai archive contains jwz lisp hacks ;)
Fare has joined #lisp
lemonpepper24 has joined #lisp
robotoad has quit [Quit: robotoad]
longshi has quit [Ping timeout: 272 seconds]
meepdeew has joined #lisp
equwal has quit [Ping timeout: 246 seconds]
Kaisyu has joined #lisp
ealfonso has joined #lisp
mange has joined #lisp
anewuser has joined #lisp
Bike has joined #lisp
asarch has quit [Quit: Leaving]
orivej has joined #lisp
Oladon has joined #lisp
robotoad has joined #lisp
bradcomp has quit [Ping timeout: 244 seconds]
esrse has joined #lisp
dale has quit [Quit: dale]
hitchhikingcoder has quit [Remote host closed the connection]