purr changed the topic of #elliottcable to: a
<brixen> whitequark: the basic thing I want is to be able to bootstrap a system in repeatable stages, 1. a bit of shell to start, enough to build a limited VM, 2. the VM can read some insns, 3. the insns implement a bigger parser, 4. another layer can execute more insns, and up
<brixen> whitequark: thanks, I'll check out the paper
<whitequark> dunno, the OCaml approach of dragging a bytecode implementation of the compiler + a minimal VM seems ok to me
<whitequark> what you propose is marginally more elegant for a ton more work
<brixen> doesn't actually seem like much work
<brixen> it's the SpaceX reusable rocket approach vs the disposable booster approach
<brixen> except you don't have to land the thing with rockets :p
<ELLIOTTCABLE> brixen: eli5?
<ELLIOTTCABLE> bciam
<brixen> ELLIOTTCABLE: is that a dialect of English? :p
<brixen> we need a /glossary built-in :)
<whitequark> explain like he is five
<whitequark> because he is
<brixen> lol
<purr> lol.
<brixen> purrrrrrrrr
<brixen> ELLIOTTCABLE: do you mean the bootstrapping part or something else?
<whitequark> brixen: i'm actually wondering about all the VM instruction fixation
<ELLIOTTCABLE> -learn glossary = ask whitequark
<purr> ELLIOTTCABLE: Learned `glossary`.
<whitequark> why not describe languages using successively higher-level IRs?
<ELLIOTTCABLE> brixen: oh, just everything you two just exchanged about bootstrapping went way over my head
<jfhbrook> whitequark: after a while you just get sick of turtles?
<brixen> ELLIOTTCABLE: ah, ok, we'll dig in at some point
<whitequark> jfhbrook: make turtle soup then
<brixen> ELLIOTTCABLE: basically, people usually bootstrap systems by building a "throw-away" compiler
<brixen> then they are self-hosting, and re-bootstrapping either 1. requires going back to bit-rot code, or 2. building new code
<brixen> ELLIOTTCABLE: this is like using disposable booster rockets to get to space, and I want re-usable ones
<whitequark> except building simple compilers for bootstrapping is 1) easy 2) cheap
<whitequark> so the analogy doesn't hold in the slightest
<brixen> whitequark: two assumptions that I see in ISA design that are flawed: 1. "insns" mean a homogenous and "small" granularity, 2. all are (ideally) irreducible
<brixen> whitequark: so, the instruction set becomes an implementation detail
<brixen> instead, I want to look at the instruction set as the protocol for describing computation to the mechanism computing
<brixen> I want that protocol to be "implementation independent"
<brixen> whitequark: bootstrapping Ruby was neither easy nor cheap
<brixen> also, when we build bit-rotting throw-away bootstrapping stages, we don't enable people to build up in a layered fashion
<brixen> eg, show me languages on the JVM or on JS that share significant portions of their build tools or even concepts
<whitequark> mhm
<brixen> mare than anything, I want people to experiment with languages in the deepest way
<brixen> and the thing that prohibits that is cost
<brixen> the cost of writing compilers and parsers and VMs has fallen dramatically in the past 15-ish years
<brixen> but we are still building new languages like we did in the 50s
<whitequark> i don't really get why an instruction stream is the right abstraction to build on top of
<brixen> and that sucks because that's a whole lot of waste, which means a whole lot of resources that could be directed at solving problems, wasted
<brixen> whitequark: I'm not absolutely convinced, but it's the best idea I have right now
<whitequark> have you seen the IR that Guile uses?
<brixen> ie, there's a bunch of stuff that's not reducible unless you start abstracting beyond the point of utility
<brixen> what's the intel instruction that's Turing complete? MOV?
<brixen> like, we could have a computer with 1 instruction, why are you building all these instructions lololololol
<purr> lolllll
<whitequark> mov, yes
<whitequark> there are actually commercial products built around a subleq machine
<whitequark> so i wouldn't completely discard that :p
<brixen> heh
<brixen> whitequark: there's this idea that Dave Snowden talks about "exaptation is more valuable than adaptation"
eligrey_ has joined #elliottcable
<brixen> that concept is what explains this more clearly to me these days
<brixen> this == the constant effort people make to reduce things beyond the point of utility
eligrey has quit [Ping timeout: 250 seconds]
<brixen> DRY it, "simplify" it, etc. and we end up with stupid levels of complexity that stifle any innovation
<brixen> like, I've wasted 10 hrs this week easily on freakin openssl
<brixen> all I *desperately* want is the ability to rewrite that damn thing out of *any* system I have to touch at 1000x less cost than it took to write it in the first place
<brixen> the way we are building systems, we will never have that ability
<brixen> I need write a post on this: the existence of some thing, even if it is terrible, will effectively prevent a much, much better thing from every being built
<brixen> s/every/ever/
<whitequark> "worse is better"
<brixen> unless you build the system to make replacement one of the least costly things
<brixen> it's even worse than "worse is better"
<whitequark> i don't believe you will solve human inertia with software tools
<brixen> I don't think I'm trying to
<brixen> I'm trying to solve that people have to build the Panama canal to get water across the street to the other building
<brixen> alas, out of time for today
<ELLIOTTCABLE> brixen: you're gone? damn, my timing is bad
<ELLIOTTCABLE> I was on the road, and *just* unfolded myself at Subway to eat and chat you up.
<ELLIOTTCABLE> shoulda just stayed where I was earlier until you left :P
<ELLIOTTCABLE> whitequark: hi!
eligrey has joined #elliottcable
eligrey_ has quit [Ping timeout: 256 seconds]
<ELLIOTTCABLE> ugh andy wingo
<ELLIOTTCABLE> I have such a giant programmer crush on him
<ELLIOTTCABLE> I think he finds me consummately annoying lol
<purr> lolllll
<ELLIOTTCABLE> purr, ugh
alexgordon has quit [Quit: Textual IRC Client: www.textualapp.com]
<ELLIOTTCABLE> I followed him around for several JSconfs in a row (gkatsev can attest to this), and I'm pretty sure he got vee sick of me
<jfhbrook> hahahaha
<jfhbrook> I remember that guy, I'm not really familiar with his work I just remember the nametag because what a name
eligrey has quit [Ping timeout: 260 seconds]
eligrey has joined #elliottcable
eligrey has quit [Ping timeout: 276 seconds]
alexgordon has joined #elliottcable
<alexgordon> whitequark: your shit is down (!)
LucIenn has quit [Quit: Connection closed for inactivity]
<ELLIOTTCABLE> “That's a pithy sentence that deserves some unpacking. If you're already comfortable with what it means, you can skip a couple sections.”
<ELLIOTTCABLE> “Still here? Cool, me too.”
<ELLIOTTCABLE> lol I love him
<purr> lololololol
<ELLIOTTCABLE> jfhbrook: hahaha
<ELLIOTTCABLE> jfhbrook: he's the genius behind like *all* of GNU Guile's performance optimizations
<jfhbrook> oh no shit?
<jfhbrook> somebody bothered to performance optimize guile?
<ELLIOTTCABLE> and more importantly, to me, he's not some academic releasing shit into a journal and going to tenure-track,
<ELLIOTTCABLE> he *blogs* about literally *all* of it
<jfhbrook> that's cool
<ELLIOTTCABLE> like it's all very dense and not really something I've had an easy time jumping into, but he's like Matt Might or something: he's always seemed to try *really hard* to disseminate the things he's discovering and learning to the rest of the world, and not just through an open-source project with some cryptic commit messages and a bunch of code behind them
<ELLIOTTCABLE> like with well-written, and sure-difficult-to-grok but nonetheless clear *prose*.
<ELLIOTTCABLE> like dive into this: it's pretty readable so far
<ELLIOTTCABLE> lol jfhbrook
<ELLIOTTCABLE> I agree GNU is dumb, and I think there's better schemes, and whatever
<ELLIOTTCABLE> but point is this guy is a genius even if the product he happens to maintain isn't my cup 'o soup
<ELLIOTTCABLE> I *also* think brixen is very sharp and useful, but I don't use Ruby and haven't in years :P
<ELLIOTTCABLE> impressive work ≠ useful work
<ELLIOTTCABLE> useful (to me)*
<ELLIOTTCABLE> “The meat of classical data-flow analysis is the meet operation:”
<ELLIOTTCABLE> ahha. ahhah. haha.
<ELLIOTTCABLE> </pun>
<jfhbrook> huh
<alexgordon> meet as in lattice?
<whitequark> alexgordon: which hsit?
<alexgordon> whitequark: 502 irclog.whitequark.org/elliottcable
<ELLIOTTCABLE> alexgordon: apparently? I saw the word lattice, but I haven't gotten that far, and I have no idea what it means anyway.
<ELLIOTTCABLE> alexgordon: tell me more! you explain things well, as long as you aren't already 10x off base due to Opinions ;)
<alexgordon> ELLIOTTCABLE: um. I don't know much about lattices
<alexgordon> but the definition is on proofwiki
<alexgordon> ELLIOTTCABLE: you can either see it in terms of relations on a set, or you can see it as an algebraic structure with given axioms
<whitequark> alexgordon: up again
<ELLIOTTCABLE> well I know what both of those phrases mean in isolation
<ELLIOTTCABLE> what does a “lattice” have to do with them
<whitequark> lattices are easy
<ELLIOTTCABLE> also: https://github.com/nuprl/10PL is gr8
<whitequark> lemme give you a good intro on them
<ELLIOTTCABLE> whitequark: I have … probably about 20 minutes. go!
<ELLIOTTCABLE> and I'll be reading abstracts on papers in the meantime to categorize them on my pinboard
<alexgordon> let's learn lattices with father whitequark
<ELLIOTTCABLE> oh, and reminder for anybody reading:
<ELLIOTTCABLE> https://pinboard.in/u:elliottcable/t:PLT sometimes has some interesting stuff. follow it! or RSS it! or whatever!
<whitequark> skim it
<ELLIOTTCABLE> whitequark: read-later'd
<ELLIOTTCABLE> will go look
<ELLIOTTCABLE> got side-tracked because suddenly decided to have ifttt auto-tweet when I add something to t:PLT
<alexgordon> oh I get it
<alexgordon> haha wikipedia has a hasse diagram of lattice theory https://en.wikipedia.org/wiki/Map_of_lattices
<whitequark> alexgordon: is that... a lattice of lattices?
<alexgordon> indeed
<whitequark> meta as fuck
<alexgordon> well, almost a lattice
<alexgordon> got to add in some totally ordered algebraic boolean algebra, whatever that is :P
eligrey has joined #elliottcable
<creationix> here's a fun one if anyone has time https://gist.github.com/creationix/26692c7f1dd9e27c7eed
<creationix> let me know your preferred syntax for function calling and variable assignment
<creationix> (based on the universal tuple idea still)
<ljharb> creationix: functions can have any number of args?
<creationix> sort of
<creationix> they accept a tuple, which is like the left-hand-side of a JS destructuring
<ljharb> ok so every function accepts one arg - a tuple - which has 0 to N items?
<creationix> so if we did C-style, `add (1, 2)` is passing the tuple (1, 2) to add.
<creationix> right, so the language has universal symmetry in this regard
<creationix> you can return tuples, you accept tuples, assignment uses tuples
<ljharb> so first i'd recommend against making "arg tuple parens" anything but required or forbidden
<ljharb> ie, `()` and `(a)` and `(a, b)` etc should be the only way they're represented
<ljharb> ambiguity makes for awfulness :-(
<creationix> so `a = 4` is invalid?
<creationix> it must be `(a) = 4`
<creationix> and `print "Hello"` is invalue, `print("Hello")` is required
<creationix> *invalid
<creationix> I agree and ambiguity is generally a bad thing, but super verboseness is a problem too
<creationix> and traditional languages are terribly inconsistent and asymmetrical in this area. We just don't realize our bias since we know it
<ljharb> hm
<ljharb> but yeah still, i'd say so
<ljharb> the problem particularly arises when you have nested calls
<ljharb> `print lowercase "hello"`
<ljharb> parens there are required, regardless of your precedence choice, to accomplish the inverse choice
<ljharb> and ruby has the mistake of requiring them in those situations but not usually.
<ljharb> a bit of verbosity, where it prevents ambiguity, is a worthy tradeoff imo
<creationix> ljharb: ok easy one. `>` or `->` for a shell redirection style operator?
<creationix> `>` is what shells use, but on programming it's greater-than
<creationix> using `->` is twice the typing, but maybe it's worth it?
<creationix> for example `"Tim" -> name` is like `var name = "Tim";` in JS
<ljharb> always optimize for reading, not writing.
<ljharb> code's read far more often than it's written
<ljharb> so if `->` avoids the ambiguity of `>` then that's probably better
<ljharb> the → emoji would be cool to support too :-p
<creationix> good point. I control the editor so replacing it when they type an ascii -> is trivial
<ljharb> you could also replace `>` when it's clear what they mean
<ljharb> ie, let them type something shorter, but leave behind in the code something longer but more explicit and unambiguous
<creationix> ljharb: for example, in this editor, delete all the code and type `1 * 2` http://desktop.creationix.com/
<ljharb> ooh fancy
<ljharb> `1 x 2` doesn't work tho
<ljharb> neither does `1 . 2`
<ljharb> oops, browser crashed, lol
<purr> lololololol
<creationix> yeah, it just has a few "autocorrects" like lambda -> λ
<ljharb> nice
<ljharb> altho my computer has that too so i wouldn't have noticed :-p
<creationix> so this language I'm designing is for system administrators writing scripts in a browser UI I control
<ljharb> but people will read them outside the UI?
<creationix> not unless my language gets popular outside this system I'm making
<ljharb> ah
<creationix> they won't publish to github, I'll have an internal npm-like thing with a UI I control
<ljharb> interesting
<creationix> but it would be cool if it did catch on. I'll make sure to make the vm itself standalone technically
<creationix> I'm seriously considering ending the python-style vs c-style block debate by storing binary AST on disk and having an editor flag to show in either format
<creationix> saving parses code back to asy
<creationix> *ast
<creationix> this wouldn't work if people were publishing to github because the binary source files can't be diffed using text-based diffing tools
<creationix> and github's diff tools aren't extensible
<creationix> (though the problem is git itself, github just shells out to git or calls a git library for most stuff)
<creationix> but with command-line git I could register a custom diff tool I think
<ljharb> CST > AST
<ljharb> ie, preserve whitespacing and comments (assuming your lang allows them)
<ljharb> but yes, do do that.
<creationix> sure
<creationix> I will preserve some whitespace and all comments
<creationix> (meaning 5 blank lines will shrink down to 1)
<creationix> preserve the semantics of the whitespace, not the actual characters since they might not translate between styles
<ljharb> hm
<ljharb> ok
<creationix> this is basically a huge research project to see what I can do in a controlled environment with very smart tools. if it proves to help, I'll then do the work of getting people to adopt the tools/techniques in the general population
<creationix> I have hundreds of technical users who aren't really programmers that will be writing these scripts (system admins and support people mostly)
<ljharb> perhaps you could consider a non-textual editor
<ljharb> sorella has lots of feels on that subject
<creationix> not sure I want that controlled, I did a lot of that with my teach-kids-to-code experiments
<ljharb> gotcha
<creationix> hmm, I may be over thinking this. I can just make a better bash
<creationix> if I add significant newlines (meaning they are statement terminators) it opens up a whole new world of clean syntax
<creationix> or require semicolons (or something) for terminators
<creationix> but again, that can all be in the different styles and not the core structure
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
alexgordon has joined #elliottcable
rarik has quit [Remote host closed the connection]
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
gq has quit [Read error: Connection reset by peer]
gq has joined #elliottcable
eligrey has quit [Quit: Leaving]
alexgordon has joined #elliottcable
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
alexgordon has joined #elliottcable
alexgordon has quit [Client Quit]
Rurik has joined #elliottcable
alexgordon has joined #elliottcable
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
alexgordon has joined #elliottcable
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
alexgordon has joined #elliottcable
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
alexgordon has joined #elliottcable
alexgordon has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
Hrorek has joined #elliottcable
Rurik has quit [Ping timeout: 260 seconds]
alexgordon has joined #elliottcable
<ELLIOTTCABLE> 11:13 PM <+ljharb> and ruby has the mistake of requiring them in those situations but not usually.
<ELLIOTTCABLE> would not call a mistake
<ELLIOTTCABLE> would call an *excellent* choice
<ELLIOTTCABLE> is ... quite possibly my *favourite* single thing about ruby, slash the single thing I will miss most when I finally transition away from CoffeeScript
<ELLIOTTCABLE> 11:19 PM <+ljharb> ie, let them type something shorter, but leave behind in the code something longer but more explicit and unambiguous
<ELLIOTTCABLE> there's something super, super insightful buried in there.
<ELLIOTTCABLE> 11:37 PM <+ljharb> sorella has lots of feels on that subject
<ELLIOTTCABLE> really?
<ELLIOTTCABLE> how have we never talked about it ,wtf
Sorella has joined #elliottcable
<ELLIOTTCABLE> 11:37 PM <+ljharb> perhaps you could consider a non-textual editor
<ELLIOTTCABLE> 11:37 PM <+ljharb> sorella has lots of feels on that subject
<ELLIOTTCABLE> Sorella: also hi, long time no see :P
<jfhbrook> what is this?
<Sorella> Hello
<Sorella> Which subject?
<ELLIOTTCABLE> scroll up to see the context :3
<ELLIOTTCABLE> Sorella: non-textual editors?
<Sorella> Oh
<Sorella> I wouldn't say I have "lots of feels" on it, but I plan on building one for my language.
<Sorella> Though I want it to feel like regular text editing in a REPL as much as possible.
<Hrorek> hi ELLIOTTCABLE
<Hrorek> how is college?
<ELLIOTTCABLE> stressful. I'm bad at it.
<ELLIOTTCABLE> should be learning Python right now. or even better, studying calc.
<ELLIOTTCABLE> realllllllly bad at self-motivation.
<ELLIOTTCABLE> Sorella: I want a transcendant modal editor.
<ELLIOTTCABLE> vim with embedded data
<ELLIOTTCABLE> dynamic updating and tight coupling with the object-space and execution-flow.
alexgordon has quit [Ping timeout: 255 seconds]
irclogger_com has quit [*.net *.split]
eligrey has joined #elliottcable
<whitequark> oh hi Sorella
irclogger_com has joined #elliottcable
purr has quit [*.net *.split]
silentbicycle has quit [*.net *.split]
katymoe has quit [*.net *.split]
whitequark has quit [*.net *.split]
katymoe has joined #elliottcable
purr has joined #elliottcable
silentbicycle has joined #elliottcable
whitequark has joined #elliottcable
<Sorella> whitequark: 'lo :)
<Sorella> ELLIOTTCABLE: what's a "transcedant modal editor"?