habamax has quit [Quit: ERC 5.4 (IRC client for GNU Emacs 28.2)]
habamax has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
jmd_ has quit [Ping timeout: 250 seconds]
occ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
karlosz has quit [Quit: karlosz]
ec_ has joined #commonlisp
kevingal has quit [Ping timeout: 256 seconds]
ec_ has quit [Ping timeout: 240 seconds]
Oladon has quit [Quit: Leaving.]
ec_ has joined #commonlisp
habamax has quit [Quit: ERC 5.4 (IRC client for GNU Emacs 28.2)]
habamax has joined #commonlisp
NotThatRPG has joined #commonlisp
waleee has quit [Ping timeout: 265 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ronald has quit [Read error: Connection reset by peer]
ec_ has joined #commonlisp
ronald has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
amb007 has quit [Read error: Connection reset by peer]
amb007 has joined #commonlisp
ec_ has joined #commonlisp
abrantesasf has quit [Remote host closed the connection]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
ronald has quit [Ping timeout: 248 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
hineios has quit [Ping timeout: 248 seconds]
green_ has joined #commonlisp
ronald has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
hineios has joined #commonlisp
kstuart has joined #commonlisp
habamax has quit [Remote host closed the connection]
habamax has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
epony has quit [Remote host closed the connection]
epony has joined #commonlisp
habamax has quit [Ping timeout: 240 seconds]
Fare has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
makomo has joined #commonlisp
kstuart has quit [Quit: Client closed]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
habamax has joined #commonlisp
Spawns_Carpeting has quit [Quit: ZNC 1.8.2+deb2+b1 - https://znc.in]
Spawns_Carpeting has joined #commonlisp
dcb has quit [Quit: MSN Messenger 3.8]
occ has quit [Ping timeout: 250 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
Fare has quit [Ping timeout: 256 seconds]
ronald has quit [Ping timeout: 240 seconds]
ronald has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
occ has joined #commonlisp
Fare has joined #commonlisp
ec_ has joined #commonlisp
Oladon has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
makomo has quit [Quit: WeeChat 3.6]
<beach>
Let me take advantage of the relative silence to let those who are interested know what I am working on right now.
<beach>
First, I am working on Iconoclast: https://github.com/robert-strandh/Iconoclast which is a library that will have very direct AST representations for all standard special forms and most standard macro forms. Iconoclast uses the s-expression-syntax library written by scymtym in order to parse those standard forms. The s-expression-syntax library takes care of parsing, error detection and error reporting.
<ixelp>
GitHub - robert-strandh/Predicament: Extrinsic and intrinsic package system for Common Lisp
<beach>
Compared to phoe's portable condition system, this one has better documentation, better error detection, and was designed to be used both extrinsically (in a Common Lisp system that already has a condition system, just to see how it works or to test it) and intrinsically (as the main condition system of a new Common Lisp implementation) for instance in SICL.
<beach>
Furthermore, since the condition system has a lot of non-trivial macros, Predicament uses Iconoclast to turn macro forms into ASTs. Then those ASTs are used to turn macro forms into expansions. So again, the s-expression-syntax library takes care of parsing and error reporting for those non-trivial macro forms.
<beach>
Then I am working on Parcl: https://github.com/robert-strandh/Parcl which is a library that implements the Common Lisp package system, again both extrinsically and intrinsically. The extrinsic version is meant to be used in Second Climacs so that Common Lisp code in the editor buffer can be analyzed more precisely.
<ixelp>
GitHub - robert-strandh/Parcl
<beach>
The intrinsic version is meant for new Common Lisp implementations, and in particular for SICL. Again, Parcl contains some non-trivial macros, and in particular DEFPACKAGE, so again we use Iconoclast to help with macro expansion, just as in Predicament.
<beach>
Then I am working on Common Macros: https://github.com/robert-strandh/Common-macros which is a library that defines many standard macros, and in particular those that can be defined using portable code, and that can expand to portable (or near-portable) code. Again, since we are dealing with some non-trivial macros, Common Macros uses Iconoclast for expanding those.
<ixelp>
GitHub - robert-strandh/Common-macros: Portable implementation of many standard Common Lisp macros.
<beach>
The purpose of the Common Macros library is to serve as a starting point for the first phase of a Common Lisp compiler, in particular a cross compiler.
<beach>
For that purpose, I am working on Common Boot: https://github.com/robert-strandh/Common-boot which used the Clostrum library and the Common Macros library to create a first-class global environment that contains those macros, and which can be used by the first phase of a Common Lisp compiler.
<beach>
And I am working on Constrictor: https://github.com/robert-strandh/Constrictor which is a re-implementation of almost all operators in the Conses dictionary of the Common Lisp standard. It has better documentation and better error detection that most existing implementation. And again, it can be used extrinsically or intrinsically. Constrictor does not have any non-trivial macros, so it probably won't need to use Iconoclast.
<ixelp>
GitHub - robert-strandh/Constrictor: A library that implements the functionality of the Conses dictionary of the Common [...]
<beach>
I hope I didn't generate too much noise. I wouldn't have done it if it weren't for the relative silence here.
Fare has quit [Ping timeout: 246 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<jackdaniel>
common-boot could be called common-bloat, bl hinting at "basic lisp"
habamax has quit [Quit: ERC 5.4 (IRC client for GNU Emacs 28.2)]
jonatack has quit [Ping timeout: 240 seconds]
pve has joined #commonlisp
mgl has joined #commonlisp
zxrom has quit [Quit: Leaving]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
Brucio-61 has quit [Read error: Connection reset by peer]
scymtym has quit [Read error: Connection reset by peer]
msavoritias has joined #commonlisp
morganw has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<pve>
beach: Hey, the description for the Predicament repo says "Extrinsic and intrinsic package system for Common Lisp ". Should that be "... condition system ..." instead?
ec_ has quit [Ping timeout: 240 seconds]
Oladon has quit [Quit: Leaving.]
ec_ has joined #commonlisp
Gleefre has joined #commonlisp
Gleefre has quit [Remote host closed the connection]
ec_ has quit [Ping timeout: 240 seconds]
mgl has quit [Quit: Client closed]
Gleefre has joined #commonlisp
Lord_of_Life has quit [Ping timeout: 265 seconds]
Lord_of_Life has joined #commonlisp
ec_ has joined #commonlisp
habamax has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
occ has quit [Read error: Connection reset by peer]
NicknameJohn has quit [Read error: Connection reset by peer]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
amb007 has quit [Read error: Connection reset by peer]
amb007 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
attila_lendvai has joined #commonlisp
mi6x3m has joined #commonlisp
<mi6x3m>
hey, what is the standard way of parsing a chunk of code into a datastructure
<mi6x3m>
or, say, optimally, a file with code into a datastructure?
<jackdaniel>
does a string count as the data structure?
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<mi6x3m>
lol, no
seok9 has quit [Quit: Client closed]
seok9 has joined #commonlisp
seok9 has quit [Client Quit]
seok9 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<beach>
pve: Oops! Yes. Thank you.
<beach>
pve: Fixed, I think. Thanks again.
<beach>
mi6x3m: You call READ.
kevingal has joined #commonlisp
<pve>
beach: no problem
Gleefre has quit [Remote host closed the connection]
Gleefre has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<mi6x3m>
thanks beach !
<beach>
mi6x3m: Sure. That is exactly what READ is for. It is the parser for Common Lisp code.
attila_lendvai has quit [Ping timeout: 256 seconds]
Inline has joined #commonlisp
luna-is-here has quit [Ping timeout: 265 seconds]
luna-is-here has joined #commonlisp
luna-is-here has quit [Read error: Connection reset by peer]
luna-is-here has joined #commonlisp
seok9 has quit [Quit: Client closed]
seok9 has joined #commonlisp
<mi6x3m>
sorry, 1 more question today
<mi6x3m>
how do I define a function with 1 fixed and variable number of keyword args?
<hayley>
My favourite incident of people not reading the posts was that several people thought that someone was not familiar with Common Lisp, despite being able to name many deficiencies in the SBCL compiler.
Gleefre has quit [Ping timeout: 245 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<jcowan>
hayley: People are often very quick to flip the bozo bit on someone
<hayley>
People are also not very good at reading, in my experience.
<hayley>
(Or I'm not very good at writing - or maybe both.)
<jackdaniel>
suposedly around half of the population does not have an inner monologue, do not demand too much wrt reading
* splittist
asks himself what an inner monologue might be, but he doesn't know
Brucio-61 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
Inline has quit [Ping timeout: 256 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<mi6x3m>
is it normal for a package to be just 1 lisp file? I'm doing some structural stuff in my proj
<mi6x3m>
and there's this 1 file i made into a package
<mi6x3m>
because otherwise it gets crowded
<jackdaniel>
there are two (or more!) opposing views in cl community - one of them is to keep whole package definition and implementation in a single file
<jackdaniel>
some people argue that there should always be at least two packages - one (or more) for the implementation and one (or more) for the interface
<jackdaniel>
and there is a rainbow of choices inbetween
<mi6x3m>
interesting
<mi6x3m>
whatever works i guess
<jackdaniel>
there are some practical arguments in favor of various approaches
ec_ has quit [Ping timeout: 240 seconds]
seok9 has quit [Quit: Client closed]
amb007 has quit [Read error: Connection reset by peer]
seok9 has joined #commonlisp
amb007 has joined #commonlisp
Gleefre has joined #commonlisp
ec_ has joined #commonlisp
notzmv has quit [Ping timeout: 248 seconds]
Brucio-61 has quit [Ping timeout: 260 seconds]
Brucio-61 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
mi6x3m has quit [Quit: Leaving]
mgl has joined #commonlisp
ec_ has joined #commonlisp
random-nick has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
Gleefre has quit [Remote host closed the connection]
ec_ has joined #commonlisp
igemnace has joined #commonlisp
pjb has quit [Read error: Connection reset by peer]
green_ has quit [Ping timeout: 240 seconds]
<alcor>
jackdaniel: Out of curiosity, what would constitute the "interface" in CL? There is no formal "interface" specification in CL as in Java or C#.
ec_ has quit [Ping timeout: 240 seconds]
<alcor>
Would a CLOS class + a set of associated `defgeneric' definitions constitute an interface?
waleee has joined #commonlisp
<jackdaniel>
informally, from the package perspective, the interface is the set of symbols that is exported
<jackdaniel>
I guess that "protocol" is closer to what you describe (also undefined term :)
ec_ has joined #commonlisp
<jackdaniel>
s/exported/exports/
<alcor>
Ah, got it so the interface is more like the "public interface of the CL system"
<jackdaniel>
at least I've meant it that way. as you have pointed out it is not a defined term, so someone else may mean something else by the interface
<varjag>
i think it's more an ill suited attempt to pull java archinautics onto cl than any neccesity
* alcor
has brainrot from many years of writing "enterprise" Java/C#
<jackdaniel>
having names for things helps with communication. that does not necessarily imply retrofitting other languages inside cl
alejandrozf has joined #commonlisp
<varjag>
you have a point, but if we use same name for similar but not identical concepts there's this sort of uncanny valley
<jackdaniel>
names like an interface or protocol are plain english words. should I invent my own words? or tip-top to not use any, just describe concept in a roundabout way?
<varjag>
you could say "package exports" :)
<jackdaniel>
tip top it is
<alcor>
Lately, I've been favoring more verbose (but precise) terms for documentation & communication purposes. For example "public/exported interface of a CL system".
<yitzi>
I suspect they fixed that by 0.8.6
ec_ has quit [Ping timeout: 240 seconds]
<varjag>
saying "interface" is fine as long as the other party understands it's not the no-inheritance oop concept that its colloquial use solidified around
varjag has quit [Quit: ERC (IRC client for Emacs 27.1)]
ec_ has joined #commonlisp
<waleee>
Helmholtz: a quite old sbcl which might not work for newer quicklisp dists
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
anticomputer has quit [Quit: quit]
anticomputer has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
NotThatRPG has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
rgherdt has quit [Ping timeout: 250 seconds]
rgherdt has joined #commonlisp
NicknameJohn has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
mgl has joined #commonlisp
seok9 has quit [Quit: Client closed]
pve has quit [Ping timeout: 268 seconds]
seok9 has joined #commonlisp
pve has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<Helmholtz>
waleee, ok thanks
ec_ has quit [Ping timeout: 240 seconds]
<waleee>
the reader macros the packages uses for sbcl and the other implementations might not be versioned etc
<waleee>
Helmholtz: also iirc vlime has had a bit of bitrot
<waleee>
oh. Maybe not, some PR:s have been merged
Gleefre has joined #commonlisp
<yitzi>
Helmholtz: The is fix is on the usocket repo, but quicklisp hasn't been updated for while. So it isn't in quicklisp yet.
Brucio-61 has quit [Ping timeout: 260 seconds]
Brucio-61 has joined #commonlisp
NotThatRPG has joined #commonlisp
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
mi6x3m has joined #commonlisp
<mi6x3m>
hey, anything wrong with using an alist with string keys?
<mi6x3m>
afaik for plists it's optimal to use symbols
<jackdaniel>
no, just remember to pass the test
<mi6x3m>
but assoc supports :test
<jackdaniel>
it is technically more expensive to look for a specific string, but alists are not usually long
<jackdaniel>
and if they are, you should probably switch to a hash table anyway
<skin>
I have a question. This morning I found myself wanting to use a declare statement around basically an interface. I wanted to be able to optimize for (and in some cases restrict, based on the implementation) an object which had implemented a specific set of generic functions.
<skin>
I get that this is probably not idiomatic. My question is: if it is, how to do it. If it isn't, what do people do instead.
<skin>
like `(defun a (x y z) (declare (type implements-specific-gfs y)) (gf1 y) (gf2 y) (gf3 y))`
<mi6x3m>
thank you jackdaniel
Cymew has quit [Ping timeout: 256 seconds]
<jackdaniel>
skin: you could go with fast-generic-functions and seal the object's class domain on them (but that requires a custom metaclass for these generic functions)
<skin>
skin
<skin>
sorry. mistyped
<jackdaniel>
other than that you could have a two-level interface: normal functions and generic functions that trampoline to them
<jackdaniel>
and at your discretion use normal functions directly
<skin>
i'll look it up, thanks. I figured there was some custom thing. But I also want to know what is more idiomatic, more universal
<skin>
what does the two level interface look like?
<skin>
ok so create a "blank class" and have that class implement defaults.
<skin>
:D Seems legit.
<jackdaniel>
I don't know what do you mean by a blank class
<skin>
`that-class` in your example
<jackdaniel>
well, you object has some class either way, but you may specialize on the class t
ec_ has quit [Ping timeout: 240 seconds]
epony has joined #commonlisp
<skin>
OK. You could specialize on `nil` in Clojure, I was wondering how for CL. So specialize on the `t` class, got it. That actually would work pretty well, i'd just have to make sure the methods weren't dependent on one another. gf1 and fg2 can't care about how each other is implemented in that case
<skin>
Thanks! Something to chew on.
<jcowan>
splittist: Perhaps you have an inner dialogue. I'd like to have an inner dialogue, but when I ask myself something, myself almost never answers.
tyson2 has quit [Remote host closed the connection]
ec_ has quit [Ping timeout: 240 seconds]
NicknameJohn has quit [Ping timeout: 248 seconds]
ec_ has joined #commonlisp
euandreh has joined #commonlisp
euandreh1 has joined #commonlisp
euandreh has quit [Client Quit]
euandreh1 is now known as euandreh
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
zxrom has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
seok9 has quit [Quit: Client closed]
seok9 has joined #commonlisp
Inline has quit [Ping timeout: 240 seconds]
czy has quit [Remote host closed the connection]
zxcvz has joined #commonlisp
d4ryus has quit [Quit: WeeChat 3.8]
tane has quit [Remote host closed the connection]
NotThatRPG has joined #commonlisp
waleee has quit [Ping timeout: 240 seconds]
shka has joined #commonlisp
ec_ has joined #commonlisp
Gleefre has quit [Remote host closed the connection]
ec_ has quit [Ping timeout: 240 seconds]
Gleefre has joined #commonlisp
ec_ has joined #commonlisp
tyson2 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<hexology>
is there a library out there for buffered i/o? like "yield an iterator-like thing over lines, internally buffering in chunks of 8192"? or do i have to roll my own
<hexology>
or does e.g. sbcl already do that?
notzmv has joined #commonlisp
waleee has joined #commonlisp
zxcvz has quit [Quit: zxcvz]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
epony has quit [K-Lined]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
Krystof has quit [Ping timeout: 250 seconds]
random-nick has quit [Ping timeout: 256 seconds]
Brucio-61 has quit [Ping timeout: 260 seconds]
random-nick has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
kevingal has joined #commonlisp
nij- has joined #commonlisp
Krystof has joined #commonlisp
Brucio-61 has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
msavoritias has quit [Ping timeout: 240 seconds]
azimut has joined #commonlisp
kevingal has quit [Ping timeout: 240 seconds]
robin has quit [Read error: Connection reset by peer]
robin has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
szkl has quit [Quit: Connection closed for inactivity]
ec_ has joined #commonlisp
Fare has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
overclucker has quit [Ping timeout: 240 seconds]
overclucker has joined #commonlisp
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
piethesailor has joined #commonlisp
<piethesailor>
Hello all!
piethesailor has quit [Remote host closed the connection]
ec_ has quit [Ping timeout: 240 seconds]
morganw has quit [Remote host closed the connection]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
rgherdt has quit [Remote host closed the connection]
ec_ has joined #commonlisp
pve has quit [Quit: leaving]
habamax has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
scymtym has joined #commonlisp
ec_ has quit [Ping timeout: 240 seconds]
bjork1intosh has quit [Remote host closed the connection]
ec_ has joined #commonlisp
bjork1intosh has joined #commonlisp
Fare has quit [Ping timeout: 248 seconds]
ec_ has quit [Ping timeout: 240 seconds]
ec_ has joined #commonlisp
<nij->
In defclass I can specify the type of a slot. But I observe in sbcl it does not enforce. For example, say I define a slot to have type integer. There is no error when I initiate an object whose slot value is a string.
<nij->
How do I enforce it?
amb007 has quit [Ping timeout: 265 seconds]
amb007 has joined #commonlisp
NotThatRPG has quit [Ping timeout: 240 seconds]
<Bike>
in sbcl, "Types declared using the :type slot option in defclass are asserted if and only if the class was defined in safe code and the slot access location is in safe code as well."
<Bike>
safe code meaning you have an optimize safety 3
<Bike>
you could also check types yourself in shared-initialize and slot-value-using-class, if you really want