freenode/#clasp - IRC Chatlog
Search
12:41:27
drmeister
There is a bit of a problem in that we cannot currently use the parallel build using 'fork' on macOS with the MPS GC.
12:42:10
drmeister
The MPS version on macOS creates a second thread to handle segfaults from touching memory barriers. 'fork' duplicates the thread that invokes 'fork' but not the other one.
12:49:14
cracauer`
I test the port for FreeBSD-current on my older Macbook in a virtual machine. While compiling the OSX version outside. This computer is not happy.
12:55:25
cracauer`
Currently testing whether some other dev update fixed that (some float conversion for RNG).
12:59:49
drmeister
frgo: I haven't moved on the extensions pull request because I had a bunch of demos of the Cando extension and I didn't want to cause myself problems. We can move forward now.
13:01:12
drmeister
Because there is one thing that it doesn't capture - the worst problem of all. The clasp_gc.cc file that the static analyzer generates needs to be generated for every combination and permutation of extensions.
13:02:28
drmeister
You can build the boehm version of clasp without clasp_gc.cc but the MPS version needs have a clasp_gc.cc file that was calculated from a specific combination of clasp+whatever extensions.
13:04:47
drmeister
My best idea is to incorporate the static analyzer into the build - that would mean building the boehm version, running the static analyzer in the boehm version on the C++ source code, building the MPS version. That would add a few hours to the MPS build.
13:07:09
drmeister
The second idea is to minimize the number of extensions to things that only add classes that the GC needs to manage.
14:37:35
drmeister
cracauer`: I'm trying to figure out how to add an API for thread local custom allocators.
15:01:50
cracauer`
Do you want to do this for locality (data clustered together in one physical area)?
15:03:22
drmeister
It's a thing called an 'atom-tree' it's like an articulated robot, with lots of stiff segments joined by hinges.
15:04:37
drmeister
There will be a few pointers in and a few pointers out and lots and lots of internal pointers.
15:05:26
drmeister
I originally set up the code so that the nodes live in vectors and I created a reference counting scheme to keep track of what was alive and what wasn't.
15:06:00
drmeister
It was a bad idea to develop a custom memory management scheme like that - it really messed up the code.
15:11:03
drmeister
I have separate pools in mps - I just need to develop an API to create custom thread local allocators. Additionally I'm trying to do this as much as possible with C++ compile time programming so that it's fast. I have an idea how to implement it.
17:33:14
kpoeck
But when I try put this in linl_intrinsics.cc, e.g. in line 80 (in intrinsic_error, first clause, instead of SIMPLE_ERROR(BF("There is no function bound to the symbol %s") % sym->fullName());
17:33:38
kpoeck
I get a compiler error ../../src/llvmo/link_intrinsics.cc:81:7: error: reference to 'cl' is ambiguous
17:34:54
kpoeck
../../include/clasp/core/evaluator.h:34:11: note: candidate found by name lookup is 'cl'
17:36:38
kpoeck
in /Users/karstenpoeck/lisp/compiler/externals-clasp2/build/release/include/llvm/Support/CommandLine.h:50:11:
17:48:08
kpoeck
I read this that the compiler can't differentiate between namespace cl and namespace llvm::cl
18:19:17
kpoeck
drmeister: thats what I just found out, with ::cl::_sym_undefinedFunction it compiles
18:24:09
kpoeck
So the final return true; in line 449 is always reached if both hash-tables have the same test and count?
18:36:50
Bike
C++ probably can't return from inside a closure, so instead it will have to set a flag or something, i guess.
19:33:08
drmeister
I've been thinking about it and I realized that what the static analyzer generates is a database of pointer offsets into classes. That could be coalesced with other databases to combine extensions without having to run the static analyzer on every permutation of extensions.
19:34:26
frgo
I'd thought of some "mini static anlyzer run" only for the extensions and adding info to such a databsse
20:17:12
karlosz
the compile-cleavir function doesn't seem to be defined in the sbcl examples file either
20:26:34
Bike
(cleavir-ast-to-hir:compile-toplevel-unhoisted (let ((*macroexpand-hook* #'cleavir-sbcl-environment::cleavir-macroexpand)) (cleavir-cst-to-ast:cst-to-ast (cst:cst-from-expression expression) (sb-kernel:make-null-lexenv) nil)))
20:36:10
Bike
you can do (cleavir-ir-graphviz:draw-flowchart result "some filename") to get a dot file and actually look at it
20:46:59
Bike
it doesn't do anything cleavir identifies as an optimization, no, but there are a few things that could be considered optimizations
20:47:20
Bike
for example, if you do (block nil .. (return ..) some other stuff) the some other stuff will be silently eliminated.
20:49:01
Bike
cst to ast eliminates syntax. ast to hir puts it in a flowgraph and does stuff like that as it does.
20:49:40
Bike
the idea is that ASTs are something not dependent on the global environment, and then HIR is a flowgraph.