Can anyone recommend a book to learn more about the JVM and how it works? Ideally focusing on that and not just a chapter in a Java book or relying on deep Java knowledge.
Hi, i'm wondering about common practice for composing systems. My cljs program combines multiple async data streams (sensor data, twitter stream, output log, bluetooth communication). Currently i'm implementing each component in a separate namespace, and sharing multiple input/output channels from core.async (some are (mult)
ed) between them. Everything is set up in a central (run)
function that initialises all the component event loops. REPL development is messy so right now i'm just restarting the whole compiled app every time. Is this typically a use-case for e.g. pub-sub, or stuart sierra's component?
In dnolen's core.async talk he says (according to a note) "Think about the abstract event types and handling, not concrete event sources", so i wonder whether this argues for having just one combined pub-sub event channel instead of multiple input and output channels
@nblumoe: no recommendation, but also got interested and found http://docs.oracle.com/javase/specs/jvms/se8/html/index.html - not really an introduction but at least it's precise and correct
thanks @sander! I was hoping for something instructional, with some text book hand holding. haven't started to read this yet, but "specification" doesn't sound like the most digestible read š
nblumoe: what kind of things do you want to learn about the jvm? for getting familiar with registers, stacks, frames etc. i really like the SICP book
If there's anyone around who knows leiningen well, I've got a really strange issue that I could really use some help with.
Pop over to the #C0AB48493 channel if you're feeling charitable. :simple_smile:
@sander - yes, I think that is where something like Stuartās component system will help. Each discrete chunk defines a āstartā and āstopā method. These chunks are wired into a single system. When that system is started all the chunks startā¦.you can see where I am going.
The nice thing is that order is preserved, so if A depends on B depends on C then C then C will start then B then A. Closing will be done A then B then C.
I have seen a number of people declare their channels as a component in themselves and pass them around. Other components simply tap into them.
hth
@colin.yates: thanks! i think i'll particularly like the order-preserving closing so that i don't need to ctrl-c the whole program each time i want to reload some code. putting channels directly in the component system sounds interesting, will try sketching out some things
a google for core.async and figwheel might help
@sander I could not point out specific aspects directly. However, atm everything that happens under the hood when running Clojure applications is arcane to me, as I don't have a Java/JVM background. Topics I would like to touch are JIT compilation, Garbage Collection, Bytecode. I just want to demystify the runtime. Rather concrete than abstract.
Interesting that you point at SICP...
@mr-spock: http://symbolhound.com/ might be more user friendly for programmers searching for symbols