<dbotton>
I may have asked before, does anyone know of a package for manipulating asd files (loading and most importantly saving them, adding dependancies, components (files))?
<dbotton>
this would be more about file manipulation as do not want to alter the files beyond the ability to add or remove dependancies and components
<dbotton>
and who knows what is in their asd files
aartaka has quit [Ping timeout: 240 seconds]
aartaka has joined #commonlisp
jolby has joined #commonlisp
jolby has quit [Client Quit]
jmdaemon has joined #commonlisp
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
<dbotton>
looking through asdf docs towards what I need to do. What is a :module and :static-file component type?
tyson2 has quit [Remote host closed the connection]
lisp123 has joined #commonlisp
lisp123 has quit [Remote host closed the connection]
anticomputer_ has quit [Remote host closed the connection]
__gyr has quit [Ping timeout: 248 seconds]
anticomputer has joined #commonlisp
lisp123 has joined #commonlisp
paul0 has joined #commonlisp
<mfiano>
dbotton: the system definition is a tree of modules, with the root being the defsystem itself.
<dbotton>
so a component module is a dependency statement?
<mfiano>
any module level parameters can be defined for submodules, and asdf can treat submodules as sub-directories on the filesystem.
<mfiano>
It can be. It doesn't have to be.
<dbotton>
not sure I fully understand
<mfiano>
It is a way to group related files together and define different asdf options for them, such as :serial, :dependencies, :components, etc
<mfiano>
Modules form a tree structure.
<mfiano>
This is all explained in the manual if I am not making much sense.
rainthree has joined #commonlisp
<dbotton>
ok, so a logical directory to files
<dbotton>
i didn't see anything about modules why asking
<dbotton>
same for :static-file
<mfiano>
6.2 has an example snippet
<mfiano>
The toplevel defsystem form is an implicit module itself.
<dbotton>
got it, so logical tree of file components
thomaslewis has joined #commonlisp
<mfiano>
Assuming you have :file components in a module, then yes. components can be customized to be anything.
<dbotton>
and :static-file
<dbotton>
it seems just any file, is that for documentation purposes? what would be the point of some raw data file as a component?
<dbotton>
I see can also be a lisp file, is that compiled if is?
<mfiano>
Check out the BNF grammar description. You can see that anything you can declare for a defsystem can also be declared for a module, such as version, description, etc etc.
<mfiano>
Including children modules
<mfiano>
This is because the defsystem forms an implicit module of its own.
<mfiano>
Not that some options are not transitive. :serial for example does not apply to children modules. I brought this up as an issue a while ago, and they are hesitant to change it because it would break a lot of existing code.
<mfiano>
s/Not/Note/
<mfiano>
dbotton: asd files are never COMPILE'd, only LOAD'd.
<dbotton>
they define what is to be compiled no?
<dbotton>
I understand it is only loaded.
<mfiano>
I don't understand what you mean. Not all files can be compiled.
<mfiano>
asdf is a build system, which may manage other non-lisp files, or anything at all, since it is extensible with generic functions.
<dbotton>
that is my question, so what would someone include a :static-file ("README")
<mfiano>
Infact, :static-file is one builtin for non-lisp files.
<dbotton>
right, so what does it do with :static-file?
<mfiano>
To make it part of the asd object to process by extension with one of the asdf generic functions, etc
<mfiano>
ANything you desire.
<dbotton>
So it is there for documentation that it is part of the system?
<dbotton>
I assume there is no built in operation for README
<mfiano>
No, you are not listening.
<dbotton>
not understanding for sure yes
<mfiano>
It is for depending on non-lisp files or directories. asdf has generic functions that can operate on components, define new components, etc.
<mfiano>
Maybe you want to add a static-file that is not lisp code and transform it into lisp code when loaded.
<mfiano>
You can do anything you want with the asdf extension mechanism
<dbotton>
ok, so there is no built in action for it, I would have to define one
Josh_2 has quit [Remote host closed the connection]
<mfiano>
I'm not sure. You will have to check what methods are defined for that component type.
Josh_2 has joined #commonlisp
<dbotton>
since state-file just is a file name it is using file extensions to know what component type it is?
<mfiano>
No. :static-file requires a file extension, and if one is not given, it refers to a directory pathname.
causal has quit [Quit: WeeChat 3.5]
<dbotton>
an example in the doc is (:static-file "LICENCE")
<dbotton>
I don't think a directory was intended
<mfiano>
Note that it doesn't have to be a file. It is just a pathname, which you can use to create a file/files with.
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
<mfiano>
asdf is just very extensible and well thought out. There is no concrete answer to most of your questions. The only thing I can say is it does what you tell it to do.
karlosz has joined #commonlisp
<dbotton>
ok, thank you. It does seem like I should be able to include builder files as components *,clog files to then generate lisp and compile them which would be cool'
<dbotton>
I'll keep reading and testing things. thanks
saura has joined #commonlisp
karlosz has quit [Quit: karlosz]
azimut has joined #commonlisp
saura has quit [Ping timeout: 260 seconds]
saura has joined #commonlisp
saura has quit [Ping timeout: 240 seconds]
jack_rabbit has joined #commonlisp
knusbaum has quit [Ping timeout: 260 seconds]
rotateq has quit [Quit: ERC 5.4 (IRC client for GNU Emacs 28.1)]
leo_song has joined #commonlisp
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
saura has joined #commonlisp
saura has quit [Remote host closed the connection]
saura has joined #commonlisp
leo_song has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
leo_song has joined #commonlisp
saura has quit [Ping timeout: 276 seconds]
leo_song has quit [Client Quit]
leo_song has joined #commonlisp
leo_song has quit [Client Quit]
leo_song has joined #commonlisp
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
leo_song has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
leo_song has joined #commonlisp
leo_song has quit [Client Quit]
leo_song has joined #commonlisp
leo_song has quit [Client Quit]
leo_song has joined #commonlisp
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
shka has joined #commonlisp
vassenn has joined #commonlisp
leo_song has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
leo_song has joined #commonlisp
leo_song has quit [Remote host closed the connection]
leo_song has joined #commonlisp
aartaka has quit [Ping timeout: 246 seconds]
thomaslewis has left #commonlisp [#commonlisp]
szkl has joined #commonlisp
lisp123 has quit [Remote host closed the connection]
lisp123 has joined #commonlisp
thomaslewis has joined #commonlisp
prokhor__ has joined #commonlisp
<mfiano>
Any known utility functions to eat the beginning of a string until a certain character, allocating a new string, or should I just write my own two-line function? ex: (chomp-until "foo-bar-baz-qux" #\-) ; => "bar-baz-qux"
<Josh_2>
mfiano: gonna check out that book you mentioned :thumbsup:
<Josh_2>
Its a scheme book, very cool :)
aartaka has joined #commonlisp
thomaslewis has left #commonlisp [#commonlisp]
dec0d3r has joined #commonlisp
<Alfr>
mfiano, have a look at peek-char when peek-type is a character.
pjb has joined #commonlisp
<Alfr>
mfiano, hm ... string not stream.
lisp123 has quit [Remote host closed the connection]
ttree has quit [Ping timeout: 258 seconds]
thomaslewis has joined #commonlisp
<jdz>
mfiano: In Emacs the function is called `zap-to-char'.
thomaslewis has left #commonlisp [#commonlisp]
rainthree has quit [Ping timeout: 260 seconds]
lisp123 has joined #commonlisp
saura has joined #commonlisp
leo_song has quit [Quit: ZNC 1.7.2+deb3 - https://znc.in]
anticomputer has quit [Remote host closed the connection]
leo_song has joined #commonlisp
<contrapunctus>
mfiano: at a cursory glance, I couldn't find anything in STR, Serapeum, or Alexandria
anticomputer has joined #commonlisp
saura has quit [Ping timeout: 240 seconds]
anticomputer has quit [Remote host closed the connection]
anticomputer has joined #commonlisp
aartaka has quit [Ping timeout: 255 seconds]
rainthree has joined #commonlisp
aartaka has joined #commonlisp
<pjb>
mfiano: do you really need a library for: (subseq string (or (position char string) (length string))) ???
<mfiano>
Nobody can read it seems.
<splittist>
or perhaps the problem statement is unclear. What is in the newly allocated string?
<lisp123>
Although that example did teach me to be very careful and follow existing norms around API usage
Algernon69 has joined #commonlisp
<hayley>
That library uses regular expressions when you least expect it, a bit like Java from memory.
<hayley>
I once got an assignment at university where they used a delimiter character which was used for regex syntax, so just calling .split() wouldn't work. Fun times.
<lisp123>
hayley: oh do most split() implementations rely on regex?
<hayley>
Usually not.
<lisp123>
Ah ok
<hayley>
I had meant that .split in Java lets you use a regex to specify delimiters, and not just one string. I remembered that some cl-str functions would use regexp when you didn't expect them, but I remembered wrong.
<lisp123>
(sorry for my lack of understanding), but if you supply regex to specify delimiters, wouldn't the algorithm need to use regex to do the split in some way?
<lisp123>
Otherwise, how would you match on the delimiter
Algernon69 has quit [Quit: Leaving]
vassenn has quit [Quit: Good bye!]
anticomputer has quit [Remote host closed the connection]
azimut has quit [Ping timeout: 240 seconds]
<hayley>
It would.
<hayley>
I mean, if you split on just one string, you don't need a regex engine. If you split on a regex, you probably will need a regex engine.
anticomputer has joined #commonlisp
prokhor_ has joined #commonlisp
lisp123 has quit [Remote host closed the connection]
prokhor__ has quit [Ping timeout: 260 seconds]
treflip has joined #commonlisp
manykwh has quit [Quit: loosening the belt]
Josh_2 has quit [Remote host closed the connection]
subpsunym has quit [Quit: brb]
aartaka has quit [Ping timeout: 240 seconds]
aartaka has joined #commonlisp
mon_aaraj has quit [Ping timeout: 256 seconds]
subpsunym has joined #commonlisp
mon_aaraj has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
random-nick has joined #commonlisp
mon_aaraj has quit [Ping timeout: 260 seconds]
mon_aaraj has joined #commonlisp
lisp123 has joined #commonlisp
axel-bee has joined #commonlisp
<lisp123>
hayley: thanks
axel-bee has quit [Remote host closed the connection]
citizenandrew has quit [Quit: Client closed]
pranavats has joined #commonlisp
mixotricha has joined #commonlisp
Th30n has joined #commonlisp
<jackdaniel>
o/
aartaka has quit [Ping timeout: 240 seconds]
<hayley>
\o
aartaka has joined #commonlisp
aartaka has quit [Ping timeout: 260 seconds]
<jmes>
What is the difference between :keyword and #:keyword?
<mfiano>
One is a symbol interned in the keyword package and one is a symbol not interned
<jmes>
I see, so #:keyword is not interned in the keyword package? What is a possible benefit of this?
<mfiano>
When a symbol is read, it is interned into the current package. If you use uninterned symbols, you don't pollute any package, which might help with things like completion systems not returning results you don't want, and for writing macros.
<mfiano>
Among many other uses
MajorBiscuit has joined #commonlisp
<mfiano>
Two uninterned symbols of the same name have different identities, because they are not stored anywhere, unless you do so yourself manually.
<mfiano>
Try (eq '#:keyword '#:keyword) for example
<jmes>
mfiano: Thanks, I understand that bit but maybe I'm shortsighted about what you may use keywords for. I thought they would only be used to basically represent themselves so I am myopically missing the benefit of two keywords with different identities
<jackdaniel>
uninterned symbol is not a keyword
<jackdaniel>
a keyword is a symbol in keyword package, i.e :foobar (but not #:quxbar)
<jmes>
oh, so I'd call #:a an uninterned symbol and :b a keyword, gotcha jackdaniel
<jackdaniel>
purpose of keywords is convenience - when you have named parameters in a lambda list, like
<mfiano>
(symbol-package :foo)
<jackdaniel>
(defun xxx (a b &key c) …)
<mfiano>
(symbol-package '#:foo)
<jackdaniel>
then you type (xxx 1 2 :c 42)
aartaka has joined #commonlisp
<jackdaniel>
but if you had used a parameter that is not in the keyword package, if you were in a different package, then you'd need to write (xxx 1 2 'the-second-package:c 42)
<jmes>
jackdaniel: Yes, that's the benefit of keywords, in the keyword package
<mfiano>
There are only keywords in the keyword package
<jmes>
sorry
<mfiano>
There are no other kinds of keywords
<mfiano>
Except loop keywords as they are called, which can be in any package.
<jmes>
I mean to ask what the benefits are to uninterned symbols, other than not cluttering a namespace
<mfiano>
Macro hygeine
<mfiano>
(make-gensym "FOO")
<mfiano>
returns an uninterned symbol
<mfiano>
Sorry
<jackdaniel>
ah, well, they are not often used, but consider that you write a macro. then you don't want to use some known symbol 'foo, because if you use twice this macro, then the second definition will overwrite the previous one
<mfiano>
(gensym "FOO")
<jackdaniel>
that's why you use a function gensym like mfiano says, that returns an uninterned symbol
<jmes>
mfiano: right, that makes sense!
<jmes>
jackdaniel: gotcha, I wasn't thinking lispy enough.. I should've realized that macros are users of lisp features.. I was only thinking as someone who uses gensym, not as gensym :P
<jmes>
mfiano, jackdaniel: Well sorry for that, and thanks for helping me get it!
<mfiano>
Anytime
* jackdaniel
wonders why are you sorry
* jmes
is Canadian
<jmes>
;)
Oddity has quit [Ping timeout: 260 seconds]
<TMA>
jmes: that's not something to be ashamed of I guess ;)
lisp123 has quit [Remote host closed the connection]
thuna` has joined #commonlisp
Oddity has joined #commonlisp
mixotricha has quit [Quit: Client closed]
aartaka has quit [Ping timeout: 255 seconds]
lisp123 has joined #commonlisp
Josh_2 has joined #commonlisp
Oddity has quit [Ping timeout: 276 seconds]
<Josh_2>
I am trying to quickload my project and quicklisp is just stopping
<Josh_2>
its hanging
lisp123 has quit [Ping timeout: 248 seconds]
<Josh_2>
Huh
<Josh_2>
a macro I have written is causing the compiler to hang... how strange
<jackdaniel>
perhaps infinite recursion in macroexpansion?
<Josh_2>
This is the macro (defmacro with-env (variables status &body body)`(destructuring-bind (&key ,@(mapcan #'identity variables) &allow-other-keys) (env ,status)(locally ,@body)))
<Josh_2>
(with-env ((object)) status ..) no hanging. (with-env ((object)(type)(field)) status..) hangs
jmdaemon has quit [Ping timeout: 246 seconds]
zak1 has quit [Quit: WeeChat 3.5]
orestarod has joined #commonlisp
<Josh_2>
Well I changed the macro to remove to change from ((object)(type) ..) to just (object type ..) and it works :shrug:
zak1 has joined #commonlisp
aartaka has joined #commonlisp
zak1 is now known as z4kz
aartaka has quit [Ping timeout: 246 seconds]
Bike has joined #commonlisp
aartaka has joined #commonlisp
<Bike>
Josh_2: mapcan uses nconc, so that version with alter the literal code data, which can cause various issues.
<Bike>
version will*
<Josh_2>
huh
aartaka has quit [Read error: Connection reset by peer]
<Josh_2>
Well I will assume that was the problem, even though the expansions were correct
aartaka has joined #commonlisp
<beach>
jmes: To me, the main benefit over an uninterned symbol versus a keyword symbol when both will work, is that with an uninterned symbol, you are clearly communicating to the person reading your code that the package of the symbol is not important; only its name.
<beach>
*the main benefit of an uninterned...
<beach>
jmes: The argument that you avoid "polluting the keyword package" is of course valid as well, but not as important.
<jackdaniel>
somewhat orthogonal, but why don't people use a string for the package name instead?
<jackdaniel>
or, to be more exact, they rarely use a string
<beach>
You could do that, but I personally find it ugly that you would type "NAME" in capital letters, say when you :USE a package, but then you use "name:" with lower-case letters as a package prefix.
<beach>
Same thing for exported symbols.
<jackdaniel>
I see
waleee has joined #commonlisp
<contrapunctus>
I was just about to ask about that. So far I've been using :keywords for everything in my defpackage forms, but I've been facing a problem that goes something like - 1. I use an unqualified symbol in some code without importing it to the package 2. I get an error about it, so I fix the package definition 3. I get an error about the package definition introducing conflicting symbols (I choose the
<contrapunctus>
shadow restart, as PCL suggests) 4. I get an error about symbols _again_, so I kill the Lisp image and REPL buffer, and start a new one /o\
tibfulv has quit [Remote host closed the connection]
<jackdaniel>
maybe first unintern the offending symbol, then re-evaluate defpackage form
<beach>
I think SBCL lets you choose which one you want.
<contrapunctus>
jackdaniel: that's what that restart does, IIRC
<jackdaniel>
usually it is `:spaghetti-from-other-specializers no-qual :spaghetti-from-other-specializers`
lisp123 has joined #commonlisp
<yitzi>
I prefer `:bowl :spaghetti no-qual :meatball`
thomaslewis has left #commonlisp [#commonlisp]
trumae has quit [Ping timeout: 246 seconds]
trumae has joined #commonlisp
lisp123 has quit [Ping timeout: 248 seconds]
<shka>
:around is for establishing scopes for file opening and such, so it is a very practical decision that it runs around everything else
<shka>
i don't know if this was the motivation behind this design, but i strongly suspect so
thomaslewis has joined #commonlisp
trumae has quit [Read error: Connection reset by peer]
trumae has joined #commonlisp
<mfiano>
I disagree.
<mfiano>
It makes it more convenient to perform things around supplier protocols.
<shka>
yeah... i personally don't do that anymore
<mfiano>
You can't decline to invoke the next method with anything else.
Noisytoot_ is now known as Noisytoot
rainthree has quit [Ping timeout: 276 seconds]
<shka>
the problem with this style of programming is that it can turn really hard to debug
<mfiano>
Not in my experience.
<shka>
:around methods are awesome, but not as extension points IMHO
<yitzi>
Its's also useful to change the dynamic bindings of :before, :after and no-qual.
<shka>
yitzi: oh, that i agree
Oddity has joined #commonlisp
<shka>
i just don't think that designing protocol with intention of :around method to be specialized by the user is particularly good idea in the long run
<yitzi>
And I have used it at a protocol interface point before.
<shka>
so did i
<shka>
that's why i don't think it is a good idea :D
* |3b|
tends to expose an "run the event loop" method specifically for users to bind specials and unwind-protect in :around
wmblathers has quit [Quit: Leaving...]
thomaslewis has left #commonlisp [#commonlisp]
thomaslewis has joined #commonlisp
Posterdati has quit [Read error: Connection reset by peer]
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
jmdaemon has joined #commonlisp
thomaslewis has left #commonlisp [#commonlisp]
Posterdati has joined #commonlisp
lottaquestions has joined #commonlisp
<jackdaniel>
around methods are a poor-man's aspect programming ;) (defmethod handle :around (…) (if (authorized) (call-next-method) (error "not authorized")))
wmblathers has joined #commonlisp
<jackdaniel>
allow*, aspect-oriented programming*
jmd_ has joined #commonlisp
jmdaemon has quit [Ping timeout: 276 seconds]
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
rodicm has quit [Quit: Leaving]
analogsalad has quit [Quit: bye]
saura has joined #commonlisp
treflip has quit [Quit: i slep]
pranavats has joined #commonlisp
azimut has quit [Ping timeout: 240 seconds]
azimut has joined #commonlisp
Dynom has quit [Quit: WeeChat 3.5]
rogersm has joined #commonlisp
mon_aaraj has quit [Ping timeout: 244 seconds]
mon_aaraj has joined #commonlisp
rogersm has quit [Quit: Leaving...]
trumae has quit [Ping timeout: 246 seconds]
trumae has joined #commonlisp
hashfunc1b96 has joined #commonlisp
lisp123 has joined #commonlisp
lisp123 has quit [Ping timeout: 250 seconds]
shka has quit [Ping timeout: 240 seconds]
thomaslewis has joined #commonlisp
orestarod has quit [Quit: Leaving]
paul0 has quit [Ping timeout: 256 seconds]
son0p has joined #commonlisp
paul0 has joined #commonlisp
thomaslewis has left #commonlisp [#commonlisp]
thomaslewis has joined #commonlisp
orestarod has joined #commonlisp
thomaslewis has left #commonlisp [#commonlisp]
_paul0 has joined #commonlisp
paul0 has quit [Remote host closed the connection]
rotateq has quit [Quit: ERC 5.4 (IRC client for GNU Emacs 28.1)]
lisp123 has joined #commonlisp
akoana has joined #commonlisp
lisp123 has quit [Ping timeout: 248 seconds]
hashfunc1b96 has quit [Ping timeout: 250 seconds]
random-nick has quit [Ping timeout: 255 seconds]
trumae has quit [Ping timeout: 255 seconds]
trumae has joined #commonlisp
mrcom has quit [Remote host closed the connection]
mrcom has joined #commonlisp
Madsy has joined #commonlisp
trumae has quit [Read error: Connection reset by peer]
trumae has joined #commonlisp
thuna` has quit [Remote host closed the connection]
Josh_2 has quit [Remote host closed the connection]
Josh_2 has joined #commonlisp
orestarod has quit [Ping timeout: 260 seconds]
Madsy has quit [Quit: Leaving]
attila_lendvai has quit [Ping timeout: 256 seconds]
attila_lendvai has joined #commonlisp
thomaslewis has joined #commonlisp
Brucio-61 has quit [Ping timeout: 248 seconds]
thomaslewis has left #commonlisp [#commonlisp]
scymtym has quit [Ping timeout: 240 seconds]
Demosthenex has quit [Ping timeout: 246 seconds]
thomaslewis has joined #commonlisp
Demosthenex has joined #commonlisp
thomaslewis has left #commonlisp [#commonlisp]
Brucio-61 has joined #commonlisp
resttime has quit [Ping timeout: 240 seconds]
_death has quit [Ping timeout: 250 seconds]
BytesAndCoffee has quit [Ping timeout: 240 seconds]
prokhor has quit [Ping timeout: 240 seconds]
gabc has quit [Ping timeout: 240 seconds]
prokhor_ has quit [Ping timeout: 256 seconds]
ns12 has quit [Ping timeout: 248 seconds]
mht- has quit [Ping timeout: 240 seconds]
attila_lendvai has quit [Ping timeout: 260 seconds]