<ELLIOTTCABLE>
then, my things that are printing debugging-output and describing *how* to print a given object's debugging information, could just use really simple HTML strings.
joelteon has joined #elliottcable
<ELLIOTTCABLE>
joelteon ⑊ -logs
<joelteon>
?
<gkatsev>
ELLIOTTCABLE: want to tell purr to leave ##js?
<purr>
<alexgordon> she sells csh by the C shore
eligrey has quit [Read error: Operation timed out]
SgeoBot is now known as Sgeo
<dnyy>
ELLIOTTCABLE: i like that your GH name is in all caps. it looks like everyone is yelling at you.
<joelteon>
i like how most cocoa apps look fine in 2x res
<ELLIOTTCABLE>
dnyy ⑊ lolhi?
<purr>
lolhi
<joelteon>
but photoshop looks like they scaled it up 2x exactly
<joelteon>
using nearest-neighbor
<joelteon>
fucking terrible
<ELLIOTTCABLE>
dnyy ⑊ long fucking time no see/ I'm coming to Seattle soon.
<ELLIOTTCABLE>
dnyy ⑊ are you still there?
<dnyy>
ELLIOTTCABLE: i live in dallas now, lolol
<ELLIOTTCABLE>
watfuck
<ELLIOTTCABLE>
screw that
<ELLIOTTCABLE>
ಠ_ಠ
<dnyy>
trying to move to the netherlands
<dnyy>
once i get financially not retarded enough to save 10 grand
eligrey has joined #elliottcable
<alexgordon>
dnyy 10 grand?
<dnyy>
6k for "business investment", legal fees, plane tickets, yadda yadda
alexgordon has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
Determinist has quit [Ping timeout: 268 seconds]
Determinist has joined #elliottcable
Determinist has quit [Ping timeout: 276 seconds]
Determinist has joined #elliottcable
Determinist has quit [Ping timeout: 268 seconds]
Determinist has joined #elliottcable
<purr>
<alexgordon> do salmon have vaginas? I don't think we ever got to the bottom of it
<purr>
<incomprehensibly> STRAWBERY AVALNGELHTA
<devyn>
holy fucking shit
<devyn>
Broadwell is intended to be a 14 fucking nanometer shrink of Haswell
<devyn>
fourteen fucking nanometers
<devyn>
what the fucking fuck
<gkatsev>
yeah, it's amazing
<devyn>
betcha it won't overclock well
<devyn>
:p
<gkatsev>
that's what the tock cycle is for
<devyn>
nooo, I mean it probably won't overclock well because 14 nm is pushing quantum mechanics as it is
<gkatsev>
ah
<gkatsev>
apparently haswell + motherboards can basically do all the overclocking for you. like the reboots and cranking it up until it crashes and stuff.
<devyn>
that's neat, but what you really want to do is set a target clock speed and then have it automatically adjust voltages until it's stable
<gkatsev>
yeah, that's what it can do
<devyn>
good
<devyn>
that's good
<gkatsev>
which is really cool
<devyn>
I've gone through that process many times :c
<gkatsev>
I've never bothered overclocking
<devyn>
it's kinda fun, in the same way that micro-optimizing a program can be fun
<gkatsev>
lol
<purr>
lol
<devyn>
by that I mean sure, it's frustrating as hell sometimes and pointless after a certain point, but you learn a lot in the process
<gkatsev>
yeah, which is why I never bothered
<gkatsev>
I'm too lazy for that
<devyn>
haha
<devyn>
I've really enjoyed getting more interested in the low-level shit lately, actually
<gkatsev>
yeah, it's interesting
<devyn>
building and tweaking a computer really rekindled that interest
<gkatsev>
i'll keep being interested at it from wikipedia :P
<devyn>
:p
eligrey has quit [Quit: Leaving]
Determinist has quit [Ping timeout: 276 seconds]
Determinist has joined #elliottcable
<micahjohnston>
hi
<purr>
micahjohnston: hi!
<micahjohnston>
alexgordon is always gone :(
<micahjohnston>
ELLIOTTCABLE: hi
Determinist has quit [Ping timeout: 268 seconds]
Determinist has joined #elliottcable
<micahjohnston>
nobody :(
<devyn>
hey
<devyn>
I'm alvie
<devyn>
alive.(
<devyn>
stnbnstuhaoetnsuh
<micahjohnston>
hi devyn
<micahjohnston>
i want to make tempus have a good solution to the expression problem
<micahjohnston>
and also have really good higher ordre facilities
<micahjohnston>
like haskell but better
<micahjohnston>
and also like clojure
<devyn>
“I want X and Y and Z and I haven't done anything about any of it”
<micahjohnston>
so i want like multimethods+protocols/typeclasses+etc.
<micahjohnston>
fuckyou
<devyn>
:)
<micahjohnston>
because i've been thinking about how to make it work
<micahjohnston>
"haven't done anything"
<devyn>
lol
<purr>
lol
<micahjohnston>
i'm not going to write a fucking compiler for a language that isn't designed
<devyn>
well that's more than could be said for some people in this room
<micahjohnston>
devyn: what do you mean
<micahjohnston>
in what direction
<micahjohnston>
am i more or less lazy than some people in this room
<devyn>
micahjohnston: elliott is on and off interpreting a language that is barely specified, or at least was barely specified… it's looking better now
<devyn>
but hell he was writing the interpreter as an experiment before… and I think you should do the same, actually
<micahjohnston>
…
<micahjohnston>
I wrote the first running paws interpreter
<devyn>
I know you did
<micahjohnston>
and i only wrote parts that were 100% specified
<micahjohnston>
and I have written multiple tempus impls
<micahjohnston>
one which actually runs code
<micahjohnston>
the point is
<micahjohnston>
they do not implement the parts that i don't have designed and that i wanted to have a conversation about
<micahjohnston>
the way i started that conversation was
<micahjohnston>
"i want tempus to have this thing"
<micahjohnston>
but i have been thinking about it for the past couple of days and i have ideas but want to flesh them out with others' input
<devyn>
yes and I'm an asshole because I still have finals to write and I'm running on barely any sleep :3
<micahjohnston>
ha ha i am graduated
<devyn>
good for you
<micahjohnston>
:) <- assholey smile
<devyn>
I have my *valedictory ceremony* before my finals are fucking over with 100%
<devyn>
as in we literally walk across the stage, get the little book diploma type thing,
<devyn>
and we're not fucking done with finals yet
<devyn>
what
<devyn>
the
<devyn>
fuck
<micahjohnston>
that's weird
<devyn>
yeah not only that but most of our classes weren't even done on the last day of classes (today)
<devyn>
we were still covering new material on China in history…
<micahjohnston>
wow that's crazy
<micahjohnston>
most of my classes were IB
<micahjohnston>
so tests were halfway through May and we had a couple weeks of nothing
<micahjohnston>
that's kinda ridiculous
<micahjohnston>
well i gtg
<micahjohnston>
gnight
<devyn>
micahjohnston: yeah no IB at my school, but I probably wouldn't have done it anyway — if I really wanted to do it I would have transferred to a different school like most people
<devyn>
micahjohnston: anyway have a good sleep
<devyn>
I'm gone now too :p
cloudhead has joined #elliottcable
<purr>
<Nuck> elliottcable: Stop rubbing your face in poop you fool
Determinist has quit [Ping timeout: 276 seconds]
Determinist has joined #elliottcable
alextgor_ has joined #elliottcable
<ELLIOTTCABLE>
hi
<purr>
ELLIOTTCABLE: hi!
<ELLIOTTCABLE>
what is IB? / devyn / micahjohnston
<ELLIOTTCABLE>
lol Determinist
<purr>
lol
<ELLIOTTCABLE>
er, devyn*
<ELLIOTTCABLE>
hi alextgor_
swart has joined #elliottcable
<Determinist>
was I needed?
<ELLIOTTCABLE>
Determinist ⑊ nah. Mis-hilight.
<ELLIOTTCABLE>
Determinist ⑊ never see you around. >:
<Determinist>
k
<Determinist>
i'm around
<Determinist>
busy setting up a new company
<Determinist>
you know how it is
<Determinist>
never any free time for us in the start up business. some people actually have to get shit done and not just sit in meetings as the fuckers in corporate do
<ELLIOTTCABLE>
company?
* ELLIOTTCABLE
pokes Determinist
PragCypher has joined #elliottcable
<Determinist>
yeah
<Determinist>
sorry, kid was throwing a temper tantrum
<swart>
new business and a kid. what doesn't kill you makes you stronger :)
cloudhea1 has joined #elliottcable
<ELLIOTTCABLE>
cloudhea1!
<ELLIOTTCABLE>
cloudhea1 ⑊ it's been a while since we've talked. What's up?
cloudhead has quit [Ping timeout: 264 seconds]
<ELLIOTTCABLE>
or noop
alextgor_ has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
<purr>
<whitequark> sephr-uni: you are indeed the hardware equivalent of a mongodb fanboy
<purr>
ELLIOTTCABLE is listening to “(I've Had) The Time of My Life”, by Glee Cast
<ELLIOTTCABLE>
micahjohnston ⑊ lucky D:
<ELLIOTTCABLE>
For example, the pointer domain name corresponding to the IPv6 address 2001:db8::567:89ab is b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
<ELLIOTTCABLE>
SERIOUSLY.!?
<ELLIOTTCABLE>
ಠ_ಠ
<joelteon>
hahahahaha
<ELLIOTTCABLE>
All that shit, and then they can't even put the “v” in ipv6 in the 2LD
<ELLIOTTCABLE>
“We'd better save space, guisE!!! But let's put a period between EVERY nibble!!!”
<ELLIOTTCABLE>
izs: Is there a word like onomatopoeia, but for words that describe their own spelling, like "awkward" "unwieldy" "sesquipedalian" or "bizarre"?
* ELLIOTTCABLE
laughs
<micahjohnston>
autonym
<micahjohnston>
is not far off
<micahjohnston>
although seems like it's not usually used as "self-describing word"
<micahjohnston>
but in fact some other dumb things
<ELLIOTTCABLE>
Okay, which specification describes *how* CSS maps to HTML elements?
duckinator has joined #elliottcable
<ELLIOTTCABLE>
basically, getComputedStyle()
<ELLIOTTCABLE>
what's a duckinator o_O
<alexgordon>
micahjohnston: this is an old idea, but I've decided to put it in because FUCK IT http://pastie.org/8043133
<ELLIOTTCABLE>
alexgordon ⑊ did you just pastebin ಠ_ಠ
<ELLIOTTCABLE>
I'mma go to ##JavaScript, -pastebin, and copy-paste it back here.
<alexgordon>
ELLIOTTCABLE: gist is broken on mavericks!
<alexgordon>
I didn't know what else to use...
<ELLIOTTCABLE>
jsbin, or a thousand others >:
<alexgordon>
also broken
<ELLIOTTCABLE>
poor mavericks
<ELLIOTTCABLE>
why did you upgrade your *primary OS*?
<ELLIOTTCABLE>
and how're *websites* “broken” on your new OS?
<alexgordon>
ELLIOTTCABLE: I didn't
<alexgordon>
new safari
<alexgordon>
FINE I'LL USE CHROME
<ELLIOTTCABLE>
FINE YOUR FACE
<ELLIOTTCABLE>
I'm still confused why a staffmember is in my channel
<ELLIOTTCABLE>
it's scary
<ELLIOTTCABLE>
I feel like I'm about to get told we have to get out of Freenode
<alexgordon>
ELLIOTTCABLE: NSA is watching
<ELLIOTTCABLE>
“You. You guys. Your're a menace to our network. You don't talk about software enough; we've run statistics, and a solid 80% of your conversations are about genitals.”
<ELLIOTTCABLE>
In our last moments together, I'd just like to say …
<alexgordon>
happy?
<ELLIOTTCABLE>
I'm sorry.
<ELLIOTTCABLE>
For everything.
<ELLIOTTCABLE>
I love you guys.
* ELLIOTTCABLE
holds breath
<ELLIOTTCABLE>
HARD LINE WRAPPING GOD DAMNIT
<alexgordon>
lol
<purr>
lol
<ELLIOTTCABLE>
also: I don't know Furrow's syntax well enough; explain the syntactic bits
<ELLIOTTCABLE>
what's --->?
<ELLIOTTCABLE>
and the @?
<alexgordon>
comment
<alexgordon>
-- is comment
<purr>
Let it be known that alexgordon hates is comment.
<alexgordon>
lol
<alexgordon>
hahaha
<joelteon>
hahaha
<ELLIOTTCABLE>
back up here and tell me what the fuck furrow is
<ELLIOTTCABLE>
and what it's for
<alexgordon>
ELLIOTTCABLE: you don't... remember?
<ELLIOTTCABLE>
I forget why you were making a Rut language. You explained it once, but I haven't got a memory worth shit.
<alexgordon>
ELLIOTTCABLE: furrow is the bastard child of lua and haskell
<ELLIOTTCABLE>
have you *made* it yet? I only remember seeing syntax examples
<ELLIOTTCABLE>
it's so Rutty, it shoudln't take more than a couple days; even *you*, mister busypants, should be able to do so.
<alexgordon>
I've made some of it!
<ELLIOTTCABLE>
wait, weren't you going to write a Paws for a Retina?
<alexgordon>
wait, did I say that?
<ELLIOTTCABLE>
yep
<ELLIOTTCABLE>
s/write a/participate in/
<alexgordon>
I thought we came to the conclusion that I don't understand shit about paws
<alexgordon>
several times
<ELLIOTTCABLE>
yes, and that's easy to fix
<alexgordon>
ELLIOTTCABLE: Furrow is Haskell but without all the bits micahjohnston likes
<ELLIOTTCABLE>
put time aside and let's talk about it; I'll have this entire weekend free
<alexgordon>
I *don't* have the entire weekend free
<alexgordon>
but
<alexgordon>
goddammit just write it up
<alexgordon>
even if you don't write a spec, your time would be better spent writing up half of it
* ELLIOTTCABLE
laughs
<alexgordon>
if I understand half of something, then understanding the other half is much easier
<alexgordon>
because then I can understand the principles behind it and the problems it's trying to solve
<ELLIOTTCABLE>
if I have to write up *half* a writeup, just for you, that is likely to get thrown away, then why would I be offering you incentives? :D
<alexgordon>
paws is like duke nukem
<alexgordon>
ELLIOTTCABLE: not just for me... is nobody ever going to use this language?
eligrey has quit [Read error: Connection reset by peer]
<ELLIOTTCABLE>
oh, constant, as in, shared across *everything*
<ELLIOTTCABLE>
got it
eligrey has joined #elliottcable
<ELLIOTTCABLE>
or at least, everything “south” in the callstack
<alexgordon>
constant as in, not mutable lol
<purr>
lol
<ELLIOTTCABLE>
okay, alexgordon, new deal.
<ELLIOTTCABLE>
You're practical and shit. *Help* me make a spec. Me, talking through the shit with you, will help specify it. I really have no idea what I'm doing in that department. )'=
* alexgordon
commences mind meld
<ELLIOTTCABLE>
what, you have time now?
<ELLIOTTCABLE>
I'll be busy from approx. 1700 CST - 1850 CST
<alexgordon>
not really
<ELLIOTTCABLE>
but I'm free all evening other than that
* ELLIOTTCABLE
shrugs
<purr>
¯\(º_o)/¯
<alexgordon>
I don't know how to do the thing you want me to do
<ELLIOTTCABLE>
talk to me? ;)
<alexgordon>
that's what I've been doing for the past few years!
<ELLIOTTCABLE>
micahjohnston and devyn might be able to contribute too.
<ELLIOTTCABLE>
well, not really.
<ELLIOTTCABLE>
You haven't listened/talked about Paws in at least a year and a half; and that entire period of time that Paws has been well-specified enough to implement has been in that year and a half.
<ELLIOTTCABLE>
just syain'.
<alexgordon>
ok
<alexgordon>
well
<alexgordon>
you can try explaining it to me
<alexgordon>
we will make a little bundle of joy together
<alexgordon>
and by that I mean a spec
<ELLIOTTCABLE>
another Really Good Thing would be using you to get rid of some of the stupid words
<ELLIOTTCABLE>
or at least giving me some idaes for “more normal” words
<joelteon>
"dude, you have to turn into a dog to pass this part"
<joelteon>
and he was like "why didn't i think of that"
<joelteon>
"hang on let me press the 'paws' button"
<purr>
LOL
<alexgordon>
ELLIOTTCABLE: wait you're going to give me bitcoins *now*. This seems extremely irrational LOL
<joelteon>
LOL
<alexgordon>
give money to someone to do a job that even they aren't sure they can do
<ELLIOTTCABLE>
I'm not giving you money for a job o_O
<alexgordon>
then what
<ELLIOTTCABLE>
waitwhat
<ELLIOTTCABLE>
did I miss something here
<alexgordon>
presumably
<alexgordon>
you're giving me money to do something
<alexgordon>
I mean, you're not just giving me money randomly
<alexgordon>
that would be even more irrational
<ELLIOTTCABLE>
I'm giving you, theoretically, a computer. Theoretically, because you're smart, and it'll garner a few months of your attention and contribution to my project; additionally, because your mindset is one I have yet to find elsewhere.
<ELLIOTTCABLE>
I thought the “WRITE ME A PAWS AND I'LL GIVE YOU A COMPUTER” was obviously a joke.
<ELLIOTTCABLE>
You can't even write a Paws!
<ELLIOTTCABLE>
hold on, anyway, either way, brb
<joelteon>
write me a computer and I'll give you paws
eligrey has quit [Read error: Connection reset by peer]
<alexgordon>
ELLIOTTCABLE: I'd thought you would only give me anything once I proved I actually had something to give in return...
<alexgordon>
you seem to have more confidence in me than I do
eligrey has joined #elliottcable
<ELLIOTTCABLE>
joelteon ⑊ Inkheart?
<joelteon>
?
<joelteon>
ok, I gotta say, there's a crazy amount of cognitive load when writing cocoa apps
<alexgordon>
joelteon: THANK YOU
<joelteon>
cause the standard library is so big AND its discoverability is so terrible
<joelteon>
and it's verbose
<joelteon>
meh
<alexgordon>
<joelteon> it's so big
<joelteon>
like how subclasses don't list parent instance methods in the docs
<ELLIOTTCABLE>
truth truth truth truth
<joelteon>
I went to #macdev and asked "how the fuck do I figure out whether my nsbuttoncell is highlighted"
<alexgordon>
ELLIOTTCABLE: why don't we talk about paws for a bit, and then you can decide if you want to give me a computer...
<joelteon>
and whatever his name is says "try isHighlighted?"
<joelteon>
which wasn't in the NSButtonCell docs
<joelteon>
because it's on NSCell or something
<joelteon>
fucking hell man
<joelteon>
now I feel stupid AND irritated
<ELLIOTTCABLE>
hi!
<alexgordon>
hi!
<joelteon>
hello
<joelteon>
upgrading things is hard
<ELLIOTTCABLE>
lol alexgordon 'k, whatever yew say
<joelteon>
i have no idea what's going on in language implementations at the best of times
<joelteon>
i NEED examples
<whitequark>
the code is a little bit unusual, otherwise it's regular js
<joelteon>
i need to know how the language already works
<ellio>
thanks, whitequark
<ellio>
joelteon: that's fine
<ellio>
we're about to be *discussing* that
<ellio>
I was only asking whether it'd be *more* confusing, or *less* confusing, if I linked working code.
<joelteon>
your mom
<ellio>
(given that said working code is in elliottcable-speak.)
<alexgordon>
ellio is actually russian?
<ellio>
D:
<ellio>
shit, if you start wondering where I'm actually from, you might eventually discover that my textual messages are an exact match for the statistical pattern of satoshi's
<ellio>
lol I wonder if analyzing the corpus of my prose would tell you whether I was one person or not.
<purr>
lol
<ellio>
thanks, purr
<joelteon>
yep
<ellio>
'k.
<ellio>
moving on, *with* code examples.
<ellio>
basic stuff: data-types.
<ellio>
as I said, everything's a list of references. These are called “things.”
<ellio>
will probably spec' them as “object” or something. Ugh, generic names.
<ellio>
They're *designed* to be implemented as a reverse-linked-list; but they don't have to be. The impl I linked just uses ES's Array.
<ellio>
Each link augments the thing it's referring *to*, with the “responsibility” of that link:
<ellio>
that's ( <relation A>, <relation B>, <relation C> )
<ellio>
B would, in this case, responsible:false … our Person data-structure is not responsible for the content of, or structure of, the Number 24, however that may be implemented. We're simply referencing it.
<ellio>
A, however, would be responsible:true … as this “name” data is a part of our *own* data-structure.
<ellio>
C, finally, we'll suppose for this example, would be responsible:false again; as the City is independent of us … just like the Number, we're only *referencing* it. We're saying our Elliott is in Chicago; but modifying Elliott is never going to modify the fact that Chicago is in Illinois, or any other fact about it.
<ellio>
All make sense? Really simple, so I hope so.
<alexgordon>
reading
<ellio>
(All of this shit is so important *because* Paws is basically a high-level VM for asynchronicity and parallelism; and this ties into our model of safe-concurrency, which will be explained later.)
<ellio>
(Hence all of this detail on one little boolean attribute of our Object type.)
<alexgordon>
ellio: so each list, stores a bit for each element which says whether we own it or not
* alexgordon
attempts to rewrite in normal words
<ellio>
alexgordon: careful with that word “own.” At least at the moment, barring you telling me of a better word for it later, that means something else. Something very specific.
<ellio>
alexgordon: I was previously calling the list-y content “metadata”, and the specific contents of each type “content”
<ellio>
any naming suggestions to be more normal? I can't shadow “content” within the specific types
<alexgordon>
errr
<ellio>
this is a problem I run into a lot. Two things that have very different meanings/semantics, but which would traditionally be called by the same name. I've been just coming up with new names for each out of a dictionary, and then never using the original/conflicted name at all.
<alexgordon>
lol and this is how the confusion starts
<purr>
lol
<ellio>
hence trying to avoid it this time
<alexgordon>
ellio: I'm still confused
<alexgordon>
what's metadata and what's content?
<ellio>
the same thing.
<ellio>
I re-named it to content.
<ellio>
in the spirit of trying to alexgordonify Paws.
<alexgordon>
lol
<alexgordon>
what is the relationship between content and lists?
<ellio>
the content *is* a list.
<ellio>
data Object = [ (responsibility:Bool, to:Object) ]
<ellio>
to try and ape your syntax above
<ellio>
assuming […] is a list
<ellio>
and () a tuple
<alexgordon>
right
<alexgordon>
so
<alexgordon>
it's al ist
<alexgordon>
a list
<alexgordon>
why not just call it a list?
<ellio>
well, it'd be odd to say that “String inherits from List”
<ellio>
so, at the moment, calling our core type an “Object” makes a lot of sense to me
<whitequark>
that actually makes sense?
<whitequark>
oh in that way
<whitequark>
yes
<ellio>
so, String inherits from object
<ellio>
etcetcetc
<ellio>
IMO, saying “our Objects are all lists”
<ellio>
is a lot more understandable than saying “our Labels are Lists, too”
<alexgordon>
ellio: sure
<ellio>
when we already have List type
<ellio>
agreed/disagreed?
<whitequark>
ellio: does it describe representation?
<ellio>
whitequark: hm?
<alexgordon>
ellio: it's like in python, where objects are arbitrary maps
<whitequark>
a list is a certain thing wrt/ representation
<whitequark>
search is O(n)
<ellio>
basically, there's the Lua way of calling your core-type Tables/Lists/Whatever,
<whitequark>
etc
<ellio>
no, representation is not implied.
<ellio>
in Paws.js, they're Array; in Paws.c, they're reverse-ordered dually-linked-lists
<alexgordon>
whitequark: meet PHP :P
<ellio>
alexgordon: hm?
<ellio>
similarly, Label is not *specified* with any performance constraints or implications … it's *designed* to be DAWG/trie-y
<alexgordon>
in PHP search on an array is sublinear
<whitequark>
what
<alexgordon>
foo = array("a" => "b"); foo["a"]
<alexgordon>
or something
<whitequark>
fuck php
<alexgordon>
but it's still like.. an array
<ellio>
don't care about PHP.
<alexgordon>
:D
<ellio>
moving on.
<whitequark>
just fuck
<ellio>
same pattern:
<ellio>
describe in IRC, and then try to get you guys to vet my attempt to re-word that explanation into a proto-spec.
<ellio>
yes? yes.
<ellio>
so, there's types other than Thing.
<ellio>
er, Object*.
<ellio>
all of them have metadata, all of them “inherit from Object” I suppose you could say.
<alexgordon>
right
<ellio>
sorry, content*
<ellio>
god damnit
<ellio>
one simple example is Label.
<alexgordon>
metadata works for strings
<ellio>
Label == immutable, global “string.”
<ellio>
or, if you prefer, “symbol.”
<alexgordon>
if you talk about the "content" of a string, you think the characters
<ellio>
yeah, that's the problem with “content” as a name
<ellio>
members. very unambiguous. good enough for now.
<ellio>
nah, that implies names.
<alexgordon>
yeah members works then
<ellio>
'k
<ellio>
members for object, and content for string/etc
<ellio>
good good good
<ellio>
'k
<ellio>
Label.
<ellio>
Labels are Ruby's Symbols, basically.
<alexgordon>
symbol is better if it's exactly the same as ruby symbols
<alexgordon>
:P
<ellio>
Created at *compile-time*, not during run-time processes.
<ellio>
so to speak.
<ellio>
they're not exactly the same.
<ellio>
however, we *use* them as our “string”, as well.
<ellio>
one key method of symbols is “explode”; this results in a list (Object) of one-character symbols; thus, allowing you to manipulate the content of a Symbol.
<ellio>
at no point / in no way, can that be converted back into a single Symbol (obviously, as they can't nominally be created at runtime.)
<ellio>
clear-ish?
<alexgordon>
oh like java
<ellio>
I don't know Java well enough to answer.
<alexgordon>
in java strings are interned, and (iirc) you can get a new string from an old string by the range
<alexgordon>
substrings of interned strings
<alexgordon>
actually, like C too
<ellio>
Labels are intended to be trie-style datastructure, and are intended to be replaced with pointer-representations or something like that
<alexgordon>
wait no
<ellio>
passed around and compared by pointers.
<alexgordon>
not like C because in C the strings are null terminated
<ellio>
nah, not like C
<ellio>
in C, you can have two strings with the same content, but different locations in memory. Not so, in Paws.
<ellio>
actually, devyn had some arguments against that
<ellio>
but for this spec we're writing, I'm gonna go with that.
<alexgordon>
lol
<alexgordon>
but you can't create them at runtime
<purr>
lol
<ellio>
yep
<ellio>
so, they're static identifiers that can be whatever damn format you please
<ellio>
but you *do* have to *store* the string-ish representations of them
<alexgordon>
so they are definitely like symbols and not like strings
<ellio>
because they need to be explodable, and debuggable.
<ellio>
yepyep
<alexgordon>
because you can't, say, get one from reading a file
<ellio>
(side-note: there's going to be a String type, as well. But that's not part of the core specification.)
<ellio>
'k
<ellio>
hm
<ellio>
so I guess the spec interface should have some sort of ‘identifier’ member?
<ellio>
which in a real implementation would just be the pointer into the trie?
<whitequark>
nonononono
<whitequark>
don't discuss such details
<whitequark>
yet
<ellio>
the details have already been discussed, just trying to figure out how to serialize them :x
<whitequark>
ellio: don't
<whitequark>
remember what I said?
<whitequark>
operational semantics
<ellio>
I don't understand operational semantics.
<whitequark>
the term?
<ellio>
No formal training here, bud. I don't know what that means, except at a high passer-by level.
<whitequark>
ok
<whitequark>
basically that means: "what you can detect from inside of the language"
<whitequark>
imagine you only have a terminal to something remote, and it only has a Paws REPL
<ellio>
yes, I get that
<ellio>
that's how I've always defined it
<ellio>
but people get confused when I do that >:
<ellio>
hence, trying to do it in a more traditional form now
<alexgordon>
LOL
<purr>
LOL
<whitequark>
fuck traditional form
<whitequark>
this makes the most sense
* ellio
laughs
<ellio>
whitequark: okay, I'll “teach you Paws” a bit later.
<ellio>
right now, I need to write alexgordon-compatible specs
<whitequark>
(actually. I'm abusing the term slightly. but it's fine here imo)
<alexgordon>
ellio: when you say an object is a *Set* of members, do you mean that?
<alexgordon>
i.e. the members aren't ordered
<ellio>
ick, it's ordered
<ellio>
what's the name for a single-type, ordered, resizable list?
<alexgordon>
List
<alexgordon>
:P
<whitequark>
Array
<alexgordon>
Deque!
<ellio>
lolk
<purr>
lolk
<whitequark>
nope
<vil>
-clouds
<purr>
vil: is stuck up in the clouds; hilight 'em if you want 'em.
<whitequark>
deque[5] # imposibry
<alexgordon>
whitequark: didn't say random-access
* alexgordon
lawyers whitequark
<ellio>
ermagerd
<vil>
joelteon: Apple's docs really need to at least list inherited methods, yeah. it can be obnoxious.
<joelteon>
fuq it
<vil>
paws! reading all of the things
<ellio>
vil: google-account address plz
<vil>
ellio: vilhalmer. already watching you type
<ellio>
vil: added vilhalmer@gmail.com, reload
<vil>
ellio: done
<ellio>
anyway
<ellio>
vil: read the logs, the spec-doc is a compression thereof, or tries to be
<ellio>
vil: commentary welcome
<vil>
ellio: righty-o!
<ellio>
MOVIN' RIGHT ALONG
<ellio>
anything unclear about Labels?
<ellio>
suggestions? questions?
<alexgordon>
nope
<ellio>
'k
<ellio>
the third and final “type” is executions
<ellio>
but I'm gonna side-track into Scripts and the cPaws serialization for a moment
<whitequark>
-_-
<purr>
whitequark: ಠ_ಠ is an IRC client/IRC client framework.
* ellio
pats purr
* purr
rrr
<ellio>
whitequark: if this is all bugging you, you can safely ignore it. I'll come back and give you an operational semantics later tonight when alexgordon gets bored, or tomorrow, perhaps
<ellio>
shouldn't be difficult, Paws isn't complex
<ellio>
-factoid _-
<purr>
ellio: Alias: -_-
<ellio>
-forget _-
<purr>
ellio: Forgot '_-'.
<whitequark>
if it isn't complex then why the fuck there are no implementations yet
<ellio>
there is one?
<ellio>
there's, actually, like four others that are “nearly” functioning
<ellio>
it's all free-time shit, yo
<alexgordon>
whitequark haven't got to staging yet
<ellio>
and the only person devoting a *large quantity* of his free-time to it, myself, is more interested in advancing the design than writing specs like this
<ellio>
except, I'm getting tired of people saying it's complex/confusing/magical when it's not, and deciding that I *want* alexgordon's input
<ellio>
and he, specifically, wants a specification of this sort, so I'm trying to make one for the current stratum of design
<alexgordon>
I have a new job as an idiot!
<ellio>
@idiot
<ellio>
favourite twat
<ellio>
anyway.
<alexgordon>
ellio: btw
<ellio>
ready to move on?
<alexgordon>
what happened to the noughties? (naughties?)
<ellio>
still there.
<ellio>
just not worth discussing at the point we are.
<ellio>
nothing in the *design* of the data types requires/cares-about them
<ellio>
they're only related to how some of the libside features *interact* with these data-types.
<ellio>
I figured it'd be best to leave out AS MUCH as I can, while specifying/implementing this for you
<ellio>
or at least, defer it until it's absolutely necessary.
<ellio>
fair?
<alexgordon>
right
<ellio>
'k.
<ellio>
Scripts.
<alexgordon>
just wondering if you'd replaced them or not
<ellio>
A Script is basically our “AST”, except it's neither abstract, nor does it have anything to do with syntax.
<ellio>
So, it's more like a “Concrete Semantics Tree.”
<alexgordon>
lol
<purr>
lol
<ellio>
but that sounds fucking stupid, so I'm calling it a Script.
<ellio>
pretty straight-forward.
<ellio>
Scripts are the “code” that a Paws implementation/reactor/stage/whatever will run-through procedurally.
<ellio>
specifically, they're a tree of “expressions”, which consist of sequential *objects*.
<ellio>
(at one point, we were calling it an “object-studded AST.”)
<ellio>
so, → gdoc
<ellio>
er
<ellio>
what the fuck is the term for a thing that can be *either* one thing, or another?
<ellio>
(A|B) I guess
<alexgordon>
union
<alexgordon>
sum types if you want to be posh about it
<ellio>
that look accurate?
<alexgordon>
I think?
<alexgordon>
lol
<purr>
lol
<alexgordon>
an expression is a list of words, each word can be either another expression or an object
<ellio>
yepyep
<ellio>
which boils down to:
<ellio>
an expression is a tree of objects.
<ellio>
right?
<alexgordon>
yah
<ellio>
so, if we assume that "Foo" is a representation of a Label, for the sake of argument … we can write out an Expression consisting only of objects something like this:
<ellio>
"foo" "bar" "baz"
<ellio>
then, if we assume that parens are an expression,
<ellio>
("foo" ("bar" "baz") "whorl")
<ellio>
rightright?
<joelteon>
right right
eligrey has quit [Quit: Leaving]
<ellio>
and a Script is just a tree of objects (via those expressions) wrapped up in a package to carry around.
<ellio>
thus, a whole “AST.”
<ellio>
important point here, I suppose I should point out:
<ellio>
eh, nah.
<ellio>
okay.
<vil>
ellio: gotta go for a bit, will be back later and continue reading
<purr>
vil: is no longer stuck up in the clouds.
<vil>
-ground
<ellio>
vil: aw
eligrey has joined #elliottcable
<vil>
ellio: I know :/
<ellio>
joelteon, alexgordon, both caught up and clear on all of this?
<vil>
ellio: it's a worthy cause though, getting a new soldering iron!
<ellio>
oooo toys
<joelteon>
yeah totally
eligrey has quit [Read error: Connection reset by peer]
<ellio>
alexgordon: I know you've written dozens of EBNFs in your life. Why don't you write this part for me? It'll be faster.
* ellio
sighs
<ellio>
lost 'im.
<ellio>
thiiiiinkin' about ordering some food.
eligrey has joined #elliottcable
<ellio>
hi? >:
<whitequark>
grrrrrrrrrr
<ellio>
hi whitequark
<whitequark>
ellio: hi
<whitequark>
i want to strangle someone
<whitequark>
fucking rollbar.com hung up
<whitequark>
fucking python
<whitequark>
sorry, got that sentence wrong
<whitequark>
I fucking want to strangle someone.
<ellio>
wat
<whitequark>
ellio: error reporting app gives me ECONNREFUSED while I want to fix errors
<whitequark>
consequently, I'm angry
<ellio>
lol!
<purr>
lol
* ellio
breathes
<ellio>
well then, since alex seems to have died
<ellio>
whitequark: how'd yew liek to learn u a pawz?
<whitequark>
ellio: let's
<whitequark>
my attention is being slightly fucked with for next half a hour but I'll read
<whitequark>
then I'm free as america
<whitequark>
er
<whitequark>
nevermind
<whitequark>
free as beer? better
* ellio
nods
<ellio>
I'm going to hack together a quick cPaws EBNF I suppose
<ellio>
I suck at this shit but it'll make alexgordon happy
<whitequark>
how is grammar related to implementation language?
<ellio>
it's describing how things are described
<whitequark>
I assume cPaws is talking about C
<ellio>
not at all
<ellio>
cPaws = canonical Paws
<ellio>
it's a serialization format for Scripts (one of many)
<whitequark>
ah
<whitequark>
yeah ebnf is cool
<ellio>
Paws is *built* in such a way that it may eventually have graphical IDEs or something more exotic but similar in purpose
<ellio>
it's definitely not universally serializable into text.
<whitequark>
ok
<whitequark>
if that doesn't mean "there is no text-only workflow", that is
* ellio
laughs
<ellio>
there is. and we'll get there eventually.
<ellio>
basically, parsers are supposed to be decoupled from implementation
<ellio>
and implementations are supposed to talk to eachother either (at-runtime) via federation, or (not at-runtime) via “frozen Units”
<ellio>
which are basically an intermediate form.
<ellio>
binary Scripts.
<ellio>
like, uh, jars maybe? not too familiar with Java
<whitequark>
oh wow
<whitequark>
I had this idea
<whitequark>
ok, I'm now about 50% more interested in Paws
<ellio>
but yes, *programming* generally happens in text
<ellio>
but the *style* of text it happens in is undefined
<ellio>
the decoupled parser is actually *far* more complex than the evalulator
<ellio>
by design
<ellio>
mine is called the P₃, and it's in a general class of tools I call “IPPs” or “interpretive preprocessors.”
<ellio>
but. more on that shit later.
<ellio>
I want to get the boring crap like data-types out of the way, so we can get to interesting shit like time-travel and concurrency and distribution
<ellio>
finish your shit, I'll give you the half-hour
<purr>
ellio is listening to “Do My Dance (feat. 2 Chainz)”, by Tyga
<whitequark>
but it's like a CMS
<whitequark>
generally
<whitequark>
with templates a la shopify
<ellio>
hmmmm
<ellio>
is it possible to do nested string-literals in a *context-free* grammar?
<ellio>
that is, something like
<ellio>
“foo\”bar”
<ellio>
just out of curiosity, I long ago nix'd string-escapes
<whitequark>
string literals in CFGs are generally recognized by a lexer
<whitequark>
short answer: yes
<ellio>
not what I mean, I think
<ellio>
er
<ellio>
to *parse* something like that
<whitequark>
long answer: even if you have a grammar which operates on the raw data
<whitequark>
still yes
<whitequark>
like PEGs
<ellio>
how do you express *emptyness* in an EBNF?
<drparse>
.
<whitequark>
ellio: or: you don't
<ellio>
.
<ellio>
drparse: take a look at the doc. this look valid so far?
<drparse>
not what I meant by . but heh it'll do
<drparse>
:P
<drparse>
ellio: in BNF, rules end with a dot
<drparse>
so a rule that is just a dot, is empty
<ellio>
doing ebnf
<ellio>
didn't see any dots in python's
<drparse>
dunno EBNF, thought it was just a superset
<ellio>
nah
<ellio>
EBNF isn't even specified, ironically
<ellio>
just a collection of various styles that popular shit uses
<drparse>
oh well, imagine it stands for elliott bnf
<ellio>
includes some regex shit, some ease-of-use shit (getting rid of <this> bullshit, exchanging ::= for a plain =)
<ellio>
lol!
<purr>
lol
<drparse>
oh man these biscuits are so nice
<ellio>
trying to figure out how to express whitespace parsing rules in this shit
<ellio>
tips?
<ellio>
going with psuedo-regex. ಠ_ಠ
<drparse>
this is dizzying
<drparse>
ellio: what is <s>
<ellio>
gettin' there
<ellio>
whitespace
<drparse>
oh strange
<ellio>
strange?
<ellio>
what's normal?
<ellio>
I'm *trying* to make this all completely normal. or as much so as I possibly can. So tell me how to reformat.
<drparse>
not used to seeing grammars that include lexical syntax
<drparse>
normally it's just tokens
<drparse>
and whitespace has already been ignored
<ellio>
well, it's a spec
<drparse>
lol yeah
<ellio>
so I've gotta *totally* specify what constitutes a valid program
<purr>
lol
<ellio>
right? kinda? maybe?
<drparse>
can't you just say that whitespace is ignored except in strings?
<ellio>
but what's that *mean*?
<drparse>
I don't know
<ellio>
I could spend three paragraphs describing how to handle whitespace in cPaws, which is silly, because cPaws isn't even *important*
<ellio>
or just specify it clearly in the grammar. right?
<ellio>
by the way, I don't expect you to have answers for *everything*.
<ellio>
Me asking “right?” is basically saying “if you happen to have any disagreements or objections, I'm happy to hear them.”
<drparse>
ellio: it's difficult because of your nesting string literals
<ellio>
nah, those are gone
<drparse>
but I would be tempted to separate it into normal and lexical syntaxes...
<drparse>
orly
<ellio>
since we already decided that cPaws is *non-universal*, we can just say “that shit can't be written in cPaws” without affecting Paws itself.
<prophile>
hey elliott
<drparse>
well then, just get rid of the <s> stuff
<prophile>
have you ever come across parsing expression grammars?
<prophile>
they might be to your liking
<ellio>
so, for instance, there's literally no way to encode a label containing *all* of: a closing ”, a closing ’, a double-quote ", and a single-quote '
* drparse
nudges whitequark
<ellio>
prophile: never heard of
<drparse>
ellio: PEGs
<ellio>
explain another time.
<ellio>
don't care right now, nearly done here, and want to move on with alex and whitequark
<ellio>
also: HI PROPHILE HOW'S LIFE
<prophile>
well remind me to explain them to you some time
<drparse>
ellio: like a poor man's recursive descent parser
<prophile>
IT'S GOOD ELLIOTT HOW ARE YOU
<drparse>
for people who are too lazy to write their own
<prophile>
I HAD TO BAN GABRIELLE AGAIN BY THE WAY
<prophile>
A COUPLE OF DAYS AGO
<drparse>
ellio: what is { } in ebnf?
<drparse>
I could just google it
<ellio>
testing
<drparse>
oh optional
<ellio>
there we go
<ellio>
repeating*
<ellio>
optional is [foo]
<prophile>
{x} is equivalent to x*
<ellio>
[foo] => (foo)?
<ellio>
{ foo } => (foo)*
<ellio>
foo {foo} => (foo)+
<ellio>
anyway
<ellio>
fuckin' irccloud
<drparse>
oh
<prophile>
I prefer the kleene star notation
<ellio>
-queue < prophile> well remind me to explain them you you sometime [re: PEGs, to: elliottcable]
<ellio>
-dequeue
<purr>
ellio: <ellio> < prophile> well remind me to explain them you you sometime [re: PEGs, to: elliottcable]
<ellio>
prophile: use that.
<prophile>
righty
<ellio>
i.e. “-queue explaining PEGs @ ELLIOTTCABLE”
<prophile>
-queue < prophile> well remind me to explain them you you sometime [re: PEGs, to: elliottcable]
<ellio>
or sommat
<ellio>
nonono you don't need that, I put that in there 'cause I can't queue for you
<ellio>
-dequeue
<purr>
ellio: The queue is empty.
<ellio>
hhmmmm
<ellio>
-queue test @ prophile
<ellio>
-dequeue
<purr>
ellio: The queue is empty.
<ellio>
cool!
<ellio>
I *can* put shit in your queue.
<drparse>
ellio: you're not elliottcable
<ellio>
good thing nobody knows how this bot works.
<drparse>
ellio: yeah I think if you wanted to be proper about it, you'd do [ <word> { <s> <word> } ]
<drparse>
but fuck me I don't know this notation
<drparse>
never did A level computing
<ellio>
ooooo make the entire content optional
<ellio>
smartboy
<prophile>
oh, it's you alex
<ellio>
LOL
<purr>
LOL
<prophile>
from this point on i'm just going to guess that every nick I don't know is you
<drparse>
lol
<drparse>
nobody knows who I am when I wear my disguise
<prophile>
yeah, the /whois drparse showing you under the account alexgordon is certainly doing wonders for your identity hiding
<prophile>
it's the last thing they'd expect
<drparse>
who knows, I could be jeannicolas
<drparse>
HUH HUH HUH
<jeannicolas>
I'm drjson
drparse is now known as drparse_md
<ellio>
jeannicolas!
<prophile>
markdown parsing eh
<prophile>
I'm onto you, gordon
<ellio>
drparse.md
drparse_md is now known as mrparse_frcs
<vil>
-clouds
<purr>
vil: is stuck up in the clouds; hilight 'em if you want 'em.
<ellio>
-find wild
<purr>
ellio: Could not find `wild`.
<ellio>
ಠ_ಠ
<prophile>
(╯°□°)╯︵ ┻━┻
mrparse_frcs is now known as algore
<algore>
why I don't take more advantage of this I don't know
<ellio>
shit.
<ellio>
I suck at ebnf. it's said and done for.
<prophile>
ლ(ಠ益ಠლ) But at what cost?
<prophile>
write it as a push-down automaton
<ellio>
you can write multiple rules of the same name, right?
<prophile>
they're equivalent, you know!
<ellio>
and that's the same as alternation/option?
<prophile>
well, it's more correct to say you can write alternation and that's equivalent to multiple productions from the same nonterminal
<ellio>
wat
<ellio>
why's that more correct
<prophile>
because eBNF is syntactic sugar over BNF
<prophile>
and that's how it's expressed in BNF
<ellio>
hrmwatk
<prophile>
CFGs are all nondeterministic and gooey anyway
<ellio>
I more meant, “lol wats dat mean”
<purr>
lol
<prophile>
I don't like 'em much
<algore>
prophile: stop distracting ellio with your tits and parsers and let him work
<algore>
I WANT MY PAWS DAMMIT
* prophile
transplants tits onto algore
<prophile>
a combination of words which have never before been said
<algore>
an inconvenient truth
<ellio>
“global warming”: When the ops begin to get fed up with the conduct in their room.
<ellio>
Okay, how's that?
<ellio>
Specified enough for your tastes, alexgordon?
<ellio>
at least for the moment?
<algore>
{ label-content }
<algore>
<label-content>::= label-character*
<ellio>
lol shaddup
<purr>
lol
<algore>
why not just
<ellio>
that's there because I might eventually translate the text I just typed, into actual ebnf
<ellio>
just got lazy and prose'd it
<algore>
ok ok
<ellio>
m'kay
<ellio>
QUICK REVIEW:
<ellio>
entire point of all of that,
<ellio>
is to construct Scripts.
<ellio>
Scripts being *one* representation of a particular DAG of objects.
<ellio>
of particular note, this means that in a given program, a given object (at least initially, before the program itself begins constructing objects) belongs to *two* different “dimensions” of DAG:
<ellio>
• the data-graph of the entire program (represented by relationships between the objects, membership in eachother's content-lists, annotated by responsibility)
<ellio>
• the procedure-graph of the Script they were embedded in as literals
<ellio>
with me?
<algore>
hold on
<algore>
got to read that several times
* ellio
nods
<ellio>
I'm sorry, I don't know the correct words to express it
<algore>
and then several MORE times
<ellio>
I could make a graph, though
<ellio>
hey, easier way to put it.
<ellio>
here.
<algore>
ellio: so it's like a harvard machine… but a graph
<algore>
data graph, program graph
<ellio>
never heard of harvard machine, but that sounds accurate
<ellio>
in that the same *objects* in memory, are both in the data-graph and the program-graph at the same time
<algore>
i see
<algore>
it sounds like paws would lend itself well to java
<ellio>
this is a very important distinction from languages where the program-graph is some sort of abstracted representation, that re-generates new instances of data-objects each time it enters a particular part of the procedure.
<ellio>
(which is under dispute, for obvious reasons; but that's the spec we're going to go with right now. Stratum 10.)
<whitequark>
ellio: I think the term is homoiconic?
<ellio>
the term for what?
<whitequark>
>00:39 <+ellio> in that the same *objects* in memory, are both in the data-graph and the program-graph at the same time
<ellio>
yep
<ellio>
there's an important note, though
<ellio>
actually, two:
<ellio>
the *expression* type isn't available¹ in-language; that is, Scripts are not composed of in-language types, nor are they accessible/modifiable in-language.
<ellio>
a lá lisp.
<ellio>
er,
<ellio>
à la lisp*
<ellio>
it's sort of “reverse homoiconicity,” I suppose?
<ellio>
instead of the ‘program’ type being in-data-graph, the data-graph is constructed from in-program objects
<ellio>
or, idk, whatever.
<whitequark>
what
<ellio>
lol.
<purr>
lol
<whitequark>
wtf you just said makes no sense
<ellio>
Paws isn't homoiconic.
<whitequark>
>data-graph is constructed from in-program objects
<whitequark>
what is this
<ellio>
yeah, I know, that made no sense
<ellio>
forgive me.
<whitequark>
:D
<ellio>
A: Paws is not homoiconic.
<ellio>
B: There are *elements* of the ‘program’ representation, that are shared with the ‘data’ representation in-memory (à la homoiconicity),
<ellio>
but C) the *structure* of the ‘program’ representation is not shared, and cannot be changed
<whitequark>
is that visible from inside of the language?
<ellio>
¹
<ellio>
yeah, hence the superscript
<ellio>
put that question on hold until we get to the IPP shit?
<whitequark>
ooook
<ellio>
long story short: we have a *pre-*runtime method to modify the AST. But it's static at runtime.
<ellio>
think, sorta, Lisp macro processing
<ellio>
except wildly different in intent and semantics
<ellio>
N E way.
<whitequark>
well
<ellio>
algore: you okay ovah there?
<whitequark>
that does sound about the same in semantics
<whitequark>
if we're talking about eg template macros
<ellio>
we're not.
<ellio>
here, I'm just gonna split this into two windows so I can talk to both of you at the same time.
<whitequark>
there are lisps where object-language and meta-language are completely distinct
<ellio>
whitequark: → #Paws.Nucleus
<algore>
lol
<purr>
lol
<algore>
ellio: so it seems you've defined the syntax and the program representation
<algore>
ellio: but not semantics yet
* ellio
nods
<ellio>
like I said, haven't got to anything interesting yet
<ellio>
wasn't sure why you were starting to implement :D
<algore>
it's java, it'll take me a few years
<whitequark>
... to write just that boilerplate
<algore>
ellio: but that's done, right?
<algore>
syntax and program representation… that's complete
<ellio>
er, no, haven't gotten to the last data-type
<ellio>
which was depending on Script
<ellio>
that is, execution
<ellio>
which I'm reallllllllly torn about renaming “continuation”
<algore>
Trampoline
<ellio>
lolwat
<purr>
lolwat
<ellio>
anyway
<ellio>
so.
<purr>
<alexgordon> the problem with C++ is: literally every part
<algore>
LOL
<whitequark>
hahaha
<whitequark>
so true
<ellio>
heads-up:
<ellio>
I'll belong to Chelsea from approximately 5:00 CST, to 6:30 CST.
<ellio>
But then I'll be back for the next, uh, few days, at least. But, more relevantly, all evening.
<ellio>
algore: anything that doesn't make sense in what I've written so far, at all?
<ellio>
it's all simple, but I've hopefully specified it well *anyway*. It's nothing like a robust spec, but it's more like what you've wanted, right?
<algore>
nooope!
<algore>
yep
<algore>
no this is great, this is what I do when I define a language
<algore>
get the syntax down, get the representation down
<algore>
and the semantics
<whitequark>
algore: you ever released a language?
<ellio>
whitequark: we don't do formal PLT in here.
<ellio>
a lot of talking, a lot of ideas, we stay away from the formal stuff.
<ellio>
hey, algore, check the latest EBNF
<ellio>
I fixed a bug, I think
<whitequark>
ellio: hm? how is that related?
<whitequark>
php is released
<whitequark>
for example
* ellio
nods
<ellio>
sorry, mis-parsed what you asked
<algore>
whitequark: depends what you mean by released :P
<ellio>
somehow, thought you were asking if algore was into traditional PLT
<whitequark>
ellio: besides, I don't think you can get *anything* done without some degree of traditional PLT
<whitequark>
as in
* ellio
nods
<ellio>
not saying we completely eschew it
<whitequark>
I do not necessarily think that every single language should be machine verifiable by Coq
<ellio>
but I've no time or appreciation for design-by-committee, or academia in my language-design.
<algore>
whitequark: not a standalone language, but I've written lots of DSLs (and I mean proper DSLs not ruby faux DSLs)
<whitequark>
design-by-committee is completely different shit
<whitequark>
it's not formalism. it's bureaucracy
<ellio>
yes, hence why I listed both separately
<ellio>
;)
<whitequark>
in a similar vein
<whitequark>
I'm not exactly going to provide formal proofs of correctness for even parts of my languages. You know, the kind where 2/3th of the proof are composed of special characters only ever present in TeX.
<whitequark>
not even in unicode :p
<whitequark>
however!
<ellio>
characters not in Unicode D:
<ellio>
what is this blasphemy D:
<ellio>
k
<ellio>
done with the EBNF for now
<whitequark>
for example, go's specification is the right (imo) kind of formalism. it's formal enough to allow for precise implementation, yet is readable and understandable
<ellio>
I think
<whitequark>
that is all.
<ellio>
going to prepare for girlfriend, be back soon
<whitequark>
LINK
<ellio>
whitequark: I'm a huge fan of the ES5 spec.
<ellio>
aaaaaaaaaand, uh,
<ellio>
another one I read recently
<ellio>
wtf was it
<ellio>
I remember getting a huge hardon for how concise and clear and yet fun it was
<ellio>
idk whatever.
<ellio>
point being:
<whitequark>
yeah, this kind of specs
<whitequark>
funny part is
<ellio>
I believe, if the *user* can't read the specification, then it's a bad fucking specification.
<whitequark>
academia-style formal specifications mean the exact same fucking thing
<ellio>
The specification should be closer to a user-manual/_why's-poignant-guide, than it should be to an RFC.
<whitequark>
just in 1% of the paper area
<whitequark>
what?!
<whitequark>
sorry, that's bullshit
<ellio>
Precise implementation is something that should be discussed on mailing-lists, IRC, whatever.
<whitequark>
no.
<ellio>
I mean, sure, I want the spec to provide *that*, too.
<whitequark>
you do not understand what specification is for, then.
<ellio>
But the end-goal, for me, is that the *user* be able to understand the language as a whole.
<whitequark>
it describes the contract between the programmer and implementation
<whitequark>
it MUST describe it precisely
<whitequark>
otherwise you get fucking Ruby
<algore>
ellio: nah
<ellio>
mmmm, and Ruby's the language I learned to program in, and one I still love. ;)
<algore>
not as long as the creator is alive
<algore>
and you can ask him questions
<ellio>
If the mid-level programmer (not even an expert!) can't understand the entire spec, then the spec is a failure.
<whitequark>
if your users are too dumb / lazy / etc to read RFCs, your users is wrong.
<ellio>
disagreed.
<whitequark>
ellio: see, there are two kinds of not understanding
<whitequark>
the first is invoking something which is not common knowledge amongst your users
<whitequark>
eg., category theory.
<whitequark>
I'm against this.
<ellio>
If I make a language, I'm making a language for children, grandmas, and that pimply teenager fucking around with a 3D printer in his garage robotics lab and wanting to automate his A/C unit and ceiling fan.
<ellio>
not for some professional programmer who can swallow RFCs on his lunch-break.
<whitequark>
the second is users being scared by "too formal" language, which in fact avoids much more significant problems with interoperability
<whitequark>
then your users are wrong.
<whitequark>
so
<whitequark>
you write a spec
eligrey has quit [Quit: Leaving]
<whitequark>
and a SEPARATE manual.
* ellio
shrugs
<purr>
¯\(º_o)/¯
<ellio>
I think the two can be in one.
<whitequark>
spec is for implementers. if it is not precise to be the only thing you need to make an implementation
<ellio>
Similarly to the fact that I disbelieve in documentation-outside-code / documentation-outside-specs.
<whitequark>
it's worthless.
eligrey has joined #elliottcable
<ellio>
If your spec'ing framework / test'ing framework doesn't *already act as documentation*, then you're using the wrong spec'ing / test'ing framework.
<whitequark>
um
<whitequark>
tests are not equivalent to a spec
<ellio>
spec'ing framework
<ellio>
not language-specification
<ellio>
(see? this is why I hate overloaded terms in programming.)
<whitequark>
because 90% of things you want to specify (hence, document) cannot be tested with code
<whitequark>
worst-case behavior being one of the simplest examples
<ellio>
I'm making an analogy between “people who would write seperate manual and specification for their language” and “people who would write additional documentation in addition to the source-code and spec-style tests for their code”
<ellio>
*really* have to go.
<ellio>
I completely understand where you're coming from, don't get me wrong.
<ellio>
I just disagree.
<whitequark>
it's not a matter of belief :)
<whitequark>
later
<ellio>
I think the user comes first, before *anything* else. For any end-product intended to be handed to users, they're the only thing that matters.
<ellio>
For instance, it's better to put more onus on the implementers to figure out how to achieve interoperability, unless it doesn't hurt the users *in any way* to ease that burden.
<whitequark>
the problem is
<whitequark>
there is no "the user".
<ellio>
Making the specification more formalistic, difficult to read for a middle-of-the-pack user, falls under that category.
<whitequark>
you have a wide gamut of people
<ellio>
GIRLFRIEND WILL KILL ME LOVE YOU BE BACK SOON TO TALK MORE <3
<algore>
ellio, whitequark: as I see it, there's two kinds of languages. Formal languages (like Fortran, C++ and JS) and dictatorial languages (like Python and Ruby)
<whitequark>
algore:
<whitequark>
kind of
<whitequark>
except
<whitequark>
there are two kinds of languages: ones for which you can write an alternative implementation, and ones for which you cannot
<purr>
lol
<algore>
lol right
<algore>
but sometimes that can be a good thing
<algore>
because
<whitequark>
like PHP?
<whitequark>
totally
<algore>
yes
<whitequark>
also ruby has an iso standard now
<whitequark>
it's... shitty. but it's more than nothing.
dskuza has joined #elliottcable
<whitequark>
it omits like 90% of the stdlib
<algore>
specs are like "checks and balances" as americans put it
<whitequark>
and 50% of the language
<algore>
they slow the process down
<whitequark>
lol no
<algore>
if the person designing the language is an idiot, that can make it better
<algore>
e.g. C++
<whitequark>
again no
<algore>
if the person designing the language is a genius, that can make it worse
<algore>
(e.g. Guido)
<whitequark>
Guido is a genius? lol sorry no
<purr>
lol
<whitequark>
bbiab
<algore>
sure
<algore>
python is the best programming language ever designed
<algore>
and THAT is a fact
<joelteon>
haha
<joelteon>
hahaha
<joelteon>
ellio:
<prophile>
checks and balances isn't a purely american phrase
<prophile>
in fact I heard dear old william hague use it just this week
<algore>
prophile: are you trying to prove or disprove my point?
<prophile>
no
* ellio
laughs
<ellio>
well-played, prophile. well-played.
<algore>
haha
<algore>
prophile: I think it's a purely american phrase regarding the separation of powers
<algore>
mainly because we don't have a separation of powers :P
<prophile>
well, we do
<prophile>
just not to the degree of the septics
<prophile>
our judiciary is actually very independent
<prophile>
it's just that the executive has been eaten by the legislature
<algore>
well I'm not sure, the highest court used to be the house of lords!
<prophile>
if you're digging back properly
<prophile>
that only applies to lords
<prophile>
you're entitled to trial by a jury of your peers
<prophile>
that is to say
<algore>
but either way, america has four branches of government (executive, judiciary, representatives and senate), we have two
<prophile>
commoners are tried by a jury of commoners
<prophile>
and lords are tried by a jury of lords
<algore>
not to mention the state-level systems
<prophile>
generally the representatives and the senate are lumped into the legislature
<prophile>
but you are right in there being four parts - the fourth is the states themselves
<algore>
prophile: well they may be lumped together, but they're effectively separate
<algore>
you need both to pass laws
<prophile>
not always true
<algore>
they have separate elections
<prophile>
for money bills for instance, only the house needs to pass them
<prophile>
just like over here
<prophile>
originally the senate was elected by the state legislatures
<prophile>
and the house was directly elected
<prophile>
that was then overturned by one of the amendments
<algore>
okay, but that's only because without that the entire government would collapse every year
<prophile>
not really
<prophile>
it's actually because they were emulating the british parliamentary system
<algore>
but it would
<prophile>
i think they'd work around it
<whitequark>
re
<prophile>
pew pew pew sequester etc
<prophile>
in other news
<whitequark>
speccing and designing languages isn't even related
<prophile>
my supervisor at university has just been made a knight
<whitequark>
you can very well write some shit down, experiment with it, then, when you're comfortable with it, write a spec
<prophile>
so that's a thing
<whitequark>
in fact most languages were spec'd exactly this way
<whitequark>
however, this step *needs* to be done
<whitequark>
and if it is hard, it means exactly one thing:
<whitequark>
you suck at PL design.
<ellio>
*Nothing* means “you suck at PL design” except ‘the users don't benefit from using it.’
* prophile
grabs popcorn
<ellio>
To say otherwise is to be disconnected from the only reality that matters; the reality of your users.
<ellio>
oh, I'm just popping in for all of two and a half minutes
<prophile>
ah, you bastard
<ellio>
showered, waiting for the vagina'd-having-one to leave work now so I can go let her in
<prophile>
what do we pay you for
<whitequark>
ellio: meh
<ellio>
prophile: I'm sure you'll get your entertainment in other ways, soon ;)
<whitequark>
there isn't a "user"
<whitequark>
there are "users".
<ellio>
prophile: you still interested in a compiler for Paws, bteedubs?
<whitequark>
for example
<prophile>
vaguely
<prophile>
among my ten thousand other projects :)
<whitequark>
a fuckton of your users is not going to be satisfied with MRI's shitty threading, and they will demand JRuby
<ellio>
prophile: <3
<whitequark>
and if an implementor spends a year figuring out your fucked up language design
<whitequark>
it is your fault, and no one else's
<ellio>
not disagreeing.
<whitequark>
prophile: wanna write compiler with you
<ellio>
anyway, this is all academic.
<whitequark>
if you ever do
<algore>
whitequark: they are related, insofar as specs take time to keep in sync
<whitequark>
ellio: this is insanely practical
<prophile>
currently I'm speccing a game
<prophile>
specs are good
<prophile>
specs everywhere
<ellio>
academic as in “unrelated to the current task”
<ellio>
or rather, the task of later tonight
<algore>
if you have to put each change in a spec, it slows the design of your language
<algore>
it's a perverse incentive to fix problems
<ellio>
that is, spec'ing paws enough to work with alex on it
<whitequark>
algore: if you just roll out each change to HEAD
<whitequark>
then you fuck with your users much worse than slightly delaying releases
<whitequark>
there is an innumerable amount of examples
<prophile>
specs don't have to be hard to write
<algore>
whitequark: maybe so, but these users are replacable
<prophile>
or take a long time
<whitequark>
all of which scream at the top of their lungs
<whitequark>
DON'T DO THSI
<algore>
whitequark: when your language is great, you can get new users
<ellio>
lolwat
<purr>
lolwat
<whitequark>
ellio: tempted to reply "just fuck off" to that
<whitequark>
errr
<whitequark>
algore: ^
<whitequark>
but I won't.
<algore>
but if you continue with a crappy language for backwards compatibility reasons, it's just going to die
<whitequark>
HAHAHA
<whitequark>
like COBOL is dead
<prophile>
I think
<whitequark>
or, duh, C
<prophile>
you are both arguing
<prophile>
but you're actually arguing different things
<algore>
prophile: no shit
<algore>
dammit too late
<prophile>
and you're broadsiding each other
<prophile>
I'd point you on the right lines
<prophile>
but this is quite entertaining
<prophile>
and somebody's got to eat this popcorn
<algore>
I'm saying specs are a waste of time, because they solve a problem that is really not that important
* prophile
munches
<algore>
proper specs
<algore>
writing stuff down is great
* whitequark
facepalms
<micahjohnston>
what's klined, hobbits?
<whitequark>
prophile: you can do that
<prophile>
if you write things down
<algore>
if your aim, is to make a really good language, then a spec is incidental to that
<prophile>
and they are unambiguous
<whitequark>
I'm not continuing discussion after this point
<prophile>
oops
<prophile>
you accidentally wrote a spec
* prophile
patpats
<algore>
because to make a really good language, you have to design and implement it yourself
<prophile>
haskell was designed by a committee
<algore>
prophile: this is not what whitequark means by a spec though
<algore>
prophile: yeah, it shows
<prophile>
it's a thing of beauty
<whitequark>
algore: by a spec, I mean an unambiguous description of the semantics of your language
<whitequark>
nothing more.
<whitequark>
nothing less
<prophile>
do notation and monads
<whitequark>
I don't care if it uses a thousand special characters or is described in the style of dumb hobbits
<prophile>
dooo notation and moooooonads
<whitequark>
if it's unambiguous
<whitequark>
and complete
<algore>
whitequark: right. this is also what I mean!
<whitequark>
then it's a spec.
<algore>
creating such a thing, and keeping it up to date with each change, is a tremendous amount of effort
<prophile>
no, it isn't
<whitequark>
it is less effort than fixing the fallout which follows if you don't
<prophile>
it should have basically a one to one correspondance with your test suite too
<prophile>
which makes it extremely easy to check
<whitequark>
well, a bit more complex than that
<algore>
specs are like dividends, you introduce them when the language (or company) is nice and settled in what it's doing. but for the first decade, you want to plow as much effort as you can into making it the best
<whitequark>
you can't test algorithmic complexity
<prophile>
okay, good point
<whitequark>
or a really really big amount of different things
<prophile>
i retract that statement
<whitequark>
much of error handling. much of data representation
<whitequark>
ok
<prophile>
eeh, you should be able to test error handling or representation
<whitequark>
basically if there's an universal quantifier somewhere, you can't test it
<micahjohnston>
i want a computer :p
<algore>
hi micahjohnston !
<prophile>
unless you get a theorem prover :3
<micahjohnston>
hi algore
<whitequark>
prophile: totally :D
<micahjohnston>
are you ALexGORdon
<whitequark>
I'm all for such tests
<whitequark>
but
<algore>
micahjohnston: yes
<whitequark>
it's enormous effort
<micahjohnston>
coo
<prophile>
I like my languages like I like my women
<algore>
super cereal
<prophile>
reducable to 3SAT
<whitequark>
hrmpf
<algore>
is it cereal or serial? I'm never sure
<prophile>
have you ever tried llbmc?
<prophile>
it's pretty swish
<whitequark>
prophile: "I like my languages like I like my women: reducable to 3SAT" wat.
<purr>
beep.
<micahjohnston>
algore: so @ is basically dynamic scope
<algore>
micahjohnston: lol yeah
<purr>
lol
<micahjohnston>
but more controlled
<micahjohnston>
:P
<algore>
referentially transparent dynamic scope!
<prophile>
I'm going to disappear now
<prophile>
and watch some dota
<algore>
o7 prophile
* prophile
waves
<algore>
prophile: don't pollute
<prophile>
oh, also
<prophile>
don't tell anybody
<prophile>
but i'm not wearing trousers right now
<algore>
:O
* algore
is not wearing pants, interpret that how you will
<prophile>
I put on weight :(
<prophile>
and now when I sit down my poor testes burst like grapes
<micahjohnston>
but i like how you can open it up and replace stuff very nicely
<micahjohnston>
it looks like
<micahjohnston>
unless that's just for fun on the website
<algore>
lol
<purr>
lol
<micahjohnston>
algore: hey so want to design tempus's type system/data model?
<micahjohnston>
actually nvm i gtg but later want to talk about it
<whitequark>
to quote a letter I just received
<whitequark>
"
<whitequark>
There would certainly be interest in publishing some of this work in
<whitequark>
the academic community.
<whitequark>
"
* whitequark
is happy as a banana
<algore>
penis?
<whitequark>
what
<vil>
-ground
<purr>
vil: is no longer stuck up in the clouds.
<whitequark>
-clouds
<purr>
whitequark: is stuck up in the clouds; hilight 'em if you want 'em.
<whitequark>
-ground
<purr>
whitequark: is no longer stuck up in the clouds.
<whitequark>
cool
<vil>
-ground
<purr>
vil: is no longer stuck up in the clouds.
<vil>
I was curious if it actually kept track
<whitequark>
hey
<whitequark>
I wanna watch some movie and relax
<whitequark>
recommend me one
<vil>
hmmm
<vil>
Iron Man?
<whitequark>
sorry, bad wording. TV series. I usually watch one (or a big chunk thereof) until I fall asleep.
<whitequark>
or anime
<whitequark>
<3 anime
<purr>
Let it be known that whitequark hearts anime.
<vil>
oh, okay. hmmmmm
<vil>
I haven't been watching much TV lately
* whitequark
doesn't have a TV for last... seven years?
<whitequark>
about as long as I can remember
<vil>
smart. there's not much of value on
<whitequark>
in a curious twist of fate that didn't prevent me from watching GoT or House or...
<vil>
House was excellent
<vil>
you know what I should find is Monk
<vil>
that was an excellent show
<whitequark>
House was horrible. no medicine, insanely dumb script, template-based episodes
<whitequark>
however I watched it thrice
<whitequark>
because
<whitequark>
excellent time-killer when you're exhausted
<whitequark>
don't think I remember a single thing from House.
<whitequark>
Monk... lemme see
<vil>
detective with extreme OCD
<whitequark>
it's either really good or really bad
<whitequark>
depends mainly on amount of awkwardness on screen
<whitequark>
I can't stand awkward situations. creep me out. thank god vlc can skip fragments.
<vil>
it's not usually that *awkward*, just kind of ridiculous
<whitequark>
neat
* whitequark
downloads
<vil>
like he's afraid of milk
<whitequark>
I've told every manager I've ever had "I work reasonable hours; if there's a disaster and I need to work extra hours to help out I will, and I will consider that disaster to be evidence of your failure to manage risk when it comes time for management reviews." I knew that my current job would be a good fit for me when my new manager told me that he viewed making people work crazy hours to be a failure of management before I got the chance t
<whitequark>
hahahaha
<whitequark>
Eric Lippert is awesome
<whitequark>
oh, Monk is huge
<vil>
whitequark: huge as in file size?
<whitequark>
amount of seasons
<vil>
it had like 13 seasons
<vil>
yeah
<whitequark>
file size is meh; I'd download 1080p if there was any
<whitequark>
<3 notebooks with full-HD screens
<purr>
Let it be known that whitequark hearts notebooks with full-HD screens.
<vil>
haha
<vil>
our internet is 11mbps down at the moment
<vil>
fastest it's ever been
<vil>
I miss being up at college where it's 60 or so
<whitequark>
I have 50mbps here
<whitequark>
I could have 100 but don't bother
<whitequark>
practically every ISP in Moscow at this moment offers unlimited 100mbps
<whitequark>
and it's unlimited as in actually unlimited