freenode/#lisp - IRC Chatlog
Search
12:11:03
devon
Perhaps I should not hack before breakfast, I forget essential things like where to look in the spec - but I did want to know whether to use ON vs. = a then (cdr b)
12:17:15
jackdaniel
beach: sorry, didn't have this terminal open. for once, the way buffers jump into each other is incomprehensible - it is impossible to have a static frame layout for me. other than that, it is a tool impossible to master for me – I know less than 5% of it despite exclusive use for around 8 years (and getting it to usable state as a text editor took me > month, so the learning curve is not quite steep)
12:18:36
jackdaniel
I could think of many other things, but the first one is the most annoying (and I'm sure there is some magic combo of settings and elisp scripts which solves that); second one is a dreadful blocker for many people I try to convince to use CL (and I really don't like emacs myself, despite said exclusive use)
12:38:25
dim
popwin is pretty good at maintaining your layout, and worst case, C-g gets you back to the one you like in many situations
12:39:05
dim
but we're shifting to Emacs topic rather than CL here, sorry about that, I guess it's still relevant as it helps with using SLIME…
13:04:11
jmercouris
if several people in the channel know about it, it must be a pretty consistent pattern
13:05:13
dim
well it's always the same thing, it begins with a single simple enough use case than reusing known tricks is good, and then you take it to the next level, with a couple of API calls abstracted over the technique, and... soon enough you reinvented the lib you didn't want to import
13:05:53
dim
so it's not easy to differienciate NIH from reusing known techniques on your own code, in my opinion
13:06:19
dim
I prefer to say that it's the same thing, and not call NIH bad per-se, but only most occurences of it
13:07:20
jmercouris
I'm weary, lisp may be a new language to me, but I've been a developer for many years
13:08:12
jmercouris
I therefore understand and appreciate your advice, but given my context, and my application this problem, I think dlowes approach is sufficient
13:08:14
dim
lisp is very different than most other languages in that a lib that has received no commit in the last 5 years is pretty good news, usually means it just works
13:14:04
random-nick
if you're only going to use it for writing iteration in functional style then you should use something like SERIES
13:14:10
jmercouris
No need to do all of the expensive operations at once, since the expensive operation is also I/O blocked
13:49:52
kuribas
if I make an array with (make-array 8 :element-type '(signed-byte 8)), does it use efficient storage?
13:51:24
trittweiler
kuribas: (upgraded-array-element-type '(signed-byte 8)) will tell you the actual element-type that your implementation uses
13:53:41
trittweiler
kuribas: So that should mean that it will use a byte to store the elements. You can play with upgraded-array-element-type, e.g. try '(signed-byte 11) or '(signed-byte 65)
13:58:25
beach
kuribas: Fixnum means a number that will fit in a pointer. As I recall, SBCL has a single tag bit for fixnums, so a fixnum contains 63 significant bits.
13:58:28
trittweiler
kuribas: Lisps usually uses tagged pointers. This means that some bits of each pointer are used to represent types (the "tag"). A fixnum is a pointer where non-tag bits represent a number
14:00:22
beach
kuribas: But it probably doesn't have to. In a dynamically typed language like Common Lisp, objects must be tagged so that the type can be determined at run time.
14:06:06
kuribas
beach: values in haskell can be unevaluated, and the compiler must be able to check for that.
14:07:37
xificurC
https://en.wikibooks.org/wiki/Haskell/A_Miscellany_of_Types - "Int" is the more common 32 or 64 bit integer. Implementations vary, although it is guaranteed to be at least 30 bits.
14:08:58
beach
Anyway, tagging in GHC is explained here: https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/HaskellExecution/PointerTagging
14:15:22
xificurC
kuribas: you mean the only implementation that survived and has so many non-standardized but useful extensions that noone is considering any other options?
14:17:16
xificurC
kuribas: I think jhc was very good too, not sure what happened to it. But we're getting off topic now
14:19:33
kuribas
beach: it seems that Int and Int64 are the same. So I suppose the two reserved bits are intended for tagging, but not used in ghc...
17:41:38
makomo
what would be the difference between: (1) an accessor, (2) a place and (3) a generalized reference? i suppose (2) == (3) but (1) is the name of the operator within *some* of the places (some places might not use an accessor). is this right?
17:43:36
Bike
according to the glossary, an accessor is an operator that performs an access, and an access is to read or write a place.
17:47:00
Inline
otherwise there are read-only acessors, in which case you don't call them acessors or so
17:50:29
makomo
so places == generalized references, but accessors are a thing of their own and could be used within places
17:51:30
Inline
maybe i should have said, it's an operator, defined in the context of a slot (but the slot can name it's acessors name, so it's independent of it) and it can fiddle with anything it's designed to
17:53:26
Inline
if the accessors name happens to be referencing a function (i.e. pointing to it) then it will be a function, otherwise it can be anything
17:59:26
makomo
Inline: an accessor doesn't necessarily have anything to do with slots. DEFCLASS has the option of defining accessor for your slots for you, but all it does is define a function of the same name that sets the object's slot
18:01:38
makomo
also, in the context of DEFCLASS, they're not plain functions but generic functions/methods
21:00:55
edgar-rft
dtornabene, maybe because nobody can tell what time it is in outer space right now
22:05:26
dxtr
So is there a complete list of all the quicklisp packages with the description of each package?
22:06:25
dxtr
The reason I'm asking is because I want to code something but I can't really come up with anything fun to do so I was hoping to get some inspiration from that list :)
22:37:25
pillton
dxtr: I got as far as (map nil (lambda (s) (print (ql-dist:short-description s))) (ql:provided-systems (ql-dist:find-dist "quicklisp"))).
22:38:22
pillton
dxtr: I don't think long descriptions are part of the quicklisp distribution metadata.
22:41:18
mfiano
I would urge you to a) work on something in Lisp, rather than some foreign bindings, and b) work on something that would benefit the Lisp ecosystem -- if it's duplicated work, it should be for good reason, but there are lots of areas untouched still that would benefit all.
22:42:36
mfiano
So looking at a list of existing Lisp software may or may not be a good idea. It'd be a good idea if it's to check what is not already available.
22:55:45
Beep-Lord
pillton, it's pretty much all I do. I wrote a library to help me change functionality of foreign libraries on the fly because I do it a lot it seems.
22:59:59
pillton
I understand the issues surrounding debugging. The binary packaging can be fixed. People don't complain about having to ship resources like images, video, 3D meshes and the like.
23:02:28
aeth
Compiling CL that works on both Linux and Windows is a completely different thing than compiling C than works on both Linux and Windows.
23:03:14
aeth
For one, you can use SBCL on both Linux and Windows. You'd generally use an entirely different C compiler on Linux than on Windows afaik.
23:12:30
mfiano
Side topic: If I were to develop a large project with many tens or even hundreds of files offering a wide variety of functionality, that has already been decided not to be split up into several systems for internal reasons, my first instinct would be to split it up logically into multiple packages. I've never developed such monolithic applications apart a few game engines where package exports and the like soon
23:12:32
mfiano
became a problem. I'm wondering if anyone has developed very large systems using a different packaging scheme. My primary concern is preventing myself and other the other developers from maintaining an internal use API with exports, and a user API in parallel, because I dislike accessing un-exported symbols cross-package with ::. Thoughts?
23:16:31
pillton
aeth: UIOP is a common lisp system designed to address incompatibilities across common lisp implementations. The same approach could be used to solve the C issues you mentioned.
23:20:59
pillton
What is the likelihood of finding people willing and capable of implementing things like eigen decomposition, singular value decomposition, image codecs and video codecs in CL?
23:26:50
pfdietz
If you use ::, you are exposing the entire inside of a package to your use. The maintainer of that package either can't change anything, or can break what you're depending on. Exported symbols, on the other hand, are the public interface that can be held steady.
23:34:27
White_Flame
I use in on rare occasion where 1 package that I control needs to do some deep-dive into another packaget that I also control, for some lower level stuff that I really don't want public
23:44:34
pillton
aeth: The fundamental principles of Microsoft's Component Object Model are sufficient.
23:46:45
aeth
Let's say that there's a function and the function is defun'd under a top-level let to get variables that persist across calls to that function. How would this interact with threads?
23:47:09
aeth
The function would always be called in the same thread, but not the thread where it was defined.
23:48:34
pillton
I doubt there would be a lexical environment per thread if that is what you are asking.
23:49:22
aeth
Would there be a performance issue with such a closure being accessible to all threads? The potential to be out of sync?
23:59:06
pillton
There was a blog post about this subject years and years ago. Something about lock free communication between threads. I think it was by Christophe Rhodes or Paul Khuong but I cannot find it.