2019-08-30T10:25:29Z ccl-logbot joined #lisp 2019-08-30T10:25:30Z 2019-08-30T10:25:30Z names: ccl-logbot sukaeto X-Scale manualcrank baskethammer dyelar funnel Patzy ecraven sindan cmatei sammich Tordek_ shenghi minion cods datajerk wooden hiredman eschulte igemnace frgo oni-on-ion Lord_of_Life orivej random-nick emma m00natic SaganMan vhost- yoeljacobsen Nistur khisanth_ scymtym lmln red-dot varjag JohnMS_WORK abhixec ggole vlatkoB gravicappa froggey zaquest libertyprime semz fengshaun techquila shifty wigust kajo permagreen _jrjsmrtn Posterdati 2019-08-30T10:25:30Z names: jonatack gigetoo creat sciamano dtw katco keep-learning[m] buffergn0me hiq[m] moldybits jprajzne mulk vaporatorius slyrus_ loke verisimilitude zigpaw pillton davr0s davr0s__ nckx simplegauss sveit lemoinem shka_ bexx zotan whartung angavrilov equwalp ravndal stux|RC-only beach wilfredh hvxgr myrkraverk ebzzry Krystof CrazyEddy edgar-rft xantoz lavaflow sauvin thonkpod Petit_Dejeuner pjb PuercoPop akanouras teej iarebatman Jesin alca iskander Colleen 2019-08-30T10:25:30Z names: mathrick superkumasan malaclyps[m] Kaisyu niceplace cantstanya galdor drmeister bjorkintosh Xizor bmansurov mbrumlow sigjuice payphone t3hyoshi q-u-a-n2 aindilis sabrac noobineer1 paul0 tomaw dkrm jxy guna scal Mandus pent xristos _whitelogger gjvc |3b| danielvu Demosthenex kbtr C-Keen tfb Grauwolf emacsomancer stux|RC nonlinear[m] beaky Godel[m] liambrown Jachy djeis[m] eriix[m] DataLinkDroid LdBeth bkhl munksgaard[m] no-defun-allowed dru1d uplime voidlily 2019-08-30T10:25:30Z names: ski APic Fade sbryant Kabriel jcob SlashLife leo_song White_Flame malm ramus borodust Bahman jurov hdasch azrazalea glamas MetaYan aeth jasom vsync dmiles kqr d4ryus sepi` thesorton alandipert specbot cyraxjoe easye CommanderViral1 Ziemas SumoSud0 copec Intensity michalisko Remavas isoraqathedh jdz flip214 housel cyberlard samebchase surrounder AdmiralBumbleBee sshirokov troydm curiouscain joast ft mood beirc bkst dlowe fiddlerwoaroof cnomad mhinz johs 2019-08-30T10:25:30Z names: mrSpec drdo zymurgy dim zcid rotty femi micro bhyde spal gabot Xach Kaisyu7 TMA oldtopman zagura fitzsim lukego markasoftware jerme_ greaser|q gendl Ober ark swflint selwyn_ rme koenig tazjin XachX asedeno_ postit_ chewbranca CEnnis91 phadthai jackhill itruslove spacedbat jhei physpi Kevslinger p_l gjnoonan boeg zbrown antoszka add^_ otwieracz lispyone knobo1 eooq_ Duns_Scrotus grumble bytesighs tehidiot jsatk Grue`` @fe[nl]ix Blkt DrDuck lonjil banjiewen 2019-08-30T10:25:30Z names: interruptinuse fowlduck kilimanjaro rvirding capadoodle billstclair cpt_nemo j-r jlpeters splittist l1x astronavt stylewarning mgsk ioa abbe lieven trn flazh sellout- _death rumpelszn mrcode_ nydel Mon_Ouie grobe0ba eschatologist theBlackDragon z0d cpape eMBee 2019-08-30T10:25:30Z vt240 joined #lisp 2019-08-30T10:25:55Z nanoz joined #lisp 2019-08-30T10:26:04Z Aritheanie joined #lisp 2019-08-30T10:26:50Z nil joined #lisp 2019-08-30T10:27:09Z NickBusey joined #lisp 2019-08-30T10:27:24Z luis` joined #lisp 2019-08-30T10:27:35Z asdf_asdf_asdf joined #lisp 2019-08-30T10:27:35Z jgkamat joined #lisp 2019-08-30T10:27:37Z Lord_Nightmare joined #lisp 2019-08-30T10:27:41Z justinmcp joined #lisp 2019-08-30T10:28:42Z stepnem joined #lisp 2019-08-30T10:29:01Z eagleflo joined #lisp 2019-08-30T10:29:06Z threefjord joined #lisp 2019-08-30T10:29:13Z JohnMS joined #lisp 2019-08-30T10:29:23Z ck_ joined #lisp 2019-08-30T10:29:29Z nullman joined #lisp 2019-08-30T10:29:31Z ChibaPet joined #lisp 2019-08-30T10:29:31Z Adamclisi joined #lisp 2019-08-30T10:29:34Z jackdaniel joined #lisp 2019-08-30T10:29:42Z cross joined #lisp 2019-08-30T10:29:45Z elderK joined #lisp 2019-08-30T10:29:48Z hjudt joined #lisp 2019-08-30T10:29:51Z a7f4 joined #lisp 2019-08-30T10:29:58Z remexre joined #lisp 2019-08-30T10:30:50Z xkapastel joined #lisp 2019-08-30T10:31:15Z Finnfinn joined #lisp 2019-08-30T10:31:45Z q3d joined #lisp 2019-08-30T10:32:08Z JohnMS_WORK quit (Ping timeout: 245 seconds) 2019-08-30T10:32:54Z dvdmuckle joined #lisp 2019-08-30T10:33:54Z kini joined #lisp 2019-08-30T10:37:41Z Ekho joined #lisp 2019-08-30T10:37:54Z pjb: stylewarning: nope. The answer I give to newbies is pgl! 2019-08-30T10:38:04Z pjb: https://www.cliki.net/pgl 2019-08-30T10:39:35Z Patzy quit (Quit: WeeChat 2.5) 2019-08-30T10:39:51Z Patzy joined #lisp 2019-08-30T10:40:06Z Nikotiini joined #lisp 2019-08-30T10:41:07Z mfiano joined #lisp 2019-08-30T10:41:28Z fouric joined #lisp 2019-08-30T10:41:41Z yoeljacobsen quit (Ping timeout: 245 seconds) 2019-08-30T10:42:30Z saturn2 joined #lisp 2019-08-30T10:44:11Z pjb: DrDuck: you didn't read: http://www.nhplace.com/kent/Papers/Technical-Issues.html as I told you previously… 2019-08-30T10:44:34Z pjb: (this is the reason why (symbol-value 'your-function) signals an error). 2019-08-30T10:44:43Z amerlyq joined #lisp 2019-08-30T10:49:39Z loke: Apparently the * variable in Lisp came from Macsyma: 2019-08-30T10:49:40Z loke: http://www.softwarepreservation.net/projects/LISP/MIT/White-Program_Is_Data-1977-From_MACSYMA77.pdf 2019-08-30T10:49:54Z loke: “Inspired by MACSYMA's history variables, MACLISP adopted the convention in early 197 1 that the variable "*" would hold the most recent quantity obtained at top level” 2019-08-30T10:50:38Z pjb: Who invented ** and *** then? 2019-08-30T10:54:15Z noobineer2 joined #lisp 2019-08-30T10:55:48Z ecraven: aren't they kind of obvious (at least in hindsight) 2019-08-30T10:56:53Z q3d quit (Remote host closed the connection) 2019-08-30T10:57:39Z pjb: But they could be invented by the authors of Macsyma, MacLisp or CL, or somebody else? 2019-08-30T10:58:43Z noobineer1 quit (Ping timeout: 276 seconds) 2019-08-30T10:59:41Z Ricchi joined #lisp 2019-08-30T11:00:08Z makomo joined #lisp 2019-08-30T11:00:34Z aautcsh joined #lisp 2019-08-30T11:02:28Z yoeljacobsen joined #lisp 2019-08-30T11:11:53Z lalitmee joined #lisp 2019-08-30T11:13:47Z Kundry_Wag joined #lisp 2019-08-30T11:15:35Z luis` is now known as luis 2019-08-30T11:16:45Z aautcsh quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-30T11:18:19Z Kundry_Wag quit (Ping timeout: 258 seconds) 2019-08-30T11:31:43Z jonatack quit (Quit: jonatack) 2019-08-30T11:35:41Z elimik31 joined #lisp 2019-08-30T11:36:44Z lalitmee quit (Ping timeout: 245 seconds) 2019-08-30T11:38:12Z aautcsh joined #lisp 2019-08-30T11:38:28Z oni-on-ion quit (Ping timeout: 264 seconds) 2019-08-30T11:40:57Z asdf_asdf_asdf quit (Quit: asdf_asdf_asdf) 2019-08-30T11:45:42Z lalitmee joined #lisp 2019-08-30T11:49:25Z nil left #lisp 2019-08-30T11:54:42Z aautcsh quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-30T11:57:39Z _death: stylewarning: I recently shared a few videos that show another approach to GUI 2019-08-30T12:01:52Z jprajzne quit (Quit: jprajzne) 2019-08-30T12:02:50Z mindCrime_ joined #lisp 2019-08-30T12:04:24Z red-dot quit (Quit: Going offline, see ya! (www.adiirc.com)) 2019-08-30T12:04:43Z SaganMan quit (Ping timeout: 258 seconds) 2019-08-30T12:05:10Z beach: _death: Where did you do that? 2019-08-30T12:07:30Z _death: here.. https://adeht.org/dump/vid-2019-08-14T1836.mkv https://adeht.org/dump/vid-2019-08-26T0035.mkv 2019-08-30T12:11:35Z beach: Thanks. 2019-08-30T12:12:43Z beach: Either I am missing something, or I am not thinking clearly. Did you describe this approach somewhere? I mean, I can see stuff happening in those videos, but I don't know what it is that I am seeing and what is "another approach" about it. 2019-08-30T12:14:07Z |3b|: _death: that's using 'dear imgui' through ffi? 2019-08-30T12:14:42Z _death: it's work in progress, but basically I embedded ecl into a C++ program that uses imgui and started to write bindings.. I can edit things live with emacs, using slime for communication 2019-08-30T12:14:48Z red-dot joined #lisp 2019-08-30T12:16:34Z lalitmee quit (Quit: Leaving) 2019-08-30T12:16:57Z lalitmee joined #lisp 2019-08-30T12:18:05Z lalitmee quit (Remote host closed the connection) 2019-08-30T12:18:24Z _death: since I use an opengl/glfw backend for imgui, I can also use the corresponding CL libraries (just have to run such code in the GUI thread) 2019-08-30T12:18:27Z lalitmee joined #lisp 2019-08-30T12:21:01Z _death: I added a rudimentary lisp error window yesterday, and there is a restart to end the "current tick", but a debugger interface would require more effort 2019-08-30T12:24:07Z Insanity_ joined #lisp 2019-08-30T12:24:56Z |3b|: there is also https://github.com/awolven/cimgui used by https://github.com/awolven/VkTk for imgui through cffi 2019-08-30T12:25:42Z |3b| is starting work on a CL implementation of immediate mode gui idea, mostly aimed at gles/gl/vk (though possibly will also try to make it work on framebuffer at some point) 2019-08-30T12:26:22Z |3b|: (on framebuffers without gles that is... one of the things i want it for in near term is linux fb with gles) 2019-08-30T12:28:12Z Kundry_Wag joined #lisp 2019-08-30T12:30:07Z |3b| will probably take a while to catch up to 'dear imgui' though, it has lots of nice features :/ 2019-08-30T12:30:20Z _death: 3b: cool, wasn't aware of these projects.. but the approach is quite different 2019-08-30T12:32:15Z |3b|: yeah, we CL people like our subtly different libs :) 2019-08-30T12:33:46Z _death: with this approach it's also easy to integrate with other C++ libraries.. a pro (that's also a con) is that you don't need complete bindings, just add things incrementally, and that it's easy to avoid twisting your lisp code to fit the C++ API.. 2019-08-30T12:34:11Z |3b|: there is also https://github.com/Shirakumo/alloy for a non-immediate-mode gui lib, https://github.com/borodust/bodge-nuklear with ffi to different im gui lib, etc 2019-08-30T12:34:22Z |3b|: yeah 2019-08-30T12:35:40Z thijso joined #lisp 2019-08-30T12:37:36Z _death: I was aware of the nuklear one.. seems both take a CLOS approach, sometimes mirroring the underlying library.. my approach is ad hoc balancing of Lispy code and imgui API ;) 2019-08-30T12:38:47Z _death: also I want to avoid depending on opengl and such in ordinary gui code 2019-08-30T12:39:32Z |3b|: yeah, i'll probably do same thing as imgui and nuklear and just generate a command list, with utilities to make it easy to dump that to GL or whatever 2019-08-30T12:41:22Z v0|d joined #lisp 2019-08-30T12:41:57Z Bike joined #lisp 2019-08-30T12:42:54Z _death: one issue is that imgui is not very forgiving and would crash with asserts if, say, you didn't pop what you pushed.. I bet there's a way to give your own handler, but still.. in the meantime it's best to use with- macros for paired actions 2019-08-30T12:43:48Z |3b|: c/c++ libs that like to assert are annoying :/ 2019-08-30T12:44:35Z amerlyq: simply befriend gdb :) 2019-08-30T12:45:04Z amerlyq: I find long lisp backtraces no less annoying, matter of habit 2019-08-30T12:45:14Z |3b|: seems like you'd have to get pretty friendly to convince the lib to keep running after a failed assert 2019-08-30T12:45:41Z amerlyq: yep, different development cycle, altogether 2019-08-30T12:45:42Z |3b|: backtraces might be annoying, but being able to fix it and try again is very nice 2019-08-30T12:45:47Z frgo_ joined #lisp 2019-08-30T12:46:18Z _death: yep, let me record a video showing the rudimentary error reporting :) 2019-08-30T12:46:27Z |3b|: particularly when i'm doing 5 things at once in that image, having 1 of them kill the others for no good reason is not fun :/ 2019-08-30T12:49:10Z frgo quit (Ping timeout: 246 seconds) 2019-08-30T12:50:01Z _death: https://adeht.org/dump/vid-2019-08-30T1545.mp4 2019-08-30T12:51:21Z |3b|: cool 2019-08-30T12:52:09Z frgo_ quit (Ping timeout: 244 seconds) 2019-08-30T12:55:18Z Ricchi quit (Remote host closed the connection) 2019-08-30T12:56:09Z varjag quit (Quit: ERC (IRC client for Emacs 25.2.2)) 2019-08-30T13:01:26Z nwoob joined #lisp 2019-08-30T13:01:56Z ChibaPet is now known as mason 2019-08-30T13:03:17Z lalitmee quit (Remote host closed the connection) 2019-08-30T13:03:19Z thijso quit (Read error: Connection reset by peer) 2019-08-30T13:03:53Z LiamH joined #lisp 2019-08-30T13:05:40Z _death: I thought about having an editor window with the lisp source inside imgui.. and with a real inspector, it would be closer to a smalltalk-like environment.. but maybe it's a phantom, because using emacs to develop is just so convenient ;) 2019-08-30T13:06:52Z thijso joined #lisp 2019-08-30T13:07:01Z |3b|: yeah, just run emacs in a terminal and display that in your window :) 2019-08-30T13:07:17Z |3b| has done that before, unfortunately doesn't work on windows so had to abandon it :( 2019-08-30T13:07:52Z _death: but it's definitely useful, and a repl window that can easily show charts, animations, etc. would be great.. in the same way that jupyter is :) 2019-08-30T13:08:00Z |3b|: (windows emacs uses windows console instead of vt-whatever style, so only 1 per process, and slow/ugly even for that 1) 2019-08-30T13:08:39Z _death: heh, didn't think of that.. I thought to look for a code editor module for imgui 2019-08-30T13:08:57Z |3b| will try some of the lisp-based editors at some point, though mixing editors is messy 2019-08-30T13:09:07Z Shinmera joined #lisp 2019-08-30T13:09:42Z Shinmera: _death: Might want to check out Dissect if you want to include backtraces in your error dialog. 2019-08-30T13:10:10Z _death: Shinmera: thanks, that will be helpful in writing a debugger 2019-08-30T13:10:55Z |3b|: https://www.youtube.com/watch?v=nbY-meOL57I was using embedded xterms and grabbing contents as a texture, made https://github.com/3b/3bst/ to try to improve on that but ran into the windows console problems and got stuck :/ 2019-08-30T13:12:00Z _death: looks awesome ;) 2019-08-30T13:12:28Z |3b| considers running emacs on a remote linux box connected to slime on windows box, just so i can have multiple terminal connections to it, but that seems a bit too ugly :p 2019-08-30T13:13:05Z _death: what about writing a console driver for emacs? 2019-08-30T13:13:12Z |3b|: hmm, i need to catch up on pull requests one of these days :/ 2019-08-30T13:13:35Z |3b|: yeah, other option is to learn elisp well enough to just grab window data directly and send it over a socket 2019-08-30T13:14:00Z |3b| doesn't consider learning emacs internals well enough to hack the C part a valid option 2019-08-30T13:14:16Z |3b|: probably wouldn't be able to get it upstream even if i did manage to hack that 2019-08-30T13:15:44Z _death: what's that chart on the top left 2019-08-30T13:16:13Z |3b|: of the youtube vid? fps and frame time i think 2019-08-30T13:16:19Z _death: ah :) 2019-08-30T13:16:48Z |3b|: possibly also draw time 2019-08-30T13:17:27Z _death: I ask because I also started on another imgui-related project that begins by capturing pulseaudio output and plotting charts 2019-08-30T13:18:38Z |3b|: that graph is just immediate-mode GL lines i think, so nothing particularly interesting 2019-08-30T13:19:27Z _death: ok.. imgui has a PlotLines function so easy as well.. https://adeht.org/dump/vid-2019-08-19T0517.mkv 2019-08-30T13:20:02Z |3b|: yeah, definitely something i want in my im ui lib 2019-08-30T13:22:12Z Inline joined #lisp 2019-08-30T13:23:21Z asdf_asdf_asdf joined #lisp 2019-08-30T13:24:41Z thijso quit (Read error: No route to host) 2019-08-30T13:25:21Z thijso joined #lisp 2019-08-30T13:27:07Z frgo joined #lisp 2019-08-30T13:30:32Z FreeBirdLjj joined #lisp 2019-08-30T13:32:02Z EvW1 joined #lisp 2019-08-30T13:32:05Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T13:32:33Z nwoob quit (Ping timeout: 245 seconds) 2019-08-30T13:34:05Z Necktwi joined #lisp 2019-08-30T13:35:02Z FreeBirdLjj quit (Ping timeout: 244 seconds) 2019-08-30T13:35:07Z knicklux joined #lisp 2019-08-30T13:36:43Z lavaflow quit (Ping timeout: 258 seconds) 2019-08-30T13:37:09Z DrDuck: when i'm defining something in slime, and try to go to a new line, it just evaluates while i'm using paredit 2019-08-30T13:37:14Z DrDuck: how can i get around this? 2019-08-30T13:37:21Z _death: 3b: there was this emacs package that allowed you to "view" emacs contents in a browser, live 2019-08-30T13:37:59Z lavaflow joined #lisp 2019-08-30T13:37:59Z |3b|: _death: sounds like a useful starting point, will have to look into that when i get a bit further in current stuff 2019-08-30T13:38:45Z jonatack joined #lisp 2019-08-30T13:42:44Z q9929t joined #lisp 2019-08-30T13:43:26Z orivej quit (Ping timeout: 268 seconds) 2019-08-30T13:44:32Z beach: DrDuck: It is better to work with a source file in parallel, and to make your permanent definitions there. Then you can use C-c C-c to have the top-level form evaluated in your Common Lisp system. The REPL is best used for testing small stuff. 2019-08-30T13:45:11Z beach: DrDuck: But yeah, I can see how paredit interacts in funny ways with the REPL. 2019-08-30T13:45:29Z DrDuck: i found a workaround for now i think 2019-08-30T13:45:30Z DrDuck: https://www.emacswiki.org/emacs/ParEdit#toc4 2019-08-30T13:45:37Z |3b|: i think you can use C-j 2019-08-30T13:46:33Z |3b| just doesn't use paredit in repl (and doesn't use repl that much to start with, mostly type random forms into source and evaluate there with C-c C-c, C-M-x, C-x C-e, etc 2019-08-30T13:47:05Z DrDuck: i wanna use the repl while i speed read "on lisp" today 2019-08-30T13:47:25Z DrDuck: they got some continuations stuff in there i wanna understand 2019-08-30T13:48:03Z Bike: graham's book? that has continuations? 2019-08-30T13:48:04Z _death: DrDuck: I think he also defines the amb operator there 2019-08-30T13:48:39Z Bike: does cps conversion. right. 2019-08-30T13:48:44Z _death: Bike: yeah, for the prolog part iirc 2019-08-30T13:49:39Z Bike: and nondeterminism two chapters later 2019-08-30T13:51:11Z DrDuck: yeah and no exercises so i wont feel guilty 2019-08-30T13:51:18Z Bike: guilty? 2019-08-30T13:51:36Z DrDuck: idk if it's amb but there's significant continuation stuff compared to other options, i guess 2019-08-30T13:51:41Z DrDuck: yeah for not doing them lol 2019-08-30T13:51:54Z Bike: the point of exercises isn't to punish you, it's to get you experience 2019-08-30T13:52:09Z Bike: and nondeterminism is pretty much amb 2019-08-30T13:52:16Z Bike: he calls it choose, though 2019-08-30T13:52:41Z Bike: did you try screamer? 2019-08-30T13:52:52Z moldybits` joined #lisp 2019-08-30T13:53:07Z DrDuck: no i just can't see how screamer could be something that i can use related to this paper 2019-08-30T13:53:34Z Bike: it's a library that does amb. 2019-08-30T13:54:07Z DrDuck: why doesn't it have the phrase 'amb' in it anywhere. confuses me so much 2019-08-30T13:54:09Z DrDuck: gonna download it now 2019-08-30T13:54:16Z DrDuck: but i'm still gonna speedread graham too 2019-08-30T13:54:26Z Bike: because sometimes, people call the same thing by distinct names. 2019-08-30T13:54:30Z Bike: fucked up but true! 2019-08-30T13:54:31Z madand joined #lisp 2019-08-30T13:54:54Z Bike: seriously, did you just look for "amb", not find it, and go "oh this obviously completely different"? 2019-08-30T13:55:07Z q9929t quit (Quit: q9929t) 2019-08-30T13:55:10Z _death: (one-value (let ((x (a-member-of '(a b c)))) (unless (evenp (char-code (char (symbol-name x) 0))) (fail)) x)) 2019-08-30T13:55:30Z moldybits quit (Ping timeout: 258 seconds) 2019-08-30T13:56:21Z lucasb joined #lisp 2019-08-30T13:57:12Z DrDuck: Bike: yes pretty much. the entirety of the project for the phrase and the entirety of the documentation for it as well 2019-08-30T13:57:20Z DrDuck: https://quickref.common-lisp.net/screamer.html 2019-08-30T13:57:23Z DrDuck: lazy on my part 2019-08-30T13:57:24Z thijso quit (Read error: Connection reset by peer) 2019-08-30T13:57:27Z Bike: yes it was. 2019-08-30T13:57:42Z JohnMS quit (Read error: Connection reset by peer) 2019-08-30T13:57:52Z Bike: On Lisp defines amb too, but calls it choose, so it would also be useless to you by this standard. 2019-08-30T13:59:07Z thijso joined #lisp 2019-08-30T14:02:19Z awolven joined #lisp 2019-08-30T14:03:44Z Kundry_Wag joined #lisp 2019-08-30T14:07:00Z learning joined #lisp 2019-08-30T14:07:40Z moldybits` is now known as moldybits 2019-08-30T14:08:21Z Kundry_Wag quit (Ping timeout: 245 seconds) 2019-08-30T14:08:39Z DrDuck: partly true yes 2019-08-30T14:09:21Z Bike: well, it's good that you're reading. hopefully you'll get an understanding of what amb is so you won't be inclined to use such a crude idea 2019-08-30T14:10:42Z DrDuck: it's required, so it will be used 2019-08-30T14:12:30Z Kundry_Wag joined #lisp 2019-08-30T14:12:40Z Bike: what's required? the name "amb"? 2019-08-30T14:12:52Z Bike: cos no. 2019-08-30T14:12:58Z DrDuck: oh no haha just the functionality xD 2019-08-30T14:13:55Z kamog joined #lisp 2019-08-30T14:14:50Z aautcsh joined #lisp 2019-08-30T14:16:37Z astronavt quit (Remote host closed the connection) 2019-08-30T14:16:54Z astronavt joined #lisp 2019-08-30T14:19:03Z gareppa joined #lisp 2019-08-30T14:19:30Z karlosz joined #lisp 2019-08-30T14:20:25Z elderK quit (Quit: WeeChat 1.9) 2019-08-30T14:21:59Z karswell joined #lisp 2019-08-30T14:25:52Z scymtym quit (Ping timeout: 264 seconds) 2019-08-30T14:30:20Z monokrom joined #lisp 2019-08-30T14:30:46Z eschulte quit (Quit: leaving) 2019-08-30T14:32:21Z akoana joined #lisp 2019-08-30T14:34:08Z karlosz quit (Quit: karlosz) 2019-08-30T14:39:38Z smazga joined #lisp 2019-08-30T14:44:00Z Necktwi quit (Quit: leaving) 2019-08-30T14:44:38Z yoeljacobsen quit (Ping timeout: 245 seconds) 2019-08-30T14:45:03Z thijso quit (Ping timeout: 245 seconds) 2019-08-30T14:45:38Z elimik31 quit (Read error: Connection reset by peer) 2019-08-30T14:46:24Z Necktwi joined #lisp 2019-08-30T14:46:42Z elimik31 joined #lisp 2019-08-30T14:51:39Z karlosz joined #lisp 2019-08-30T14:52:04Z yoeljacobsen joined #lisp 2019-08-30T14:53:04Z varjag joined #lisp 2019-08-30T14:54:51Z karlosz quit (Client Quit) 2019-08-30T14:58:53Z asdf_asdf_asdf quit (Remote host closed the connection) 2019-08-30T15:03:46Z yoeljacobsen quit (Ping timeout: 245 seconds) 2019-08-30T15:05:34Z chipolux joined #lisp 2019-08-30T15:11:19Z orivej joined #lisp 2019-08-30T15:13:16Z EvW1 quit (Ping timeout: 264 seconds) 2019-08-30T15:13:29Z dddddd joined #lisp 2019-08-30T15:17:07Z xrash joined #lisp 2019-08-30T15:17:55Z EvW joined #lisp 2019-08-30T15:18:11Z Necktwi quit (Quit: leaving) 2019-08-30T15:18:39Z Necktwi joined #lisp 2019-08-30T15:19:09Z karstensrage joined #lisp 2019-08-30T15:24:16Z xrash quit (Read error: Connection reset by peer) 2019-08-30T15:39:02Z awolven quit (Ping timeout: 244 seconds) 2019-08-30T15:45:01Z mindCrime_ quit (Ping timeout: 245 seconds) 2019-08-30T15:45:51Z mindCrime_ joined #lisp 2019-08-30T15:51:17Z learning quit (Remote host closed the connection) 2019-08-30T15:52:49Z learning joined #lisp 2019-08-30T15:54:15Z Oladon_work joined #lisp 2019-08-30T15:55:10Z reyman joined #lisp 2019-08-30T15:58:10Z papachan joined #lisp 2019-08-30T15:59:21Z papachan: Question: do i have to use progn as body inside a (let ...) sentence if i have many executions? 2019-08-30T15:59:30Z Kundry_Wag quit (Read error: Connection reset by peer) 2019-08-30T16:00:21Z Bike: let has an implicit progn. 2019-08-30T16:00:48Z Bike: so no, if i understand your question correctly 2019-08-30T16:01:05Z m00natic quit (Remote host closed the connection) 2019-08-30T16:04:42Z awolven joined #lisp 2019-08-30T16:05:31Z EvW quit (Ping timeout: 276 seconds) 2019-08-30T16:10:38Z beach: papachan: And what you call a "sentence" is known as a "form" in Common Lisp. 2019-08-30T16:10:59Z beach: clhs let 2019-08-30T16:10:59Z specbot: http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm 2019-08-30T16:11:10Z beach: papachan: Look at that page. 2019-08-30T16:11:39Z beach: papachan: See the form*? 2019-08-30T16:11:44Z beach: That means 0 or more forms. 2019-08-30T16:13:42Z stylewarning: _death: thanks for sharing the videos 2019-08-30T16:15:39Z learning quit (Remote host closed the connection) 2019-08-30T16:15:45Z thijso joined #lisp 2019-08-30T16:16:06Z Kundry_Wag joined #lisp 2019-08-30T16:20:34Z Kundry_Wag quit (Ping timeout: 246 seconds) 2019-08-30T16:23:51Z red-dot quit (Quit: Going offline, see ya! (www.adiirc.com)) 2019-08-30T16:24:28Z frodef joined #lisp 2019-08-30T16:30:06Z gareppa quit (Quit: Leaving) 2019-08-30T16:31:15Z learning joined #lisp 2019-08-30T16:33:03Z red-dot joined #lisp 2019-08-30T16:36:19Z thijso quit (Ping timeout: 246 seconds) 2019-08-30T16:36:44Z ebrasca joined #lisp 2019-08-30T16:45:21Z krid joined #lisp 2019-08-30T16:45:28Z orivej quit (Ping timeout: 245 seconds) 2019-08-30T16:48:03Z thijso joined #lisp 2019-08-30T16:53:39Z cosimone joined #lisp 2019-08-30T16:54:28Z thijso quit (Ping timeout: 244 seconds) 2019-08-30T16:55:36Z papachan: Bike, beach thanks 2019-08-30T17:00:51Z thijso joined #lisp 2019-08-30T17:02:10Z papachan quit (Quit: Saliendo) 2019-08-30T17:12:36Z thijso quit (Read error: No route to host) 2019-08-30T17:12:55Z Kundry_Wag joined #lisp 2019-08-30T17:13:16Z reyman_ joined #lisp 2019-08-30T17:13:47Z Jeanne-Kamikaze joined #lisp 2019-08-30T17:15:53Z reyman quit (Ping timeout: 245 seconds) 2019-08-30T17:17:12Z Kundry_Wag quit (Ping timeout: 244 seconds) 2019-08-30T17:20:11Z liberiga joined #lisp 2019-08-30T17:20:19Z thijso joined #lisp 2019-08-30T17:20:28Z reyman_ quit (Ping timeout: 245 seconds) 2019-08-30T17:21:07Z awolven quit (Ping timeout: 268 seconds) 2019-08-30T17:21:18Z orivej joined #lisp 2019-08-30T17:23:51Z reyman joined #lisp 2019-08-30T17:25:14Z Kundry_Wag joined #lisp 2019-08-30T17:30:47Z igemnace quit (Quit: WeeChat 2.5) 2019-08-30T17:32:58Z zgasma joined #lisp 2019-08-30T17:33:26Z aautcsh quit (Ping timeout: 252 seconds) 2019-08-30T17:33:27Z smazga quit (Ping timeout: 268 seconds) 2019-08-30T17:34:33Z vms14 joined #lisp 2019-08-30T17:36:04Z vms14: how can I improve this code? 2019-08-30T17:36:06Z vms14: https://paste.debian.net/plain/1098038 2019-08-30T17:36:21Z vms14: they're just 3 functions, but sure I'm doing wrong stuff yet 2019-08-30T17:36:29Z vms14: or you have a better way to do it 2019-08-30T17:37:02Z vms14: they're functions to call perl oneliners and later perl scripts 2019-08-30T17:37:43Z verisimilitude: Firstly, you'd be better off giving your array a better default size than empty. 2019-08-30T17:37:52Z Bike: do you always need to close the input and output streams to a process? 2019-08-30T17:38:14Z vms14: I guess it closes automatically, but I should 2019-08-30T17:38:37Z vms14: I'm closing the input because I had the program waiting for more input 2019-08-30T17:39:05Z Bike: it might be good to use a string output stream instead of an adjustable string, but i haven't checked 2019-08-30T17:39:05Z vms14: and closing it is like it receives end of file, because I've tried flushing and nope 2019-08-30T17:39:27Z vms14: it works, format can work with this kind of arrays 2019-08-30T17:39:42Z Bike: sure, but you asked for improvements 2019-08-30T17:39:50Z verisimilitude: My second thought is why not rewrite the Perl in Common Lisp? 2019-08-30T17:39:51Z vms14: right 2019-08-30T17:40:08Z vms14: verisimilitude: I try to mix perl and lisp 2019-08-30T17:40:14Z verisimilitude: I'm not seeing anything particularly wrong with this, sans that it only works with SBCL; this works correctly, vms14? 2019-08-30T17:40:53Z vms14: yes, the "portable" library for run programs was very slow compared with the sbcl one 2019-08-30T17:40:59Z Bike: yeah it seems okay at worst. 2019-08-30T17:41:05Z vms14: so it's not portable, unless I improve the performance 2019-08-30T17:41:05Z verisimilitude: If you're going to process the output as lines, why not collect a list of lines, instead? 2019-08-30T17:41:35Z vms14: because the only way to improve performance is daemonize perl and make some sort of socket evaluating input and giving output 2019-08-30T17:42:16Z vms14: verisimilitude: collecting will give me a list instead of only one string, not? 2019-08-30T17:42:30Z verisimilitude: It's more efficient. 2019-08-30T17:42:35Z vms14: I want the output as just one string 2019-08-30T17:42:40Z verisimilitude: You're constantly readjusting an array. 2019-08-30T17:42:58Z verisimilitude: Anyway, my fourth thought is to implement Perl in Common Lisp and then use that. 2019-08-30T17:43:01Z vms14: then I should create a stream like Bike suggested 2019-08-30T17:43:29Z |3b|: (format in "~a~%" input) seems a bit odd, do you care about values other than strings for INPUT? i'd probably write- and terpri if not, and document which others make sense if you do 2019-08-30T17:44:21Z |3b|: docstrings in general would be a good improvement too :) 2019-08-30T17:45:26Z |3b|: alexandria:read-stream-content-into-string would be simpler if you want entire output in 1 string 2019-08-30T17:45:33Z vms14: maybe have a list of lines is more interesting in some cases 2019-08-30T17:45:55Z vms14: so I could put a key parameter to choose if you want a list of lines instead of one string 2019-08-30T17:46:21Z |3b|: possibly should also wait for process to finish before exiting, seems like you have a race with it as it is 2019-08-30T17:46:35Z verisimilitude: There's nothing I love more than a program that drags in Alexandria for one convenience function. 2019-08-30T17:46:38Z |3b|: i guess if read-line blocks, maybe not 2019-08-30T17:46:39Z verisimilitude: What an inconvenience. 2019-08-30T17:47:05Z vms14: I have tried it and it's not failing, at least wasn't failing for not waiting 2019-08-30T17:47:11Z vms14: reading blocks 2019-08-30T17:47:22Z verisimilitude: You can turn the list into a string at the end, vms14. 2019-08-30T17:47:25Z |3b|: yeah, i'm probably wrong about race there 2019-08-30T17:48:24Z lmln quit (Quit: Connection closed for inactivity) 2019-08-30T17:48:31Z |3b| loves things that pull in their own random utility lib for one convenience function more than ones that pull in the utility lib i'm already using (= alexandria) :p 2019-08-30T17:48:49Z vms14: verisimilitude: right 2019-08-30T17:49:04Z vms14: then I'll add a key parameter 2019-08-30T17:49:08Z vms14: and collect lines in while 2019-08-30T17:51:45Z vms14: yeah, it's better 2019-08-30T17:51:46Z aautcsh joined #lisp 2019-08-30T17:57:53Z cosimone quit (Quit: Leaving) 2019-08-30T17:59:19Z ravenous_ joined #lisp 2019-08-30T18:01:34Z vms14 quit (Remote host closed the connection) 2019-08-30T18:10:27Z random-nick quit (Ping timeout: 268 seconds) 2019-08-30T18:13:26Z Ven`` joined #lisp 2019-08-30T18:14:52Z Ven`` quit (Client Quit) 2019-08-30T18:16:53Z kajo quit (Ping timeout: 250 seconds) 2019-08-30T18:18:24Z kajo joined #lisp 2019-08-30T18:20:56Z nanoz quit (Ping timeout: 268 seconds) 2019-08-30T18:22:13Z aautcsh quit (Read error: Connection reset by peer) 2019-08-30T18:23:54Z sauvin quit (Read error: Connection reset by peer) 2019-08-30T18:39:08Z lukego quit (Read error: Connection reset by peer) 2019-08-30T18:39:20Z lukego joined #lisp 2019-08-30T18:41:04Z scymtym joined #lisp 2019-08-30T18:45:36Z whartung quit (Ping timeout: 268 seconds) 2019-08-30T18:48:28Z DrDuck: is the difference between (lambda ..) and #'(lambda ..) that the latter is like a function pointer? 2019-08-30T18:50:16Z Bike: There's no difference in most contexts. The former macroexpands into the latter. 2019-08-30T18:50:43Z shifty quit (Ping timeout: 246 seconds) 2019-08-30T18:51:24Z Bike: Sometimes older code prefers the latter, because in pre-common-lisp languages that macro wasn't in place, I think. 2019-08-30T18:51:37Z EvW1 joined #lisp 2019-08-30T19:00:06Z ebrasca quit (Remote host closed the connection) 2019-08-30T19:00:32Z random-nick joined #lisp 2019-08-30T19:04:48Z karlosz joined #lisp 2019-08-30T19:07:57Z edgar-rft: There are hairy cases like ((lambda ..) ..) is a valid function call but ((#'lambda ..) ..) isn't, it would require (funcall #'lambda ..) ..) to work. 2019-08-30T19:12:05Z ravenous_ quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-30T19:12:26Z vms14 joined #lisp 2019-08-30T19:13:15Z edgar-rft: sorry nonsense, once again: ((lambda ..) ..) is a valid function call but (#'(lambda ..) ..) isn't, it would require (funcall #'(lambda ..) ..) to work. 2019-08-30T19:18:40Z reyman quit (Ping timeout: 252 seconds) 2019-08-30T19:23:00Z whartung joined #lisp 2019-08-30T19:25:04Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T19:25:28Z alexanderbarbosa joined #lisp 2019-08-30T19:25:30Z Kundry_Wag joined #lisp 2019-08-30T19:25:37Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T19:25:44Z Kundry_Wag joined #lisp 2019-08-30T19:27:26Z madand quit (Remote host closed the connection) 2019-08-30T19:31:11Z Bike quit (Quit: Bike) 2019-08-30T19:31:25Z Oladon_work quit (Remote host closed the connection) 2019-08-30T19:32:42Z vlatkoB quit (Remote host closed the connection) 2019-08-30T19:33:06Z karlosz quit (Quit: karlosz) 2019-08-30T19:34:56Z jackotobacco joined #lisp 2019-08-30T19:35:31Z jackotobacco: Hi, so if I (require :log4cl) at the repl, I can use log:info 2019-08-30T19:35:32Z jackotobacco: function just fine, but if I require in a file and try to 2019-08-30T19:35:32Z jackotobacco: compile the file I get 'undefined variable log:info' 2019-08-30T19:35:38Z Oladon_work joined #lisp 2019-08-30T19:35:51Z jackotobacco: whoops on the format 2019-08-30T19:37:42Z learning quit (Remote host closed the connection) 2019-08-30T19:38:02Z Ven`` joined #lisp 2019-08-30T19:40:05Z edgar-rft: jackotobacco: try this in your file and see if it goes away, replace (require :log4cl) with (eval-when (:execute :load-toplevel :compile-toplevel) (require :log4cl)) 2019-08-30T19:40:17Z learning joined #lisp 2019-08-30T19:40:30Z gravicappa quit (Ping timeout: 258 seconds) 2019-08-30T19:41:02Z cosimone joined #lisp 2019-08-30T19:43:04Z jackotobacco: edgar-rft: same result. Thanks for trying! 2019-08-30T19:43:51Z vms14 quit (Remote host closed the connection) 2019-08-30T19:44:26Z ck_: what do you mean "undefined variable", isn't log:info a function? 2019-08-30T19:45:39Z ck_: jackotobacco: what lisp imlementation are you using? 2019-08-30T19:46:32Z jackotobacco: ck_: actually you just solved it for me. So sorry, but I had a different chunk of code that said log:info outside of a sexp... 2019-08-30T19:46:53Z jackotobacco: Sorry for wasting yall's time. Total CL noob, and it is taking me a sec to get up to speed 2019-08-30T19:48:25Z ggole quit (Quit: Leaving) 2019-08-30T19:49:13Z jackotobacco quit (Remote host closed the connection) 2019-08-30T19:53:00Z Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-30T19:57:27Z amerlyq quit (Quit: amerlyq) 2019-08-30T20:03:00Z karswell quit (Remote host closed the connection) 2019-08-30T20:04:00Z karswell joined #lisp 2019-08-30T20:08:28Z thijso: wow, compiling ironclad on ECL is slooooowwww 2019-08-30T20:08:28Z wigust quit (Read error: Connection reset by peer) 2019-08-30T20:11:38Z dale_ joined #lisp 2019-08-30T20:11:47Z dale_ is now known as dale 2019-08-30T20:13:21Z seok joined #lisp 2019-08-30T20:13:27Z seok: What happens if I call defpackage twice? 2019-08-30T20:13:48Z seok: does the second one override the first? or do all imports from either defpackage get imported? 2019-08-30T20:14:44Z seok: http://clhs.lisp.se/Body/m_defpkg.htm seems to say it is undefined 2019-08-30T20:19:12Z Bike joined #lisp 2019-08-30T20:19:58Z dyelar quit (Quit: Leaving.) 2019-08-30T20:24:12Z semz: then undefined it is 2019-08-30T20:24:36Z semz: you may be lucky that your implementation defines the consequences so that code relying on it will at least work there 2019-08-30T20:25:08Z semz: but if it doesn't, relying on it gets you into pretty deep circles of hell 2019-08-30T20:25:44Z semz: iirc redefining (or only recompiling?) functions is actually undefined, but almost every implementation supports it 2019-08-30T20:26:37Z semz: so it's not like it doesn't happen, but you should probably try to rewrite the code in a standard-compliant way or consult your impl's docs 2019-08-30T20:26:49Z zgasma quit (Ping timeout: 244 seconds) 2019-08-30T20:26:53Z karswell quit (Ping timeout: 258 seconds) 2019-08-30T20:28:18Z smazga joined #lisp 2019-08-30T20:31:16Z LiamH quit (Ping timeout: 245 seconds) 2019-08-30T20:36:45Z karlosz joined #lisp 2019-08-30T20:37:09Z red-dot quit (Quit: Going offline, see ya! (www.adiirc.com)) 2019-08-30T20:37:23Z Lord_of_Life_ joined #lisp 2019-08-30T20:39:47Z hiroaki joined #lisp 2019-08-30T20:40:04Z Lord_of_Life quit (Ping timeout: 245 seconds) 2019-08-30T20:40:16Z Lord_of_Life_ is now known as Lord_of_Life 2019-08-30T20:41:52Z Bike: redefining functions is usually defined. multiple different defpackages is undefined though. 2019-08-30T20:42:43Z mindCrime_ quit (Ping timeout: 246 seconds) 2019-08-30T20:47:27Z seok: Ya seems like it, thanks guys 2019-08-30T20:49:41Z kamog quit 2019-08-30T20:53:16Z liberiga quit (Quit: Leaving) 2019-08-30T20:53:55Z chipolux_ joined #lisp 2019-08-30T20:54:07Z lmln joined #lisp 2019-08-30T20:55:49Z karlosz quit (Quit: karlosz) 2019-08-30T20:56:28Z chipolux quit (Ping timeout: 264 seconds) 2019-08-30T20:56:46Z karlosz joined #lisp 2019-08-30T20:56:49Z karlosz quit (Remote host closed the connection) 2019-08-30T21:03:39Z samlamamma joined #lisp 2019-08-30T21:04:44Z Ven`` joined #lisp 2019-08-30T21:05:42Z cl-arthur joined #lisp 2019-08-30T21:06:42Z alexanderbarbosa quit (Read error: Connection reset by peer) 2019-08-30T21:10:47Z Ven`` quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-30T21:11:33Z Ven`` joined #lisp 2019-08-30T21:11:36Z Ven`` quit (Client Quit) 2019-08-30T21:12:45Z iovec joined #lisp 2019-08-30T21:14:58Z samlamamma quit (Remote host closed the connection) 2019-08-30T21:16:41Z orivej quit (Ping timeout: 245 seconds) 2019-08-30T21:17:33Z lavaflow quit (Ping timeout: 245 seconds) 2019-08-30T21:21:58Z learning_ joined #lisp 2019-08-30T21:23:13Z learning quit (Ping timeout: 258 seconds) 2019-08-30T21:27:32Z cl-arthu1 joined #lisp 2019-08-30T21:27:49Z cl-arthur quit (Ping timeout: 258 seconds) 2019-08-30T21:31:55Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T21:32:29Z Kundry_Wag joined #lisp 2019-08-30T21:32:41Z Kundry_Wag quit (Read error: Connection reset by peer) 2019-08-30T21:32:43Z cl-arthu1 quit (Ping timeout: 268 seconds) 2019-08-30T21:32:47Z Kundry_Wag joined #lisp 2019-08-30T21:34:03Z chipolux_ quit (Quit: chipolux_) 2019-08-30T21:34:04Z cl-arthur joined #lisp 2019-08-30T21:34:19Z chipolux joined #lisp 2019-08-30T21:36:34Z cosimone quit (Remote host closed the connection) 2019-08-30T21:37:08Z cosimone joined #lisp 2019-08-30T21:39:16Z xkapastel quit (Quit: Connection closed for inactivity) 2019-08-30T21:41:23Z learning_ quit (Remote host closed the connection) 2019-08-30T21:43:21Z seok quit (Remote host closed the connection) 2019-08-30T21:43:34Z cosimone quit (Remote host closed the connection) 2019-08-30T21:43:53Z cosimone joined #lisp 2019-08-30T21:44:45Z lavaflow joined #lisp 2019-08-30T21:45:24Z cosimone_ joined #lisp 2019-08-30T21:46:10Z permagreen quit (Remote host closed the connection) 2019-08-30T21:48:21Z cosimone quit (Ping timeout: 250 seconds) 2019-08-30T21:53:17Z permagreen joined #lisp 2019-08-30T21:53:20Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T21:53:34Z Kundry_Wag joined #lisp 2019-08-30T21:54:01Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T21:54:27Z Kundry_Wag joined #lisp 2019-08-30T21:55:08Z Kundry_Wag quit (Read error: No route to host) 2019-08-30T21:55:29Z Kundry_Wag joined #lisp 2019-08-30T21:55:48Z Kundry_Wag quit (Read error: No route to host) 2019-08-30T21:55:56Z Kundry_Wag joined #lisp 2019-08-30T22:01:27Z karlosz joined #lisp 2019-08-30T22:02:30Z karlosz quit (Client Quit) 2019-08-30T22:02:47Z karlosz joined #lisp 2019-08-30T22:11:55Z jxy quit (Quit: leaving) 2019-08-30T22:12:27Z Oladon_work quit (Ping timeout: 260 seconds) 2019-08-30T22:15:07Z learning joined #lisp 2019-08-30T22:18:44Z karlosz quit (Quit: karlosz) 2019-08-30T22:19:56Z karlosz joined #lisp 2019-08-30T22:24:53Z gxt joined #lisp 2019-08-30T22:26:43Z karlosz quit (Ping timeout: 245 seconds) 2019-08-30T22:28:06Z zaquest quit (Remote host closed the connection) 2019-08-30T22:28:28Z cosimone__ joined #lisp 2019-08-30T22:29:13Z random-nick quit (Ping timeout: 245 seconds) 2019-08-30T22:30:52Z cosimone_ quit (Ping timeout: 246 seconds) 2019-08-30T22:33:32Z orivej joined #lisp 2019-08-30T22:34:46Z permagreen quit (Remote host closed the connection) 2019-08-30T22:36:15Z permagreen joined #lisp 2019-08-30T22:36:30Z varjag quit (Ping timeout: 244 seconds) 2019-08-30T22:44:41Z poet joined #lisp 2019-08-30T22:45:15Z cl-arthur: If I want to say (defclass class-name () ((some-slot ... :unique t))) and have that ensure all instances have a unique value for some-slot (by e.g. throwing an error otherwise), is that when it's time to hack together a metaclass? 2019-08-30T22:46:01Z lucasb quit (Quit: Connection closed for inactivity) 2019-08-30T22:47:08Z no-defun-allowed: I think so. I did something similar for netfarm, where we have a second external name for serialisation, but we compare between slots instead of instances. 2019-08-30T22:47:31Z no-defun-allowed: Though, you'd need to keep a finger on all instances that you're interested in and make sure that slot can't be updated. 2019-08-30T22:48:54Z libertyprime quit (Ping timeout: 244 seconds) 2019-08-30T22:56:34Z Bike: cl-arthur: adding additional slot definition initargs will require a metaclass, yes. 2019-08-30T22:58:25Z no-defun-allowed: However, if you are going to use the same slot every time (or don't mind writing similar code for different classes), you could just use one class-allocated hash-table and an :after method on initialize-instance that checks if the slot value is present in the table, then adds that object to the table. 2019-08-30T23:00:11Z Kundry_Wag quit (Remote host closed the connection) 2019-08-30T23:00:38Z Kundry_Wag joined #lisp 2019-08-30T23:00:58Z frodef quit (Ping timeout: 246 seconds) 2019-08-30T23:01:54Z Kundry_W_ joined #lisp 2019-08-30T23:01:59Z cl-arthur: Thanks for the replies: sounds like it's time to dig into the MOP. (Certainly sounds a lot more fun than writing out repetitive code :) ) 2019-08-30T23:02:10Z Kundry_Wag quit (Read error: Connection reset by peer) 2019-08-30T23:03:40Z cosimone__ quit (Ping timeout: 264 seconds) 2019-08-30T23:03:44Z akoana left #lisp 2019-08-30T23:05:35Z Kundry_W_ quit (Remote host closed the connection) 2019-08-30T23:06:02Z Kundry_Wag joined #lisp 2019-08-30T23:10:26Z Kundry_Wag quit (Ping timeout: 245 seconds) 2019-08-30T23:18:41Z chipolux quit (Quit: chipolux) 2019-08-30T23:21:35Z smazga quit (Quit: leaving) 2019-08-30T23:21:42Z iovec quit (Quit: Connection closed for inactivity) 2019-08-30T23:25:08Z cl-arthur quit (Quit: Lost terminal) 2019-08-30T23:30:48Z moldybits quit (Quit: WeeChat 2.4) 2019-08-30T23:33:10Z moldybits joined #lisp 2019-08-30T23:34:44Z Jeanne-Kamikaze quit (Remote host closed the connection) 2019-08-30T23:42:07Z abhixec quit (Ping timeout: 244 seconds) 2019-08-31T00:00:24Z Oladon joined #lisp 2019-08-31T00:02:33Z DrDuck: what's the emacs plugin that highlights the associated opening paren when you add a closing paren 2019-08-31T00:02:45Z Bike: i think it's built in. show-paren-mode 2019-08-31T00:02:46Z DrDuck: i don't want automatic parens. very confusing 2019-08-31T00:06:51Z Bike: this is independent of paredit. 2019-08-31T00:07:49Z DrDuck: yeah i dont need paredit right now 2019-08-31T00:07:54Z DrDuck: got rid of it 2019-08-31T00:08:04Z DrDuck: i like it out of the box with the highlight match 2019-08-31T00:08:49Z abhixec joined #lisp 2019-08-31T00:10:17Z DrDuck: what's everyone up to? 2019-08-31T00:12:16Z abhixec quit (Client Quit) 2019-08-31T00:16:16Z makomo quit (Ping timeout: 245 seconds) 2019-08-31T00:22:08Z learning_ joined #lisp 2019-08-31T00:23:04Z shifty joined #lisp 2019-08-31T00:24:09Z learning quit (Ping timeout: 268 seconds) 2019-08-31T00:25:04Z sjl joined #lisp 2019-08-31T00:33:44Z lmln quit (Quit: Connection closed for inactivity) 2019-08-31T00:45:38Z shifty quit (Ping timeout: 258 seconds) 2019-08-31T00:48:46Z qop joined #lisp 2019-08-31T00:50:04Z poet quit (Remote host closed the connection) 2019-08-31T00:55:00Z red-dot joined #lisp 2019-08-31T00:56:27Z EvW1 quit (Ping timeout: 264 seconds) 2019-08-31T01:14:30Z learning_ quit (Remote host closed the connection) 2019-08-31T01:19:39Z _leb joined #lisp 2019-08-31T01:41:02Z Kundry_Wag joined #lisp 2019-08-31T01:45:28Z Kundry_Wag quit (Ping timeout: 245 seconds) 2019-08-31T01:46:07Z orivej quit (Ping timeout: 244 seconds) 2019-08-31T01:51:28Z elderK joined #lisp 2019-08-31T01:59:39Z DrDuck: Is there a way to do a quick lookup of what a built-in function does, in SLIME? As in an executive summary of something you would find in the clhs, without having to actually look it up in your browser. 2019-08-31T02:02:22Z White_Flame: well, the parameter list should come up by default in the minibuffe 2019-08-31T02:02:23Z White_Flame: r 2019-08-31T02:02:28Z semz quit (Ping timeout: 264 seconds) 2019-08-31T02:02:39Z White_Flame: I don't think anybody has written up a set of shorter summaries of functions for such a purpose 2019-08-31T02:02:54Z DrDuck: okay just wondered 2019-08-31T02:03:04Z DrDuck: would be quite useful 2019-08-31T02:03:37Z White_Flame: I always reach for the CLHS when such a question comes up. At least the complete explanation is included 2019-08-31T02:03:41Z krid quit (Ping timeout: 244 seconds) 2019-08-31T02:14:18Z semz joined #lisp 2019-08-31T02:20:49Z shifty joined #lisp 2019-08-31T02:29:41Z qop quit (Quit: q) 2019-08-31T02:30:33Z Necktwi quit (Ping timeout: 244 seconds) 2019-08-31T02:41:34Z karlosz joined #lisp 2019-08-31T02:43:45Z stylewarning: DrDuck: DESCRIBE is often helpful 2019-08-31T02:44:01Z stylewarning: (describe 'foo) 2019-08-31T02:47:10Z White_Flame: yeah, that's an easy way to access the docstring, I guess 2019-08-31T02:47:29Z White_Flame: in my SBCL (which granted I haven't updated in a while), defstruct has a reasonable docstring, but defclass for instance has none 2019-08-31T02:48:45Z White_Flame: another simple way is to M-. into the implementation and see its comments (assuming that SLIME is aware of where the implementation's source code is) 2019-08-31T02:49:09Z White_Flame: although YMMV depending on the amount of indirection found 2019-08-31T02:51:12Z Oladon quit (Quit: Leaving.) 2019-08-31T02:51:38Z DrDuck: thanks! 2019-08-31T02:52:46Z karlosz quit (Quit: karlosz) 2019-08-31T03:00:35Z beach: Good morning everyone! 2019-08-31T03:01:43Z Insanity_ quit (Quit: Connection closed for inactivity) 2019-08-31T03:11:40Z pjb: DrDuck: M-x common-lisp-hyperspec RET RET 2019-08-31T03:12:18Z pjb: https://www.emacswiki.org/emacs/CommonLispHyperspec 2019-08-31T03:12:23Z pauljb joined #lisp 2019-08-31T03:14:30Z ahungry joined #lisp 2019-08-31T03:22:15Z karlosz joined #lisp 2019-08-31T03:23:07Z pauljb quit (Ping timeout: 246 seconds) 2019-08-31T03:25:17Z DrDuck: pjb: wow 2019-08-31T03:28:15Z ck_: DrDuck: that's also built into slime, I thought you knew this already. C-C C-d h 2019-08-31T03:29:49Z DrDuck: very nice 2019-08-31T03:31:32Z Bike quit (Quit: Lost terminal) 2019-08-31T03:32:27Z ck_: maybe you should go read some documentation 2019-08-31T03:34:22Z ahungry quit (Remote host closed the connection) 2019-08-31T03:40:35Z ebrasca joined #lisp 2019-08-31T03:56:23Z Oladon joined #lisp 2019-08-31T03:57:16Z Lycurgus joined #lisp 2019-08-31T04:04:38Z awolven joined #lisp 2019-08-31T04:05:52Z karlosz quit (Quit: karlosz) 2019-08-31T04:08:40Z ggole joined #lisp 2019-08-31T04:12:48Z vlatkoB joined #lisp 2019-08-31T04:19:50Z nanoz joined #lisp 2019-08-31T04:22:09Z _leb quit 2019-08-31T04:22:52Z qop joined #lisp 2019-08-31T04:32:04Z awolven quit (Ping timeout: 246 seconds) 2019-08-31T04:37:30Z gravicappa joined #lisp 2019-08-31T04:37:49Z nanoz quit (Read error: Connection timed out) 2019-08-31T04:38:27Z nanoz joined #lisp 2019-08-31T04:56:39Z ahungry joined #lisp 2019-08-31T04:58:58Z kamog joined #lisp 2019-08-31T05:05:33Z nullman quit (Ping timeout: 244 seconds) 2019-08-31T05:07:35Z nullman joined #lisp 2019-08-31T05:23:39Z red-dot quit (Quit: Going offline, see ya! (www.adiirc.com)) 2019-08-31T05:29:31Z curliesue joined #lisp 2019-08-31T05:33:34Z DrDuck: http://www.lispworks.com/documentation/HyperSpec/Body/s_the.htm 2019-08-31T05:33:45Z DrDuck: Is this CL's way of doing some static type checking? 2019-08-31T05:35:50Z Lycurgus quit (Quit: Exeunt) 2019-08-31T05:38:05Z saturn2: it might do static checking, runtime checking, or no checking, it's up to the implementation 2019-08-31T05:38:39Z nadare joined #lisp 2019-08-31T05:42:13Z jeosol joined #lisp 2019-08-31T05:45:17Z pillton quit (Ping timeout: 264 seconds) 2019-08-31T05:45:27Z curliesue quit (Remote host closed the connection) 2019-08-31T05:46:11Z dddddd quit (Remote host closed the connection) 2019-08-31T05:47:14Z sauvin joined #lisp 2019-08-31T05:50:31Z abhixec joined #lisp 2019-08-31T05:50:43Z Oladon quit (Quit: Leaving.) 2019-08-31T05:55:15Z SaganMan joined #lisp 2019-08-31T05:55:47Z White_Flame: DrDuck: often it's a way to tell the implementation _not_ to do type checking, if it believes your assertion 2019-08-31T05:58:46Z aeth: White_Flame: that's a commonly repeated assertion, but it appears to be dated in the 1990s 2019-08-31T05:59:03Z aeth: White_Flame: The only place where I've seen that happen is SBCL with (safety 0) which is why no one uses (safety 0) 2019-08-31T05:59:36Z ahungry quit (Remote host closed the connection) 2019-08-31T05:59:38Z aeth: What's far more likely is that one of two things happens: it does checking (static in addition to runtime if possible, otherwise runtime only) or nothing 2019-08-31T06:00:25Z aeth: check-type guarantees runtime (and runtime only!) checking, but with the downside that SBCL correctly determines that the value can be any type before the check-type since you can provide the correct value, meaning it doesn't really provide any optimization opportunity before that point 2019-08-31T06:01:22Z aeth: That's particularly important for CHECK-TYPE as an alternative to function declarations, not THE, though. 2019-08-31T06:03:26Z aeth: tl;dr: if you want types for performance use declarations including THE but be aware that it can rarely assume the type and doesn't have to check at all; if you want types for reliability, use CHECK-TYPE; else, use a macro that selects which one based on the implementation 2019-08-31T06:05:16Z aeth: The same thing goes for e.g. types in defstruct/defclass slots, and in fact SBCL happens to ignore them in defclass at the default optimization levels. If you want them to always show up, you have to write your own macros (for defstruct) or MOP metaclass (for defclass) 2019-08-31T06:06:19Z jeosol: what do you mean by "always show up", do you mean enforced? 2019-08-31T06:07:18Z jeosol: When writing my classes, I usually write type, for documentation. If we change the optimization levels, are they then enforced? 2019-08-31T06:07:27Z aeth: yeah, I mean, always enforced 2019-08-31T06:07:35Z aeth: jeosol: I think SBCL does it when debug is high but I'm not sure. 2019-08-31T06:07:44Z aeth: jeosol: What I'd do is I'd just write a metaclass, it's not very long 2019-08-31T06:08:14Z aeth: This one's mine: https://gitlab.com/zombie-raptor/zombie-raptor/blob/78f8336059fb3187f81ff5207749549e74aaeccf/util/metaobject.lisp 2019-08-31T06:08:50Z aeth: You have to use ASSERT instead of CHECK-TYPE afaik because the type (afaik) has to be accessed at runtime, and CHECK-TYPE uses an unquoted type. 2019-08-31T06:11:10Z aeth: You can use a similar metaclass to check things that cannot be done with the type sytem (well, at least without a SATISFIES type) 2019-08-31T06:11:14Z jeosol: aeth: Thanks. The link very interesting. So with your implementation, the types are checked at runtime? 2019-08-31T06:11:21Z aeth: yes 2019-08-31T06:11:52Z Sweedish joined #lisp 2019-08-31T06:11:57Z aeth: You have to runtime check DEFCLASS slots. DEFSTRUCT has (potentially) restricted redefinition so even though it's probably implemented similarly, it can make more assumptions about slot types at compile time. 2019-08-31T06:12:02Z aeth: again, afaik. 2019-08-31T06:12:22Z aeth: So the primary use of DEFSTRUCT is typed slots, at least ime. 2019-08-31T06:14:08Z aeth: e.g. in SBCL if you have a struct slot of a type that has an array of double-floats, then (aref (your-slot your-struct) 42) won't do bounds-checking and will know that your accessed value is a double-float (or an error if your-struct isn't actually of the struct type) 2019-08-31T06:14:54Z Sweedish quit (Client Quit) 2019-08-31T06:14:54Z aeth: So that sort of thing is sort of the strongest case for using structs. If types are just for documentation, that doesn't matter, though. 2019-08-31T06:15:12Z jeosol: I see a :before method that uses assert to check the type before assignment 2019-08-31T06:16:12Z aeth: yeah, but it's :before in the MOP, so it's before any slot writing, including setters as well as (the potentially auto-generated) constructors 2019-08-31T06:16:31Z aeth: Much more concise than actually trying to put checks before DEFCLASS stuff manually 2019-08-31T06:17:45Z aeth: And if it's before any set then as long as it's initialized, then it's of that type (unless you do fancy things like change-class, I guess... but it's easy to break stuff like that, you can just use the debugger if you really wanted to, too, I guess) 2019-08-31T06:18:53Z jeosol: yeah more concise. I have to try it out. 2019-08-31T06:20:00Z jeosol: do you mean if a slot has type single-float and initialized via initargs with fixnum, the type changes? 2019-08-31T06:20:32Z aeth: No, it doesn't coerce automatically. 2019-08-31T06:21:50Z jeosol: ok. For this type of issues, I have often had to write defmethod specialized on 'number', not sure it's the best approach, 2019-08-31T06:21:55Z aeth: What I meant is that if you did :foo (make-foo) and the change-class'd the foo then it probably would be of an invalid type. Or if you change-class'd an object to one of these objects with checked types, then the slot foo might not be, since the checks are on setting slots. I think. I haven't tested either, and I haven't really used change-class before. 2019-08-31T06:22:35Z jeosol: Ok, I see what you mean. Thanks for the clarification 2019-08-31T06:22:36Z aeth: Yeah, using a setter method that's specialized in number and then coercing it that way will do the trick. 2019-08-31T06:23:31Z aeth: you could probably also do a similar sort of thing as my :checked-type but call it :coerced-type 2019-08-31T06:23:57Z aeth: and attempt to do a COERCE in the :before instead of an ASSERT check 2019-08-31T06:24:13Z aeth: would only really be useful for numbers and sequences afaik 2019-08-31T06:24:44Z red-dot joined #lisp 2019-08-31T06:27:00Z jeosol: ok. That will be useful trick. I often write methods for array but some operations return a list and i get issues 2019-08-31T06:27:37Z aeth: You'd probably have to provide your own COERCE (with COERCE as the default) because COERCE isn't particularly powerful... I'm not sure if metaclasses are that capable (higher order metaclasses?) 2019-08-31T06:30:26Z jello_pudding joined #lisp 2019-08-31T06:32:52Z jeosol: oh ok.I am not an mop expert. I will need to understand yours and use it in examples 2019-08-31T06:33:59Z jeosol: I normally write my methods to use array, but sometimes, I write other operations, e.g., loop + collect to return a list, and have to convert to an array to be able to call the method or i have to write two defmethods and have the list one call the array one 2019-08-31T06:34:32Z jeosol: need to find better ways these kinds of small issues 2019-08-31T06:38:15Z jeosol quit (Remote host closed the connection) 2019-08-31T06:40:03Z aeth: I'm far from a MOP expert, I rarely use classes. 2019-08-31T06:45:37Z orivej joined #lisp 2019-08-31T06:51:40Z bmansurov left #lisp 2019-08-31T06:53:30Z JohnMS joined #lisp 2019-08-31T07:01:35Z varjag joined #lisp 2019-08-31T07:02:08Z jello_pudding quit (Remote host closed the connection) 2019-08-31T07:08:00Z makomo joined #lisp 2019-08-31T07:15:17Z __jrjsmrtn__ joined #lisp 2019-08-31T07:16:05Z _jrjsmrtn quit (Ping timeout: 268 seconds) 2019-08-31T07:19:30Z makomo_ joined #lisp 2019-08-31T07:22:28Z makomo quit (Ping timeout: 244 seconds) 2019-08-31T07:24:31Z sonologico joined #lisp 2019-08-31T07:40:51Z Ven`` joined #lisp 2019-08-31T07:45:40Z dale quit (Quit: My computer has gone to sleep) 2019-08-31T07:52:50Z maxxcan joined #lisp 2019-08-31T07:53:12Z maxxcan quit (Client Quit) 2019-08-31T07:53:47Z mindthelion joined #lisp 2019-08-31T07:56:28Z techquila quit (Ping timeout: 276 seconds) 2019-08-31T07:59:49Z stylewarning: What does the word threshold mean to people? If you have an X-THRESHOLD, then does a value need to be > or >= to the threshold before something happens? 2019-08-31T08:03:35Z beach: Provided it's an upper threshold, I would say >, so that <= is fine. 2019-08-31T08:04:14Z beach: In other words, the value of the threshold is an acceptable one. 2019-08-31T08:04:17Z no-defun-allowed: CL is typically inclusive (eg `(loop for x from 0 to 100 ...)`) and generally legal stuffs is inclusive (eg drink-driving at 0.050, which is the legal threshold) so I'm tempted to say that. 2019-08-31T08:04:30Z libertyprime joined #lisp 2019-08-31T08:05:24Z stylewarning: I think I agree with these 2019-08-31T08:06:55Z no-defun-allowed: If you can't decide, then `(or (and (= x threshold) (zerop (random 2))) (> x threshold))` is a good compromise 2019-08-31T08:07:05Z makomo_ is now known as makomo 2019-08-31T08:07:26Z manualcrank quit (Quit: WeeChat 1.9.1) 2019-08-31T08:07:54Z stylewarning: (logbitp 0 (get-internal-real-time)) 2019-08-31T08:17:47Z libertyprime quit (Remote host closed the connection) 2019-08-31T08:20:03Z thijso: Anyone familiar with usocket on ECL? I'm getting "# is not of type SYMBOL.", but when I search the source, I only find MAP-SOCKET-ERROR in backends sbcl, scl, mocl, and cmucl? Is that the reason for the error? It's not defined in ECL? Or do I need to look elsewhere? 2019-08-31T08:21:07Z frodef joined #lisp 2019-08-31T08:21:17Z thijso: (And to maybe shortcircuit this question: if anyone has a working example for datagram two-way communication on ECL I would be very interested to have a look...) 2019-08-31T08:22:06Z thijso: And btw, why is it so hard to find UDP communications examples? My google-fu is maybe just lacking... 2019-08-31T08:25:03Z Ven`` quit (Read error: Connection reset by peer) 2019-08-31T08:26:38Z thijso: Hmm, looking at the usocket.asd it looks like ecl uses the sbcl.lisp backend... 2019-08-31T08:28:36Z thijso: Yeah, sbcl.lisp is filled with #+ecl etc stuff... Looks like I'm gonna be digging for a while. 2019-08-31T08:29:51Z beach: I have two questions about multiple values. We know that MULTIPLE-VALUE-PROG1 needs to save the values computed by the evaluation of the first form (in some unknown place) until the remaining forms have been evaluated. 2019-08-31T08:29:57Z beach: First question: Is it possible that a Common Lisp program can have two such active secret places simultaneously, and if so, what would such a program look like. 2019-08-31T08:30:03Z beach: Second question: Is it possible for the dynamic environment to be different when some multiple values are saved and when those values are needed? I.e., can there be an additional binding of a dynamic variable in one place, or can one place be inside a BLOCK, and one place not? 2019-08-31T08:30:04Z beach: I am thinking "no" and "no", but I sometimes overlook things. 2019-08-31T08:31:15Z beach: Actually, the answer to my first question is probably "yes", but I meant to ask it differently. 2019-08-31T08:32:21Z beach: I meant to ask whether saved multiple values are always used in a LIFO order. And I think the answer is "yes". 2019-08-31T08:34:22Z catchme joined #lisp 2019-08-31T08:35:11Z beach: So in (multiple-value-prog1 (f (multiple-values-list (multiple-value-prog1 and those computed by the evaluation of are simultaneously live when is evaluated. 2019-08-31T08:36:28Z ggole: Isn't it just like prog1, but with more than one saved value? 2019-08-31T08:37:47Z beach: It is. But prog1 is a macro and it can be turned into a LET. 2019-08-31T08:38:25Z beach: Not so with multiple-value-prog1, because we don't know how many places to reserve. Unless we allocate memory, of course. 2019-08-31T08:38:38Z ggole: Right, unless you use a list or something 2019-08-31T08:39:08Z thijso: hmmm... There's a (declare (type symbol usock-error)) in there, which if I remove it, I get UNKNOWN_ERROR instead with the much more helpfull message: The condition Socket error in "send": 89 (Destination address required) occurred with errno: 0. 2019-08-31T08:40:03Z Lord_of_Life quit (Ping timeout: 245 seconds) 2019-08-31T08:42:26Z Lord_of_Life joined #lisp 2019-08-31T08:42:41Z beach: ggole: But I think you answered my question, because a valid (but wasteful) "expansion" of (multiple-value-prog1
*) would be (let (( (multiple-value-list ))) * (apply #'values )) 2019-08-31T08:43:36Z beach: And it is clear that the same dynamic environment is present when the is defined as when it is used. 2019-08-31T08:44:03Z ggole: That's what I was thinking, yes 2019-08-31T08:44:18Z kamog quit (Read error: Connection reset by peer) 2019-08-31T08:44:29Z beach: Thanks for your help. 2019-08-31T08:44:30Z ggole: But I thought that you were probably looking for a more efficient alternative 2019-08-31T08:45:50Z beach: Well, I can't quite apply this solution, because I already have a program in high-level intermediate representation that has explicit representations for locations with multiple values. 2019-08-31T08:46:10Z beach: And I need to turn that representation into Common Lisp code for execution in a host Common Lisp system. 2019-08-31T08:46:25Z beach: So, for this particular usage, efficiency is not a problem. 2019-08-31T08:46:38Z ggole: I see. 2019-08-31T08:46:48Z beach: But it's to late to consider multiple-value-prog1 as a macro, because it has already been turned into intermediate code. 2019-08-31T08:48:33Z beach: But I do keep an explicit dynamic environment, so I should be able to push a special type of entry on it, indicating saved multiple values, and when I need those values, I should be able to assert that this entry is the top one in that environment. 2019-08-31T08:49:47Z thijso: Oh, that's really great. ECL implements sb-bsd-sockets, but not really. socket-receive only returns buffer and length and not the rest (i.e. remote-host and remote-port). 2019-08-31T08:50:53Z ggole: Is there some obstacle to using a regular binding? 2019-08-31T08:51:47Z beach: I guess not. 2019-08-31T08:59:01Z beach: If all this is true, then there is a simple implementation of multiple-value-prog1. Just push all the values on the control stack (including a number indicating how many there are), and pop them off when they are needed. 2019-08-31T09:01:12Z ggole: If you are happy with variable sized activation frames, yeah 2019-08-31T09:01:20Z beach: I am. 2019-08-31T09:01:38Z beach: The plan is to access lexical data using the base pointer. 2019-08-31T09:01:40Z ggole: If the number of values can be huge you might have some issues 2019-08-31T09:01:58Z jello_pudding joined #lisp 2019-08-31T09:02:19Z beach: I am happy to set a safe (but high-ish) limit as the Common Lisp HyperSpec allows. 2019-08-31T09:02:35Z ggole: Right, seems reasonable to me. 2019-08-31T09:03:03Z beach: Or, not. I could just punish the programmer who uses a huge number by giving him or her inefficient code. :) 2019-08-31T09:09:18Z ck_: weren't you just punished like that by sbcl? 2019-08-31T09:10:08Z beach: Really? Am I using that many multiple values? 2019-08-31T09:10:41Z ck_: I meant in the more general sense, inefficient behaviour for 'large' inputs 2019-08-31T09:10:51Z beach: Ah, yes, that. 2019-08-31T09:11:10Z beach: I am not planning such a general punishment scheme if I can avoid it. 2019-08-31T09:11:16Z ck_: :) 2019-08-31T09:20:09Z random-nick joined #lisp 2019-08-31T09:22:49Z asdf_asdf_asdf joined #lisp 2019-08-31T09:28:52Z vms14 joined #lisp 2019-08-31T09:29:32Z vms14: https://paste.debian.net/1098132/ 2019-08-31T09:29:32Z vms14: 2019-08-31T09:30:22Z vms14: I made what you said, using write instead of format and collect instead of formatting to arrays 2019-08-31T09:30:33Z vms14: do you have more hints? 2019-08-31T09:30:57Z vms14: there is something wrong, or a way to improve it? 2019-08-31T09:31:25Z vms14: I rewrote all, so I'm testing it, but it seems to work fine 2019-08-31T09:32:03Z vms14: (oneliner "print get('http://example.com')" :modules "LWP::Simple") 2019-08-31T09:32:33Z hiroaki quit (Ping timeout: 245 seconds) 2019-08-31T09:33:01Z beach: vms14: Your indentation is off. Either you are not using the slime-indentation contribution, or the paste service doesn't handle TABs very well, or perhaps both. 2019-08-31T09:33:44Z beach: vms14: LOOP clauses should be aligned so that the clause keywords start in the same column. 2019-08-31T09:33:58Z beach: You may not get that without slime-indentation. 2019-08-31T09:34:00Z vms14: it's not the service fault 2019-08-31T09:35:06Z beach: Also, it is not good style to use non-Booleans as Booleans. It "violates the expectations" of the reader as page 13 of the LUV slides indicates. 2019-08-31T09:35:07Z vms14: beach: how to make emacs auto indent all the buffer? 2019-08-31T09:35:24Z beach: C-x h then C-M-\ 2019-08-31T09:36:06Z beach: So when you write WHILE LINE and WHILE BYTE you violate these expectations. 2019-08-31T09:36:08Z vms14: it changed nothing 2019-08-31T09:36:21Z beach: Then you are not using the slime-indentation contribution. 2019-08-31T09:37:04Z vms14: isn't it with slime fancy? 2019-08-31T09:37:12Z beach: I don't remember. 2019-08-31T09:37:32Z beach: Same thing with (WHEN MODULES. 2019-08-31T09:37:45Z vms14: it said indenting region and I tend to use M-q to indent sexp 2019-08-31T09:38:32Z beach: Turn those into UNTIL (NULL LINE), UNTIL (NULL BYTE) and (UNLESS (NULL MODULES) 2019-08-31T09:38:33Z vms14: then how I should do it? 2019-08-31T09:38:44Z ck_: slime-indentation is not with slime-fancy. 2019-08-31T09:38:57Z beach: It should work as I said if you are using slime-indentation. 2019-08-31T09:39:28Z ck_: add it to your .emacs: (slime-setup '(... slime-indentation)) 2019-08-31T09:39:34Z vms14: beach: why unless null instead of just if? 2019-08-31T09:39:50Z beach: Let me look again. 2019-08-31T09:40:04Z thijso: Am I wrong in thinking the usual process with UDP communications is: RECEIVE -> optionally REPLY to the sending host:port with something? That implies you need to get the sending host:port, but the implementation of SOCKET-RECEIVE in ECL ignores those values. Is it that nobody has yet tried to use UDP sockets with ECL, or am I missing something? 2019-08-31T09:40:33Z beach: ck_: If is used when the value is needed, and then both branches should have expressions in them. 2019-08-31T09:40:50Z beach: vms14: If is used when the value is needed, and then both branches should have expressions in them. 2019-08-31T09:40:56Z beach: Sorry ck_. 2019-08-31T09:41:21Z beach: vms14: WHEN and UNLESS are used in a context where the value is not needed. 2019-08-31T09:42:40Z beach: vms14: Instead of your DOLIST, you could use a combination of APPEND, SETF, and REVERSE. 2019-08-31T09:43:39Z beach: (SETF ARGUMENT-LIST (APPEND (REVERSE FILES ARGUMENT-LIST))) 2019-08-31T09:44:47Z beach: vms14: There is a distinction between using NIL and using '() in a LET binding. NIL means a Boolean false value or a default value, and '() means the empty list. 2019-08-31T09:44:58Z |3b|: vms14: does it return what you expect with :binary-output t :output-as-list nil ? 2019-08-31T09:45:17Z |3b| thinks it wouldn't be what i expect at least 2019-08-31T09:45:22Z beach: vms14: 'NIL means the symbol NIL, and no initialization form means that you intend to assign to the variable before using it. 2019-08-31T09:45:55Z jello_pudding quit (Remote host closed the connection) 2019-08-31T09:46:07Z |3b|: also, reading by bytes is probably inefficient, not sure how much you care about handling large amounts output well though, so might not be worth more complex code 2019-08-31T09:46:29Z vms14: |3b|: I've tried with hunchentoot 2019-08-31T09:46:49Z beach: vms14: You can say (let ((argument-list (append arguments (reverse files)))) rather than initializing to the empty list and then looping 2019-08-31T09:47:11Z vms14: the binary-output works fine with hunchentoot when you use output-as-list too 2019-08-31T09:47:22Z vms14: but without nope 2019-08-31T09:47:53Z beach: vms14: You should probably rename output-as-list to output-as-list-p to make sure it is interpreted as a Boolean value. 2019-08-31T09:48:08Z vms14: right 2019-08-31T09:48:22Z vms14: same with binary-output 2019-08-31T09:48:37Z varjag quit (Remote host closed the connection) 2019-08-31T09:48:58Z beach: OK, that's a dozen or so remarks that you can work on if you like. 2019-08-31T09:49:15Z varjag joined #lisp 2019-08-31T09:49:20Z gxt quit (Ping timeout: 260 seconds) 2019-08-31T09:49:32Z vms14: I've changed while for until and the when of modules by unless 2019-08-31T09:49:40Z vms14: but I don't see the point in doing it 2019-08-31T09:50:11Z beach: That's because you are thinking that your code is meant for the compiler. 2019-08-31T09:50:29Z beach: Yet you are submitting it for humans (us) to read. 2019-08-31T09:50:47Z |3b| as a reader prefers (WHEN X ...) to (UNLESS (NULL X) ...) 2019-08-31T09:50:58Z vms14: that's why 2019-08-31T09:51:13Z vms14: when something isn't it clearer than unless not something? 2019-08-31T09:51:24Z beach: vms14: And I highly recommend the LUV slides by Norvig and Pitman who are way more experienced in this kind of situation than I am. 2019-08-31T09:51:49Z beach: vms14: WHEN and UNLESS take Boolean values as the first form. 2019-08-31T09:51:49Z |3b| parses it as "WHEN X [is not NIL]" and "UNLESS ( [I need to think about this]" 2019-08-31T09:51:59Z beach: vms14: MODULES is not a Boolean value. 2019-08-31T09:52:05Z beach: vms14: It is a list of modules. 2019-08-31T09:52:06Z |3b|: they take generalized boolean values :) 2019-08-31T09:52:33Z abhixec quit (Ping timeout: 245 seconds) 2019-08-31T09:52:35Z beach: |3b|: Now you are talking about the semantics. I am talking about the expectations of the person reading the code. 2019-08-31T09:52:55Z |3b|: beach: i'm talking about the expectations of the person when the person is me :) 2019-08-31T09:53:02Z vms14: XD 2019-08-31T09:53:21Z beach: Yes, but I am reading the code by vms14 and I am not you. 2019-08-31T09:53:38Z vms14: my code is shit, this is why I tend to ask 2019-08-31T09:53:42Z |3b|: right, which is why i started with saying /i/ prefer 2019-08-31T09:53:43Z varjag quit (Ping timeout: 246 seconds) 2019-08-31T09:53:44Z abhixec joined #lisp 2019-08-31T09:53:48Z beach: So I am referring to Norvig and Pitman who are neither you nor me, but both are much more experienced. 2019-08-31T09:53:49Z vms14: but I'm happy that works 2019-08-31T09:53:59Z vms14: until I test it more or add stuff 2019-08-31T09:54:05Z |3b| is providing another perspective, not saying you are wrong 2019-08-31T09:54:16Z beach: vms14: I am not expressing myself very clearly, apparently. 2019-08-31T09:54:32Z |3b|: i'd accept a request to change it if working on your code, but i'd prefer WHEN X in my code :) 2019-08-31T09:54:42Z beach: vms14: You are submitting your code for other to read, so you are *not* just happy that it works. 2019-08-31T09:55:05Z vms14: not really, I want to learn how to design programs 2019-08-31T09:55:24Z vms14: so I'll remember every hint or advice I'll get 2019-08-31T09:55:47Z beach: vms14: You are apparently expecting others to read it, so then it is a very very good idea to respect conventions established by highly experienced Common Lisp programmers such as Norvig and Pitman. 2019-08-31T09:56:08Z vms14: you gave me a good link some time ago 2019-08-31T09:56:19Z vms14: but I've lost it, do you have it? 2019-08-31T09:56:29Z beach: Google for LUV slides and Norvig and Pitman 2019-08-31T09:56:47Z vms14: https://www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf 2019-08-31T09:56:49Z vms14: ty 2019-08-31T09:57:42Z |3b| notes that those slides also say to sign and date your comments :) 2019-08-31T09:58:58Z ck_: I always wonder how they got presented -- on transparencies? 2019-08-31T10:01:35Z beach: Possibly. 2019-08-31T10:02:35Z beach: Signing and dating comments was probably way more useful before we had as reasonable source control as we do now. 2019-08-31T10:03:04Z beach: But I think it might still be a good idea. 2019-08-31T10:03:42Z vms14: just create one emacs command that puts some name and the current date 2019-08-31T10:03:47Z vms14: it seems a good idea 2019-08-31T10:03:56Z beach: Yeah, I think it is. 2019-08-31T10:04:41Z |3b| thinks that is a tool problem that we shouldn't need to do manually, but agrees that the tools are still lacking 2019-08-31T10:04:50Z Shinmera: Or just use git-blame to get the comment author and date 2019-08-31T10:05:11Z |3b|: yeah, more transparent version of git blame is what i was thinking of 2019-08-31T10:05:32Z vms14: thanks for your hints, I'll take a look at this pdf and think about what it says 2019-08-31T10:05:41Z vms14: see you 2019-08-31T10:05:45Z vms14 quit (Remote host closed the connection) 2019-08-31T10:06:49Z Shinmera: Running magit-blame in a buffer will show you which sections were last modified when and by whom. Easy enough to use when it is important to know. 2019-08-31T10:25:38Z ck_: I believe it is also part of standard emacs, C-x v g 2019-08-31T10:35:28Z Lord_of_Life quit (Read error: Connection reset by peer) 2019-08-31T10:36:49Z Lord_of_Life joined #lisp 2019-08-31T10:42:17Z cosimone joined #lisp 2019-08-31T10:52:46Z Bike joined #lisp 2019-08-31T11:00:20Z red-dot quit (Quit: Going offline, see ya! (www.adiirc.com)) 2019-08-31T11:10:59Z namosca joined #lisp 2019-08-31T11:12:28Z superkumasan quit (Ping timeout: 246 seconds) 2019-08-31T11:21:58Z cl-arthur joined #lisp 2019-08-31T11:36:08Z random-nick quit (Ping timeout: 258 seconds) 2019-08-31T11:36:09Z no-defun-allowed: Anyone ever seen a parser for ASCII-art guitar tablature? 2019-08-31T11:37:20Z alexanderbarbosa joined #lisp 2019-08-31T11:40:47Z no-defun-allowed: Or, I guess, any parsers that can work with two-dimensional input of some kind? 2019-08-31T11:41:25Z ck_: mondrian comes to mind, I don't think it has an ascii form of expression though 2019-08-31T11:41:49Z sonologico quit (Remote host closed the connection) 2019-08-31T11:42:10Z no-defun-allowed: Is there a website for Mondrian? 2019-08-31T11:43:03Z ck_: it's called by his first name: http://www.dangermouse.net/esoteric/piet.html 2019-08-31T11:43:10Z sonologico joined #lisp 2019-08-31T11:43:11Z papachan joined #lisp 2019-08-31T11:43:35Z no-defun-allowed: HAH! Good point. 2019-08-31T11:43:56Z cosimone quit (Quit: Leaving) 2019-08-31T11:45:21Z stepnem: *grumble* why does MAX / MIN not have :key? Also LOOP :maximize etc... 2019-08-31T11:46:10Z EvW joined #lisp 2019-08-31T11:46:24Z no-defun-allowed: So, (stepnem:max '((1 . 2) (3 . 4) (5 . 1)) :key #'cdr) ↦ (3 . 4)? 2019-08-31T11:46:40Z stepnem: Yeah. 2019-08-31T11:47:57Z no-defun-allowed: I forgot max has a lambda-list (&rest numbers), maybe adding keyword argument parsing to that would be awkward 2019-08-31T11:53:41Z lnh^ joined #lisp 2019-08-31T11:58:45Z no-defun-allowed: Tomorrow I guess I'll take a peep at making a 2d monadic-ish parser, since I'm only familiar with making monadic-ish parsers for 1 dimensional inputs. 2019-08-31T11:58:51Z stepnem: Maybe. It's hard to believe other people never go "is there no better way?" when doing something like (car (sort stuff #'> :key #'cdr)), though... 2019-08-31T12:00:03Z namosca quit (Ping timeout: 245 seconds) 2019-08-31T12:00:24Z flip214: stepnem: yeah, everybody knows it should be (first (sort ...)) ;) 2019-08-31T12:00:33Z stepnem: heh 2019-08-31T12:07:27Z no-defun-allowed: ck_: http://www.dangermouse.net/esoteric/piet/piet_pi.png cracks me up every time, though. 2019-08-31T12:07:55Z ck_: yes, the language has much potential for amusing self references 2019-08-31T12:10:20Z random-nick joined #lisp 2019-08-31T12:11:11Z sonologico_ joined #lisp 2019-08-31T12:13:36Z sonologico quit (Ping timeout: 252 seconds) 2019-08-31T12:15:07Z shifty quit (Ping timeout: 246 seconds) 2019-08-31T12:18:54Z Inline__ joined #lisp 2019-08-31T12:19:04Z wxie joined #lisp 2019-08-31T12:19:44Z semz: > If you know type information, declare it. 2019-08-31T12:20:11Z semz: I want to agree with this point, but how would you do this without landing in funland when a declaration is wrong, like you would with DECLARE? 2019-08-31T12:20:27Z semz: explicit CHECK-TYPEs seem clunky 2019-08-31T12:21:40Z Inline quit (Ping timeout: 264 seconds) 2019-08-31T12:21:49Z semz: e.g. CCL will generate "bogus objects" if you try to add two strings that are declared as fixnums, even at the default security level 2019-08-31T12:25:38Z Ekho quit (Quit: An alternate universe was just created where I didn't leave. But here, I left you. I'm sorry.) 2019-08-31T12:26:32Z beach: If the declaration is wrong, you obviously don't know the type information. 2019-08-31T12:28:25Z frodef quit (Ping timeout: 246 seconds) 2019-08-31T12:28:54Z lucasb joined #lisp 2019-08-31T12:30:59Z Ekho joined #lisp 2019-08-31T12:31:37Z cosimone joined #lisp 2019-08-31T12:33:17Z semz: What if the declaration is correct but the call is wrong? My problem with this is mostly that it seems to open the door for corruption issues. 2019-08-31T12:35:30Z semz: Like I hinted at before, (defun test (x y) (declare (type fixnum x y)) (+ x y)) (type-of (test "hello" "world")) causes at least CCL to yell about potential implementation bugs. 2019-08-31T12:36:57Z semz: Obviously you could always use a custom macro wrapping DEFUN but maybe there's a better solution that's already here 2019-08-31T12:37:37Z cl-arthur: You could use a convenience macro to automatically generate asserts on types, and then later change it to generate type declarations instead, once sure enough that the calls are correct. 2019-08-31T12:40:08Z frodef joined #lisp 2019-08-31T12:41:45Z beach: semz: The declaration means that you guarantee that all calls provide the right type, so if there is a call with the wrong type, then the declaration is wrong. 2019-08-31T12:42:01Z beach: semz: Just don't declare the type. Why do you insist? 2019-08-31T12:42:21Z semz: I don't insist, the style guide above does! 2019-08-31T12:42:55Z beach: semz: Yes, but you obviously don't know the type, so the premises of the style guide are not applicable in your case. 2019-08-31T12:44:33Z beach: You know what the type OUGHT TO BE, but that's not what the style guide says. 2019-08-31T12:46:16Z EvW quit (Ping timeout: 264 seconds) 2019-08-31T12:46:40Z lalitmee joined #lisp 2019-08-31T12:47:24Z sonologico_ quit (Quit: Leaving) 2019-08-31T12:47:33Z semz: I guess the section can be read this way, though I certainly would have never done that. 2019-08-31T12:59:29Z beach: I declare types only in code that needs to be very fast, so it also has other declarations. Mostly I program with generic functions and methods, so the type is determined by generic dispatch, and the method specializer shows the type for documentation as well. 2019-08-31T13:00:34Z asdf_asdf_asdf quit (Quit: asdf_asdf_asdf) 2019-08-31T13:01:50Z EvW1 joined #lisp 2019-08-31T13:03:23Z Inline__ quit (Quit: Leaving) 2019-08-31T13:09:42Z qop quit (Ping timeout: 252 seconds) 2019-08-31T13:14:22Z vms14 joined #lisp 2019-08-31T13:16:46Z cosimone_ joined #lisp 2019-08-31T13:17:19Z pjb: DrDuck: THE is the opposite of "static typing". THE is the programmer telling the compiler: you are an idiot, you don't know what type this expression is, let me tell you! 2019-08-31T13:17:33Z pjb: DrDuck: basically, THE will be banned as soon as SJW will start doing CL. 2019-08-31T13:18:48Z JohnMS quit (Quit: Konversation terminated!) 2019-08-31T13:19:09Z cosimone quit (Ping timeout: 250 seconds) 2019-08-31T13:20:18Z cosimone__ joined #lisp 2019-08-31T13:20:23Z edgar-rft: semz: "If you know type information, declare it." to me also reads as "If you don't know type information for sure, don't declare it". 2019-08-31T13:20:30Z pjb: DrDuck: the only case where you can use THE, is something like: (defun foo (s) (if (some-complex-predicate-p s) 42 "foo")) (list (the 'fixnum (foo 0)) (the 'string (foo t))) 2019-08-31T13:21:18Z pjb: DrDuck: ie. when you know your compiler is dumb enough not to be able to infer the type of the expression foo, because this would involve solving the termination problem, then you can tell it, but as you can see, this works only if YOU are able to prove it! 2019-08-31T13:21:42Z pjb: DrDuck: it's much better not to use THE, and let the compiler deal with all types of results. 2019-08-31T13:21:52Z SaganMan quit (Quit: WeeChat 1.6) 2019-08-31T13:22:22Z semz: edgar-rft: maybe it's because i originally came from statically typed languages 2019-08-31T13:22:40Z cosimone_ quit (Ping timeout: 246 seconds) 2019-08-31T13:23:23Z semz: where "don't let the type be inferred, declare it for ease of the reader" is a thing 2019-08-31T13:27:19Z EvW1 quit (Ping timeout: 276 seconds) 2019-08-31T13:27:30Z pjb: aeth: good point about change-class. Normally, one would change-class amongst subclasses of a common superclass, so a type would always be the superclass. But we could also have fun: assume library A expecting TA and library B expecting TB with no other common superclass than T. Then you could start with a subclass of TA, process it with library A, and change-class it to a subclass of TB to continue process it with TB. 2019-08-31T13:27:49Z kajo quit (Ping timeout: 250 seconds) 2019-08-31T13:28:15Z wxie quit (Ping timeout: 250 seconds) 2019-08-31T13:28:22Z edgar-rft: semz: in contrast to most other languages, in Lisp the *value* itself carries the type information, not the variable (except if you declare it as having a type). For example (type-of 10) => INTEGER, where it's the 10 itself that tells "I'm an integer". 2019-08-31T13:28:28Z pjb: aeth: now, question: is the Hindley–Milner type inference algorithm able to deal with time? 2019-08-31T13:29:03Z pjb: edgar-rft: declaring the type of a variable only declares that you will only bind values of that type to that variable. 2019-08-31T13:29:43Z semz: edgar-rft: I know. Lisp is pretty much the only language where I accept this sort of thing because you actually get something in return for it. 2019-08-31T13:30:22Z ravenous_ joined #lisp 2019-08-31T13:32:17Z edgar-rft: pjb: thanks for overly pedantic nitpicking, but as usual you're right :-) 2019-08-31T13:36:15Z pjb: beach: you can have several multiple-value-prog1 forms active at the same time with threads and even possibly with coroutines. 2019-08-31T13:38:22Z pjb: (multiple-value-prog1 (multiple-value-call (function values) 1 (multiple-value-prog1 (values 2 3 4) (print 'hi)) 5) (print 'done)) #| 2019-08-31T13:38:22Z pjb: hi 2019-08-31T13:38:22Z pjb: done --> 1 ; 2 ; 3 ; 4 ; 5 |# 2019-08-31T13:39:10Z pjb: and even without, if you optimize out this multiple-value-call: 1 needs to be stored somewhere at the same time as 2 3 and 4. 2019-08-31T13:40:41Z pjb: Same if values is open-coded: (multiple-value-prog1 (values 1 (multiple-value-prog1 2 (print 'hi)) 3) (print 'done)) 2019-08-31T13:41:53Z pjb: beach: it seems to be that it's a problem of data flow optimization. If you open code multiple-values, you can even avoid storing those that are not used. 2019-08-31T13:48:00Z kamog joined #lisp 2019-08-31T14:06:38Z learning joined #lisp 2019-08-31T14:15:15Z manualcrank joined #lisp 2019-08-31T14:22:15Z elderK quit (Quit: WeeChat 1.9) 2019-08-31T14:23:28Z elderK joined #lisp 2019-08-31T14:23:50Z elderK quit (Client Quit) 2019-08-31T14:24:57Z beach: pjb: Yes, several can be active, but for a particular process, they are LIFO. 2019-08-31T14:25:16Z beach: pjb: Thanks for the additional insight. 2019-08-31T14:26:30Z kajo joined #lisp 2019-08-31T14:27:10Z papachan quit (Ping timeout: 244 seconds) 2019-08-31T14:32:19Z kajo quit (Read error: Connection reset by peer) 2019-08-31T14:35:02Z cosimone__ quit (Quit: Leaving) 2019-08-31T14:40:52Z vms14 quit (Remote host closed the connection) 2019-08-31T14:42:40Z bmansurov joined #lisp 2019-08-31T14:42:44Z red-dot joined #lisp 2019-08-31T14:45:26Z cosimone joined #lisp 2019-08-31T14:53:34Z frodef quit (Ping timeout: 258 seconds) 2019-08-31T15:01:24Z EvW joined #lisp 2019-08-31T15:01:44Z Oladon joined #lisp 2019-08-31T15:02:16Z alexanderbarbosa quit (Ping timeout: 252 seconds) 2019-08-31T15:05:36Z lalitmee quit (Remote host closed the connection) 2019-08-31T15:06:27Z lalitmee joined #lisp 2019-08-31T15:12:56Z carloss joined #lisp 2019-08-31T15:18:33Z carloss quit (Quit: Leaving) 2019-08-31T15:20:35Z dddddd joined #lisp 2019-08-31T15:20:44Z salinasc joined #lisp 2019-08-31T15:21:50Z ravenou__ joined #lisp 2019-08-31T15:22:26Z ravenous_ quit (Ping timeout: 252 seconds) 2019-08-31T15:22:30Z salinasc quit (Client Quit) 2019-08-31T15:23:05Z carloss joined #lisp 2019-08-31T15:23:23Z carloss quit (Read error: Connection reset by peer) 2019-08-31T15:24:24Z salinasc joined #lisp 2019-08-31T15:26:07Z varjag joined #lisp 2019-08-31T15:34:55Z alexanderbarbosa joined #lisp 2019-08-31T15:37:57Z learning quit (Remote host closed the connection) 2019-08-31T15:40:58Z learning joined #lisp 2019-08-31T15:42:58Z nanoz quit (Ping timeout: 245 seconds) 2019-08-31T15:46:23Z DrDuck: pjb: PG gives an example of code and says it is what fast CL code looks like. He just notes that CL can be sped up by aiming for tail-call optimization and shares a snippet or two. 2019-08-31T15:46:26Z DrDuck: Here is one: 2019-08-31T15:46:32Z DrDuck: https://www.irccloud.com/pastebin/M8LxpoGO/ 2019-08-31T15:46:54Z DrDuck: maybe compilers were not as mature back then 2019-08-31T15:51:34Z knicklux quit (Remote host closed the connection) 2019-08-31T15:52:32Z pjb: DrDuck: fast CL code depends on the implementation. 2019-08-31T15:52:59Z pjb: DrDuck: http://cliki.net/performance 2019-08-31T15:53:30Z DrDuck: okydoke 2019-08-31T15:53:34Z DrDuck: using abcl atm 2019-08-31T15:55:23Z pjb: Don't worry about speed. Worry about correctness, and about using algorithms that are not too complex (in the O(f(n)) sense) for your data sizes. 2019-08-31T16:00:24Z beach: DrDuck: High performance code depends more on the use of good algorithms and data structures. It is often a mistake to attempt low-level optimizations at an early stage. 2019-08-31T16:00:29Z beach: Many times, if there is a problem at all, it can be isolated to just a small portion of code. 2019-08-31T16:00:29Z beach: Then that small portion can be optimized. But you won't know which portion it is until you measured without optimization. 2019-08-31T16:02:28Z DrDuck: If calling compile on the same function twice is unspecified in the language specification, how can you get to the point where you're able to continuously update a program without killing and restarting it? 2019-08-31T16:02:29Z lalitmee quit (Remote host closed the connection) 2019-08-31T16:03:27Z beach: DrDuck: You might not have the same idea as the standard about what it means to "compile the same function twice". 2019-08-31T16:03:28Z |3b|: COMPILE works on compiled functions 2019-08-31T16:03:55Z |3b|: it isn't specified to do nothing, but it is specified to work 2019-08-31T16:04:44Z DrDuck: " 2019-08-31T16:04:54Z beach: DrDuck: Most frequently, COMPILE is not called on a function, but on a lambda expression. And most often COMPILE is not called at all, and instead COMPILE-FILE is called. 2019-08-31T16:04:55Z |3b|: and binding new (global) functions to a name is well defined too 2019-08-31T16:06:31Z |3b|: possibly "changing the global function binding for a name" is a more precise way to say what i meant?? 2019-08-31T16:06:48Z DrDuck: "There are two sorts of functions which you can't give as an argument to compile. According to CLTL2 (p. 677), you can't compile a function 'defined interpretively in a non-null lexical envoronment.' [. . .] You also can't call compile on a function which is already compiled. In this situation, CLTL2 hints darkly that 'the consequences. . .are unspecified.'" 2019-08-31T16:06:59Z DrDuck: This is directly from 'On Lisp'. 2019-08-31T16:07:00Z DrDuck: O_o 2019-08-31T16:07:14Z beach: DrDuck: Consult the standard for conforming behavior. 2019-08-31T16:07:16Z Inline joined #lisp 2019-08-31T16:07:36Z DrDuck: Is CLTL2 the latest standard? 2019-08-31T16:07:39Z beach: DrDuck: CLtL2 is not the standard. 2019-08-31T16:07:44Z beach: Never was. 2019-08-31T16:07:46Z |3b|: right, you still can't pass a closure to COMPILE in ANSI CL, and the latter apparently changed between cltl2 and ansi 2019-08-31T16:07:47Z DrDuck: O_o 2019-08-31T16:07:47Z beach: Never will be. 2019-08-31T16:08:02Z beach: clhs compile 2019-08-31T16:08:02Z specbot: http://www.lispworks.com/reference/HyperSpec/Body/f_cmp.htm 2019-08-31T16:09:05Z beach: "If the definition is already a compiled function, compile eitehr produces that function itself, ... or an equivalent function. 2019-08-31T16:09:09Z beach: " 2019-08-31T16:09:15Z |3b|: actually i guess it is a bit more general than "closure", but probably "closure" in practice 2019-08-31T16:09:25Z pjb: DrDuck: the thing is that the implementation specific parts of the behavior are actually small and known. 2019-08-31T16:09:44Z pjb: DrDuck: the question is actually that of the compilation-unit. 2019-08-31T16:09:59Z |3b|: but using COMPILE directly on arbitrary functions is fairly uncommon 2019-08-31T16:10:02Z pjb: DrDuck: if you compile part of a compilation-unit, you may get surprising and non-conforming results. 2019-08-31T16:10:10Z |3b|: (using it directly at all is fairly uncommon for that matter) 2019-08-31T16:10:15Z pjb: DrDuck: but if you compile with the same compilation-units, it will be fine. 2019-08-31T16:10:39Z |3b|: the most popular CL implementations compile everything by default anyway 2019-08-31T16:10:45Z pjb: DrDuck: inside a compilation unit, an implementation is permitted to inline any function that is not declared notinline. 2019-08-31T16:11:29Z pjb: DrDuck: therefore if you recompile outside of the compilation unit, a function that has been inlined in another, you will get two different functions, which can be a problem for the logic of your program if the semantic of your function has changed. 2019-08-31T16:11:35Z DrDuck: |3b|: If it's so uncommon how do people make programs that they can update continuously without restarting said program in CL. Sorry for the dumb question, since I'm pretty early in the book. 2019-08-31T16:11:52Z DrDuck: pjb: that helps a bit 2019-08-31T16:11:53Z pjb: DrDuck: if you want to do that, you can just declare the function notinline. 2019-08-31T16:11:58Z Oladon quit (Quit: Leaving.) 2019-08-31T16:12:44Z |3b|: DrDuck: you don't (compile 'foo (fdefinition foo)), which is what would have problems 2019-08-31T16:12:51Z pjb: DrDuck: but you still have to be smart: recompiling a function or a whole compilation unit won't replace the functions that are active, being evaluated. You have to deal it yourself. 2019-08-31T16:13:00Z |3b|: (compile 'foo '(lambda () ...)) is perfectly fine and well defined 2019-08-31T16:13:15Z |3b|: but usually we would just evaluate (defun foo ()...) 2019-08-31T16:13:41Z |3b|: either in repl or with some shortcut in an editor that knows how to send the definition to the running lisp (C-c C-c in emacs with slime for example) 2019-08-31T16:13:50Z pjb: (compile (compile (compile 'foo '(lambda () \...)))) works too: #| --> foo ; nil ; nil |# 2019-08-31T16:13:56Z Insanity_ joined #lisp 2019-08-31T16:14:12Z |3b|: or reload the entire file (possibly compiling the whole file with compile-file first if we know the implementation doesn't compile by default) 2019-08-31T16:14:14Z pjb: (defun foo () 42) (compile 'foo) (compile 'foo) 2019-08-31T16:14:43Z DrDuck: can you reload an entire file programmatically? 2019-08-31T16:14:50Z |3b|: explicit use of COMPILE these days is pretty much only useful for runtime code generation on the more popular implementations 2019-08-31T16:14:50Z DrDuck: at runtime 2019-08-31T16:14:55Z |3b|: (LOAD "file") 2019-08-31T16:14:59Z DrDuck: oh lulz 2019-08-31T16:15:01Z pjb: |3b|: LOAD defines a compilation unit but you must be careful: the system may use other compilation units than the file! So just reloading/recompiling a file may still be in the implementation specific domain. 2019-08-31T16:15:13Z pjb: |3b|: you need to load or compile the compilation-units! 2019-08-31T16:15:18Z |3b|: or (load (compile-file "file")) 2019-08-31T16:15:19Z DrDuck: yeah that's what i wanna do. generate code at runtime 2019-08-31T16:15:20Z DrDuck: eventually 2019-08-31T16:15:59Z pjb: (with-compilation-unit () (dolist (file '("file1" "file2" "file3")) (load (compile-file file)))) 2019-08-31T16:17:51Z |3b|: the case the book was talking about is if you do (defun foo ()...) in an implementation that doesn't compile by default, then wanted to do (compile 'foo) to turn an interpreted function into a compiled function 2019-08-31T16:18:48Z |3b|: calling (compile 'foo) twice was apparently unspecified in cltl2, but is well defined in ansi cl 2019-08-31T16:19:25Z |3b|: the other case is that (let ((x 1)) (defun foo ()...)), (compile 'foo) is undefined even in ansi CL 2019-08-31T16:19:32Z DrDuck: Well as beach quoted, "If the definition is already a compiled function, compile either produces that function itself (i.e., is an identity operation) or an equivalent function. " 2019-08-31T16:19:46Z |3b|: right, well defined in ANSI CL :) 2019-08-31T16:20:04Z DrDuck: That is still a tad ambiguous. Looks like it gives implementers some wiggle room to not change behavior at some point if they feel like it. 2019-08-31T16:20:07Z beach: DrDuck: Yes, but you still don't seem to understand the situation where a function would be compiled twice. 2019-08-31T16:20:10Z DrDuck: but it's better than undefined 2019-08-31T16:20:11Z |3b|: it might do extra work, but the result is a compiled function that behaves as expected 2019-08-31T16:20:31Z beach: DrDuck: In your opinion, what would be such a typical use case? 2019-08-31T16:20:37Z |3b|: and again, you don't usually do that anymore :) 2019-08-31T16:21:27Z |3b|: evaluating (defun foo () ...) multiple times, possibly with different ..., isn't affected by any of those problems 2019-08-31T16:21:58Z beach: DrDuck: Can you please indicate what typical actions on the part of a developer would result in a function that is already compiled being compiled again? 2019-08-31T16:22:06Z |3b|: or calling (compile 'foo '(lambda ...)) multiple times, or calling compile-file on a file containing (defun foo ...) 2019-08-31T16:23:08Z Inline quit (Quit: Leaving) 2019-08-31T16:23:10Z |3b| apologizes if i'm repeating too much, trying to be precise since details like that can be confusing later if you miss it 2019-08-31T16:23:41Z beach: I think DrDuck still has the wrong idea of what it means for a function to be compiled more than once. 2019-08-31T16:24:07Z DrDuck: beach: idk yet. maybe if i have a collection of nodes that are using the same function to do some operation and some of the nodes re-define the function for whatever reason to help them get better answers 2019-08-31T16:24:08Z beach: So I think DrDuck is under the impression that such a situation is more common than it really is. 2019-08-31T16:24:12Z |3b|: yeah, other reason for the extra repetitions :) 2019-08-31T16:24:26Z DrDuck: i don't wanna do common CL programming. i wanna take it to the limit xD 2019-08-31T16:24:37Z DrDuck: common CL programming 2019-08-31T16:24:38Z DrDuck: lol 2019-08-31T16:24:39Z DrDuck: xD 2019-08-31T16:25:02Z ebrasca quit (Remote host closed the connection) 2019-08-31T16:25:20Z DrDuck: i guess redefining is different from recompiling 2019-08-31T16:25:24Z beach: DrDuck: Redefining a function is not compiling it twice. If you redefine it, a new lambda expression (which is not a function) is created, and that lambda expression is then compiled into a function. The function thus generated replaces the old one. 2019-08-31T16:25:27Z |3b|: right 2019-08-31T16:25:49Z Inline joined #lisp 2019-08-31T16:26:22Z |3b|: COMPILE turns an interpreted function or a lambda form into a compiled function, it is useless to call it on compiled functions 2019-08-31T16:27:34Z |3b|: so you only want to call it if you have interpreted functions (which is uncommon, since popular implementations compile them to start with), or if you are generating lambda forms in code 2019-08-31T16:27:56Z salinasc quit (Ping timeout: 245 seconds) 2019-08-31T16:28:02Z DrDuck: yeah i guess i don't have a use case right now lol 2019-08-31T16:28:16Z |3b|: both of those are well specified (aside from interpreted closure functions) 2019-08-31T16:30:52Z khisanth_ quit (Ping timeout: 245 seconds) 2019-08-31T16:31:03Z beach: DrDuck: Perhaps when you see the phrase "compile a function", you think it means "compile code, thereby turning it into a function". But that's not what it meant. It literally means taking an existing object that happens to be a function and applying COMPILE to it. 2019-08-31T16:31:33Z beach: not what it means 2019-08-31T16:32:15Z DrDuck: yeah i was confused 2019-08-31T16:33:49Z leb joined #lisp 2019-08-31T16:34:46Z beach: There is a very good glossary in the Common Lisp HyperSpec. I suggest you look up the word "compile" there. 2019-08-31T16:37:22Z abhixec quit (Ping timeout: 244 seconds) 2019-08-31T16:42:44Z DrDuck: bookmarked it 2019-08-31T16:42:49Z DrDuck: one last silly question 2019-08-31T16:42:53Z DrDuck: a quote from the book 2019-08-31T16:43:05Z DrDuck: "In some earlier dialects of Lisp, functions were represented as lists. This gave Lisp programs the remarkable ability to write and execute their own Lisp programs. In CL, functions are no longer mode of lists -- good implementations compile them into native machine code. But you can still write programs that write programs, because lists are the input to the compiler." 2019-08-31T16:43:36Z DrDuck: did the old style of lisp give more power since functions were always represented as lists, or have i just misunderstood the statement? 2019-08-31T16:44:04Z |3b|: not really any power you would really want (or be able to rely on) 2019-08-31T16:44:10Z khisanth_ joined #lisp 2019-08-31T16:44:43Z |3b|: if you are interpreting a list directly, you could theoretically have a function that destructively modified the list defining itself 2019-08-31T16:45:14Z |3b|: but then you can't compile it, or expect that program to work portably even on other implementations that interpret lists directly, etc 2019-08-31T16:45:48Z |3b|: code in the form of lists is still as easy to modify/generate/etc while it isn't running as it was with the older style 2019-08-31T16:45:48Z ravenous_ joined #lisp 2019-08-31T16:46:03Z DrDuck: okay :p 2019-08-31T16:46:14Z |3b|: and instead we get fast compiled code :) 2019-08-31T16:46:16Z ravenou__ quit (Ping timeout: 264 seconds) 2019-08-31T16:47:22Z |3b|: note that CL semantics are defined in terms of evaluating lists, symbols, etc, not in terms of program text 2019-08-31T16:47:59Z |3b|: and turning program text into those lists, symbols, etc is a separately defined process (READ, etc), independent from compilation/evaluation 2019-08-31T16:49:08Z leb quit 2019-08-31T16:49:42Z |3b|: though CL doesn't enforce any boundaries between the various steps, so READ is configurable (with reader macros)and can run arbitrary code, COMPILE is configurable (with macros, etc) and can run arbitrary code, and both READ and COMPILE are generally always available, so you can READ or COMPILE from arbitrary code :) 2019-08-31T16:50:51Z |3b|: (possibly not common to take advantage of those abilities, but there if you want it, for DSLs or whatever) 2019-08-31T16:52:58Z |3b|: or you can use something other than READ, and parse files yourself to generate input for COMPILE, or just generate it directly 2019-08-31T16:54:08Z |3b|: or you can call READ and pass it to your own compiler, for example generating JavaScript or GPU shaders or whatever 2019-08-31T17:00:26Z ravenou__ joined #lisp 2019-08-31T17:02:48Z learning quit (Remote host closed the connection) 2019-08-31T17:03:38Z ravenous_ quit (Ping timeout: 252 seconds) 2019-08-31T17:04:02Z catchme quit (Quit: Connection closed for inactivity) 2019-08-31T17:05:19Z vaporatorius quit (Read error: Connection reset by peer) 2019-08-31T17:06:06Z vaporatorius joined #lisp 2019-08-31T17:06:24Z vaporatorius quit (Read error: Connection reset by peer) 2019-08-31T17:07:26Z jeosol joined #lisp 2019-08-31T17:12:34Z X-Scale quit (Quit: HydraIRC -> http://www.hydrairc.com <- Organize your IRC) 2019-08-31T17:14:08Z X-Scale joined #lisp 2019-08-31T17:14:49Z mathrick quit (Ping timeout: 276 seconds) 2019-08-31T17:21:48Z cosimone quit (Quit: Leaving) 2019-08-31T17:26:05Z learning joined #lisp 2019-08-31T17:26:22Z vaporatorius joined #lisp 2019-08-31T17:26:22Z vaporatorius quit (Changing host) 2019-08-31T17:26:22Z vaporatorius joined #lisp 2019-08-31T17:33:10Z lalitmee joined #lisp 2019-08-31T17:34:39Z aautcsh joined #lisp 2019-08-31T17:35:12Z nanoz joined #lisp 2019-08-31T17:48:15Z EvW quit (Ping timeout: 250 seconds) 2019-08-31T17:49:33Z yoeljacobsen joined #lisp 2019-08-31T17:50:00Z EvW1 joined #lisp 2019-08-31T17:53:32Z lalitmee quit (Remote host closed the connection) 2019-08-31T17:54:42Z makomo quit (Quit: WeeChat 2.4) 2019-08-31T17:55:24Z shifty joined #lisp 2019-08-31T17:56:28Z semz quit (Ping timeout: 264 seconds) 2019-08-31T18:01:04Z bradfonseca joined #lisp 2019-08-31T18:02:33Z dale joined #lisp 2019-08-31T18:03:05Z yoja joined #lisp 2019-08-31T18:04:10Z Lord_of_Life quit (Ping timeout: 244 seconds) 2019-08-31T18:06:10Z yoeljacobsen quit (Ping timeout: 246 seconds) 2019-08-31T18:12:42Z notzmv joined #lisp 2019-08-31T18:15:42Z semz joined #lisp 2019-08-31T18:15:42Z semz quit (Changing host) 2019-08-31T18:15:42Z semz joined #lisp 2019-08-31T18:16:06Z Necktwi joined #lisp 2019-08-31T18:22:40Z lalitmee joined #lisp 2019-08-31T18:25:07Z superkumasan joined #lisp 2019-08-31T18:27:40Z karlosz joined #lisp 2019-08-31T18:32:06Z Necktwi quit (Ping timeout: 245 seconds) 2019-08-31T18:39:52Z SN_ joined #lisp 2019-08-31T18:40:19Z red-dot quit (Read error: Connection reset by peer) 2019-08-31T18:40:27Z SN_ is now known as red-dot 2019-08-31T18:41:49Z learning quit (Remote host closed the connection) 2019-08-31T18:42:28Z Oladon joined #lisp 2019-08-31T18:43:54Z mathrick joined #lisp 2019-08-31T18:45:18Z learning joined #lisp 2019-08-31T18:46:25Z yoja quit (Ping timeout: 246 seconds) 2019-08-31T18:51:02Z renzhi joined #lisp 2019-08-31T18:56:53Z namosca joined #lisp 2019-08-31T18:57:42Z mrcode_: is it possible in CLOS to 'upgrade' a base class to one of its derived classes ? 2019-08-31T18:58:47Z Bike: clhs change-class 2019-08-31T18:58:47Z specbot: http://www.lispworks.com/reference/HyperSpec/Body/f_chg_cl.htm 2019-08-31T18:58:49Z Bike: maybe? 2019-08-31T18:59:20Z Lord_of_Life joined #lisp 2019-08-31T18:59:37Z |3b|: yeah, you can change it to completely unrelated classes if you want 2019-08-31T18:59:42Z mrcode_: hmmm... looks like it will work. thx Bike 2019-08-31T19:07:35Z pjb: change-class doesn't change a class, it changes an instance. It changes the class of an instance. 2019-08-31T19:08:30Z pjb: mrcode_: you can add slots to a class until it looks like one of its subclasses. An you can add methods to generic functions until they all have the same methods as its subclass… 2019-08-31T19:13:43Z dmiles quit (Ping timeout: 246 seconds) 2019-08-31T19:19:21Z pfdietz joined #lisp 2019-08-31T19:20:12Z akoana joined #lisp 2019-08-31T19:20:22Z dmiles joined #lisp 2019-08-31T19:28:28Z aautcsh quit (Ping timeout: 252 seconds) 2019-08-31T19:29:15Z hiroaki joined #lisp 2019-08-31T19:52:11Z ggole quit (Quit: Leaving) 2019-08-31T19:53:04Z lalitmee quit (Remote host closed the connection) 2019-08-31T19:57:53Z frodef joined #lisp 2019-08-31T20:02:34Z ravenou__ quit (Quit: My MacBook has gone to sleep. ZZZzzz…) 2019-08-31T20:12:08Z gravicappa quit (Ping timeout: 245 seconds) 2019-08-31T20:13:35Z t58 joined #lisp 2019-08-31T20:17:20Z makomo joined #lisp 2019-08-31T20:24:13Z vlatkoB quit (Remote host closed the connection) 2019-08-31T20:25:35Z Bike quit (Quit: Lost terminal) 2019-08-31T20:32:49Z renzhi quit (Ping timeout: 246 seconds) 2019-08-31T20:35:17Z equwalp: exit 2019-08-31T20:36:14Z edgar-rft: equwalp: try (exit) 2019-08-31T20:37:19Z lnh^ quit 2019-08-31T20:39:17Z verisimilitude: What are you wanting, equwalp? 2019-08-31T20:39:36Z equwalp: I missed a slash 2019-08-31T20:39:42Z equwalp: so /exit, sorry 2019-08-31T20:39:53Z equwalp: (exit) 2019-08-31T20:40:12Z Lord_of_Life_ joined #lisp 2019-08-31T20:40:14Z edgar-rft: error: there is no exit 2019-08-31T20:40:42Z equwalp: there is with ERC 2019-08-31T20:41:13Z Lord_of_Life quit (Ping timeout: 246 seconds) 2019-08-31T20:42:22Z edgar-rft: Oh, sorry, if I had known that you're using Elisp I had given an obscue an non-understandable error message. 2019-08-31T20:43:04Z edgar-rft: Debugger entered--Lisp error: (void-function exit) 2019-08-31T20:43:07Z Lord_of_Life_ is now known as Lord_of_Life 2019-08-31T20:46:43Z bradfonseca quit (Quit: Konversation terminated!) 2019-08-31T20:49:16Z namosca quit (Ping timeout: 246 seconds) 2019-08-31T21:01:47Z pjb: equwalp: or /quit if you want to exit from irc. 2019-08-31T21:02:18Z pjb: equwalp: you can also add a good bye message: /quit Good Bye Friends! See you soon! 2019-08-31T21:02:51Z pjb: equwalp: or: /quit Good Bye, Cruel World! ; depending on the mood. 2019-08-31T21:06:02Z nanoz quit (Ping timeout: 244 seconds) 2019-08-31T21:15:59Z aeth: pjb: The only type system I know is CL's. 2019-08-31T21:17:20Z pjb: ;-) 2019-08-31T21:17:27Z aeth: The other languages I know are purely dynamic without an emphasis on types, unlike CL (e.g. JS only has "number" and even Scheme usually only has one floating point type) or where the type is basically just related to the hardware (like C). I guess there's the third category, elaborate class hierarchies, but no one *knows* those. 2019-08-31T21:19:16Z EvW1 quit (Ping timeout: 264 seconds) 2019-08-31T21:19:55Z xkapastel joined #lisp 2019-08-31T21:21:58Z leb joined #lisp 2019-08-31T21:22:29Z aeth: It's interesting just how different even Scheme is, where the emphasis of types is things that satisfy a predicate, not stuff like CL's (or (integer -37 -4) (integer 4 37)) 2019-08-31T21:23:11Z learning quit (Remote host closed the connection) 2019-08-31T21:26:08Z learning joined #lisp 2019-08-31T21:28:59Z Volt_ joined #lisp 2019-08-31T21:34:13Z Oladon quit (Quit: Leaving.) 2019-08-31T21:36:00Z random-nick quit (Ping timeout: 244 seconds) 2019-08-31T21:41:16Z nydel quit (Ping timeout: 245 seconds) 2019-08-31T21:41:35Z vms14 joined #lisp 2019-08-31T21:42:26Z namosca joined #lisp 2019-08-31T21:43:44Z qop joined #lisp 2019-08-31T21:48:44Z Oladon joined #lisp 2019-08-31T21:48:55Z namosca quit (Ping timeout: 244 seconds) 2019-08-31T21:54:27Z vms14 quit (Remote host closed the connection) 2019-08-31T22:07:14Z learning quit (Remote host closed the connection) 2019-08-31T22:11:05Z learning joined #lisp 2019-08-31T22:18:25Z renzhi joined #lisp 2019-08-31T22:22:01Z qop is now known as Nomenclatura 2019-08-31T22:24:26Z akoana left #lisp 2019-08-31T22:30:14Z leb quit 2019-08-31T22:30:21Z t58 quit (Remote host closed the connection) 2019-08-31T22:30:47Z t58 joined #lisp 2019-08-31T22:38:31Z frodef quit (Ping timeout: 244 seconds) 2019-08-31T22:44:11Z varjag quit (Ping timeout: 245 seconds) 2019-08-31T22:45:26Z shifty quit (Ping timeout: 258 seconds) 2019-08-31T22:54:55Z notzmv quit (Ping timeout: 246 seconds) 2019-08-31T22:57:24Z Nomenclatura quit (Quit: q) 2019-08-31T23:13:23Z renzhi quit (Ping timeout: 245 seconds) 2019-08-31T23:19:28Z Oladon quit (Quit: Leaving.) 2019-08-31T23:27:35Z leb joined #lisp 2019-08-31T23:27:56Z makomo quit (Ping timeout: 245 seconds) 2019-08-31T23:28:23Z impulse joined #lisp 2019-08-31T23:28:28Z makomo joined #lisp 2019-08-31T23:36:09Z awolven joined #lisp 2019-08-31T23:38:35Z lucasb quit (Quit: Connection closed for inactivity) 2019-08-31T23:39:36Z Nomenclatura joined #lisp 2019-08-31T23:43:13Z techquila joined #lisp 2019-08-31T23:44:39Z mindthelion quit (Ping timeout: 244 seconds) 2019-08-31T23:52:24Z FennecCode joined #lisp 2019-08-31T23:57:05Z akoana_ joined #lisp 2019-08-31T23:57:55Z akoana_ quit (Client Quit) 2019-08-31T23:58:06Z akoana joined #lisp