freenode/#sbcl - IRC Chatlog
Search
12:13:30
scymtym
stassats: re TYPECASE: i think something like the decision tree generator i made for the fastgf experiment could generate good code. it loads widetags and layouts only when needed and only once and does the minimum number of tests by sharing information between clauses. it would probably have to punt for non-structure classes since we wouldn't want to invoke the compiler from TYPECASE
12:14:59
scymtym
sure, i was thinking about identifying shapes like (if (typep …) (if typep …) (if typep …))
12:17:16
attila_lendvai
re ASDF and "updating to the newer API so that it breaks on older setups"... ASDF has its upgrade functionality, to help to "escape forward". I don't see any reasons to run with old ASDF when all it takes is to check out a fresh version somewhere and then (asdf:load-system :asdf) to initiate an upgrade, even if your lisp ships and older version. I've been running with that setup since runtime upgrade became a thing.
12:18:59
scymtym
the problem seems to be that on the x86 windows slave (apparently not on the x86_64 one), the sb-concurrency test hangs or spins in way that makes the process stick around. jenkins cannot terminate it and some files stay in use. this prevents the workspace from being deleted for the next build (and ties up a cpu on the vm)
12:19:35
scymtym
otherwise the windows builds are remarkably reliable. without running tests, to be fair
12:20:14
Shinmera
scymtym: Does it happen even if you just build on the x86_64 machine with the x86 msys2?
12:57:46
stassats
scymtym: i can identify (if (typep …) (if typep …) (if typep …)) trivially, but then i can't do anything
12:58:27
stassats
so, a let clambda needs to be introduced, wrapping some arbitrary blocks, which blocks? etc.
13:01:48
scymtym
stassats: the problems are on the x86 win32 vm, the x86_64 win32 vm seems fine so far
13:02:17
stassats
there isn't even a good spec to adhere to when writing .asd files, so you're subject to some new retrospective decisions
13:04:17
scymtym
well, the syntax and semantics are discussed in the manual. the "best practices" thing is complementary
13:07:18
scymtym
i agree that modern ASDF makes using dependencies, in particular not enthusiastically maintained ones, a lot more painful
13:35:13
scymtym
(sb-impl::find-external-format '(:utf-8 :newline-coding :windows)) => #<SB-IMPL::EXTERNAL-FORMAT UTF-8 DOS {100849F8D3}>
13:44:20
stassats
for input, either CR or CRLF or LF would denote a newline, for output, the platform default
13:51:33
scymtym
okay let's i have a file containing 00000000: 666f 6f0d 0a62 6172 0d62 617a 0a foo..bar.baz.
13:56:09
scymtym
when i do (map 'list #'char-name (alexandria:read-file-into-string "/tmp/bla.txt" :external-format :utf-8)), would that be the same as '(:utf-8 :eof :auto) which would be '(:utf-8 :eof :crlf), returning (#\f #\o #\o #\Newline #\b …) on win32, '(:utf-8 :eof :lf), returning (#\f #\o #\o #\Return #\Newline #\b …) on linux and similar for macos?
14:03:03
scymtym
so the possible newline codings are :crlf, :lf, :cr, :auto/crlf (default on windows), :auto/lf (default on unix), :auto/cr (default macos)
14:11:16
nyef``
You also get cases on DOS and similar where if you have a sequence of multiple newlines only the first is CRLF and the rest are merely LF. Because CR is *expensive*, moving the print head (or platen!) like that.
14:14:11
stassats
so that people who are inconvenienced by reduced performance can drop (setf sb-ext:*default-external-format* '(utf-8 :lf)
14:16:33
scymtym
or, well, doesn't have to, strictly speaking, but it seems more consistent that way
14:17:55
stassats
but (setf (sb-ext:default-external-format) :utf-8) is nicer than calling find-external-format
14:19:26
scymtym
i could be something like (defun (setf sb-ext:default-external-format) (designator) (setf … (typecase designator (external-format designator) (t (find-external-format designator)))))
14:20:30
stassats
some people are already using SB-IMPL::*DEFAULT-EXTERNAL-FORMAT*, have to not break it
14:28:54
scymtym
i can enable it again later. but having it break in way that needs manual intervention every other day is a little annoying