freenode/lisp - IRC Chatlog
Search
20:38:37
trittweiler
I try to define functions locally that are very intrinsically coupled to the parent function. Top-level functions are coupled to an object or the package instead. Local functions are not directly invokable from the REPL, so that already draws a "natural" line. Ease of meaningful naming is another thing that's often difficult for local functions (it's usually a frob-foo, grovel-foo, or similar.)
20:43:21
pjb
aeth: usually, local functions are closures. To have them global, you'd need to make them objects.
20:45:46
jasom
I used to prefer global functions just because slime/sbcl just handled them a lot better (v, what it looks like in backtrace &c.). The tooling has improved considerably since I made that decision though.
20:46:19
trittweiler
if the closed-over variables are not modified in the local functions, they can be trivially lambda-lifted
0:01:48
eschulte
Does anyone know of a serialization library appropriate for deserializing from another programming language?
0:02:20
eschulte
in particular I'm thinking of something I could combine with snooze to provide access to CL objects from another language through a REST API (and a wrapper library in the other language)
0:03:13
eschulte
oh, thanks!, that seems obvious. do you know off hand how it supports CLOS objects?
0:32:18
no-defun-allowed
has anyone ever made a program which mutates some lisp code randomly until it runs without errors?
0:33:33
eschulte
no-defun-allowed: close, see https://grammatech.github.io/sel/#Top but honestly it's support for C/C++ and assembler are much more mature than it's lisp support
0:34:03
eschulte
specifically this example usage shows repair. https://grammatech.github.io/sel/Repair.html#Repair
0:36:54
nydel
hmm, i return to an old project depending on :USOCKET package and it seems the package function #'SOCKET-SERVER is not defined. is this my end? or has usocket changed?
0:43:50
nydel
Xach: thank you - i was able to ql:quickload that right away. is this package connected to :USOCKET?
0:50:59
nydel
odd, as far as i can tell, what used to be :USOCKET is partially in :USOCKET-SERVER even though slime-mode autocompletes some functions from the latter with only the former loaded.
4:01:55
aeth
You know what's cool about CL? You write something and 19 times out of 20 it'll work in SBCL, CCL, and ECL without having to work around various quirks.
5:01:36
forumulator
Hi guys. Need a little help. I'm trying to expand a lisp macro to product something like val(a)->val(b). However, `(,a -> ,b) doesn't give me the correct result.
5:09:46
beach
forumulator: They work on S-expressions. Spaces are just related to how things are printed.
5:11:43
forumulator
I could do a format, but it only outputs strings. How do I convert string to lisp code?
5:12:21
beach
If you are new to Common Lisp, that is definitely NOT something you want to do. You will get into all kinds of trouble with readtable-case and packages.
5:14:18
forumulator
beach: I dont' care about messy at this point, I've spend hours breaking my head on this. Lisp is a major programming language, and there doesn't seem to be sufficient macro documentation.
5:15:25
forumulator
There is some stuff, but I couldn't find advanced docs for the stuff I'm trying to do.
5:17:37
forumulator
beach: But yeah, university class. Everything's good except for this final part. Any idead?
5:20:26
forumulator
Please don't mind, taking help on an assignment is a bit sketchy. Even if they are ones like this.
5:24:09
beach
In a language like C, "enums" are used to associate compile-time names with small integers at run-time.
5:24:28
beach
But Common Lisp has symbols at run-time, so there is no great use for such a facility in Common Lisp.
5:25:42
beach
Basically, constants with names like planet->mass->mercury are pretty useless in terms of programming.
5:27:52
beach
In fact, if you have to construct that kind of symbol at run-time, you would use a hash table (that of the package) implicitly anyway.
5:30:28
forumulator
Got it. Have to go to school now, thanks for your help! I'll ask my prof the point.
5:30:30
flip214
well, I don't see a package PLANET with a symbol MASS and a property MERCURY as pleasing.
5:34:19
flip214
although, for a single-level hash table, emulating multiple levels via a _single_-character (so it's "trivial" to split [ie. in C to change to a NUL ;]) isn't unheard of
6:32:12
jackdaniel
phoe: common lisp doesn't give you weak data structures at all. as of compilers, usually you have hash tables with weak keys, values or both and for general structures you have a weak pointers
6:33:53
jackdaniel
that's why I've mentioned what some implementations provide. first part of the answer hints, that it was imprecise. if abcl provides weak heap, would that satisfy you if I'd said: weak heap is there too. ?
6:35:11
shka_
phoe: please note that in practice, weak pointers in garbage collected language have a limited use
6:35:42
jackdaniel
I'm curious what use do they have in a language, which is not(!) garbage collected
6:37:32
shka_
jackdaniel: i would not say so, most people think about tracking GC when they are talking about GC
6:38:18
jackdaniel
shka_: I'm very sceptical about this claim (especially in context of discussing data structures with weak references)
6:38:27
Shinmera
Refcounting helps in tracking garbage and disposing of it. It is a gc technique, whether people like it or not.
6:39:35
shka_
in tracking GC language, reference counting have limited use when compared to reference counting
6:40:31
Shinmera
shka_: a tracking gc still counts references and hence weak pointers have plenty of use.
6:41:57
Shinmera
anything where you aren't the one that is in charge of managing the object's lifetime
6:42:10
flip214
shka_: a big graph of structures with only a single entry point is less common than one with multiple entry points... n over k ;)
6:42:46
no-defun-allowed
"ooh! it's for realtime programs cause tracing isn't realtime!!! cause rc totally is deterministic!!1!!"
6:43:14
flip214
shka_: keeping identity across "foreign" objects (like ones loaded from a database).
6:44:09
jackdaniel
defending opinion just for a sake of defending it isn't a good way to manage ones time :) \o
6:47:42
flip214
now, whenever a thread loads object #1 from there, you want to return the same (as in EQ) object in memory
6:50:31
shka_
phoe: well, for me things are what they are because of how they behave, and not why they were created
6:51:20
shka_
so intermiediete layer that weakly stores objects and returns those when they are available is cache by definition
6:51:43
phoe
intermiediete layer that weakly stores objects and returns those when they are and is emptiable at any time*
6:52:23
flip214
shka_: but with a weak pointer it doesn't _cache_, as in "keeps it alive when nobody else is using it to speed up next accesses"
6:52:54
flip214
with a weak pointer it only "remembers that _this_ record is around to return identity"
7:08:17
jackdaniel
nobody claimed that weak references are a must in GCed languages. small remainder: original claim: "weak structures have limited use in GCed languages" followed by a question: "do they have *any* use in languages which are not GCed?". then discussion went south witch caches and refcounting classification
7:13:33
|3b|
weak pointers in non-gc language sounds useful to me. doesn't c++ have weak pointers now?
7:24:33
jackdaniel
|3b|: but shared_ptr gives you GC by reference counting in C++, and weak_ptr is part of this machinery, no?
7:26:13
|3b|
jackdaniel: though seems sort of useful to have it for same way we would use it in GC language, for stuff that wants to keep an eye on something they don't manage, without interfering with it
7:31:39
aeth
shka_: usually when a language adds a feature it's because some niches really, really need it, even if it's of "limited use" elsewhere
7:33:54
oni-on-ion
theres a saying "everything specified in the standard should be thread-safe" i just read
7:46:01
russellw
it is said that ;; should be indented with surrounding code and ;;; should be indented at the left margin. But are there any actual usages where these give different results? In other words, is ;;; ever used other than between top-level forms which are at the left margin anyway?
7:47:07
|3b|
you can put them where ever you want and indent them oddly, it will just confuse people used to the 'common' style
7:47:42
russellw
|3b| right, I'm asking about usage in practice, because I am writing a code formatter
7:48:21
flip214
in practice it comes up to the same thing. unless the human code writer accidentally put ";;;" within some s-expression.
7:48:49
jackdaniel
it was describing general flow of the algorithm I think (not code itself). I don't remember well
7:55:27
|3b|
ACTION also notes that "top-level" isn't always far left, for example eval-when and such, where you might wrap multiple definitions
7:56:20
russellw
|3b| true. In that case, should ;;; between such top-level definitions, still be indented at the far left?
7:56:26
|3b|
ACTION would still expect ;;; for the global definitions, even if inside eval-when or a closure, macrolet, etc
7:59:47
|3b|
code reformatter has been on my list of "things to maybe do one day" for a while, but never get to it
8:02:39
|3b|
ACTION thinks a bit more and realizes caring about comments implies source probably has newlines too :)
8:03:22
russellw
beach I was originally hoping to use the built-in reader, but eventually accepted this is not going to be possible and I have to write my own. So this is mostly done at this point https://github.com/russellw/lisp-format/blob/master/read.lisp
8:05:37
russellw
ah! checking it out, looks interesting. Oh well, mine is pretty much done now, so. More duplicate work indeed :)
8:11:35
flip214
and even if it werent you could just write symbols as comments as well β¦ you only need to be careful about punctuation ".,'" ;) oh no, now the line is wasted!
8:11:49
|3b|
flip214: i mean if you still see comments, you were starting from characters and doing something like READ rather than just getting a list
8:12:51
|3b|
(or are getting list input from someone who parsed text input and is reasonably likely to have preserved formatting along with comments)
8:20:06
beach
LdBeth: I think it won't matter much. My hunch is that the I/O is going to dominate anyway.
8:22:51
beach
LdBeth: What is it that you are working on that requires this much attention to performance?
8:25:08
LdBeth
it's a macro layer used to parse documents into lisp code and TeX, which usesthe standard reader macro.
8:28:18
LdBeth
ACTION uploaded an image: ε±εΉεΏ«η
§ 2018-09-25 δΈε1.27.45.png (401KB) < https://matrix.org/_matrix/media/v1/download/matrix.org/KTeVCaRkiuDLImpRaSyzATpo >