00:45:48  <indutny>creationix: woot be neat
00:50:01  * indutnychanged nick to indutny_away
01:10:32  <indutny_away>s/woot/wood
01:10:38  <indutny_away>s/wood/would
01:10:39  <indutny_away>:D
01:10:40  <indutny_away>lol
01:31:42  * alejandromgjoined
01:45:31  * karterkjoined
01:53:32  * alejandromgquit (Ping timeout: 245 seconds)
02:02:16  * alejandromgjoined
02:09:53  * alejandromgquit (Ping timeout: 248 seconds)
02:10:16  * alejandromgjoined
02:25:44  * karterk_joined
02:28:52  * karterkquit (Ping timeout: 246 seconds)
02:43:07  * alejandromgquit (Ping timeout: 245 seconds)
02:46:36  * alejandromgjoined
02:47:30  * karterk_quit (Remote host closed the connection)
04:38:42  * alejandr1mgjoined
04:39:35  * alejandromgquit (Ping timeout: 244 seconds)
05:56:07  * alejandr1mgquit (Quit: leaving)
09:19:27  * indutny_awaychanged nick to indutny
09:44:12  * karterkjoined
11:16:08  * karterkquit (Ping timeout: 276 seconds)
11:38:43  * karterkjoined
11:59:32  * mmalecki[zzz]changed nick to mmalecki
12:06:26  * karterkquit (Remote host closed the connection)
12:08:24  * karterkjoined
12:08:46  * karterkquit (Remote host closed the connection)
13:07:52  <creationix>back
13:09:57  <indutny>creationix: hi
13:10:11  <indutny>creationix: invited you and few other people to the newly created group
13:10:41  <creationix>group where?
13:10:55  <indutny>creationix: google group
13:11:11  <indutny>creationix: have you received email?
13:11:22  <creationix>yep
13:11:23  <indutny>creationix: https://groups.google.com/forum/?fromgroups#!forum/candorlang
13:11:26  <indutny>cool
13:11:27  <creationix>heh, the invite email is in russian
13:11:48  <indutny>creationix: that's google's fault :)
13:11:56  <indutny>haha
13:12:10  <creationix>it's ok, I just change the url to english http://groups.google.com/group/candorlang?hl=en
13:12:20  <indutny>aah
13:12:22  <indutny>:)
13:15:13  <creationix>so let's see if I can make more progress on candor.io today
13:15:21  <creationix>still stuck on how to organize the code though
13:16:08  <indutny>with that class stuff?
13:18:53  <creationix>yeah
13:19:02  <creationix>bert left for a ski trip
13:19:13  <indutny>heh
14:29:44  <indutny>`whoa
14:30:54  <indutny>inline object property lookup
14:31:13  <indutny>should be a little bit faster now
14:31:18  <indutny>s/inline/inlined
14:31:27  <indutny>creationix: do you need a help with candor.io?
14:31:56  <creationix>if you want
14:32:02  <creationix>I can't devote much time to it
14:32:07  <creationix>depends on how fast you want it done
14:32:14  <creationix>I don't mind doing it myself, it will just take a while
14:33:52  <creationix>if I can get http-bench.lua ported to candor, it would be interesting to see how it performs
14:34:01  <creationix>that means I need tcp and stream from libuv bound
14:34:06  <creationix>as well as http_parser
14:35:25  <creationix>I see you changed the Isolate syntax error API
14:36:04  <indutny>em
14:36:10  <indutny>really?
14:36:40  <creationix>removed Syntax
14:36:46  <indutny>aah
14:36:47  <indutny>yes
14:36:56  <indutny>that's because I've introduced compiler errors
14:37:00  <creationix>I see
14:37:04  <creationix>I figured it was something like that
14:37:27  <creationix>ok, so I think I'll just punt on inheritance for now
14:37:33  <creationix>handle is just one method
14:37:37  <creationix>handle->Close
14:37:58  <creationix>I'll implement Tcp which has Stream and Handle methods too
14:38:02  <creationix>and Timer will have Handle too
14:38:22  <creationix>then later when we add Pipe, Tty, and all the other types, we'll need to find a way to not duplicate code
14:38:23  <indutny>yeah
14:38:31  <indutny>I'll help you then
14:38:36  <indutny>when you'll get to that point
14:38:39  <creationix>ok
14:39:04  <creationix>btw, how can I implement something like node buffers?
14:39:22  <creationix>mutable char* arrays
14:39:43  <creationix>Currently, it would be bufferSet(buffer, 0, 5)
14:39:46  <creationix>or something like that
14:39:49  <creationix>where buffer is cdata
14:40:14  <creationix>which if that's the API style we want, it's fine
14:40:29  <creationix>Buffer.setUInt8(buffer, 0, 5)
14:40:35  <creationix>and so forth
14:40:51  <indutny>yeah
14:40:55  <indutny>buffers are just cdata
14:41:05  <creationix>so no buffer[5] = 3
14:41:12  <creationix>or sizeof buffer
14:41:18  <indutny>well, sizeof may work
14:41:26  <indutny>but it'll work for all cdata's
14:41:41  <creationix>right, but no user-specified sizeof function
14:41:46  <indutny>yes
14:41:48  <creationix>or custom [] access
14:41:52  <indutny>yes
14:41:57  <creationix>that's fine, just wondering
14:42:01  <indutny>:)
14:42:25  <creationix>so on OOP style programming
14:42:34  <creationix>we last decided on fast clones and : syntax
14:42:43  <creationix>is that still something you want
14:42:49  <indutny>I think yes
14:43:03  <indutny>have we decided what syntax to use for fast cloning?
14:43:04  <creationix>I'm still trying to figure out how I want the API in candor.io to look
14:43:16  <creationix>indutny, since you reserve "new" that could be it
14:43:22  <creationix>new obj -> clone of obj
14:43:41  <indutny>`new`?
14:43:47  <creationix>but that implies obj is a prototype
14:43:54  <indutny>hm...
14:43:54  <creationix>which only works if we have : syntax
14:43:56  <indutny>interesting
14:44:15  <indutny>:)
14:44:45  <creationix>local Square = {getArea:(self) { return self.w * self.h }}
14:44:48  <creationix>square = new Square
14:44:50  <creationix>square.w = 5
14:44:52  <creationix>square.h = 3
14:44:57  <creationix>square:getArea() -> 15
14:45:08  <indutny>ok, I'll implement it now
14:45:11  <indutny>can you add that to the readme?
14:45:26  <creationix>sure
14:45:29  <creationix>: syntax too?
14:45:32  <indutny>creationix: yes
14:46:06  <creationix>do we want to enable automatic constructors too?
14:46:27  <creationix>new Square(3, 5) clones Square and then calls :initialize(3,5) if there is one?
14:46:33  <creationix>or is that too much magic
14:47:11  <creationix>if not, it's easy to have Square.create(3, 5) that does that internally
14:47:18  <creationix>inside it does
14:47:24  <creationix>obj = new Square
14:47:27  <indutny>creationix: hm...
14:47:28  <creationix>obj:initialize(3, 5)
14:47:29  <creationix>return obj
14:47:49  <creationix>that's how I do objects in luvit
14:48:01  <creationix>except there it's inheritance via metatables instead of fast-clone
14:48:09  <creationix>but same effect more or less
14:48:25  <indutny>lets do just new obj
14:48:27  <indutny>without parens for now
14:48:29  <creationix>sounds good
14:48:57  <creationix>also, it would be great if the parser allowed keywords as properties
14:49:03  <creationix>it shouldn't be hard
14:49:11  <creationix>a.new = () {}
14:49:34  <indutny>heh
14:49:35  <indutny>right
14:49:59  <creationix>only check for keywords when an identifier is a standalone variable
14:50:10  <creationix>can't do `local new = 5`
14:52:03  <indutny>btw, you can still do
14:52:05  <indutny>a["new"] = x
14:52:09  <indutny>like in js
14:56:36  <indutny>creationix: ok, implemented a.new = 1
14:56:48  <creationix>:)
15:00:03  <creationix>how is https://gist.github.com/b5e7c4c97a5110f6ff69 ?
15:00:38  <creationix>hmm, maybe s/fast-clone operator/fast-clone keyword/
15:01:27  <indutny>wait what is `local`?
15:01:32  <creationix>hah
15:01:35  <creationix>too much lua
15:01:43  <indutny>yeah
15:01:45  <indutny>please remove it
15:01:46  <indutny>brb
15:02:13  <creationix>updated
15:16:00  <indutny>creationix: cool
15:16:01  <indutny>back
15:17:31  <creationix>ok, so should I push the readme changes then?
15:17:48  <indutny>creationix: lgtm
15:18:23  <indutny>sure
15:20:01  <creationix>ok, pushed
15:21:23  <indutny>creationix: cool
15:38:22  * karterkjoined
15:41:46  <indutny>crap, something is broken with my `new` implementation :)
15:49:01  <mmalecki>indutny: add candor to travis, btw :)
15:51:47  <indutny>mmalecki: do you have x64 support?
15:52:30  <mmalecki>indutny: ah, right, that's what you need
15:52:38  <indutny>mmalecki: yeah
15:52:52  <indutny>mmalecki: I want PL to stabilize enough before implementing ia32
15:56:03  <karterk>indutny: I have forked and built candor. N00b question: where is the binary?
16:00:07  <indutny>karterk: hahaha
16:00:19  <indutny>karterk: make -B -j4 ARCH=x64 cand
16:00:24  <indutny>karterk: ./cand will open the repl
16:00:35  <indutny>karterk: ./cand test/functional/objects.can
16:02:29  <indutny>creationix: implemented new
16:02:38  <creationix>cool
16:02:43  <creationix>I'm burning though binding tcp
16:02:50  <creationix>maybe 30% done
16:03:00  <indutny>creationix: cool
16:03:06  <creationix>I'm going to skip the *2 and *6 functions for now
16:03:06  <indutny>creationix: GC should be much more stable now
16:03:10  <creationix>(fd passing and ipv6)
16:03:16  <indutny>creationix: heh, that's ok
16:03:35  <indutny>creationix: would be neat to see a basic http server
16:03:50  <creationix>it's a lot of stuff to do tcp https://gist.github.com/c5c3020829bb94f2919a
16:04:14  <indutny>heh
16:33:22  <indutny>creationix: done
16:33:26  <indutny>creationix: implemented colon syntax
16:33:27  <indutny>brb
16:33:52  <creationix>:)
16:37:15  <karterk>I have started splitting test-functional.cc into individual tests
16:37:30  <karterk>but when I do this, it always asserts true
16:37:37  <karterk>returnOne() {
16:37:38  <karterk> return 1
16:37:38  <karterk>}
16:37:39  <karterk>assert(returnOne(), 2)
16:37:50  <karterk>any idea?
16:42:53  <karterk>figured out! it must be: assert(returnOne() == 1)
16:49:26  <karterk>figured out! it must be: assert(returnOne() == 1)
16:49:36  <indutny>:)
16:49:40  <indutny>better ====
16:49:42  <indutny>oops
16:49:43  <indutny>===
16:49:52  <indutny>creationix: btw, current behaviour of == is quite confusing
16:49:53  <karterk>ok
16:50:06  <indutny>creationix: it's coercing right argument to left's one type
16:50:19  <indutny>creationix: so nil == 1 - is true
16:50:28  <creationix>can we just make it not coerce?
16:50:36  <creationix>and return false if the types differ
16:51:22  <indutny>creationix: I think yes
16:51:27  <indutny>creationix: is that just for nil?
16:51:28  <creationix>we can still have falsy and truthy values if we want
16:51:33  <karterk>indutny: running this produces an error on line 11
16:51:34  <karterk>https://gist.github.com/2118923
16:51:36  <creationix>no, for anything
16:51:42  <creationix>I don't 5 == "5" to be true
16:51:52  <creationix>they aren't the same thing
16:51:54  <karterk>"Error on line 11: Expected statement after '{'"
16:52:23  <indutny>karterk: I think you're using tabs :)
16:52:32  <karterk>oh yeah :D
16:52:44  <karterk>is it whitespace sensitive>
16:52:45  <karterk>?
16:53:40  <indutny>karterk: just tab is not a whitespace
16:53:50  <indutny>I really dislike tabs
16:53:51  <indutny>:)
16:54:09  <karterk>me too :) I was just trying a new editor, and I forgot to change it to spaces.
16:54:21  <indutny>:)
16:54:40  <karterk>all set now, I should port the return stuff to return.can today
16:54:51  <indutny>karterk: cool
16:55:13  <karterk>btw, do you think its a good idea to have it just "can filename.can" instead of "cand filename.can"?
16:56:28  <indutny>probably
16:56:39  <indutny>creationix: what do you think?
16:57:26  <creationix>people will use tabs
16:57:31  <creationix>you can't force that at the langauge level
16:57:42  <creationix>you can convert tabs to spaces in the lexer
16:57:50  <creationix>then the vm won't care
16:58:04  <indutny>creationix: ook
16:58:08  <indutny>creationix: what about cand=>can
16:58:22  <creationix>what's that?
16:58:30  <karterk>instead of cand file.can
16:58:35  <creationix>oh, the executable
16:58:37  <karterk>to "can file.can"
16:58:40  <karterk>yup
16:58:44  <creationix>dunno, I still don't have a name for candor.io
16:58:47  <creationix>right now it's canio
16:59:10  <creationix>looks like there is no "can" executable registered in debian/ubuntu
16:59:19  <indutny>creationix: no in osx too
16:59:22  <karterk>should snatch it then :)
16:59:40  <creationix>can is cool
16:59:47  <creationix>and I can have canio or can.io
16:59:50  <creationix>for candor.io
16:59:52  <indutny>ok, lets rename it then
17:00:05  <karterk>creationix: what is canio?
17:00:20  <creationix>https://github.com/creationix/candor.io
17:00:26  <creationix>it's like node, but in candor
17:00:36  <karterk>awesome :)
17:21:36  <karterk>indutny: for "return keysof { a: 1, b: 2 }", why does the following fail:
17:21:39  <karterk>assert(returnKeysOfDict() === ['a', 'b'], "return keys of a dict")
17:22:02  <indutny>karterk: heh, that won't work
17:22:39  <indutny>karterk: you're trying to compare different objects
17:23:06  <karterk>ok
17:23:10  <indutny>karterk: better do something like that: keys = returnKeysOfDict()
17:23:25  <karterk>will do that
17:23:26  <indutny>assert(keys[0] == 'a' || keys[1] == 'a')
17:23:30  <indutny>btw
17:23:40  <indutny>can you please remove `return` prefix?
17:23:51  <indutny>returnKeysOfDict() -> keysOfDict()
17:23:55  <karterk>from the functional calls? sure
17:23:56  <indutny>less verbosity - good
17:23:57  <karterk>*names
17:23:59  <indutny>karterk: yeah
17:24:02  <karterk>definitely!
17:24:04  <indutny>thank you
17:24:19  <karterk>:) welcome
17:29:37  <karterk>indutny: so, I have ported "return + assign" and "prefix" to return.can - do you want me to commit it now (and delete the ones ported from test-functional.cc) or wait till all is done?
17:30:05  <karterk>*all are done. my english!
17:30:27  <indutny>karterk: better commit all-in-one
17:30:36  <karterk>cool
17:31:14  <karterk>indutny: gotta run, will continue tomorrow. btw, awesome work, glad to be of some help! :)
17:31:41  <indutny>karterk: thank you for your help
17:34:38  <indutny>creationix: woot https://github.com/creationix/candor.io/commit/133ad4b226142b37e47a12936ae8f3c17d02258f
17:35:29  <creationix>that's actually a bad commit
17:35:39  <creationix>but here comes a better one
17:36:08  <creationix>how do I rewrite the history?
17:36:33  <creationix>I want 133ad4b226142b37e47a12936ae8f3c17d02258f to never have happened
17:36:37  <creationix>and keep the history linear
17:36:52  <creationix>88fe51f8dba8e8c420b13e544f10445ee38f00c3 and def5b5941940f0a5f4426a8305cef7c48c90d804
17:39:01  <creationix>I guess I just need to somehow move master to point to def5b5941940f0a5f4426a8305cef7c48c90d804
17:40:19  <indutny>creationix: git rebase -i HEAD~2
17:40:30  <indutny>or
17:40:33  <indutny>git reset HEAD~1
17:40:36  <indutny>and git commit
17:40:38  <creationix>ahh reset
17:40:39  <indutny>git commit -f
17:40:53  <creationix>git reset --hard def5b5941940f0a5f4426a8305cef7c48c90d804
17:41:30  <indutny>creationix:probably
17:41:31  <creationix>hmm, but I can't seem to push it to github
17:41:46  * karterkquit (Remote host closed the connection)
17:42:13  <indutny>creationix: git push -f origin master
17:42:38  <creationix>yeah, that just says "Everything up-to-date"
17:43:10  <creationix>I guess I have to reset --hard while in the master branch
17:43:13  <creationix>should be good now
17:43:28  <creationix>there, a clean commit for tcp https://github.com/creationix/candor.io/commit/def5b5941940f0a5f4426a8305cef7c48c90d804
17:44:01  <creationix>now to test it
17:46:10  <indutny>woot it's running :)
17:46:24  <indutny>creationix: btw, I think candor needs some sort of stl
17:46:34  <indutny>creationix: dump is really useful
17:46:48  <creationix>that's up to you
17:46:51  <indutny>ah, nvm
17:46:57  <indutny>v8 doesn't contain any
17:47:15  <creationix>I'd keep it lean
17:47:21  <creationix>it's already much easier to use than most VMs
17:47:32  <indutny>creationix: hehe
17:47:55  <indutny>creationix: looks like it's time to implement optimizations
17:48:06  <indutny>creationix: I think I've implemented everything else
17:48:08  <creationix>fix the lexer bugs
17:48:17  <indutny>creationix: which exactly?
17:48:19  <creationix>I should really file those as I find them
17:48:31  <creationix>the most common is files starting or ending with comments
17:48:34  <creationix>often break the lexer
17:48:45  <creationix>I'll block comment a large section of my test script
17:48:47  <creationix>and it will die
17:48:51  <creationix>I have to actually delete it
17:48:55  <indutny>creationix: oh, not goo
17:49:14  <creationix>and the string literal needs escaping
17:49:22  <indutny>creationix: Implemented that
17:49:25  <creationix>cool
17:49:26  <indutny>creationix: escaping
17:49:34  <indutny>creationix: "\x00 and \u0000"
17:49:52  <creationix>and \r \n \t and friends?
17:49:55  <creationix>\0 ?
17:50:02  <indutny>yes
17:50:10  <indutny>\r \n \t \v \0
17:50:16  <creationix>what's \v?
17:50:23  <indutny>and \b
17:50:25  <creationix>and I've seen \b sometimes
17:50:25  <indutny>vertical tab
17:50:28  <creationix>ahh
17:50:47  <creationix>now supposing I want to write a candor pretty printer
17:50:48  <indutny>not that useful but pretty default for all other languages
17:50:55  <creationix>and I want to escape a string
17:51:00  <creationix>how do I read the bytes at an offset?
17:51:08  <indutny>creationix: from string?
17:51:12  <creationix>a = "foo"; a[1] return "f"
17:51:13  <indutny>creationix: heh, no way so far
17:51:20  <creationix>*returns
17:51:25  <indutny>creationix: can be implemented as function
17:51:26  <indutny>or library
17:51:41  <indutny>C++ binding should be simple to implement
17:51:42  <creationix>so String.byteAt(a, 4)
17:51:45  <kohai>C has 12 beers
17:51:47  <creationix>or something like that
17:51:54  <indutny>yes
17:52:06  <creationix>since strings are binary safe, I can return strings where the chunk doesn't need to be mutated
17:52:13  <creationix>just provide a way to read the bytes
17:52:43  <creationix>actually, if you can make string concat very fast, I won't even need a buffer type
17:52:52  <indutny>creationix: oh, concat is very slow now
17:53:00  <indutny>creationix: I need to implement cons tree
17:53:01  <creationix>right, it's very slow in lua too
17:53:10  <creationix>that would be a good optimization to start with
17:53:23  <creationix>web servers concat strings all the time
17:53:38  <indutny>well
17:53:51  <indutny>I want to implement register allocation and CFG first
17:54:05  <indutny>lets see if that is a really deep rabbit hole
17:55:38  <creationix>ok
17:55:48  <creationix>I'm just trying to decide if I need a buffer type
17:55:54  <creationix>or just a good string library
17:56:13  <creationix>when do you need actual mutable buffers?
17:56:26  <creationix>most the time you're either parsing a binary stream or encoding a binary stream
17:56:36  <creationix>rarely mutating an existing data structure
17:57:48  <creationix>what happens if I mutate a string from C++?
17:57:56  <indutny>creationix: nothing
17:57:57  <creationix>is that bad, does it break VM assumptions
17:58:05  <indutny>creationix: it shouldn't
17:58:09  <indutny>creationix: but that won't work for cons strings
17:58:16  <indutny>creationix: as they're essentially a trees
17:58:36  <creationix>true, calling ->Value on them would have to convert it to a static tree
17:58:37  <indutny>creationix: C++ is accessing all properties directly
17:58:42  <indutny>creationix: yes
17:58:58  <creationix>though for writev, I can take an array of strings of that's faster
17:59:41  <indutny>it won't be faster
17:59:53  <indutny>at least until I'll implement dense arrays
18:02:21  <indutny>brb
18:02:24  <indutny>going to take a shower
18:02:27  <creationix>ok
18:16:42  <indutny>back
18:17:30  <indutny>from another point of view
18:17:45  <indutny>implementing dense arrays and cons strings first makes sense
18:21:38  <creationix>it affects the C++ api
18:21:51  <creationix>well, cons strings can
18:21:58  <indutny>yes
18:22:00  <indutny>they're
18:22:04  <indutny>dense arrays not
18:22:32  <creationix>yeah, the actual Value[] array isn't much use
18:23:15  <creationix>well, maybe for fast iteration
18:23:31  <creationix>but we already have the Arguments thing
18:25:33  <creationix>hmm, uvTcp::Write is not working
18:25:42  <creationix>indutny, how well do you know libuv internals?
18:29:23  <indutny>creationix: not really weell
18:29:32  <indutny>especially tcp stuff
18:45:31  <creationix>ok, candor question
18:45:34  <creationix>how can I get a stack trace
18:45:37  <creationix>I'm writing my error handler
18:45:42  <creationix>stack traces make debugging easier
18:51:54  <indutny>haha
18:52:01  <indutny>hm...
18:52:14  <indutny>I'll implement that
18:52:49  <indutny>creationix: sorry, going to sleep now
18:52:51  <indutny>ttyl
18:52:54  * indutnychanged nick to indutny_sleeping
20:32:05  <creationix>is `foo() {}` not the same as `foo = () {}`
20:32:13  <creationix>the latter seems to have wider scope
20:36:48  <creationix>I suggest removing dart-style function declarations outright
20:37:06  <creationix>they are very hard to read, it's hard to tell if something is a function call or definition