devyn changed the topic of #elliottcable to: a super duper cult :)
prophile has joined #elliottcable
oldskirt has quit [Ping timeout: 255 seconds]
prophile has quit [Quit: The Game]
eligrey_ has joined #elliottcable
eligrey has quit [Ping timeout: 240 seconds]
<devyn> alexgordon: would probably say 500 mſ
<devyn> ELLIOTTCABLE: so then I can get rid of the queue altogether?
<devyn> ELLIOTTCABLE: there are more efficient ways of resolving responsibilities (probably)
oldskirt has joined #elliottcable
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
alexgordon has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
eligrey_ has quit [Ping timeout: 240 seconds]
prophile has joined #elliottcable
prophile has quit [Quit: The Game]
Rusky has quit [*.net *.split]
Rusky has joined #elliottcable
<purr\Paws> [Paws.rs] devyn pushed 1 new commit to master: https://github.com/devyn/Paws.rs/commit/b52321884a8fa620f6644bf661b2cb3cc2b95869
<purr\Paws> Paws.rs/master b523218 Devyn Cairns: Redesign reactor/machine stuff to use a generic Reactor trait (tests and parallelism currently broken)
<devyn> that might be my largest commit to Paws.rs so far
<devyn> 18 files changed, 763 insertions(+), 1071 deletions(-)
<devyn> it's incomplete, even
<devyn> lol
<purr> lol
nuck has quit [Ping timeout: 256 seconds]
nuck has joined #elliottcable
alexgordon has joined #elliottcable
Sgeo has quit [Read error: Connection reset by peer]
yorick has joined #elliottcable
Sorella has joined #elliottcable
prophile has joined #elliottcable
prophile has quit [Quit: The Game]
prophile has joined #elliottcable
<ELLIOTTCABLE> hi, all
<ELLIOTTCABLE> devyn: don't get rid of queue, yet. Other than little shit like semicolons and brackets, I want to stick to “the spec” until I change it.
<ELLIOTTCABLE> devyn: we'll talk more about it a bit later
<ELLIOTTCABLE> I'm at LambdaJam!
<ELLIOTTCABLE> it's so weird, being at conferences *in my city*
<Cheery> ELLIOTTCABLE: hi
<ELLIOTTCABLE> o7, Cheery
<ELLIOTTCABLE> can't really chat about things, paying attention to talks / taking notes
<Cheery> this lrkit is feeling slightly insanity.
<ELLIOTTCABLE> el oh el love Google Docs
<Cheery> ok. :)
<ELLIOTTCABLE> this what?
<Cheery> made a library out of my parser generator
<ELLIOTTCABLE> there's my LambdaJam notes, feel free to follow along, anybody who's bored
<ELLIOTTCABLE> devyn, alexgordon, prophile, etc
<prophile> k
<Cheery> to make it easier to cache, I'll do a language for creating lang :)
<ELLIOTTCABLE> Cheery: lolwat
<purr> lolwat
<Cheery> row -> invocation pick rule
<ELLIOTTCABLE> hickey's Transit looks very neat.
<ELLIOTTCABLE> also, I always forget MessagePack is a thing.
<Cheery> invocation -> symbol | invocation .attribute
<Cheery> pick -> | integer | [ integers ]
<Cheery> rule -> symbol -> symbols
<Cheery> so you can write stuff like: binop Expr -> Expr Op Term
<Cheery> or pass 1 Term -> [ Expr ]
<Cheery> anyway. I'll do it after the swim. :)
<Cheery> have it all thought out.
<Cheery> then I can do: lrkit.grammar.load("thing.gr")
<Cheery> and it'll load "thing.gr.cache" if it's around.
<Cheery> and I can feed it a module, which it uses to reduce.
<Cheery> lrkit.grammar.load("thing.gr", mylang)
Sorella has quit [Quit: Ex-Chat]
gozala has joined #elliottcable
prophile has quit [Read error: Connection reset by peer]
prophile has joined #elliottcable
<ELLIOTTCABLE> okay everything about this conference is over my head
<joelteon> you know what sucks? ruby
<ELLIOTTCABLE> a talk on Coq was, just, straight-up trying to break me
<ELLIOTTCABLE> she was trying her damnedest to melt our collective brains, I swear
<joelteon> these speakers are hungry for Coq!
<prophile> Coq isn't so bad
<prophile> just very unfortunately named
<katlogic> cuckold sounds like a cool name
<joelteon> you know what sucks though? ruby
<prophile> trololo
<purr> trololo
<prophile> so what's your beef with ruby
<joelteon> dependency management
<prophile> my ruby friend isn't online to defend it unfortunately
<joelteon> dependency management, plus the fact that the nature of the language means that anything useful has to use C bindings
<joelteon> and ruby programmers are retards when it comes to writing C bindings
<joelteon> fun fact: unless the author explicitly says otherwise, you can't override CC or CXX when it comes to building the C bindings
<katlogic> joelteon: puts makes me uncomfortable too
<katlogic> reminds me `it "puts" the lotion on its skin` every time i try to print something in ruby
<joelteon> the language is fine, it's about as good as slow weird dynamic languages get
<prophile> slow is a function of the implementation not the language
<joelteon> all the implementations are slow, therefore the distinction is useless
<katlogic> yeah, empirically the language semantics are not exactly (jit) compiler friendly
<prophile> it's useless primarily because it doesn't have dependent types
<prophile> </functional-troll>
<katlogic> guess that water is useless because it is not wine ;)
<prophile> correct
<katlogic> also, s/functional/haskell/
<katlogic> dont shit stain functional languages with your zealotry
<prophile> haskell doesn't have dependent types either
<joelteon> haskell is cool, i like haskell
<prophile> it's equally useless!
<katlogic> i thought haskell is so meta one can fake DT in it
<joelteon> you can, but i don't like faking things with the type system
<joelteon> idris is better for that
<katlogic> joelteon: i guess that will have to wait till next hype wave
* katlogic wonders what will be next after node.haskell
<katlogic> perhaps prolog or cobol
<joelteon> there's haskell hype?
<katlogic> there are signs of impeding haskellocalypse
<katlogic> like js in 2006
<joelteon> huh, cool
<joelteon> i wouldn't mind that
<joelteon> haskell has been around since 1990 though
<katlogic> i think all what remains is actual debugger for haskell, and some half-assed web framework and its good to go
<joelteon> i don't think idris is going to be hyped, it's kind of complicated
<joelteon> haskell already has several web frameworks
<katlogic> yeah, needs to be dumbed down
<joelteon> and it does have a debugger
<joelteon> it's just shit
<katlogic> yeah
<joelteon> fortunately i don't have to do debugging in haskell too often
<katlogic> both the framework and debuger needs to be sufficiently dumbed down for this to happen
<joelteon> well
<joelteon> i think haskell's barrier to entry might be too high
<katlogic> the whole no-sideffect things?
<katlogic> i dont think thats it as much of show stopper these days
<joelteon> like "monads" and stuff
<katlogic> nah, thats not viable workaround
<katlogic> more like, all mutable state in mongodb
<katlogic> there, done
<joelteon> it does take a little while to figure out why everything works the way it does
<joelteon> so anyway, back to ruby being stupid
<joelteon> i'm trying to build therubyracer
<joelteon> i have gcc and g++ 4.8.2
<katlogic> joelteon: what about static typed offshoots of ruby, like https://github.com/manastech/crystal
<joelteon> neither of them accept -Wnewline-eof, which is a darwin-specific argument that was removed after 4.2
<joelteon> however, the configure script doesn't actually check whether -Wnewline-eof is supported
<joelteon> it says "ok, we're on darwin, that means we need to use this flag"
<joelteon> the build breaks
<joelteon> there's no option to disable that warning in the configure script
<joelteon> so what you do is write a shell script that calls g++ with everything except -Wnewline-eof
<joelteon> then use CXX=myscript ruby extconf.rb
<joelteon> of course, extconf doesn't pay attention to CXX, so that fails too
<joelteon> so the solution is to remove gcc/g++ from the PATH, refer to them explicitly in the shell script, rename the script to g++, add its parent to the PATH, and run extconf again
<joelteon> bam
<joelteon> fucking garbage
<katlogic> compiling is ok, but trying to fix random crashes in RR is fucking impossible
* katlogic suspects some java programmer designed the thing
<katlogic> stuff which can be done in 1kloc done in 100kloc
<joelteon> what's RR
<katlogic> ruby racer
<joelteon> oh ok
<joelteon> therubyracer? the wrapper for libv8?
<katlogic> to be fair, v8 sucks donkey balls too
<joelteon> you mean the javascript engine or the bindings to it?
<katlogic> not badly designed, but complete lacks of docs
<joelteon> the engine itself is a really impressive piece of engineering
<joelteon> boy i'm glad i never have to interop with it
<joelteon> therubyracer, of course, is garbage
<katlogic> as for jit engine, it has some + and -s too, but overall pretty top of the line.
<katlogic> for example, doing memory intensive tasks on v8 is pretty delusional, simply because its not been engineered for it
<katlogic> gc not sucky, but you dont need to gc more than 2mo objects in typical browser workloads
<joelteon> 2 mo?
<katlogic> roughly the threshold when it slows down to crawl
<katlogic> cpu runs out of cache
<katlogic> and each gc steps takes 1000+ ms
<katlogic> that comparison is a bit unfair though, java jit is actually designed for server workloads ...
<katlogic> jit and moreso gc
<katlogic> what really sucks in v8 is the overhead of c++/js boundary
<katlogic> ie lua and java can beat it several magnitudes in there
<joelteon> lua is a cool language
<katlogic> its too wtf to go mainstream, same as with haskell
<joelteon> it's not that, it's how small the stdlib is
<katlogic> what?
<joelteon> the lua stdlib is embarrassingly bare
<katlogic> i'm not sure about that batteries included dilemma
<katlogic> you know, js has no runtime of its own either
<joelteon> it makes sense for an embeddable scripting language though
<katlogic> well, even if it had something like that im not too sure it would be of any use
<joelteon> in the browser, js has everything it needs (mostly)
<joelteon> i've never used js outside the browser
<katlogic> though orthogonally elegant, its not just as productive as hacking things together in python
<joelteon> god i hate python
<katlogic> most often i just port hacked python tools to lua later when i need that 100x+ speedup
prophile has quit [Quit: The Game]
prophile has joined #elliottcable
prophile has quit [Read error: Connection reset by peer]
prophile has joined #elliottcable
prophile has quit [Quit: The Game]
<ELLIOTTCABLE> UGH HELP I AM BAD AT FUNCTIONAL
<ELLIOTTCABLE> OR MATH OR WHATEVER
<ELLIOTTCABLE> they're trying to teach me set theory I CAN'T I CAN'T D:
<katlogic> p much
<katlogic> fucking ableist math, all hail basic numerics
<Cheery> hello a ->
<Cheery> {a -> : ('hello', None)}
<Cheery> {a -> : ('hello', 1)}
<Cheery> hello 1 a ->
<Cheery> hello a ->
<Cheery> {a -> : ('hello', None)}
<Cheery> hello 1 a ->
<Cheery> {a -> : ('hello', 1)}
<Cheery> woops.
<Cheery> anyway. it works. ^
<Cheery> parser generator that parses a language which feeds the parser generator
<Cheery> which produces parsers
<Cheery> that parse languages
<Cheery> :E
<ELLIOTTCABLE> om
<ELLIOTTCABLE> fg
<ELLIOTTCABLE> I am dying
<ELLIOTTCABLE> watch me be confused lol
<purr> lol
prophile has joined #elliottcable
alexgordon has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
prophile has quit [Quit: The Game]
<Cheery> ELLIOTTCABLE: I load the parser and attach it to the module where I load it from.
<Cheery> as the result the module turns into an interpreter
<Cheery> what do you think?
prophile has joined #elliottcable
eligrey has joined #elliottcable
<devyn> ELLIOTTCABLE: well, I think I'm going to go ahead and not conform to the spec for parallel reactors, because parallel reactors are pretty much useless if you do
<devyn> ELLIOTTCABLE: but I've set it up so I can now have multiple types of reactors
<devyn> ELLIOTTCABLE: so now I have SerialReactor, which doesn't attempt any parallelism.
<devyn> ELLIOTTCABLE: and that will follow the spec as it is now, because it's the most obvious thing to do without parallelism anyway
alexgordon has joined #elliottcable
devyn_ has joined #elliottcable
<devyn_> I got disconnected
<joelteon> RIP
devyn_ has joined #elliottcable
devyn_ has quit [Changing host]
devyn has quit [Disconnected by services]
devyn_ is now known as devyn
<devyn> since I'm not sure which messages made it through,
<devyn> 14:39:06 <+devyn> ELLIOTTCABLE: well, I think I'm going to go ahead and not conform to the spec for parallel reactors, because parallel reactors are pretty much useless if you do
<devyn> 14:39:28 <+devyn> ELLIOTTCABLE: but I've set it up so I can now have multiple types of reactors
<devyn> 14:39:45 <+devyn> ELLIOTTCABLE: so now I have SerialReactor, which doesn't attempt any parallelism.
<devyn> 14:40:05 <+devyn> ELLIOTTCABLE: and that will follow the spec as it is now, because it's the most obvious thing to do without parallelism anyway
<devyn> 14:41:08 <+devyn> ELLIOTTCABLE: I'm going to add ParallelReactor/ReactorPool which won't follow the spec, but will allow me to do some experimentation to find out what the most efficient way to do this is
prophile has quit [Quit: The Game]
prophile has joined #elliottcable
prophile has quit [Quit: The Game]
prophile has joined #elliottcable
Sgeo has joined #elliottcable
prophile has quit [Quit: The Game]
<purr\Paws> [Paws.rs] devyn pushed 2 new commits to master: https://github.com/devyn/Paws.rs/compare/b52321884a8f...80d5a8011f2b
<purr\Paws> Paws.rs/master 80d5a80 Devyn Cairns: Fix all tests
<purr\Paws> Paws.rs/master 89ece18 Devyn Cairns: Fix implementation stop[]
yorick has quit [Remote host closed the connection]
<devyn> let (senders, receivers) = unzip(range(0, reactors).map(|_| channel()));
<devyn> god I love functional programming
<devyn> joelteon: ↑
<joelteon> if you were alexgordon, you could use unzip as a combinator to write any other list utility
<alexgordon> lol
<purr> lol
<devyn> it's… it's beautiful http://i5.minus.com/iq4YB49WwfJSA.png
<alexgordon> devyn: atom do you really?
eligrey has quit [Read error: Connection reset by peer]
<devyn> alexgordon: Rust has really nice atomics and I've done this a million different ways with locks so now it's time to try something lock-free :p
<alexgordon> devyn: GCD duuuuuuuuuude
<devyn> GCD would not help with this at all...
<devyn> and Rust's green-threading system is basically equivalent to GCD and didn't help. you still need locks to run it in parallel
<alexgordon> devyn: ?
<alexgordon> all problems can solved by GCD :P
eligrey has joined #elliottcable
<devyn> in this case, badly :p
<devyn> ↑ pretty much exactly the same as GCD
<devyn> M:N cooperative userspace scheduler
<devyn> and don't get me wrong, a model like GCD is actually very good which is why Rust uses it,
<devyn> (not GCD specifically but that model)
<devyn> but in this case it's not useful to me
<devyn> if I really wanted to take advantage of it, I'd have to create a new green thread for each Execution and Alien
<devyn> and in the future, there are going to be a lot of those
<devyn> and each green thread has like, a 4K stack + a register context
<devyn> that's a pretty big allocation hit
<devyn> for like, hundreds of thousands or millions
<alexgordon> devyn: not in gcd
<devyn> oh, okay, so then it's more like
<devyn> still not useful
<devyn> :p
<alexgordon> devyn: a dispatch_queue_t is 50 bytes maybe
<alexgordon> devyn: why not useful?
<alexgordon> maybe 50 is a bit too low, 100?
<devyn> in my case I need to be able to figure out when the task pool runs out of work to do
<devyn> so I basically need to implement exactly that, but with that additional constraint
<devyn> and if I'm going to do that, why pass it closures? I can just pass it my Paws operations
<devyn> it's so simple though
<alexgordon> devyn: why do you need to figure out when the task pool runs out of work?
<devyn> alexgordon: it's a requirement for many behind-the-scenes things to be able to figure out when there's nothing more that can be usefully done
<devyn> for example Paws Rulebook specifications rely on that to provide a 'default' case
<alexgordon> devyn: in GCD you CAN do this by making your own concurrent queue, then pushing a barrier :P
<devyn> and it's also useful to have the application automatically exit
<alexgordon> see! everything is possible in GCD!
<devyn> there are barriers in Rust too
<devyn> that doesn't help
<devyn> I don't see how that does
<devyn> lol
<purr> lol
<alexgordon> devyn: if you want to know when the queue is idle
<alexgordon> A B C | barrier | D
<alexgordon> D will only run when A B C have finished
<devyn> ahh, see, here's the problem: A B and C can create more work