<Colleen>
no-defun-allowed: Got it. I'll let drmeister know as soon as possible.
<no-defun-allowed>
(And GitLab makes me wait a day for the old repository to be deleted, which is new and very annoying.)
FreeBirdLjj has joined #lisp
<Oladon>
So I've installed sbcl via apt on Debian running in the Windows Subsystem for Linux... and I'm getting "invalid magic number in core" when trying to start it. Any ideas?
<Oladon>
(Trying to compile it myself results in a different [fatal] error, unfortunately)
<asdf_asdf_asdf>
Oladon, set variables environment, maybe in it is issue.
<asdf_asdf_asdf>
You maybe use older version than current.
<Oladon>
It is a slightly older version, but not too old — 1.4.16
<asdf_asdf_asdf>
You must set valid configuration file, that Windows under Linux works.
<Oladon>
asdf_asdf_asdf: I'm not sure what you mean. Linux is running fine on WSL... it's just sbcl that's acting up.
<Oladon>
Emacs runs perfectly, for example.
<asdf_asdf_asdf>
Run sbcl via command line.
FreeBirdLjj has quit [Ping timeout: 268 seconds]
<Oladon>
Yes, that's what I'm doing.
<asdf_asdf_asdf>
And check loaded module to SBCL in system memory, registers.
<Oladon>
As I mentioned above, sbcl doesn't run. It exits with a mysterious error: "invalid magic number in core: f145342434c should have been 5342434c"
<_death>
oh, windows subsystem thingy.. dunno about that
<Oladon>
hehe :D
<Oladon>
I'm _loving_ it so far... it's like the beautiful blend of Windows and Linux that I've always wanted.
<Oladon>
Except for not being able to run SBCL yet :P
<Oladon>
Bwahaha! AMD64 binary of 2.0.0 installed and working!
turona has quit [Ping timeout: 272 seconds]
turona has joined #lisp
adolby has quit [Ping timeout: 265 seconds]
adolby has joined #lisp
<mfiano>
Xach: did you ever finish that cpu core query thing?
wxie has joined #lisp
terpri has joined #lisp
wr has joined #lisp
wr has quit [Client Quit]
gko_ has joined #lisp
nullniverse has joined #lisp
nullniverse has quit [Max SendQ exceeded]
nullniverse has joined #lisp
FreeBirdLjj has joined #lisp
adamantium has quit [Ping timeout: 260 seconds]
asdf_asdf_asdf has quit [Quit: asdf_asdf_asdf]
gioyik has joined #lisp
<mfiano>
Is there a way for the generated string to have commas in the left part of a floating point number with FORMAT? Like ~:d will print 1000 as "1,000", but similarly for 1000.0 -> "1,000.0". The reason I ask, is I'd like to control the number of digits after the decimal point to be 2, with ~,2f, but also would like the digits before the decimal point to have commas in the appropriate place.
<mfiano>
and before anyone asks, no, this is not improperly using fp for money :)
<mfiano>
Well I just solved it with fewer function calls
FreeBirdLjj has quit [Ping timeout: 265 seconds]
pjb has quit [Remote host closed the connection]
pjb has joined #lisp
PuercoPope has quit [Remote host closed the connection]
lucasb has quit [Quit: Connection closed for inactivity]
nullniverse has quit [Quit: Leaving]
rwcom2 has joined #lisp
rwcom has quit [Ping timeout: 268 seconds]
rwcom2 is now known as rwcom
torbo has joined #lisp
wxie has quit [Remote host closed the connection]
Bad_K4rMa has quit [Remote host closed the connection]
adom` has joined #lisp
jibanes has quit [Ping timeout: 260 seconds]
gabiruh_ has joined #lisp
jibanes has joined #lisp
Arcaelyx has joined #lisp
gabiruh has quit [Ping timeout: 265 seconds]
vory has joined #lisp
vory has quit [Client Quit]
adom` has quit [Remote host closed the connection]
madrik has joined #lisp
ebzzry has quit [Read error: Connection reset by peer]
oxum has quit [Ping timeout: 272 seconds]
statusf90 has quit [Quit: statusf90]
oxum has joined #lisp
gravicappa has joined #lisp
shifty has quit [Ping timeout: 272 seconds]
<beach>
Good morning everyone!
Nilby has quit [Ping timeout: 240 seconds]
trittweiler_ has quit [Ping timeout: 268 seconds]
ebzzry has joined #lisp
orivej has joined #lisp
adamantium has joined #lisp
<cgay>
I'm suddenly unable to M-. a macro call with slime: "DEFINITION-SOURCE of macro LTD-FN did not contain meaningful information." Is it possible that recompiling the macro (with C-M-x) broke the who-calls info? Known problem?
ebzzry has quit [Read error: Connection reset by peer]
gnufr33d0m has joined #lisp
<cgay>
(sbcl 1.5.6, slime 2.23)
<cgay>
M-x slime-compile-and-load-file fixes it
FreeBirdLjj has joined #lisp
<cgay>
C-M-x breaks it again. This seems pretty bad. Am I holding it wrong?
<beach>
Does it have anything to do with the DEBUG OPTIMIZE quality?
<pjb>
cgay: it's normal, slime-eval-defun doesn't know about the file.
<pjb>
You could use it in a buffer that is not saved to a file.
<beach>
Ah, sounds right.
<pjb>
cgay: always use C-c C-l or C-c C-k.
<cgay>
ah, thanks
<pjb>
Furthermore, when you edit a macro, you need to reload or recompile the rest of the project that use this macro!
<pjb>
It's basically useless to C-x C-e a macro alone…
<cgay>
I'm just debugging a particular call to the macro (which I also hit C-M-x on)
<pjb>
Of course…
<pjb>
Do you really need to jump to the source? Isn't your macro too big in this case? You can call subfunctions from a macro…
<pjb>
(and debug them separately).
<cgay>
talk to peter norvig, he wrote it. :)
<cgay>
tbh, I don't see why this needs to be a macro at all
Bike has quit [Quit: Lost terminal]
voidlily has quit [Remote host closed the connection]
narimiran has joined #lisp
voidlily has joined #lisp
ggole has joined #lisp
krid has quit [Ping timeout: 268 seconds]
ebzzry has joined #lisp
trittweiler_ has joined #lisp
shangul has joined #lisp
dddddd has quit [Remote host closed the connection]
adamantium has quit [Remote host closed the connection]
torbo has quit [Remote host closed the connection]
_whitelogger has joined #lisp
gnufr33d0m has quit [Ping timeout: 240 seconds]
vlatkoB has joined #lisp
oni-on-ion has joined #lisp
gioyik has quit [Ping timeout: 260 seconds]
trittweiler_ is now known as tcr
shifty has joined #lisp
Oladon has quit [Quit: Leaving.]
gioyik has joined #lisp
tcr has quit [Ping timeout: 265 seconds]
gioyik has quit [Ping timeout: 268 seconds]
Arcaelyx has quit [Ping timeout: 260 seconds]
gioyik has joined #lisp
_whitelogger has joined #lisp
rwcom7 has joined #lisp
rwcom has quit [Ping timeout: 272 seconds]
rwcom7 is now known as rwcom
mangul has joined #lisp
shangul has quit [Ping timeout: 265 seconds]
tcr has joined #lisp
shka_ has joined #lisp
ealfonso has joined #lisp
tcr has quit [Ping timeout: 265 seconds]
ggole has quit [Remote host closed the connection]
ggole has joined #lisp
cartwright has quit [Remote host closed the connection]
cartwright has joined #lisp
Nistur has quit [Ping timeout: 265 seconds]
Nistur has joined #lisp
mangul is now known as shangul
tcr has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #lisp
gioyik has joined #lisp
Necktwi has quit [Ping timeout: 265 seconds]
gioyik has quit [Ping timeout: 268 seconds]
cl-arthur has quit [Read error: Connection reset by peer]
rippa has joined #lisp
Necktwi has joined #lisp
rtaylor has joined #lisp
rtaylor has quit [Quit: Lost terminal]
random-nick has joined #lisp
nowhere_man has joined #lisp
phlim has joined #lisp
gioyik has joined #lisp
harovali has joined #lisp
davepdotorg has joined #lisp
harovali has quit [Ping timeout: 272 seconds]
harovali has joined #lisp
ealfonso has quit [Ping timeout: 246 seconds]
davepdotorg has quit [Ping timeout: 265 seconds]
msk has quit [Remote host closed the connection]
msk has joined #lisp
gioyik has quit [Ping timeout: 268 seconds]
<harovali>
hi! When defining my own classes in a new packe of mine, why can I be getting the names of the classes or the slots evaluated as if they were unexistent variables ? see the code here please http://tiny.cc/z196iz
varjag has joined #lisp
Necktwi has quit [Ping timeout: 240 seconds]
dale has quit [Quit: My computer has gone to sleep]
karlosz has quit [Quit: karlosz]
scymtym has quit [Ping timeout: 260 seconds]
Necktwi has joined #lisp
gioyik has joined #lisp
pnp has joined #lisp
<no-defun-allowed>
Make sure your package :USEs the CL package.
xkapastel has joined #lisp
<harovali>
no-defun-allowed: thanks! now it works. Is it mandatory always?
<no-defun-allowed>
I think the default USE list of a package is undefined.
gioyik has quit [Ping timeout: 268 seconds]
davr0s_ has joined #lisp
<harovali>
no-defun-allowed: thank you
orivej has quit [Ping timeout: 268 seconds]
ebzzry has quit [Ping timeout: 265 seconds]
FreeBirdLjj has quit [Remote host closed the connection]
hiroaki has joined #lisp
FreeBirdLjj has joined #lisp
nika has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
kslt1 has joined #lisp
narimiran has quit [Ping timeout: 265 seconds]
FreeBirdLjj has joined #lisp
v88m has quit [Ping timeout: 268 seconds]
gioyik has joined #lisp
EvW1 has joined #lisp
ebzzry has joined #lisp
<harovali>
I know lexical bindings are special names. However I wonder, it is posible to setf a lexical binding from within a specially crafted macro expanded in the lexical scope?
gioyik has quit [Ping timeout: 265 seconds]
jmercouris has joined #lisp
EvW1 has quit [Ping timeout: 248 seconds]
tiwEllien has joined #lisp
msk has quit [Remote host closed the connection]
msk has joined #lisp
Lord_of_Life_ has joined #lisp
Lord_of_Life has quit [Ping timeout: 265 seconds]
Lord_of_Life_ is now known as Lord_of_Life
<harovali>
in other words, can macros be used to manipulate lexical variables?
<Shinmera>
look at the macro expansion of one of those.
msk has quit [Remote host closed the connection]
msk has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
FreeBirdLjj has joined #lisp
dddddd has joined #lisp
EvW has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
tiwEllien has quit [Ping timeout: 265 seconds]
FreeBirdLjj has joined #lisp
adamantium has joined #lisp
tiwEllien has joined #lisp
rwcom2 has joined #lisp
oni-on-ion has quit [Remote host closed the connection]
oni-on-ion has joined #lisp
rwcom has quit [Ping timeout: 268 seconds]
rwcom2 is now known as rwcom
cyberlard has quit [Quit: Leaving]
v88m has joined #lisp
dddddd_ has joined #lisp
xkapastel has quit [Quit: Connection closed for inactivity]
dddddd has quit [Ping timeout: 265 seconds]
dddddd_ is now known as dddddd
v88m has quit [Ping timeout: 240 seconds]
madage has quit [Remote host closed the connection]
cosimone has joined #lisp
EvW has quit [Ping timeout: 272 seconds]
cyberlard has joined #lisp
msk has quit [Remote host closed the connection]
msk has joined #lisp
X-Scale has quit [Ping timeout: 260 seconds]
X-Scale` has joined #lisp
X-Scale` is now known as X-Scale
msk has quit [Remote host closed the connection]
msk has joined #lisp
Bike has joined #lisp
msk has quit [Remote host closed the connection]
msk has joined #lisp
X-Scale has quit [Ping timeout: 265 seconds]
cosimone has quit [Quit: Quit.]
X-Scale` has joined #lisp
lucasb has joined #lisp
X-Scale` is now known as X-Scale
ebzzry has quit [Read error: Connection reset by peer]
cl-arthur has joined #lisp
EvW1 has joined #lisp
Abe has joined #lisp
adamantium has quit [Remote host closed the connection]
<pjb>
harovali: but you cannot mutate the lexical variable at macroexpansion time, because at that time, no such lexical variable exist.
_jrjsmrtn has joined #lisp
<pjb>
harovali: think about it, macroexpansion occurs once, but lexical variables are created several times, each time the function is called!
__jrjsmrtn__ has quit [Ping timeout: 272 seconds]
EvW1 has quit [Ping timeout: 260 seconds]
tiwEllien has quit [Ping timeout: 268 seconds]
tiwEllien has joined #lisp
pnp has quit [Remote host closed the connection]
madage has joined #lisp
gioyik has joined #lisp
scymtym has joined #lisp
gioyik has quit [Ping timeout: 265 seconds]
tiwEllien has quit [Ping timeout: 268 seconds]
gioyik has joined #lisp
davr0s_ has quit [Quit: Ex-Chat]
cosimone has joined #lisp
tiwEllien has joined #lisp
asdf_asdf_asdf has joined #lisp
gioyik has quit [Ping timeout: 265 seconds]
tiwEllien has quit [Ping timeout: 240 seconds]
davr0s_ has joined #lisp
jprajzne has quit [Quit: jprajzne]
jprajzne has joined #lisp
jprajzne has quit [Client Quit]
tiwEllien has joined #lisp
jprajzne has joined #lisp
tiwEllien has quit [Ping timeout: 268 seconds]
varjag has quit [Ping timeout: 240 seconds]
tiwEllien has joined #lisp
Jesin has joined #lisp
raghavgururajan has joined #lisp
i473289473829 has joined #lisp
i473289473829 has quit [Remote host closed the connection]
kisp has joined #lisp
gioyik has joined #lisp
kisp has quit [Remote host closed the connection]
raghavgururajan has quit [Remote host closed the connection]
v88m has joined #lisp
gioyik has quit [Ping timeout: 260 seconds]
gnufr33d0m has joined #lisp
varjag has joined #lisp
krid has joined #lisp
ebzzry has joined #lisp
rwcom5 has joined #lisp
rwcom has quit [Ping timeout: 240 seconds]
rwcom5 is now known as rwcom
xuxuru has joined #lisp
Abe has quit [Ping timeout: 260 seconds]
Oladon has joined #lisp
statusf90 has joined #lisp
gioyik has joined #lisp
cl-arthur has quit [Read error: Connection reset by peer]
xuxuru has quit [Ping timeout: 240 seconds]
xuxuru has joined #lisp
pnp has joined #lisp
pnp has left #lisp [#lisp]
Abe has joined #lisp
cl-arthur has joined #lisp
refpga has joined #lisp
longshi has joined #lisp
Abe has quit [Ping timeout: 265 seconds]
refpga has quit [Read error: Connection reset by peer]
refpga has joined #lisp
gioyik has quit [Ping timeout: 265 seconds]
gioyik has joined #lisp
brown121408 has joined #lisp
gnufr33d0m has quit [Quit: gnufr33d0m]
07IADLP05 has quit [Ping timeout: 268 seconds]
xuxuru has quit [Quit: xuxuru]
harovali has quit [Remote host closed the connection]
xuxuru has joined #lisp
longshi has quit [Ping timeout: 240 seconds]
emys has joined #lisp
Arcaelyx has joined #lisp
ebzzry has quit [Read error: Connection reset by peer]
xuxuru has quit [Quit: xuxuru]
gko_ has quit [Ping timeout: 240 seconds]
epony has quit [Remote host closed the connection]
ebrasca has joined #lisp
brown121408 has quit [Read error: Connection reset by peer]
<galdor>
is there a common pattern to name functions which generate the string representation of a value ? objects have PRINT-OBJECT, and there are lot of PRINC-*/PRIN1/* functions, but there does not seem to be anything for random types
brown121407 has joined #lisp
tiwEllien has quit [Ping timeout: 240 seconds]
<galdor>
for example, if one define a screen color as a (VECTOR (UNSIGNED-BYTE 8) 3), would it be sane to have PRINT-COLOR and PRINT-COLOR-TO-STRING ?
<beach>
galdor: PRINT-OBJECT has a method for all built-in objects.
<beach>
galdor: And it has default methods for instances of user-defined classes.
<galdor>
objects yes; what about non-object values ?
<beach>
There is no such thing.
<galdor>
for a color, I would not create a class when I just need a value and a type
<beach>
But, yes, PRINT-OBJECT is a generic function, so it can only specialize on classes.
<galdor>
so no commonly used naming scheme for this kind of usecase
<galdor>
then PRINT-* and PRINT-*-TO-STRING it is :)
tiwEllien has joined #lisp
<beach>
Only one of them is really needed, but sure.
Oladon has quit [Quit: Leaving.]
<beach>
I insist though, that there is no such thing as a non-object value.
brown121407 has quit [Ping timeout: 240 seconds]
<beach>
From the glossary: OBJECT n. 1. any Lisp datum.
<galdor>
I was not precise indeed
<galdor>
any value is an object, but you cannot specialize methods on types, only on classes
<galdor>
so you can specialize on SIMPLE-VECTOR, but not on (SIMPLE-VECTOR 4)
<pjb>
galdor: yes, sorry the authors of CL couldn't guess you need for a color format such as #123456 fourty years in advance. Try a time machine!
<galdor>
I did not blame CL authors or complained about a lack of standard way, I was just asking about what developers do in general in that kind of situation, and how they usually name these functions
<galdor>
no everything is an attack against CL
<pjb>
galdor: you can indeed use functions to do it, but I prefer to define classes and to use methods.
<pjb>
galdor: so this way, I don't risk printing as colors a direction vector.
<pjb>
print-object is a hook for debugging printing. Don't use it to print user output or file formats…
<pjb>
Define your own generic function.
emys has quit [Ping timeout: 265 seconds]
<pjb>
galdor: also, the advantage of using a class to represent colors, is that you can easily change the representation. Instead of RGB, you can also use YMCB or some other color representation.
<galdor>
I'm aware of that
brown121408 has quit [Read error: Connection reset by peer]
<galdor>
of course you could also deftype cmyk-color, rgb-color, and finally deftype color as '(or ...)
brown121408 has joined #lisp
adamantium has joined #lisp
emys has joined #lisp
Retropikzel has joined #lisp
refpga has quit [Read error: Connection reset by peer]
refpga has joined #lisp
refpga has quit [Read error: Connection reset by peer]
cl-arthur has quit [Read error: Connection reset by peer]
refpga has joined #lisp
cl-arthur has joined #lisp
emys has quit [Ping timeout: 265 seconds]
kajo has quit [Ping timeout: 272 seconds]
kajo has joined #lisp
kslt1 has quit [Ping timeout: 268 seconds]
nullniverse has joined #lisp
nullniverse has joined #lisp
nullniverse has quit [Changing host]
nowhere_man has quit [Ping timeout: 272 seconds]
emys has joined #lisp
clothespin has joined #lisp
jmercouris has quit [Remote host closed the connection]
puchacz has joined #lisp
refpga has quit [Ping timeout: 240 seconds]
<puchacz>
hi, is it possible to change a configuration parameter so longer lists are printed without line breaks?
<puchacz>
I represent matrices as lists of lists
<puchacz>
and I would like a row of a matrix to be printed as a single row
adamantium has quit [Remote host closed the connection]
<puchacz>
asdf_asdf_asdf - not sure what I can do with print-object, if a matrix was my own type, I could specialise of course, but it is just a cons now
adamantium has joined #lisp
<pjb>
(defclass my-own-matrix () ((slots)) (defgeneric mref (matrix i j)) (defmethod mref ((m my-own-matrix) i j) …)
gnufr33d0m has quit [Quit: gnufr33d0m]
<puchacz>
pjb - so just wrap my '((1 2 3) (4 5 6)) etc. in a CLOS object?
<pjb>
Exactly.
<puchacz>
or use #2A as everybody else seems to do :)
<pjb>
Not necessarily.
<puchacz>
they print nicely
<pjb>
Not always.
<puchacz>
ah
<puchacz>
btw, has anybody worked with numcl ?
gnufr33d0m_ has joined #lisp
emys has quit [Ping timeout: 260 seconds]
cosimone has joined #lisp
cosimone has quit [Client Quit]
adamantium has quit [Remote host closed the connection]
<puchacz>
okay, going to wrap them in a CLOS object for my program, regardless of what underlying library I am using - numcl uses #2A for instance, my own unoptimised toy thing uses list of lists
vlatkoB has quit [Remote host closed the connection]
<galdor>
functions are available from a package
<galdor>
(and btw you are suppose to load "lisp-critic", not :lisp-critic, but it's a detail)
karlosz has quit [Quit: karlosz]
vlatkoB has joined #lisp
<Bad_K4rMa>
is there something im doing wrong?
<galdor>
I'm pretty sure you are in the CL-USER package, while the CRITIQUE function is exported from a different package, provided by the system you just loaded
<Nilby>
Interesting. I see texfrag mode in emacs, but where is tex-print from?
<_death>
I just wrote it.. a few lines to demonstrate
<Nilby>
Nice.
william1 has quit [Ping timeout: 265 seconds]
oni-on-ion has joined #lisp
EvW1 has quit [Ping timeout: 272 seconds]
chocimir has joined #lisp
patrixl has joined #lisp
EvW has joined #lisp
cookie-monster has quit [Ping timeout: 268 seconds]
patrixl has quit [Remote host closed the connection]
aeth has quit [Ping timeout: 272 seconds]
aeth has joined #lisp
karlosz has quit [Quit: karlosz]
Bad_K4rMa has joined #lisp
karlosz has joined #lisp
anti_oop has joined #lisp
<anti_oop>
hi
<aeth>
hi
<aeth>
anti_oop: I assume your name means you are anti-OOP?
<anti_oop>
I'm searching for a language with it's just totaly impossible to do OOP
<aeth>
That's not this one.
<aeth>
You can avoid OOP entirely, but there is an OOP system (actually, kind of 2-3)
v88m has quit [Ping timeout: 260 seconds]
orivej has quit [Ping timeout: 268 seconds]
<anti_oop>
what a crap
<aeth>
anti_oop: So the original Common Lisp didn't have an object-oriented programming system
<aeth>
But the 1994 (iirc) standard does have the Common Lisp Object System (CLOS)
<aeth>
But because it was added a decade later, you can largely avoid it if you want.
<aeth>
There's still sort of an OOP system in structs (which you can simply just avoid if you just don't use inheritance with them), which are older and more efficient. The exception system (called "conditions") is also essentially OOP, but I'm sure plenty of programmers are used to avoiding the use of exceptions.
<aeth>
There are some Lisps that aren't OOP at all, but this is a Common Lisp channel, so you can try ##lisp or #scheme for others. Schemes tend to add their own OOP system even though there isn't a standard one, though.
<aeth>
(The original standard CL was circa 1984, which was a de facto standard based on a book. That's why I said "a decade later".)
<aeth>
anti_oop: The Common Lisp OOP system is very different from most, though. It uses multiple dispatch and its methods are syntactically indistinguishable from functions. There's no foo.bar(baz), it's (bar foo baz)
nullniverse has quit [Quit: Leaving]
<aeth>
anti_oop: "just totally impossible to do OOP" is very un-Lispy, though. The whole Lisp way is to let you write whatever paradigm you want to write in, whether built-in or using macros. Common Lisp has several kinds of macros, including syntactic macros (via defmacro) and C-style "reader macros" (character-based, modifying the reader, i.e. parser). So even if OOP wasn't included, anyone could add it.
<aeth>
And similarly, anyone can avoid it because there are lots of alternative ways to do things.
<p_l>
arguably, LISP was OOP since 1.0, just not the Simula-derived OOP that most people recognize from C++ or Java (where it got merged with bits of Smalltalk through Objective-C)
<no-defun-allowed>
anti_oop: Can you just not perform OOP in a language (given it's not Java and it's not shoved down your throat)?
<aeth>
no-defun-allowed: heh, challenge accepted, I'm going to write non-OOP in Java (via static classes or something like that?) :-p
<anti_oop>
the problem is that It looks like a hack.
<anti_oop>
even in JavaScript for basic, you will be forced to invoke some methods
<anti_oop>
you will use a library, but everythink is design to work in a OOP context
<aeth>
anti_oop: That's not the case for Common Lisp because the language was essentially finalized before the addition of CLOS.
Arcaelyx has quit [Quit: Arcaelyx]
<aeth>
Nothing built in is necessarily going to rely on CLOS except for CLOSsy stuff and maybe the exception system (in SBCL it doesn't because it is used before CLOS is implemented in the internals, but in most implementations it is based on CLOS)
<Nilby>
I think there is no laguage where it's totally impossible to do OOP. For example C and GTK.
<aeth>
anti_oop: In CL, you're not going to see the difference between a method and a function. It has unified syntax. There's no foo.bar(baz) or, I guess, (dot foo bar baz) in Lispy syntax. Instead, it's (bar foo baz) which would be like bar(foo, baz) in "normal" synax.
<aeth>
So there's no difference from your perspective if it's a method or a function, except that a method will dispatch on the class of the arguments. But even that could be equivalently done with a typecase in a DEFUN, just not extensibly.
<p_l>
pretty sure I/O system uses CLOS, at least partially
<aeth>
But even still, the built-ins are generally not methods. Even generic stuff like + or map are using some implementation-internal system, rather than CLOS.
<p_l>
(in SBCL)
<aeth>
p_l: Well, streams can be extended through a very CLOSsy sytem known as gray-streams, portably using trivial-gray-streams.
<aeth>
But from the external perspective, if there's no gray-streams being used, it's not very CLOSsy.
<aeth>
Where you're going to see a lot of CLOS at work afaik is the Meta-Object Protocol, which you'll naturally avoid if you're not using CLOS in the first place. (Or in the internals of ASDF...)
varjag has quit [Ping timeout: 265 seconds]
* Nilby
thinks CL was specified with concern to appease people who hated OOP.
<aeth>
To some extent, you're probably going to be "using CLOS" in some places through implementation internals, and through ASDF (the package system), but you're not really going to see it.
<aeth>
Nilby: CL is... meant to be extremely multi-paradigm. Imo, it's designed to appease people who don't want to be forced into thinking a certain way.
* Nilby
agrees.
tiwEllien has quit [Ping timeout: 240 seconds]
<p_l>
Nilby: also, old Lisp code (especially LISP code) was very OOP in ways that predate Class-oriented programming of today
<aeth>
Imo, most languages have some gimmick that is meant to shape your thinking. For Scheme, it's tail recursion (and call/cc to a lesser extent). For Java, it's its form of rigid, static OOP. For Rust, it's the borrow checker. For Perl, it's regex over lines. Etc.
<p_l>
the "so ancient it's forgotten" OOP in Lisp was based around symbols and their plists
<aeth>
But I can't really think of something for CL. Maybe macros? Maybe LOOP-oriented programming?
<Nilby>
p_l: Yes. I've seen that style. Also old Lisp code looking Haskell-ish. But I've also seem assembler using OOP.
<p_l>
Nilby: yep. But there's a lot more to OO than what's being sold as OOP
<p_l>
the oldest OO system I know of was Sketchpad
<p_l>
(explicitly cited by Alan Kay in his talks on origins of Smalltalk)
MetaYan has quit [Ping timeout: 256 seconds]
cosimone has quit [Remote host closed the connection]
cosimone has joined #lisp
<Nilby>
I wish someone would make an interative online software history museum so I could run Sketchpad right now.
<aeth>
archive.org has a lot of old software in JS (or WASM) emulators in the browser... to the point where it basically is "an interactive online software history museum", not just a place where you can find old versions of a website
<aeth>
Maybe the most underrated place on the internet. If people donate money, donate to archive.org. Wikipedia has plenty of money and most of the money doesn't go to running the site, anyway. Wikipedia is just really noisy with its begging to make it seem desperate when it's not.
<p_l>
aeth: AFAIK nobody got sketchpad running, and NLS might be hard to get running too
<Nilby>
aeth: Thanks. I've already wasted too much time playing there. archive.org is awesome. Maybe one day it will have Sketchpad.
<aeth>
p_l: Well, that's unfortunate. If you can get it running, though, I'm sure archive.org would be interested in emulating it
<p_l>
aeth: Sketchpad as well as I think the original setup for "mother of all demos" involved a lot of custom hw and I am not sure how much software survived
<p_l>
NLS was in operation at SRI for years and they might have a backup tape for it
<aeth>
I think the problem with "OOP" is that there are many definitions, and any good definition is still just "it satisfies m of n characteristics on this list, 0 < m <= n"
<aeth>
anti_oop: What's your definition of OOP?
varjag has joined #lisp
<_death>
minion: what does OOP stand for
<minion>
Osoberry Overregularly Pneumatomorphic
<aeth>
By some definitions, CL isn't OOP, but of course those aren't going to be popular definitions here. In particular, CL doesn't really have "true" (language-enforced) encapsulation except inside lexical closures.