ELLIOTTCABLE changed the topic of #elliottcable to: screw syntax, make neat languages
<cloudhead> hi
<purr> cloudhead: hi!
PragCypher has quit [Remote host closed the connection]
<devyn> ELLIOTTCABLE: my guess is for pristine=true: set pristine=false, pc=first in root. stack would be empty but I don't think that's a problem
<devyn> and of course it would just end up combining against response
yorick has quit [Remote host closed the connection]
<devyn> ELLIOTTCABLE: initialization of a pristine Execution also has to check if it's empty, otherwise if it's empty step #3 would be applied, as current would be undefined
<devyn> but I think this should work
<devyn> hmm
<devyn> hold on I see another problem
<devyn> step #3 should really just take into account whether there's an enclosing Expression
<devyn> if not it just discards and produces no combination
<alexgordon> hi devyn
<devyn> hi alexgordon
<alexgordon> devyn: talk langs to me dev
<devyn> not going to be here for much longer. just finishing up advance() and then headed downtown.
<alexgordon> devyn: :(
<devyn> but, if you want, you can throw stuff at me and I'll reply later
<devyn> :p
<cloudhead> rust is the least fun I've had programming since C++
<cloudhead> :(
<cloudhead> actually it's less fun than C++
prophile has quit [Quit: The Game]
<alexgordon> cloudhead: HAHA
<alexgordon> cloudhead: micah said the exact same thing
<alexgordon> cloudhead: but more educatedly-like
<alexgordon> cloudhead: rust is a really brilliant language and it does everything right buuuuuut I dunno it's like uncanny valley
<alexgordon> C++ is the real deal
<alexgordon> it's the real deal because it's for the most part a superset of C
<alexgordon> so you can really crucify yourself using it
<alexgordon> e.g. computed goto. I dunno if rust has anything like that
<alexgordon> rust is a bit like ada to be honest
<alexgordon> you can't argue with their decisions
<cloudhead> lolol
<purr> lolol
<cloudhead> it's just
<cloudhead> so fucking verbose
<cloudhead> and complicated
<alexgordon> ...but they don't add up to a good whole
<alexgordon> cloudhead: yah
<alexgordon> their problem is trying to implement everything that C can do
<alexgordon> but in a different way
<cloudhead> let p = node.parent_.as_ref().unwrap().upgrade().unwrap();
<cloudhead> just wrote this
<cloudhead> lol
<cloudhead> I don't even
* joelteon monads
<cloudhead> the safety features get in the way of... doing things
<alexgordon> haha yeah
<cloudhead> yea, and because of the crippled type system
<cloudhead> you basically have to litter the code with crap
<joelteon> to be fair
<cloudhead> I almost prefer running valgrind every other time
<joelteon> it is not yet version 1
<cloudhead> true..
<alexgordon> joelteon: their problem now is that it's really not ready
<alexgordon> but it has traction
<cloudhead> but will v1 have higher-kinded types
<cloudhead> is my question
<alexgordon> so do they push for 1.0 and possibly people will actually use it
<cloudhead> and even that would not be enough I think..
<joelteon> alexgordon what do you call the difference between C++ templates where you state what variables you're parameterizing on and haskell typeclasses where you don't have to
<alexgordon> or do they spend the 4 or so years it needs, at the risk of alienating all their users
<cloudhead> heh
<cloudhead> (* -> *) -> *
<alexgordon> joelteon: one of them is useful?
<joelteon> ok
<joelteon> but what's the name for it
<alexgordon> not sure, example please
<joelteon> ok i don't really know c++ but it's like
<joelteon> what would the type for a map function be in c++
<joelteon> i don't know lambdas
<alexgordon> don't need lambdas
<alexgordon> the type would be
<joelteon> ok
<alexgordon> well
<joelteon> go on
<alexgordon> depends how deep you go
<alexgordon> the simplest would be
<alexgordon> template<typename T> std::vector<T> map(std::vector<T> xs, T (*f)(const T& x));
<alexgordon> but that's not really the same as haskell
<alexgordon> you can extend that to mapping between different types
<joelteon> you can extend haskell to map between different types too
<alexgordon> template<typename A, typename B> std::vector<B> map(std::vector<A> xs, B (*f)(const A&));
<alexgordon> right next stage would be to map over arbitrary collections
<joelteon> i wasn't trying to make this a dick measuring contest, i might've done it by accident
<alexgordon> lol?
<purr> lol
<joelteon> do you know what you call it when that happens
* alexgordon isn't measuring his dick
<joelteon> i forgot my ruler
<alexgordon> joelteon: you mean when you do like A<B> ?
<joelteon> maybe
<joelteon> yes
<alexgordon> it's either higher kinded or higher ranked, can never remember the difference
<cloudhead> does C++ have hkts?
<joelteon> ok, no, that's not what i meant
<alexgordon> joelteon: my knowledge of haskell lingo is pretty low
<cloudhead> well, you wouldn't really need them
<joelteon> if haskell types looked like c++ types, that would be this:
<joelteon> std::vector<B> map(std::vector<A> xs, B (*f)(const A&));
<joelteon> in c++ you state template<typename A, typename B>
<alexgordon> oh well that's just a forall
<alexgordon> haskell has implicit forall
<joelteon> right
<alexgordon> when you write
<joelteon> oh ok
<joelteon> implicit forall
<joelteon> ok
<alexgordon> (a -> b) -> [a] -> [b]
<alexgordon> it means
<joelteon> yeah i know
<alexgordon> forall a. forall b. etc
<joelteon> there we go
<joelteon> ok, cool
<alexgordon> joelteon: C++ doesn't have that because functions (among other things) can have type arguments
<alexgordon> whereas haskell uses casting
<alexgordon> e.g.
<joelteon> you mean they can take a type as an argument?
<alexgordon> yeah: map<int>(someCollectionOfInts, isEven)
<joelteon> ok, cool
<alexgordon> _usually_ C++ will be able to deduce the type arguments automatically
<joelteon> that makes sense
<alexgordon> but sometimes it cannot, e.g. for a return value parametrization
<alexgordon> also C++ templates can be integers as well as types
<alexgordon> e.g.
<alexgordon> Matrix<4, 4>
<alexgordon> which haskell doesn't have
<alexgordon> and don't get me started on variadic templates :P
<joelteon> ok i won't
<alexgordon> people say haskell has a powerful type system
<joelteon> haskell does have type lits now though
<joelteon> and there are some constraints in base 4.7 for comparing numbers
<joelteon> on the type level
<alexgordon> but it still has things like 10 overloads for functions on tuples, whereas in C++ you can do that with a recursive template definition
<joelteon> but i mean, why would you use that shit anyway
<joelteon> c++ tuples are like hlists
<alexgordon> joelteon: link?
<alexgordon> what's an hlist
<joelteon> it's just a tuple, except you can cons/uncons it
<alexgordon> personally I'm in the camp that it's better to just generate this code from metaprogramming than try and expand the scope of the type system
<joelteon> it's just a haskell tuple*
<alexgordon> like if you wanted a function that mapped on tuples
<alexgordon> map :: (a -> b) -> (a, a) -> (b, b)
<alexgordon> you're better off generating a bunch of those
<joelteon> that's (&&&)
<joelteon> but yeah
<alexgordon> than trying to do weird stuff like
<alexgordon> map :: (a -> b) -> (a...) -> (b...)
<alexgordon> too complex
<joelteon> i agree
<alexgordon> but that's what C++ does
<alexgordon> never afraid of complexity :P
<joelteon> nop
<joelteon> i'd link you to the hlist docs but that's an oleg library
<joelteon> that's the one
<alexgordon> joelteon: but omg haskell so needs some way of representing Matrix<4, 4> :P
<alexgordon> linear algebra in haskell is a mess
<joelteon> yeah i agree
<joelteon> i've never done linear algebra in haskell so i can't comment
<joelteon> so is that like a four-dimensional matrix or is it just 4 by 4?
<cloudhead> alexgordon: what's wrong with mat.r1c1 etc
<cloudhead> ;p
<alexgordon> -_-
<cloudhead> that's the least of my problems
<cloudhead> atm
<alexgordon> joelteon: 4 dimensional matrix would be a tensor :P
<cloudhead> lol
<purr> lol
<joelteon> yeah i don't know what a tensor is
<alexgordon> it's just one with 16 elements
<alexgordon> joelteon: a tensor is like a matrix but more
<joelteon> ok
<joelteon> so it's a 4 x 4 matrix
<joelteon> i think you could do that with haskell...it would be complicated though
<alexgordon> it is
<alexgordon> joelteon: I mean technically speaking matricies are just vectors with an added operation of matrix multiplication :P
<joelteon> well sure they are
<joelteon> everyone knows that
<alexgordon> everyone!
<alexgordon> so a 4 x 4 matrix is a 16-element tuple
<alexgordon> or a list really
<alexgordon> but the problem is, you've got to store the dimensions somewhere
<joelteon> actually I'm gonna try and see if I can do that
<alexgordon> I guess in haskell it doesn't matter because haskell it's a terribly efficient language
<alexgordon> so you can just do
<alexgordon> data Matrix a = Matrix Int Int [a]
<alexgordon> but in C++ that's a terrible waste
<cloudhead> lol
<purr> lol
<alexgordon> a whole 16 bits of wastage
<cloudhead> Mat4
<cloudhead> done
<alexgordon> so in C++ it's stored in the type
<alexgordon> ofc this can be a curse
<alexgordon> because it increases code size
<cloudhead> type Mat4 = Vec4 Vec4 Vec4 Vec4
<alexgordon> but in something like a game it doesn't really matter because you only have a couple of instances of that template
<alexgordon> cloudhead: lolol
<cloudhead> you only need 1 mat type anyway
<cloudhead> no need to complicate things ;p
<cloudhead> anyway, all this is trivial compared to rust borrow semantics
<cloudhead> lol
<cloudhead> T,T
<cloudhead> Q,Q
<cloudhead> I already ported my C engine to rust
<cloudhead> now I'm stuck with this rats nest
<cloudhead> rats
<cloudhead> is what I'm going to start calling it
<cloudhead> ratslang
<cloudhead> #
* alexgordon wonders what the fastest way to multiply two small matrices is
<cloudhead> #ratslang
<alexgordon> like say you have two 4x4 matrices
<cloudhead> fastest way is to just multiply it
<cloudhead> I mean
<cloudhead> there's only one way really
<alexgordon> yeah but how
<cloudhead> each element
<cloudhead> 4 muls
<alexgordon> :P
<cloudhead> 3 adds
<alexgordon> think lower level
<cloudhead> they're dot products no?
<alexgordon> which loops if any do you unroll
<cloudhead> 100% unrolled
<cloudhead> no loops
<alexgordon> wouldn't that be quite big?
<cloudhead> it's fine
<cloudhead> that's how it's usually done in games
<alexgordon> it's O(n^3) so like 64 copies?
<alexgordon> lulz
<cloudhead> you could use simd to optimize it a bit
<cloudhead> but that's the gist of it
<cloudhead> :(
<alexgordon> seems like it would rape the caches
<cloudhead> they're dot products
<cloudhead> so you can just do 16 dot products
<alexgordon> I mean it makes me dizzy just looking at it :P
<cloudhead> with the dpps instruction
<cloudhead> hehe
<joelteon> omg that's so beautiful
<joelteon> idiomatic rust chapter 1
<cloudhead> kek
<cloudhead> wanna see inverse?
<cloudhead> lol
<purr> lol
<alexgordon> oh god
<joelteon> no...
<alexgordon> cloudhead: it's fun to put these things into mathematica
<cloudhead> it's not as beautiful :D
<joelteon> do you have mathematica?
<alexgordon> MatrixInverse[{{a1, a2, a3, a4}, {b1, b2, b3, b4}, {c1, c2, c3, c4}, {d1, d2, d3, d4}}
<alexgordon> it will do the whole thing for you
<alexgordon> is it called matrixinverse?
<alexgordon> nah it's called Inverse[]
<cloudhead> oh god it's light outside
<cloudhead> :((
<alexgordon> LOL
<alexgordon> joelteon: yes of course :P
<cloudhead> and I'm writing fucking rust 0.11-nightly code
<cloudhead> :/
<joelteon> neat
<cloudhead> what am I doing with my life
<joelteon> i should get mathematica
<alexgordon> joelteon: really old version
<alexgordon> mathematica 7
<alexgordon> ol' sturdy
<joelteon> i'm going to get mathematica for myself
<joelteon> omg i want a pizza
<joelteon> that would be so cool
<alexgordon> joelteon: it's free now for rπ
<cloudhead> wtf is that glyph
<joelteon> what's that
<joelteon> is that hebrew
<cloudhead> oh I see
<alexgordon> joelteon: it's not particularly fast, but then again it never was
<joelteon> so that runs on a raspberry pi?
<joelteon> so i cant do it on my mac
<alexgordon> yeah
<joelteon> rats
<joelteon> i think i'm getting motion sick from looking at my stationary laptop screen
<alexgordon> joelteon: it runs on your mac but you have to pay through the cock
<joelteon> rats
<alexgordon> I would definitely never suggest pirating it. that would be immoral and against human decency
<joelteon> yeah me too
<alexgordon> also that guy, steven... jobs? no. wolfire? no, wolfram, employs a crack team of lawyers
<joelteon> what's a crack team
<alexgordon> it's how they manage the long hours
<alexgordon> don't judge
<alexgordon> LOL wikipedia has an article on how to prepare crack
<purr> LOL
<joelteon> what, for like a dinner party?
alexgordon has quit [Quit: Textual IRC Client: www.textualapp.com]
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
<ELLIOTTCABLE> hi …
<ELLIOTTCABLE> 9:19 PM <+alexgordon> or do they spend the 4 or so years it needs, at the risk of alienating all their users
<ELLIOTTCABLE> know that feel.
eligrey has quit [Read error: Connection reset by peer]
oldskirt has quit [Ping timeout: 240 seconds]
<devyn> ELLIOTTCABLE: check out Paws.rs, I got advance() working, tested, and into the paws_rs application
<devyn> ELLIOTTCABLE: it just advance()s repeatedly with "test" as the response
<devyn> and prints each step
yorick has joined #elliottcable
oldskirt has joined #elliottcable
Sgeo has quit [Read error: Connection reset by peer]
alexgordon has joined #elliottcable
prophile has joined #elliottcable
prophile has quit [Quit: The Game]
PragCypher has joined #elliottcable
john3213 has joined #elliottcable
john3213 has left #elliottcable [#elliottcable]
prophile has joined #elliottcable
Determinist has joined #elliottcable
gozala has joined #elliottcable
prophile has quit [Quit: The Game]
eligrey has joined #elliottcable
<alexgordon> guys
<alexgordon> what's that blog with the interesting stuff about proglangs?
<alexgordon> wait I know
oldskirt_ has joined #elliottcable
oldskirt has quit [Ping timeout: 276 seconds]
PragCypher has quit [Quit: Leaving]
ELLIOTTCABLE has quit [Ping timeout: 252 seconds]
cdl_on_twitter has joined #elliottcable
Rusky has quit [Ping timeout: 240 seconds]
Rusky has joined #elliottcable
PragCypher has joined #elliottcable
alexgordon has quit [Ping timeout: 258 seconds]
alexgordon has joined #elliottcable
PragCypher has quit [Ping timeout: 264 seconds]
PragCypher has joined #elliottcable
cdl_on_twitter is now known as ELLIOTTCABLE
<ELLIOTTCABLE> alexgordon: have to admit, you're making me want to learn C++ properly.
<ELLIOTTCABLE> alexgordon: as in, the way you've described templating above, sounds right up my alley. I would *love* to work with that.
<alexgordon> ELLIOTTCABLE: haha
<alexgordon> ELLIOTTCABLE: it's actually awesome
<alexgordon> because it's so intuitive, to me
<alexgordon> I find it way more intuitive than "traits" and stuff
<alexgordon> because it's literally just simple subtitution
<alexgordon> no hidden rules baked into the language
<ELLIOTTCABLE> cloudhead: hi.
<ELLIOTTCABLE> cloudhead: in your professional opinion, what's the value of Rust?
<alexgordon> didn't he say he hated it yesterday?
<ELLIOTTCABLE> I got a lot of feel for your issues with it; what do you see as the positives?
<ELLIOTTCABLE> -clouds
<purr> ELLIOTTCABLE: is stuck up in the clouds; hilight 'em if you want 'em.
<ELLIOTTCABLE> devyn!
devyn has quit [Read error: Connection reset by peer]
devyn has joined #elliottcable
<ELLIOTTCABLE> devyn!
vigs has quit [Ping timeout: 258 seconds]
<ELLIOTTCABLE> “All of these come from abstract algebra and category theory, which is a pretty insane field.”
<ELLIOTTCABLE> love this guy so much.
<devyn> ELLIOTTCABLE!
<ELLIOTTCABLE> hi
<purr> ELLIOTTCABLE: hi!
<ELLIOTTCABLE> learning things, a bit
<ELLIOTTCABLE> so, two things:
vigs has joined #elliottcable
<ELLIOTTCABLE> A) Why are you writing a Paws? To my immense surprise, you keep coming back and working on it, day-after-day.
<ELLIOTTCABLE> B) if you understand Paws well-enough, now that you're *implementing* it; I need to talk to somebody about the concurrency issues you brought up. I've been thinking hard on it for several days, and have some observations; but micah's basically fallen off the programming map, and I seem to have a really hard time drawing actionable insights or decisions out
<ELLIOTTCABLE> of my thought-process without a cognizant sounding-board.
<ELLIOTTCABLE> (I googled “learning system F”, because the original paper I have on hand is a little dense for me,)
<ELLIOTTCABLE> (and got an article titled “System F in CoffeeScript.”)
<ELLIOTTCABLE> (that's two things you would never fucking expect to see in close proximity to one-another. O_O)
<devyn> ELLIOTTCABLE: A) I don't even know. It's kinda fun. I'm learning Rust. I have better things to do, but... this is pretty fun
<devyn> ELLIOTTCABLE: B) okay
* ELLIOTTCABLE smiles
<ELLIOTTCABLE> I have to leave in a little under 20 minutes, to start walking. Have a haircut to get to.
<devyn> alright
<devyn> lol system f in coffeescript
<purr> lol
<ELLIOTTCABLE> so I won't go into any depth, right now. Will you be around “tonight?” (T ⨤ 2 hrs)
<devyn> yeah, most likely
<ELLIOTTCABLE> I understand the S.f in CS thing, actually. He chose it because, for the strict set of things needed, their syntaxes are directly correspondent
<devyn> then I guess that makes sense
<ELLIOTTCABLE> λx.λy.x === (x)-> (y)-> x
<ELLIOTTCABLE> and
<ELLIOTTCABLE> x y === x y
<devyn> Haskell is probably closer...
<ELLIOTTCABLE> e ::= x | λx.e | e e
<ELLIOTTCABLE> e ::= x | (x)-> e | e e
<ELLIOTTCABLE> yeah, but Haskell isn't remotely as approachable.
<devyn> \x -> \y -> x
<devyn> x y
<ELLIOTTCABLE> to me, it was surprising that he was using CoffeeScript instead of, say, Ruby, C, or JavaScript
<devyn> I still think \ is such a funny choice
<ELLIOTTCABLE> funny, ick
<devyn> because it looks like lambda, apparently
<ELLIOTTCABLE> terrible choice. >:
<devyn> if you enable UnicodeSymbols you can actually use the lambda
<devyn> no one does though
<ELLIOTTCABLE> I would >:
<ELLIOTTCABLE> anyway
<devyn> haha
<ELLIOTTCABLE> so.
<ELLIOTTCABLE> basically:
<ELLIOTTCABLE> there's three ways to take bites out of the sequencing problem.
<ELLIOTTCABLE> which is what the thing you brought up, basically is.
<devyn> mmhm
Sgeo has joined #elliottcable
<ELLIOTTCABLE> at the moment, the naïvest Paws *must* un-stage unstage a realizing execution after a single combination.
<ELLIOTTCABLE> A) for what is likely the most common single staging, we can special-case it and make it “synchronous”, i.e. on-the-stack, because we *know* it preforms no asynchronous operations. Specifically, the receiver for Things.
<ELLIOTTCABLE> that means a sequence of ‘component’-lookups, not abstracted in any way (`foo bar baz`) can be preformed on the stack, without unstaging.
<devyn> yes
<devyn> I was thinking about that
<devyn> in fact I was thinking that all native operations could basically choose whether they want to respond immediately or not
<devyn> and then that would get propagated
<devyn> so like the native handler could either return a response immediately
<devyn> and the reactor would just continue
<devyn> hmm
<devyn> maybe
<devyn> native handler could return a staging
<devyn> or not
<devyn> like
<devyn> Option<Staging>
<ELLIOTTCABLE> Spilled soda on my laptop.
<ELLIOTTCABLE> And now leaving for haircut. Back soon.
<devyn> lol
<purr> lol
<devyn> okay
oldskirt_ has quit [Read error: Connection reset by peer]
oldskirt has joined #elliottcable
katlogic has quit [Ping timeout: 240 seconds]
katlogic has joined #elliottcable