--- Log opened Tue Apr 12 00:00:50 2011 00:05 -!- m4dh4tt3r [~Adium@2.sub-75-208-15.myvzw.com] has joined #go-nuts 00:06 -!- vsayer [~vivek@c-98-248-228-200.hsd1.ca.comcast.net] has joined #go-nuts 00:07 -!- foocraft [~dsc@78.100.166.168] has joined #go-nuts 00:08 < exch> mm time.Sleep() seems to be broken here :< 00:08 < exch> time.Sleep(1e9) never finishes sleeping 00:08 < KirkMcDonald> That sleeps for a billion seconds. 00:09 < KirkMcDonald> Er, no. 00:09 < exch> 1 second 00:09 < KirkMcDonald> Apparently I cannot read. 00:09 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Quit: JusticeFries] 00:09 -!- joelkronander [~joelkrona@c-bf2fe253.617-1-64736c22.cust.bredbandsbolaget.se] has joined #go-nuts 00:09 < KirkMcDonald> And somehow mixed up the Seconds() documentation with the Sleep() documentation. 00:09 < KirkMcDonald> They're, like, right next to each other. 00:09 < exch> http://www.pastie.org/1784958 this just prints 'looping' indefinitely 00:10 < exch> I put a println() right after the time.Sleep(). its never reached 00:10 < KirkMcDonald> Perhaps there is a delay in the time it takes it to print out the necessary number of strings. 00:11 < KirkMcDonald> So the process is blocking on the output. 00:11 < exch> mm it works when I switch to fmt.Println 00:11 < KirkMcDonald> Because I suspect the machine can complete rather a lot of iterations of an infinite loop in the space of a second. 00:11 < KirkMcDonald> Curious. 00:11 < exch> I think it's a scheduling thing 00:14 < Glasswalker> so if type A has a channel as a field, and spawns a dozen goroutines that loop infinitely. It wants to signal these goroutines (using the channel which is a field) to stop looping and shut down. 00:14 < Glasswalker> What is the "best practice" way to do that? 00:15 < Glasswalker> By closing the channel? and trying to detect that within the looping goroutines? 00:15 < exch> Glasswalker: look a my pastie 00:15 < Glasswalker> or by sending a signal? (like in several of the online examples) 00:15 < exch> *at 00:15 < Glasswalker> which pastie? 00:15 < exch> it's basically what you are already doing, so it should not block on the read from Quit 00:15 < dfc> Glasswalker: if the sole job of these goroutines is to poll the channel 00:15 < exch> http://www.pastie.org/1784958 this one 00:15 < dfc> then closing the channel will suffice 00:16 < dfc> if they have more complicated semantics 00:16 < dfc> then each goroutine should be modeled by a struct 00:16 < dfc> with it's own Close chan bool, 1 channel 00:17 -!- virtualsue [~chatzilla@nat/cisco/x-yckxhdgavbrkjrcx] has quit [Quit: ChatZilla 0.9.86.1 [Firefox 4.0/20110318052756]] 00:17 < Glasswalker> dfc ok, I'm using a close chan bool 00:17 < Glasswalker> one sec, reading exch's pastie first 00:18 < exch> if you change those 'println's with 'fmt.Println', it works as expected 00:18 < Glasswalker> right, exch: that's what I'm doing 00:18 < exch> yea, so that should do the trick really 00:18 < Glasswalker> but it blocks on the read from the channel 00:18 < exch> it keeps executing the default case, as long as nothing happens to c 00:18 < Glasswalker> and never gets to the default 00:19 < exch> something, somewhere else is presumably going wrong then.. 00:20 -!- bugQ [~bug@c-71-195-207-98.hsd1.ut.comcast.net] has joined #go-nuts 00:20 < Glasswalker> http://www.pastie.org/1784978 00:21 < Glasswalker> full source 00:21 < Glasswalker> see ClientListenerHandler, and PeerListenerHandler 00:21 < Glasswalker> and Close() sends the signals to the "Quit" channel 00:21 < Glasswalker> quit channel defined in the DAMBSServer struct 00:22 < Glasswalker> that code compiles fine, but when I run it, it echoes the "Launching" message before spawning the goroutine. but then never goes any further. 00:22 -!- Adys [~Adys@unaffiliated/adys] has joined #go-nuts 00:24 < Glasswalker> the whole thing is called when an external package calls NewServer() which fires up the listeners. Then that calling package loops indefinitely (for now, later it will do more) 00:24 -!- JusticeFries [~JusticeFr@236.sub-69-98-190.myvzw.com] has joined #go-nuts 00:24 < exch> mm 00:25 -!- JusticeFries [~JusticeFr@236.sub-69-98-190.myvzw.com] has quit [Client Quit] 00:26 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 00:27 < Glasswalker> Now we discussed the breaks, which I need to fix 00:27 < Glasswalker> but it's not even throwing the "Quit signal received" message 00:28 < Glasswalker> so it's not getting inside that case (because the signal never gets thrown on the Quit channel) 00:28 -!- Pie`` [~pie@kjal.demon.co.uk] has quit [Ping timeout: 260 seconds] 00:28 < Glasswalker> so it's just hanging at line 99 (in the case of ClientListenerHandler()) 00:28 < Glasswalker> which implies it's blocking on the channel read 00:29 < exch> those channel selects used to be blocking calls. Are you sure you have the appropriate Go version? 00:30 < skelterjohn> can i see the pastebin? 00:30 < Glasswalker> http://www.pastie.org/1784978 00:30 < exch> http://www.pastie.org/1785001 this one works as expected 00:30 < exch> prints 'looping' until the quit channel is closed one second later 00:31 < dfc> Glasswalker: make the Quit channel non blocking 00:31 < exch> it is nonblocking if you include a default case 00:31 < dfc> sv := &DAMBServer{ ... Quit: make (chan bool, 1) } 00:31 < exch> which he has 00:31 < exch> he doesnt need the buffered chan 00:31 < dfc> blocking to read 00:31 < dfc> not blocking to send 00:32 < exch> there is read block with the default case 00:32 < exch> *no read block 00:32 < exch> at least in the current version of Go 00:32 < Glasswalker> I'm using a recent weekly 00:32 < Glasswalker> trying to confirm which version I have now 00:33 < exch> can you run this and see what it does? http://www.pastie.org/1785001 00:36 < Glasswalker> loops for a while 00:36 < Glasswalker> then says end 00:36 < Glasswalker> and stops 00:37 < exch> k so it works 00:37 < exch> it uses the same setup yuo have 00:37 < Glasswalker> so the question is... what did I break in my code? :) 00:37 < exch> *you 00:37 < exch> good question 00:37 -!- binarypie [~binarypie@adsl-99-35-135-146.dsl.pltn13.sbcglobal.net] has joined #go-nuts 00:38 -!- binarypie [~binarypie@adsl-99-35-135-146.dsl.pltn13.sbcglobal.net] has quit [Remote host closed the connection] 00:38 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Read error: Connection reset by peer] 00:38 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 00:39 < exch> even with two separate goroutines it works 00:39 < exch> so that's not the issue either 00:39 < Glasswalker> adding some output to the calling routine's loop with a sleep in between 00:39 < Glasswalker> so I can see that it is in fact still running, just nothing happening on the others. 00:41 < Glasswalker> ok... what the hell 00:41 < Glasswalker> works fine now 00:41 < Glasswalker> all I did was add a sleep to the loop 00:41 < Glasswalker> think it was a scheduler issue (main loop iterating forever was drowning the other goroutines out?) 00:41 < skelterjohn> yes, that can happen 00:42 < skelterjohn> set GOMAXPROCS to more than one 00:42 < skelterjohn> as far as i know, though, time.Sleep() won't yield 00:43 -!- vsayer [~vivek@c-98-248-228-200.hsd1.ca.comcast.net] has quit [Ping timeout: 276 seconds] 00:43 < skelterjohn> you can use runtime.Gosched() to force a yield, if you want things to definitely be concurrent 00:43 < plexdev> http://is.gd/RUBtyv by [Nigel Tao] in go/src/pkg/net/ -- net: fix laddr typo in test code. 00:50 -!- tylergillies [~quassel@unaffiliated/tylergillies] has quit [Read error: Connection reset by peer] 00:53 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Quit: skelterjohn] 00:53 -!- tensorpudding [~user@99.32.63.28] has quit [Read error: Connection reset by peer] 00:59 -!- tylergillies [~quassel@204-232-205-180.static.cloud-ips.com] has joined #go-nuts 00:59 -!- tylergillies [~quassel@204-232-205-180.static.cloud-ips.com] has quit [Changing host] 00:59 -!- tylergillies [~quassel@unaffiliated/tylergillies] has joined #go-nuts 01:00 -!- m4dh4tt3r [~Adium@2.sub-75-208-15.myvzw.com] has quit [Ping timeout: 258 seconds] 01:02 -!- nettok [~quassel@200.119.157.225] has joined #go-nuts 01:06 -!- tylergillies [~quassel@unaffiliated/tylergillies] has quit [Remote host closed the connection] 01:07 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts 01:09 -!- saturnfive [~saturnfiv@210.74.155.131] has joined #go-nuts 01:10 -!- mikespook [~mikespook@219.137.253.123] has joined #go-nuts 01:13 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined #go-nuts 01:14 -!- amacleod [~amacleod@pool-173-76-201-233.bstnma.fios.verizon.net] has joined #go-nuts 01:15 < exch> ooh, Virgin is hiring fulltime astronauts :o Here's a golden chance to make that one remaing childhood dream a reality! 01:17 < dfc> i'm still working on being a Vet and a Fireman 01:17 < exch> you're lagging behind friend! 01:17 < dfc> i've lived a sheltered life 01:19 -!- boscop [~boscop@g227141251.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 01:20 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 01:21 -!- dropdrive [~dropdrive@cpe-72-227-159-70.nyc.res.rr.com] has quit [Read error: Operation timed out] 01:23 -!- carrus85 [~carrus85@64.0.193.15] has quit [Quit: Leaving] 01:31 -!- boscop [~boscop@g226247234.adsl.alicedsl.de] has joined #go-nuts 01:34 -!- eikenberry [~jae@68.118.117.234] has quit [Quit: End of line.] 01:35 -!- dropdrive [~dropdrive@cpe-72-227-159-70.nyc.res.rr.com] has joined #go-nuts 01:37 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Read error: Operation timed out] 01:40 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 01:46 -!- bugQ [~bug@c-71-195-207-98.hsd1.ut.comcast.net] has quit [Ping timeout: 252 seconds] 01:47 -!- rbraley [~rbraley@114.250.85.173] has quit [Ping timeout: 276 seconds] 01:50 -!- boscop [~boscop@g226247234.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 01:51 -!- skelterjohn_ [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 01:51 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Read error: Connection reset by peer] 01:52 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Client Quit] 02:00 -!- rbraley [~rbraley@114.250.85.28] has joined #go-nuts 02:05 -!- mikespook [~mikespook@219.137.253.123] has quit [Read error: Operation timed out] 02:06 -!- boscop [~boscop@g226244114.adsl.alicedsl.de] has joined #go-nuts 02:06 -!- mikespook [~mikespook@219.137.253.123] has joined #go-nuts 02:09 -!- rurban [~demo@178-191-212-119.adsl.highway.telekom.at] has joined #go-nuts 02:19 -!- amacleod [~amacleod@pool-173-76-201-233.bstnma.fios.verizon.net] has quit [Quit: Bye Bye] 02:20 -!- benjack [~benjack@bb220-255-241-76.singnet.com.sg] has joined #go-nuts 02:30 -!- krutcha1 [~krutcha@S010600045a27676a.vs.shawcable.net] has joined #go-nuts 02:36 < Glasswalker> So having a minor issue... Getting a runtime error in my code. This code: http://www.pastie.org/1785290 is throwing an error at line 4 (it's line 88 in the file) the error output is: http://www.pastie.org/1785292 02:36 < Glasswalker> I know that the buf array is length 65536 and it did receive bytes (at least 20-30 bytes) 02:37 < Glasswalker> so why is it throwing an index out of range error? 02:37 < dfc> packet.Size = binary.LittleEndian.Uint16(buf[1:2 02:37 < dfc> ^ btw,you don't need ()'s around if clauses 02:37 < dfc> and you don't need ;'s 02:37 < Glasswalker> oh I know, forcive habbit (old C programmer) 02:37 < Glasswalker> lol 02:37 < dfc> gofmt can fix that up for you 02:38 < dfc> the reason you're getting our of range len(buf) < 1 02:38 < Glasswalker> it's not though 02:38 < Glasswalker> see in the output 02:38 < Glasswalker> It's output BYTECOUNT RECEIVED and ouputting len(buf) 02:38 < Glasswalker> in the output it's saying len(buf) = 65536 02:38 < Glasswalker> right before the panic runtime error 02:39 < Glasswalker> that was my first thought is that buf was overrunning 02:39 < dfc> nah, slices/arrays are 32bit safe 02:39 < Glasswalker> (or more it was zero and the reference to it was running over it) 02:39 < dfc> try 02:39 < Glasswalker> yeah sorry tired, said that wrong 02:39 < Glasswalker> lol 02:39 < dfc> fmt.Printf("%#v", buf) 02:40 < Glasswalker> ok 02:40 < Glasswalker> one sec 02:40 < dfc> will (should) print the contents of the array 02:41 -!- vsayer [~vivek@2001:470:1f04:1a6b:21a:6bff:fe35:d2a5] has joined #go-nuts 02:42 < Glasswalker> []byte{0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0xd, 0xa, 0x0, 0x0, 0x0...... (and on and on for some time) 02:42 < Glasswalker> (I sent XXXXXXXXXX to it via telnet) 02:43 < dfc> acket.CryptoFlag = uint8(buf[0]); 02:43 < dfc> ^ you don't need the cast 02:44 < Glasswalker> ok fixed that. but that won't be related to the issue 02:44 < dfc> no 02:44 < Glasswalker> or shouldn't at least :) 02:45 < dfc> so, i can't explain why this is blowing up 02:45 < dfc> but before the guys will look at it 02:45 < dfc> you need to log an issue with the smallest possible test case 02:45 < dfc> as they are stupid bust 02:45 < dfc> busy 02:45 < dfc> so 02:45 < dfc> b := []byte { 0, 255, 255 } 02:46 < dfc> u := binary.LittleEndian.Uint16(b[1:2]) 02:46 < dfc> if that blows up 02:46 < dfc> then something is wrong with your runtime 02:46 < dfc> if not, possibly you're suffering from linker skew 02:50 < Glasswalker> it blows up 02:51 < Glasswalker> This code: http://www.pastie.org/1785337 02:51 < Glasswalker> Generates: http://www.pastie.org/1785338 02:54 -!- niemeyer_away [~niemeyer@189-10-155-52.pltce701.dsl.brasiltelecom.net.br] has quit [Ping timeout: 240 seconds] 02:54 < dfc> i think i know what the problem is 02:54 < dfc> len(b[1:2]) == 1 02:55 < dfc> i think i've misread the slice spec 02:55 < Glasswalker> oh 02:55 < Glasswalker> I understood the spec as from 1 to 2 inclusive 02:56 < dfc> me too 02:56 < Glasswalker> (meaning bytes 1 and 2, so len == 2) 02:56 < dfc> apparently now 02:56 < dfc> not 02:57 < |Craig|> its setup so b[:n]+b[n:] includes everything once 02:57 < dfc> http://golang.org/doc/go_spec.html#Slices 02:57 < dfc> so, you need b[1:3], gives elements 1 and 2 02:58 < Glasswalker> What? :) 02:58 < Glasswalker> I get it, but damn is that ever screwy 02:58 < dfc> it makes sense if you say 02:58 < dfc> b[:len(b)] == b 02:59 < Glasswalker> sure, but it's still screwy ;) 02:59 < exch> b[:len(b)] can be abbreviated to b[:] 03:00 < exch> or just b 03:00 < exch> :p 03:00 < dfc> exch: yes, but it illistrates the point 03:00 < dfc> so len(b[:10]) == 10 03:00 < dfc> which is why len(b[1:3]) == 2 03:12 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 03:17 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Quit: skelterjohn] 03:19 -!- tensai_cirno [~cirno@77.232.15.216] has quit [Remote host closed the connection] 03:21 -!- ahihi2 [~transient@cs181182126.pp.htv.fi] has quit [Read error: Operation timed out] 03:21 < |Craig|> I think one of the main reasons it works like that is [n:n-1] to get an empty slice (especially n=0 at the start) would be really strange 03:25 < KirkMcDonald> Also, it means that a[0:y] and a[y:] will, taken together, cover the entire array. 03:26 < KirkMcDonald> Oh, which was mentioned. 03:26 < KirkMcDonald> Really it ends up being the most convenient thing. 03:27 < KirkMcDonald> Cuts down on the off-by-one errors. 03:30 -!- nettok [~quassel@200.119.157.225] has quit [Ping timeout: 276 seconds] 03:34 < Rennex> or adds them... 03:50 < dfc> Rennex: i think both options, inclusive and exclusive have downsides 03:50 < dfc> at least this way yuou can do 03:50 < dfc> b := b[offset:offset+length] 03:50 < Rennex> yep 03:51 < dfc> which is useful for some use cases 03:51 < Rennex> though just as well there could be different syntax for an inclusive range and for a given length :) 03:52 < dfc> i dunno how well that would fit with Go's small language philosophy 03:54 < Rennex> indeed.. but it's also a compromise between language size and error-reducing readability-enhancing features :) 03:55 < dfc> i think there would be arguments for and against two slice style operators 03:55 < dfc> inclusive vs exclusive 03:56 < dfc> and that alone would probalby be enough for the go authors to keep the status quo 03:56 < dfc> i'm inclined to agree 03:56 < dfc> the slice syntax is at least consistent 03:57 < dfc> if x, err := io.Something() { } is a far bigger gotcha 04:19 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit [Ping timeout: 246 seconds] 04:23 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 246 seconds] 04:27 -!- keithgcascio [~keithcasc@nat/google/x-sysnsudckfmeoevm] has quit [Quit: Leaving] 04:28 -!- zozoR [~Morten@5634631b.rev.stofanet.dk] has joined #go-nuts 04:29 -!- fabled [~fabled@83.145.235.194] has quit [Quit: Ex-Chat] 04:30 -!- itrekkie [~itrekkie@ip72-200-105-157.tc.ph.cox.net] has quit [Quit: itrekkie] 04:32 -!- fabled [~fabled@83.145.235.194] has joined #go-nuts 04:47 -!- ExtraSpice [XtraSpice@88.118.35.153] has joined #go-nuts 04:47 -!- dfr|mac [~dfr|work@ool-182e3fca.dyn.optonline.net] has joined #go-nuts 04:52 -!- Wiz126 [Wiz@h187.120.232.68.ip.windstream.net] has quit [Ping timeout: 246 seconds] 04:56 -!- Wiz126 [Wiz@h187.120.232.68.ip.windstream.net] has joined #go-nuts 04:57 -!- benjack [~benjack@bb220-255-241-76.singnet.com.sg] has quit [Quit: Leaving.] 05:00 -!- cafesofie [~cafesofie@ool-4a5a6ee5.dyn.optonline.net] has quit [Remote host closed the connection] 05:08 -!- rurban [~demo@178-191-212-119.adsl.highway.telekom.at] has quit [Ping timeout: 260 seconds] 05:10 -!- firwen [~firwen@gex01-1-78-234-55-225.fbx.proxad.net] has joined #go-nuts 05:14 -!- edsrzf [~chickench@122-61-221-144.jetstream.xtra.co.nz] has joined #go-nuts 05:25 -!- zozoR [~Morten@5634631b.rev.stofanet.dk] has quit [Remote host closed the connection] 05:31 -!- krolaw [~krolaw@203.100.208.229] has joined #go-nuts 05:33 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts 05:36 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has quit [Ping timeout: 260 seconds] 05:48 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has quit [Quit: Leaving.] 05:50 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts 05:52 -!- dfr|mac [~dfr|work@ool-182e3fca.dyn.optonline.net] has quit [Remote host closed the connection] 05:57 -!- kaichenxyz [~kaichenxy@115.193.159.25] has joined #go-nuts 05:58 -!- kaichenxyz [~kaichenxy@115.193.159.25] has quit [Remote host closed the connection] 05:58 -!- firwen [~firwen@gex01-1-78-234-55-225.fbx.proxad.net] has quit [Remote host closed the connection] 05:58 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has joined #go-nuts 05:58 -!- wchicken [~chicken@c-24-7-112-207.hsd1.ca.comcast.net] has joined #go-nuts 06:04 -!- krutcha1 [~krutcha@S010600045a27676a.vs.shawcable.net] has quit [Quit: Leaving] 06:04 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Ping timeout: 246 seconds] 06:10 -!- skejoe [~skejoe@188.114.142.217] has joined #go-nuts 06:10 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts 06:19 -!- aho [~nya@fuld-590c6e90.pool.mediaWays.net] has joined #go-nuts 06:23 -!- boscop [~boscop@g226244114.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 06:26 -!- boscop [~boscop@g227133069.adsl.alicedsl.de] has joined #go-nuts 06:26 -!- ios_ [~ios@180.191.128.144] has joined #go-nuts 06:29 -!- ios_ [~ios@180.191.128.144] has left #go-nuts [] 06:31 < taruti> Someone should write draw(2) bindings... 06:32 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping timeout: 252 seconds] 06:33 < kevlar> Thanks for volunteering! 06:33 -!- ako [~nya@fuld-590c7133.pool.mediaWays.net] has joined #go-nuts 06:36 -!- aho [~nya@fuld-590c6e90.pool.mediaWays.net] has quit [Ping timeout: 246 seconds] 06:37 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts 06:40 -!- firwen [~firwen@adevlaptop.cern.ch] has joined #go-nuts 06:41 <@adg> Rennex: it's a bad idea to provide multiple ways of specifying ranges 06:42 <@adg> also, [x,y) is the One True Way :) 06:42 < Rennex> adg: i haven't heard anyone complain about it in ruby :) 06:43 <@adg> that's because their code is so full of runtime errors they don't notice the off-by-one errors ;) 06:43 <@adg> (i joke) 06:43 < Rennex> [start..end], [start...end_noninclusive], [start, length] if you didn't know 06:43 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Quit: Computer has gone to sleep.] 06:46 <@adg> that just seems insane to me 06:46 < KirkMcDonald> Ugh. 06:47 < nsf> :D 06:47 <@adg> so instead of off-by-one errors, you have "forgot the . errors" 06:47 < KirkMcDonald> How on earth can you keep .. and ... straight? 06:47 < KirkMcDonald> By rote, I suppose. 06:47 < nsf> [start..end] [start:end_noninclusive] [start, length] 06:47 < nsf> forgot about ':'? 06:48 <@adg> at least ruby's [s:e] is consistent with go 06:48 <@adg> so there's no confusion there 06:48 < Rennex> well i'm not a big fan of the ... 06:48 <@adg> how about [start......] where the number of dots is the number of elements 06:48 < Rennex> nsf: there's a different use for : these days 06:48 < Archwyrm> They should use single utf8 characters for elipsis. :) 06:48 < nsf> like? 06:49 < KirkMcDonald> a[s…e] 06:49 < Archwyrm> :) 06:49 < nsf> yeah, we have unicode, remember? :) 06:49 < Rennex> nsf: well that would be the same as [{:start => end_noninclusive}] 06:49 < nsf> omg 06:49 < nsf> am I on a Go channel? 06:49 < nsf> :) 06:50 < Rennex> you asked :P 06:50 < nsf> it looks like ruby to me 06:50 < nsf> ah 06:50 < nsf> indeed 06:50 < nsf> we were talking about ruby 06:51 < Rennex> yep 06:51 < Namegduf> Wow. 06:51 < Namegduf> So... Go has one way to slice a thing. 06:51 < nsf> well, if this syntax (I mean different slicing) has to be applied to Go, I think this is more reasonable: 06:51 < Namegduf> It has... five? 06:51 < nsf> [start..end] [start:end_noninclusive] [start, length] 06:51 < Rennex> Namegduf: no, 3 06:52 < Namegduf> What about the {} form? 06:52 <@adg> can you override the [x..y] form to mean something else? 06:52 <@adg> like, it could launch a web server that serves handlers from an array 06:53 <@adg> ;) 06:53 < Rennex> Namegduf: well it was just a map and made no real sense (it was what [start:end] would mean) 06:53 < Rennex> key:value thing 06:53 < Namegduf> Ah. 06:53 < Rennex> adg: you can! 06:54 < Namegduf> Well, Go already has syntax for specifying the end inclusively. 06:54 < Namegduf> You add "+1" to it. 06:54 < Namegduf> And length. 06:54 <@adg> Rennex: i thought so. god 06:54 < Namegduf> You use "start+length" as the end. 06:54 -!- skejoe_ [~skejoe@188.114.142.217] has joined #go-nuts 06:54 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 06:55 < Namegduf> This is consistent with arithmetic operations elsewhere and requires no additional special rules for slicing, just the one form. 06:55 <@adg> ruby is like a horror story for programmers, haha 06:55 <@adg> not that i think it's a bad language, it just lets you do such crazy things 06:55 < Namegduf> Simple. 06:55 <@adg> Namegduf: well said 06:55 -!- mikespook [~mikespook@219.137.253.123] has quit [Ping timeout: 276 seconds] 06:55 < KirkMcDonald> Like reopening the string type to (say) redefine string comparisons to be case-insensitive. 06:55 -!- mikespook [~mikespook@219.137.253.123] has joined #go-nuts 06:56 < nsf> ruby is not meant for big programs 06:56 < Namegduf> Ruby might be shorter in character count, but while being shorter helps readability, increased complexity hurts readability 06:56 < nsf> but 95% ruby programmers in the world don't understand that 06:56 < Namegduf> (See Perl for the stereotypical example) 06:56 < KirkMcDonald> On the other hand, I am something of a fan of Python. 06:56 < nsf> matz created ruby for shell-like tasks 06:56 <@adg> one of these days i should learn ruby 06:56 < Namegduf> This is a case where the added complexity doesn't even approach being worth the decreased character count in special cases. 06:56 < Rennex> Namegduf: ruby's syntax is entirely consistent with everything else too. (a..b) and (a...b) are actually Range objects. 06:57 < firwen> Can we speak about Ruby perfs ? ( troll inside :p ) 06:57 < Namegduf> Rennex: It would not be in Go, because Go has no such thing as Range objects. 06:57 -!- skejoe [~skejoe@188.114.142.217] has quit [Ping timeout: 248 seconds] 06:57 < Rennex> if Go had a range type, i'm sure there would be a number of sensible use cases for it 06:57 -!- piranha [~piranha@D57D1AB3.static.ziggozakelijk.nl] has joined #go-nuts 06:57 < Rennex> now you can't use a:b for any other purpose than array slicing, can you? 06:58 < Namegduf> a:b isn't a thing. 06:58 < Namegduf> It's two things with a colon between them. 06:58 < Namegduf> Part of slice syntax. 06:58 < Rennex> it's a syntax 06:58 < nsf> Rob Pike sees nightmares like that.. Go with ruby syntax 06:58 < Namegduf> You want to pass around "a range" you can pass around two numbers. 06:58 < Rennex> you can use + for a bunch of things, what about : ? 06:58 < Archwyrm> nsf: lol! 06:59 * TheMue detects "I wonna feature of lang A in lang B syndrome." 06:59 < Namegduf> Syntax being overloaded is a bad thing, not a good thing. 06:59 < Namegduf> There are no other types in Go with slicing. 06:59 < Namegduf> : is used for slicing. 06:59 < TheMue> Often enough seen this useless discussion, eveerytime when a new lang raises or an old one gets into focus. 06:59 < Namegduf> It is consistently used with everything sliceable. 06:59 < nsf> btw, why Go has different syntax for type casts and for type assertions, can it be a single entity? 07:00 < KirkMcDonald> I like how Python handles slicing. 07:00 < Namegduf> Type casts are typesafe in Go 07:00 < KirkMcDonald> Though it is not applicable to Go. 07:00 < Namegduf> Type assertions are not 07:00 < Rennex> TheMue: and i detect "lang B has a feature that favouritelang doesn't have, therefore it's bloat" 07:00 < nsf> ah, yes, type assertion may fail 07:00 < Namegduf> Yeah. 07:00 < TheMue> Rennex: hehe 07:00 < nsf> but compiler nows that ahead of time anyway 07:00 < KirkMcDonald> In Python, a[x:y] ultimately becomes something like: a.__getitem__(slice(x, y)) 07:00 < Namegduf> Rennex: Your detection methods are wrong. 07:00 < Rennex> TheMue: i'm not even suggesting features from ruby be added to Go, i'm just saying ruby isn't stupid for having it :) 07:01 < Namegduf> I summarised without reference to Ruby why it was a bad idea. 07:01 < nsf> x.(int) it will detect that this is a typesafe type cast 07:01 < Namegduf> It adds more complexity than the shortness is worth. 07:01 < Namegduf> Cost higher than benefits. 07:01 < Namegduf> Simple as that. 07:01 < KirkMcDonald> This is inapplicable to Go for two reasons: First, Go does not have operator overloading. And second, Go is statically typed. 07:01 < Rennex> Namegduf: you know + is overloaded, right? assembly has different instructions for integer addition and floating point addition 07:02 < KirkMcDonald> But anyway, these mean the same thing in Python: a[x:y] a[slice(x, y)] 07:02 < KirkMcDonald> But actually needing to manipulate slice objects is quite rare. 07:02 < Rennex> KirkMcDonald: but python is just stupid ;) 07:02 < Namegduf> Rennex: Are you trying to make a point? 07:02 < TheMue> Rennex: I'm now doing software development since 27 yrs. And every time lang comparison doesn't lead to anything. So I prefer discussions on how to solve tasks in a given lang. 07:03 < Rennex> Namegduf: yes, that your summary "syntax overloading is a bad thing" is wrong 07:03 < Rennex> Namegduf: but moderation in everything, c++ is an example of doing it wrong :) 07:04 < Namegduf> Ruby is a bigger example. 07:04 < Namegduf> "Let's throw in every feature in the universe, fuck performance, fuck any concept of safety!" 07:04 < Namegduf> "Let's not even try to consider costs vs benefits for anything we add!" 07:05 < firwen> overloading in C++ is not a wrong thing, the C++ Users is the main problem 07:05 < Namegduf> Admittably, a lot of dynamic languages are like this. 07:05 < Namegduf> Overloading is a problem because it results in the meaning of code not being knowable without knowing everything about everything the code uses 07:05 < Namegduf> Which is a boost to complexity 07:05 < str1ngs> := can have the same effect though 07:06 < Namegduf> No, it can't. 07:06 < Namegduf> I'm not sure how it could. 07:06 < Namegduf> :='s semantics are defined only by the local scope. 07:06 < nsf> firwen: it is a wrong thing 07:06 < nsf> it's very easy to blame users for everything 07:06 -!- ako [~nya@fuld-590c7133.pool.mediaWays.net] has joined #go-nuts 07:06 < nsf> users are stupid, etc. 07:06 < KirkMcDonald> Or its lack implies that it isn't declared in the local scope. 07:06 < nsf> but software is being created for users 07:06 < firwen> overloading is less a problem is a static typed langage than in a dynamic one like ruby 07:06 < nsf> and not users for software 07:07 -!- aho [~nya@fuld-590c7133.pool.mediaWays.net] has quit [Disconnected by services] 07:07 < Namegduf> firwen: I don't think the static vs dynamic typing is relevant to the problems of overloading 07:07 < nsf> overloading is bad in static languages, in dynamic languages there is always overloading by definition 07:07 < str1ngs> nsf: we just need to make software that makes users :P 07:07 -!- boscop [~boscop@g227133069.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 07:07 < nsf> str1ngs: :D 07:07 < Namegduf> Overloading of syntax, that is, using syntax to mean multiple different things, is bad because it makes things harder to read. It's not a major thing but it's not consider "good" for symbols to be reused for different meanings. 07:08 < Namegduf> Technically, yes, + is overloaded, but it's got a very limited set of meanings and people can keep them straight reasonably because they are quite connected. 07:08 < nsf> yeah I agree 07:08 < nsf> I like to mention that it changes semantics of the language 07:08 < nsf> things that had one meaning now means a completely different thing 07:08 < nsf> and depends on context 07:08 < Rennex> Namegduf: it's not about having every feature, it's about making syntax handy and at the same time logical, while not caring about the performance so much 07:09 < nsf> thing* 07:09 < Rennex> ruby that is 07:09 < str1ngs> but that's why I stopped using ruby. slooow 07:09 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 07:09 < KirkMcDonald> I sort of like how D introduced ~ as an array concatenation operator, so as to not overload + with that meaning. 07:09 -!- boscop [~boscop@g227133069.adsl.alicedsl.de] has joined #go-nuts 07:09 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 07:10 < Namegduf> "handy" and "logical" are too vague to evaluate whether things provide them, or whether they provide actually good goals. 07:10 < KirkMcDonald> On the theory that + could then be used for array operations like a + 2 adding 2 to each element of the array. 07:10 < Namegduf> Like being efficient to program with for various kinds of application, good for maintainability, etc 07:10 < firwen> nsf: the main philosophy of C++ is to give a maximum ofpower to the user, If you want to do dirty thing, you can, but in some situation, it can be usefull... 07:10 < KirkMcDonald> But D has sort of taken a kitchen sink approach. 07:10 < Namegduf> The main philosophy of C++ doesn't exist 07:11 < Namegduf> It's designed by committee 07:11 < nsf> firwen: I know all about C++, you don't have to tell me that :) 07:11 < firwen> Go has just a different approach 07:11 < firwen> I don't know you sorry :) 07:11 < Namegduf> The problem with C++ isn't that it lets people do "dirty" things 07:12 < Namegduf> It's that the language is so hugely complex no one person could possibly know it all. 07:12 < nsf> don't force me to join this talk 07:12 < Namegduf> And when maintaining *other people's code*, you need to understand all the stuff you can/will come across, not just your personal subset 07:12 < nsf> I have a lot of stuff to say about C++ :D 07:12 < nsf> always 07:13 < KirkMcDonald> One of my greatest pleasures in life is not writing C++ for a living. 07:13 < nsf> about ruby: I think ruby works for japanese better, because of the different mentality, asian languages usually use more symbols that other languages, therefore keeping all the syntax in mind is easier for them (that's my guess) 07:14 < nsf> as matz says, he created a language that's awesome for himself in the first place 07:14 < nsf> and then for others 07:14 < Rennex> Namegduf: i think big things that provides maintainability include readability (which also means brevity is good, up to a point) and not repeating yourself 07:15 < Namegduf> Simplicity is a big part of readability, as well as brevity. 07:15 < Namegduf> Readability derives a lot from the amount of brainpower it takes to understand a line. 07:16 < vsmatck> This is like listening to people argue about which music is better. 07:16 < nsf> my summary regarding C++: it's tasteless language, like D 07:16 < nsf> vsmatck: :D 07:16 < Rennex> nsf: there really isn't so much in ruby's syntax, i only know the latin alphabet (and some greek for math) and i have no problems :) 07:16 < Namegduf> Not repeating yourself is good in general but can be worshipped too much 07:17 < Namegduf> It's a very good idea but it became liked by the kind of people who take a single idea and make take it to the extreme as far as possible. 07:17 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts 07:17 < nsf> Rennex: well, I don't use ruby much (for shell-like tasks occasionally) and I have problems relearning syntax every time 07:18 < Namegduf> In general adding a large amount of complexity to avoid repeating yourself is worse for maintainability than just repeating yourself once or twice 07:18 < nsf> I can't say the same for python for example 07:18 < Namegduf> But avoiding duplication is good in general, yeah. 07:18 < nsf> yeah, that's the tricky part 07:18 < nsf> there is no simple answer 07:18 < Namegduf> It's all costs vs benefits. 07:18 < nsf> like DRY 07:19 < Rennex> Namegduf: i think simplicity is another thing that some people take too far. Ook. Ook? Ook! 07:19 < nsf> or copy&paste everything 07:19 < nsf> sometimes it makes sense to C&P 07:19 < nsf> sometimes DRY is a very good approach 07:19 < Namegduf> Rennex: Well, you have basically Go and nothing else aiming for its kind of simplicity. 07:19 < Namegduf> There's Scheme-style simplicity, but it's not really the same thing. 07:19 < Namegduf> Go is about being simple to use as well as in specification, which is different to just having a simple spec. 07:20 < Namegduf> To use/read/etc. 07:20 < nsf> and it's realatively easy to parse 07:20 < nsf> relatively* 07:20 < Namegduf> But, yes, you can take it too far, like most things. 07:20 < Namegduf> I just think most things completely disregard it as a goal. 07:20 < Namegduf> Which kinda rules that out. 07:21 < Namegduf> The generics proposal is an example of attempts to try to find a balance. 07:21 < Namegduf> Something with a cost to complexity, but not so much a cost that it exceeds the benefits. 07:21 < Namegduf> Not got one they like yet, I think. 07:21 < Namegduf> Do each good thing as far as the benefits exceed the costs, heh. 07:22 < Rennex> imo generics are so useful that leaving them out leads to cursing 07:23 < Namegduf> Direct equivalents exist 07:23 < Namegduf> You just need to violate DRY for the most direct one 07:24 * Namegduf has his build system duplicate the basic template, same as the main distribution Vector package works. 07:24 < uriel> oh, more people that have not used Go for anything significant complaining about how they can't live without generics 07:24 < uriel> *rolls eyes* 07:24 < Rennex> anything can be done by hand... but cursing leads to anger, anger leads to hate... 07:24 < Namegduf> Hate leads to destroying everything you loved by making crappy prequels. 07:26 < Namegduf> A fairly small amount of your code should be sufficiently abstract in function that you need to have multiple types of it in play, anyway. 07:26 < Namegduf> Thus why in Real Code generics are not a big deal. 07:27 < nsf> Namegduf: I have other opinions as well 07:27 < KirkMcDonald> I have done awful, terrible things with templates. 07:27 < nsf> iant said that generics were useful for writing gold 07:28 < nsf> friend of mine (author of pugixml: http://code.google.com/p/pugixml/ ) 07:28 < nsf> said the same thing 07:28 < nsf> and I'm sure there are more people with that opinion 07:29 < Rennex> writing gold? i don't get it 07:29 < taruti> type safe containers are one area that would benefit from generics. 07:29 < nsf> Rennex: gold is a gnu ld compatible linker 07:30 < nsf> that is faster in some cases 07:30 < Rennex> ah :P 07:30 < Namegduf> Type safe containers right now require build system instantiation 07:30 < nsf> or in most 07:30 < Namegduf> Or just manual instantiation 07:30 < Namegduf> Generics are useful, yeah. 07:30 <@adg> nsf: MUCH faster 07:30 < TheMue> []string is a typesafe container map[string]*Foo too 07:30 < nsf> ok, 5x faster 07:30 < Namegduf> Just not DEAR GOD MUST HAVE OR I CAN'T WRITE A PROGRAM WHICH DOES ANYTHING. 07:30 < nsf> :) 07:32 < nsf> http://pastie.org/1785916 07:32 < nsf> C++0x is supposed to have better template mechanisms 07:32 < nsf> I've tried it 07:33 < nsf> I felt like it will kill my brain if I keep doing that 07:33 < nsf> :D 07:34 < nsf> if you can understand what this code does exactly and how 07:34 < nsf> you're cool 07:34 < nsf> :D 07:34 < nsf> I can't 07:34 < nsf> even though I wrote it 07:34 < Rennex> i hope c++0x is backwards-compatible with c++ 07:34 < KirkMcDonald> I rathed liked D's templates. 07:34 < Rennex> that would be such an epic failure ;) 07:35 < KirkMcDonald> rather* 07:35 < TheMue> nsf: Uuuh, not my lang, definitely not. 07:36 < KirkMcDonald> Huh, to C++ actually did get variadic templates. 07:36 < KirkMcDonald> s/to/so/ 07:37 < nsf> KirkMcDonald: with exception that you can't do anything useful with them 07:37 < nsf> like slicing 07:37 <@adg> Rennex: breaking backward compatibility is the only way c++0x could be any good imo 07:37 < KirkMcDonald> Fun fun fun. 07:37 < nsf> I've seen in D it's pretty easy 07:37 < KirkMcDonald> Yeah, tuples in D are alright. 07:37 < nsf> the code above does slicing 07:37 < nsf> if you can understand it of course 07:37 < nsf> :D 07:37 < KirkMcDonald> I assume it does the usual car/cons stuff. 07:38 < nsf> I don't remember 07:38 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|] 07:38 < nsf> but some weird stuff for sure 07:38 < KirkMcDonald> Before D had tuples, you had to do the same trickery. 07:39 < nsf> hehe 07:40 -!- dave [~dfc@eth59-167-133-99.static.internode.on.net] has joined #go-nuts 07:40 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 07:40 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 07:41 < KirkMcDonald> Here's an ancient bit of D template magic I wrote: http://dsource.org/projects/pyd/browser/trunk/infrastructure/pyd/func_wrap.d#L95 07:41 < KirkMcDonald> That calls a D function using a Python tuple as the arguments. 07:42 < nsf> still looks better than C++0x 07:43 < KirkMcDonald> I agree. 07:43 < KirkMcDonald> Can you guess what line 117 does? :-) 07:43 < nsf> uhm, I don't think so, I don't know D 07:44 -!- dfc [~dfc@eth59-167-133-99.static.internode.on.net] has quit [Ping timeout: 246 seconds] 07:44 < KirkMcDonald> I'll give you a hint, it is a variable declaration of sorts. 07:44 -!- petrux [~petrux@host16-224-static.53-82-b.business.telecomitalia.it] has joined #go-nuts 07:44 < KirkMcDonald> T is a thing called a type tuple. It represents the types of the arguments to the function in question. 07:44 -!- Guest98839 [~dfc@eth59-167-133-99.static.internode.on.net] has quit [Ping timeout: 252 seconds] 07:45 < nsf> yeah, whatever, my head is busy with other thing 07:45 < KirkMcDonald> Okay. :-) 07:45 < nsf> I'm trying to apply Go's type assertion syntax 07:45 < nsf> as usual type cast syntax 07:45 < nsf> and lexer fails on that: 07:45 < nsf> 5.(int) 07:45 < KirkMcDonald> Because 5. is a float. 07:45 < nsf> because 5. is a valid floating point number literal 07:45 < nsf> yeah 07:45 < nsf> it makes it a function call 07:45 < nsf> which doesn't make sense 07:45 < KirkMcDonald> It is calling the float. 07:46 < nsf> I guess I'll have to hack the lexer for that 07:46 < nsf> because float as a callee doesn't make sense anyway 07:46 < nsf> but I don't like hacks :( 07:46 < KirkMcDonald> I don't think you can get out of that without ugliness. 07:47 < KirkMcDonald> Just require (5).(int) ? 07:47 < KirkMcDonald> Or 5 .(int) 07:47 < nsf> no 07:47 < nsf> well, it is reasonable, because code like that is rare 07:47 < nsf> on the other hand 07:47 < nsf> I need that for testing 07:48 < KirkMcDonald> I mean, on the one hand you have . as a binary operator, and on the other, you have tokens that can end with . 07:48 < KirkMcDonald> Something has to give. 07:48 < nsf> I can change the syntax 07:48 < nsf> .( as a single token 07:48 < KirkMcDonald> Hmmm. 07:48 < nsf> and then hack the lexer 07:49 < KirkMcDonald> Then you special case it to not match 5. when .( could be matched following it? 07:49 < KirkMcDonald> D has almost precisely this hack hiding in it, you know. 07:49 < KirkMcDonald> D's slice syntax looks like: a[x..y] 07:49 < nsf> uhm, I think I need a special case in a lexer 07:50 < KirkMcDonald> The lexer is special cased to prefer .. over matching the float 07:50 < nsf> 5. as a number literal 07:50 < nsf> and 5.( as a separate token in lexer 07:50 < nsf> which will emit two tokens to parser 07:50 < KirkMcDonald> Hmm. 07:50 < nsf> lexer will match the longest one anyway 07:50 < KirkMcDonald> I see. 07:50 < KirkMcDonald> That's still something of a hack. :-) 07:51 < nsf> but that way I can even left the grammar as it is 07:51 < nsf> 5.( will emit three tokens in that case :) 07:51 < nsf> 5 . and ( 07:51 < nsf> :) 07:51 < nsf> should work just fine 07:52 < nsf> http://pastie.org/1785952 07:53 < nsf> with syntax highlighting it looks better though 07:53 < KirkMcDonald> So this implies the syntax x.(T) has a different meaning depending on whether T is an interface type. 07:53 < KirkMcDonald> So use a pastebin with syntax highlighting. 07:53 < nsf> I don't have interfaces at the moment, but yeah, why not? :) 07:53 < KirkMcDonald> Though I guess the existing Go highlighters will have precisely the problem we just discussed. 07:54 < nsf> no, not really 07:54 < nsf> http://pastie.org/1785958 07:54 < nsf> it's a semantic problem 07:54 < nsf> not a syntax problem 07:54 < nsf> syntax highlighters don't care about semantics 07:55 < nsf> well, most of them don't even recognize syntax 07:55 < nsf> as syntax 07:55 < nsf> they usually do lexing 07:55 < KirkMcDonald> Well, the Go highlighter that I wrote has the problem. :-) http://paste.pound-python.org/show/5144/ 07:56 < nsf> I see 07:56 < nsf> still it highlights something 07:56 < KirkMcDonald> Indeed. 07:56 < KirkMcDonald> But it matches 5. as a float, then ( as the next token, and so on. 07:56 < nsf> yeah 07:56 < nsf> as it should 07:56 < nsf> it's invalid Go 07:57 < nsf> I had problems with type cast operator 07:57 < nsf> I didn't want to follow the Go's path 07:57 < nsf> alternatives were: <type>uexpr, [type]uexpr 07:58 < nsf> both are ugly 07:58 < KirkMcDonald> type!expr 07:58 < nsf> KirkMcDonald: it has other problems 07:58 < nsf> I tried that as well :) 07:58 < KirkMcDonald> D uses it for template instantiation. 07:58 < nsf> yeah, I'm aware of that 07:58 < nsf> but in it's: ident!type 07:59 < KirkMcDonald> C!T is approximately equivalent to C<T>... okay. 07:59 < nsf> postfix form 07:59 < nsf> and ident!(type) 07:59 < nsf> for disambiguation 07:59 < KirkMcDonald> Or when the template has multiple parameters. 07:59 < nsf> yeah 07:59 < nsf> anyways, about <> and [] 07:59 < nsf> a < <uint>b // ugly 07:59 < KirkMcDonald> <> has the usual litany of problems. 07:59 < KirkMcDonald> Yes, that. 08:00 < nsf> [uint]myint // kind of blends with everything 08:00 < nsf> [] looks a lot like l and I 08:00 < nsf> so after hours of discussion on a secret ;) irc channel 08:00 < nsf> pexpr.(type) 08:00 < nsf> was choosen ) 08:00 -!- wrtp [~rog@92.17.67.64] has joined #go-nuts 08:01 < KirkMcDonald> Clearly the solution is reinterpret_cast<uint>(b) 08:01 < nsf> chosen* 08:01 < nsf> hehe 08:01 < nsf> D's casts are: cast(uint)b 08:01 < KirkMcDonald> Yes. 08:01 -!- Project_2501 [~Marvin@82.84.93.109] has joined #go-nuts 08:01 < nsf> anyways, it turns out that pexpr.(type) form is quite nice 08:02 < nsf> dndStart.X = int(e.MouseButton().X) 08:02 < nsf> that's real code from gomandel demo 08:02 < nsf> dndStart.X = e.MouseButton().X.(int) 08:02 < nsf> looks better :) 08:02 < nsf> and easier to edit 08:02 < nsf> some cases look ugly though, but whatever 08:03 < nsf> (&data[0]).(unsafe.Pointer) 08:03 < nsf> still reasonable though 08:03 < KirkMcDonald> I still say Go should have gone with * and & as postfix operators. 08:03 < nsf> unfortunatelly it gives a lot of problems I guess 08:03 < KirkMcDonald> Perhaps. 08:04 < nsf> like conflicts with binary operators 08:04 < nsf> data & & x 08:04 < nsf> data && x 08:04 < nsf> data& & x 08:04 < nsf> nah 08:04 < nsf> bad idea :) 08:04 < KirkMcDonald> And this isn't ambiguous when it is a prefix operator? 08:04 < TheSeeker> data && &x ? 08:04 < nsf> no 08:04 < nsf> prefix isn't ambigous 08:05 < nsf> only for lexer a little bit 08:05 < nsf> data &&x 08:05 < nsf> but it's invalid anyway 08:05 < nsf> data & &x doesn't make sense 08:05 < nsf> data **x works fine 08:05 < KirkMcDonald> nsf: I'm not sure I see the difference between the prefix and suffix cases, here. 08:06 < nsf> LALR(1) parser sees the difference :) 08:06 < KirkMcDonald> Ah. 08:06 < KirkMcDonald> Of course. 08:06 < KirkMcDonald> You don't know where to go until you get there. 08:06 < nsf> yeah 08:07 < nsf> that's one of my ideas for crawl as well 08:07 < nsf> I wanted clean LALR(1) grammar 08:07 < nsf> unlike Go 08:07 < nsf> Go has few hacks here and there 08:07 < KirkMcDonald> I believe D aimed to be LL(1). 08:07 < nsf> interesting 08:07 < KirkMcDonald> I don't think it succeeded. 08:08 < nsf> hehe 08:08 < nsf> having a clean grammar like that makes parsing speed predictable 08:08 -!- virtualsue [~chatzilla@nat/cisco/x-mamaqhwbmsxebvxx] has joined #go-nuts 08:08 < KirkMcDonald> Though D is relatively easy to parse. 08:08 < nsf> well Go too 08:08 < nsf> but it has hacks, it can be parsed with yacc still though 08:08 < KirkMcDonald> Certainly any language that isn't C++ is going to try to avoid C++'s pitfalls. 08:09 < KirkMcDonald> The parser in the D compiler is a hand-written recursive descent parser. 08:09 < nsf> yeah, I saw the code 08:10 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 08:10 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 08:10 < nsf> ok, I'm back to my lexer 08:10 < nsf> need to finish the hack 08:11 < KirkMcDonald> I seem to recall there being a joke about D being LL(2), but I can't find it now. 08:12 < nsf> hehe 08:15 < firwen> someone has a link to a bench of gccgo compared to 6g/8g ? 08:16 < firwen> juste to have a short idea of the thing 08:18 -!- Fish-- [~Fish@coss6.exosec.net] has joined #go-nuts 08:21 -!- Fish- [~Fish@exo3753.pck.nerim.net] has quit [Ping timeout: 276 seconds] 08:23 < nsf> nice, lexer hack works 08:23 < nsf> two lines of code for ragel 08:24 < nsf> int_type_cast = digit+ '.' '('; 08:24 < nsf> int_type_cast { tok_int(ts, te-2); tok_op(TOK_DOT); tok_op(TOK_LPAREN); fbreak; }; 08:24 < nsf> of course it's not entirely correct 08:24 < nsf> it doesn't skip whitespaces 08:24 < nsf> will fix that later :) 08:30 -!- randfur [~androirc@58.145.148.26] has joined #go-nuts 08:38 -!- wrtp [~rog@92.17.67.64] has quit [Quit: wrtp] 08:40 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 08:40 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 08:41 -!- comex [comex@c-67-188-10-190.hsd1.ca.comcast.net] has quit [Ping timeout: 248 seconds] 08:42 -!- comex [comex@c-67-188-10-190.hsd1.ca.comcast.net] has joined #go-nuts 08:47 -!- krolaw [~krolaw@203.100.208.229] has quit [Quit: krolaw] 08:48 -!- randfur [~androirc@58.145.148.26] has quit [Quit: AndroIRC] 08:55 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has joined #go-nuts 08:57 -!- krolaw [~krolaw@203.100.208.229] has joined #go-nuts 09:11 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 09:11 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 09:12 -!- kaichenxyz_ [~kaichenxy@115.193.159.25] has joined #go-nuts 09:15 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has quit [Ping timeout: 246 seconds] 09:20 -!- kaichenxyz [~kaichenxy@115.193.159.25] has quit [Remote host closed the connection] 09:20 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has joined #go-nuts 09:23 < Namegduf> You know, it should be possible to verify that/which panics in a package can possibly escape. 09:23 < Namegduf> It just requires analysing the package, not external code. 09:24 < Namegduf> It'd let you check for any panics not indicating a programmer error that could leak. 09:24 < Namegduf> (Which would be an error, but in the package, and detectable) 09:26 -!- joelkronander [~joelkrona@c-bf2fe253.617-1-64736c22.cust.bredbandsbolaget.se] has quit [Quit: joelkronander] 09:34 -!- mikespook [~mikespook@219.137.253.123] has quit [Quit: Leaving.] 09:36 -!- saschpe [~quassel@opensuse/member/saschpe] has joined #go-nuts 09:38 -!- tvw [~tv@212.79.9.150] has joined #go-nuts 09:38 -!- dfc [~dfc@124-169-2-171.dyn.iinet.net.au] has joined #go-nuts 09:38 -!- shvntr [~shvntr@113.84.146.107] has joined #go-nuts 09:40 < TheMue> Namegduf: Panics aren't invented as a control mechanism, they are just panics and can also happen deeply nested. 09:41 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 09:41 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 09:41 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has quit [Quit: kaichenxyz] 09:45 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 09:46 -!- wrtp [~rog@92.17.67.64] has joined #go-nuts 09:46 -!- edsrzf [~chickench@122-61-221-144.jetstream.xtra.co.nz] has quit [Remote host closed the connection] 09:47 -!- elbing [~elbing@32.Red-2-136-86.dynamicIP.rima-tde.net] has joined #go-nuts 09:49 -!- crodjer [~rohanjain@203.110.240.205] has quit [Ping timeout: 276 seconds] 09:54 -!- skejoe_ [~skejoe@188.114.142.217] has quit [Quit: Lost terminal] 09:55 -!- elbing [~elbing@32.Red-2-136-86.dynamicIP.rima-tde.net] has left #go-nuts [] 10:00 -!- pdamoc [~peter@medical-service.bacau.rdsnet.ro] has joined #go-nuts 10:01 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 246 seconds] 10:01 < pdamoc> hello, one quick question. I've compiled and linked the Hello World from the tutorial on Windows XP and I've noticed that the .exe that resulted is around 1.643 MB... why is that? 10:02 < pdamoc> in a youtube tutorial I've seen it being around 88k 10:02 -!- sergeykish [~sergeykis@217.12.213.109] has left #go-nuts [] 10:03 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 10:04 < pdamoc> I've used 8g and 8l to create the HelloWorld.exe (I don't know if this is relevant or not but just to be explicit) 10:05 < krolaw> I think you'll find that the 8l result might be 88k. But as finished programs are statically linked, 1.6MB isn't that surprising for HelloWorld. It certainly is that size on MacOS X. 10:07 < krolaw> http://golang.org/doc/go_faq.html#Why_is_my_trivial_program_such_a_large_binary 10:09 < krolaw> Hope that helps. 10:10 < pdamoc> oh... so, if I'm reading this right, the compiled binary is completely independent from Windows. 10:11 < pdamoc> krolaw: it does help, thanks for your kindness (it's in the FAQ after all, I should have read that first) 10:11 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 10:11 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 10:11 * krolaw I don't believe so. There's still some os (just for windows) hooks, but all the go formatting code fmt is included. 10:12 * krolaw Plus the go runtime. 10:12 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Quit: peace in teh middle east] 10:12 -!- kaichenxyz [~kaichenxy@115.199.111.22] has joined #go-nuts 10:13 < krolaw> This means that, it starts off large, but unless you import other stuff, your exe will grow only a little in size as your program code lengthens. 10:14 < nsf> it's just static linking 10:14 < nsf> as simple as that 10:14 < nsf> gccgo can do dynamic linking 10:14 < nsf> libgo.so is around 5 megs 10:17 < krolaw> AKA, your code occupies a small portion of the exe. The rest is the necessary go libs to make the program run complete. 10:18 < pdamoc> so, the exe from the video tutorial was dynamically linked? 10:18 < pdamoc> http://www.youtube.com/watch?v=X1VHXwhlDmo&feature=player_detailpage#t=488s 10:18 < pdamoc> just to be explicit 10:18 < nsf> if it's a hello world 10:19 < nsf> it could use println 10:19 < nsf> instead of fmt.Println 10:19 < nsf> package main; func main() { println("Hello world"); } 10:19 < nsf> that one should be pretty small 10:19 < pdamoc> yes it does 10:20 < nsf> 190kb on linux 10:20 < nsf> x86 10:20 < pdamoc> I get it now, my version uses fmt and all the fmt is pulled into the exe.... 10:20 < nsf> yeah 10:20 < nsf> it contains all the unicode tables, etc. 10:22 < pdamoc> with println it's 232k :) 10:22 -!- saturnfive [~saturnfiv@210.74.155.131] has quit [Read error: Connection reset by peer] 10:24 < pdamoc> well... mystery solved, thank you all again. bye 10:25 -!- pdamoc [~peter@medical-service.bacau.rdsnet.ro] has quit [Quit: pdamoc] 10:27 -!- hopso [~hopso@a91-152-176-165.elisa-laajakaista.fi] has joined #go-nuts 10:28 -!- shvntr [~shvntr@113.84.146.107] has quit [Quit: leaving] 10:28 -!- joelkronander [~joelkrona@130.236.243.164] has joined #go-nuts 10:31 -!- boscop [~boscop@g227133069.adsl.alicedsl.de] has quit [Ping timeout: 240 seconds] 10:32 -!- tobier [~tobier@c-1e9de055.712-1-64736c11.cust.bredbandsbolaget.se] has joined #go-nuts 10:35 < nsf> adg: I have an improvement idea for golang.org, how about having somewhere on the page two lines, like: "latest release: <date>" and "latest weekly: <date>" 10:35 < nsf> I was using this one http://golang.org/doc/devel/release.html 10:35 < nsf> but it misses weekly releases :( 10:36 < TheMue> nsf: Yep, full ack 10:36 < nsf> of course I can look at mercurial log 10:37 < nsf> but having that thing on the web page would be nice 10:40 -!- kaichenxyz [~kaichenxy@115.199.111.22] has quit [Remote host closed the connection] 10:40 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has joined #go-nuts 10:41 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 10:41 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 10:42 -!- hopso [~hopso@a91-152-176-165.elisa-laajakaista.fi] has quit [Quit: hopso] 10:43 -!- hopso [~hopso@a91-152-176-165.elisa-laajakaista.fi] has joined #go-nuts 10:45 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 10:48 -!- katakuna [pie@kjal.demon.co.uk] has joined #go-nuts 10:58 -!- xash [~xash@d075035.adsl.hansenet.de] has joined #go-nuts 11:07 -!- jesusaurus1 [jesusaur@firefly.cat.pdx.edu] has joined #go-nuts 11:12 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 11:12 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 11:20 -!- xash [~xash@d075035.adsl.hansenet.de] has quit [Quit: Lost terminal] 11:21 -!- GeertJohan [~geertjoha@s51478c91.adsl.wanadoo.nl] has joined #go-nuts 11:21 < GeertJohan> Hello #go-nuts :) 11:23 < xyproto> GeertJohan: hello 11:23 < GeertJohan> is this channel somewhat active and interesting to follow ? 11:23 -!- xyproto [~alexander@77.40.159.131] has quit [Quit: WeeChat 0.3.4] 11:24 < hopso> GeertJohan: Not sure about active as I don't have anything to compare with but it's interesting to follow. 11:24 < firwen> it depends if you want to see god on it or not 11:24 < GeertJohan> I want to see go on it ;) 11:25 < GeertJohan> hehe :P but I'll just idle in here :) 11:25 < firwen> it would be interesting also :p 11:25 < GeertJohan> recently started learning Go 11:25 < GeertJohan> it's really awesome :D 11:26 < GeertJohan> did Java, AVR-C and Arduino before.. 11:31 -!- Evesong [~evesong@ruby.nanocore.co.uk] has joined #go-nuts 11:31 < hopso> I do all my programming in Go nowadays. 11:32 < hopso> That¨s going to change when we start using Java in school. 11:32 < hopso> Never liked to it because of all the "public static void"s 11:35 < Evesong> If anyone here is using Go in a production environment, what's the correct way of "installing" its necessary libs and binaries and packages somewhere after a clean build, without the $GOROOT source tree? 11:37 < TheMue> Evesong: Currently imho only by hand. Install virtual machines according to the targets, build the whole system on your own, zip the resulting binary and distribute it. 11:38 <@adg> Evesong: you don't need anything but the binaries to run 11:38 < TheMue> As long as 6g and co are used it's all statically linked. So no need for distribution of libs. 11:38 <@adg> Evesong: all go programs are statically linked 11:38 -!- wrtp [~rog@92.17.67.64] has quit [Quit: wrtp] 11:38 -!- artefon [~thiago@dhcp10.usuarios.dcc.ufmg.br] has joined #go-nuts 11:39 <@adg> Evesong: but if you're talking about deploying the compiler tools for others to use, it's all relevant 11:39 <@adg> (but you can delete $GOROOT/.hg I suppose) 11:39 < Evesong> Thanks, TheMue + adg 11:41 < TheMue> adg: Btw, regarding my Tideland Common Go Library in the dashboard, there's one dup (Tideland CGL w/ wrong link) and I would like to change the description. Afaik you do those changes? 11:42 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 11:42 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 11:42 -!- krolaw [~krolaw@203.100.208.229] has quit [Quit: krolaw] 11:43 < zimsim> I'm trying to figure out how channels and the select statement works. In my test I cant figure out why this program is blocking. http://pastie.org/1786506 11:45 < TheMue> adg: Hmm, had a disconnect, has the last question about my CGL been sent? 11:46 < zimsim> TheMue, yes there was something about changing description for your lib. 11:46 < Evesong> Yes, TheMue .... <TheMue> adg: Btw, regarding my .... 11:46 < TheMue> Ah, ok, thx 11:49 -!- wrtp [~rog@92.17.67.64] has joined #go-nuts 11:58 -!- saturnfive [~saturnfiv@219.145.57.177] has joined #go-nuts 11:58 -!- saturnfive [~saturnfiv@219.145.57.177] has left #go-nuts [] 12:01 < Evesong> The Go spec says that the package ImportPath "may be relative to a repository of installed packages." When the "repository" is just a directory, does that directory always have to be relative to $GOROOT (ie. $GOROOT/src/pkg), or can we define the packages to live elsewhere? 12:02 < exch> you can have them be anywhere you want 12:02 < exch> import "../../foo" 12:02 < exch> where foo is nowhere near the $GOROOT 12:03 < exch> You can also just use 'import "foo"' and then add additional search paths to the compiler/linker with the -I and -L flags 12:03 < exch> which, imho, is a cleaner solution 12:03 < Evesong> Ah, that's not what I meant though. Sure, you can explicitly import by filepath, but that makes your program non-portable. I meant specifying the default lookup path, not in the source code. 12:04 -!- sacho [~sacho@87-126-50-194.btc-net.bg] has quit [Read error: Connection reset by peer] 12:04 < Evesong> Ah cool 12:04 < exch> yea, as said, the -L and -I compiler/linker flags 12:04 < Evesong> Thanks exch, your 2nd line answered it 12:05 < Evesong> Cool beans, no more questions for today I think, hehe. :-) 12:05 < exch> :) 12:10 -!- xyproto [~alexander@77.40.159.131] has joined #go-nuts 12:11 -!- zerosanity [~josh@8.20.178.82] has joined #go-nuts 12:12 -!- jgonzalez [~jgonzalez@173-14-137-134-NewEngland.hfc.comcastbusiness.net] has joined #go-nuts 12:12 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 12:12 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 12:16 -!- GeertJohan [~geertjoha@s51478c91.adsl.wanadoo.nl] has quit [Quit: Leaving.] 12:16 -!- GeertJohan [~geertjoha@s51478c91.adsl.wanadoo.nl] has joined #go-nuts 12:21 -!- retybok [~retybok@gw.theralys.com] has joined #go-nuts 12:23 -!- kaichenxyz_ [~kaichenxy@115.199.111.22] has joined #go-nuts 12:26 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has quit [Ping timeout: 246 seconds] 12:29 -!- niemeyer [~niemeyer@189-10-155-52.pltce701.dsl.brasiltelecom.net.br] has joined #go-nuts 12:30 -!- stalled [~stalled@unaffiliated/stalled] has quit [Ping timeout: 252 seconds] 12:35 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Ping timeout: 276 seconds] 12:36 < plexdev> http://is.gd/qxNGlE by [Nigel Tao] in 2 subdirs of go/src/pkg/ -- image/ycbcr: new package. 12:36 < GeertJohan> go's libs are really being developped right now right? 12:37 < GeertJohan> like, they're not all finished yet, right? 12:37 < xyproto> GeertJohan: that is correct 12:37 < xyproto> (afaik) 12:37 < GeertJohan> Is the syntax even final ? 12:37 < GeertJohan> or can that be changed too ? 12:37 < xyproto> ref http://code.google.com/p/go/source/list 12:38 < xyproto> GeertJohan: no, the syntax can be changed too (and are changed occationally). A Go-compiler that is a month or two old is considered outdated. 12:38 < xyproto> Especially for reporting bugs. 12:38 < GeertJohan> cool :D 12:38 < retybok> Is the final goal to have something with "batteries included", like python? 12:39 < xyproto> GeertJohan: both cool, and slightly frustrating, for people writing library bindings, apps or books ;) 12:39 < TheMue_> (meta) Nothing will every be finished, everything can change always. (/meta) 12:39 < GeertJohan> when I followed the tutorials I didn't have the feeling that this language was so much under development 12:39 < TheMue_> xyproto: My book is printed (and sells) and my libs grow. And still no problem. 12:40 < GeertJohan> xyproto: agreed, offcourse its not a stable language to start a large development project on. 12:40 < xyproto> retybok: I don't know if it's part of the masterplan to include batteries, but it sure seems to be heading that way to me. 12:40 < GeertJohan> TheMue_: your book? reference? 12:40 < xyproto> TheMue_: cool :) 12:40 < retybok> xyproto: thanks 12:40 < GeertJohan> TheMue: (amazon, for instance ;)) 12:40 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts 12:41 < TheMue> Here's the book (http://amzn.to/emX68O) and here a site with errata (http://go-for-it.mweb.de/). 12:41 < GeertJohan> ah its german only ? 12:42 < xyproto> TheMue: I dream about writing a book about Go some day as well. :) Any tips? 12:42 -!- TheMue_ [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has joined #go-nuts 12:42 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Read error: Connection reset by peer] 12:43 < TheMue> Yep, it's German. We tried to find a US publisher, but currently no luck. 12:43 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 12:43 < TheMue> Gna, my line is somehow instable today. 12:44 < TheMue> xyproto: I'll be back later (in about 5 to 6 hours). Then we could talk about writing. 12:44 < TheMue> Have to go into a meeting now. 12:45 -!- TheMue [~TheMue@wlan-hotspot-039.ewe-ip-backbone.de] has quit [Client Quit] 12:48 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 12:50 -!- stalled [~stalled@unaffiliated/stalled] has joined #go-nuts 12:57 -!- kaichenxyz [~kaichenxy@115.199.111.22] has quit [Remote host closed the connection] 12:57 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has joined #go-nuts 12:57 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 12:59 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-157-72.clienti.tiscali.it] has joined #go-nuts 13:00 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 13:00 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined #go-nuts 13:03 -!- Project_2501 [~Marvin@82.84.93.109] has quit [Ping timeout: 258 seconds] 13:07 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit [Ping timeout: 246 seconds] 13:09 -!- petrux [~petrux@host16-224-static.53-82-b.business.telecomitalia.it] has quit [Ping timeout: 240 seconds] 13:10 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has joined #go-nuts 13:10 -!- crodjer [~rohanjain@203.110.240.205] has joined #go-nuts 13:21 -!- dave [~dfc@124-149-97-178.dyn.iinet.net.au] has joined #go-nuts 13:22 -!- dfc [~dfc@124-169-2-171.dyn.iinet.net.au] has quit [Ping timeout: 246 seconds] 13:23 -!- zimsim [~simon@87.72.77.195] has quit [Remote host closed the connection] 13:24 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts 13:29 -!- iant [~iant@216.239.45.130] has quit [Ping timeout: 246 seconds] 13:37 -!- gregschlom [~quassel@118.68.142.103] has joined #go-nuts 13:42 -!- iant [~iant@67.218.109.241] has joined #go-nuts 13:42 -!- mode/#go-nuts [+v iant] by ChanServ 13:48 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 13:51 -!- retybok [~retybok@gw.theralys.com] has quit [Quit: leaving] 13:59 -!- skelterjohn_ [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 14:00 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Read error: Connection reset by peer] 14:05 -!- virtualsue [~chatzilla@nat/cisco/x-mamaqhwbmsxebvxx] has quit [Ping timeout: 246 seconds] 14:06 < GeertJohan> go fixEveryonesInternetConnectionInThisChannel() 14:07 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Quit: skelterjohn] 14:10 < fzzbt> how can i catch panics? 14:10 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has quit [Quit: gtaylor] 14:10 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined #go-nuts 14:10 < exch> fzzbt: with defer and recover 14:10 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has joined #go-nuts 14:10 < exch> defer func() { if x := recover(); x != nil { ohNoesAPanicHappened(x) } }() 14:11 -!- leczb [~leczb@nat/google/x-xcldrrghbaapoiim] has left #go-nuts ["Konversation terminated!"] 14:11 < fzzbt> i don't want to use defer 14:11 < exch> why not? 14:11 < fzzbt> because the call is deferred 14:11 -!- virtualsue [~chatzilla@nat/cisco/x-ckkouwsplctthgyz] has joined #go-nuts 14:11 < exch> you dont have to. Just make sure that functions with recover in it, is called on every exit point in the funciton you define it in 14:12 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Client Quit] 14:14 < Namegduf> exch: You mean you don't have to use defer? Because I'm pretty sure you do, because normal execution isn't happening during a panic, so normal exit points aren't passed over. 14:14 < exch> good point 14:15 * exch clearly needs more coffee before typing 14:16 < Namegduf> fzzbt: Your catching/recovering has to be deferred to when the panic happens, when the deferred functions at each level are being run. 14:17 < Namegduf> You can't catch panics without returning from that function. You can use a wrapper function for that. It isn't a common requirement because defers are not used for regular error results. 14:17 < fzzbt> i just want to test whether my fancy function panics when i want it to 14:18 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts 14:20 < Namegduf> Use a function that takes a func() and a value of whatever type it panics with, and returns a boolean. 14:20 < Namegduf> Have it defer a recover and check of the recovered value, then call func() 14:21 < Namegduf> The defer sets the return value after recovering if the panic value was as expected 14:21 < Namegduf> Otherwise it returns false 14:21 < Namegduf> Pass it a closure taking no parameters containing a call to the thing you want to test. 14:22 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has joined #go-nuts 14:23 < Namegduf> A slightly smarter wrapper which lets you just if !expectedPanic(func() { blah(x, y) }, boomValue) { 14:25 -!- dfr|mac_ [~dfr|work@ool-182e3fca.dyn.optonline.net] has joined #go-nuts 14:28 -!- emjayess [~emjayess@pix1.i29.net] has joined #go-nuts 14:30 -!- GeertJohan [~geertjoha@s51478c91.adsl.wanadoo.nl] has quit [Quit: Leaving.] 14:31 < xyproto> fzzbt: you can wrap the code that may fail in another function, that has it's own defer 14:31 < xyproto> *its 14:35 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 14:35 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has left #go-nuts [] 14:37 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 14:37 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has left #go-nuts [] 14:37 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 14:39 -!- tobier [~tobier@c-1e9de055.712-1-64736c11.cust.bredbandsbolaget.se] has quit [Read error: Connection reset by peer] 14:41 -!- tobier [~tobier@c-1e9de055.712-1-64736c11.cust.bredbandsbolaget.se] has joined #go-nuts 14:49 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has quit [Quit: jscherer26] 14:51 < ognom> How do I remove null-padding from a string the easiest way? 14:53 < plexdev> http://is.gd/UeZ48q by [Gustavo Niemeyer] in go/src/pkg/crypto/openpgp/armor/ -- openpgp: Fix improper := shadowing 14:54 < fzzbt> okay got it working 14:54 < fzzbt> thank you all 14:54 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 14:54 < fzzbt> maybe gocheck should have methods for checking panics 14:56 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has left #go-nuts [] 14:56 < Namegduf> ognom: If you know how long the padding is at the time you get the string, you can say s = s[:realLength] 14:57 -!- tensai_cirno [~cirno@77.232.15.216] has joined #go-nuts 14:57 -!- iant [~iant@67.218.109.241] has quit [Quit: Leaving.] 14:58 < ognom> That's the problem, the padding varies so I need some way to remove all the padding which varies from string to string 14:59 -!- Venom_X [~pjacobs@75-27-133-72.lightspeed.austtx.sbcglobal.net] has joined #go-nuts 14:59 -!- zimsim [~simon@87.72.77.195] has quit [Read error: Operation timed out] 14:59 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts 15:02 -!- jnwhiteh [~jnwhiteh@li37-84.members.linode.com] has quit [Changing host] 15:02 -!- jnwhiteh [~jnwhiteh@WoWUIDev/WoWI/Featured/Dongle/cladhaire] has joined #go-nuts 15:04 -!- skelterjohn [~jasmuth@lawn-gw.rutgers.edu] has joined #go-nuts 15:07 < skelterjohn> morning 15:08 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 15:09 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has left #go-nuts [] 15:09 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has joined #go-nuts 15:09 -!- jscherer26 [~jscherer2@d199-74-181-32.try.wideopenwest.com] has left #go-nuts [] 15:10 -!- Project_2501 [~Marvin@82.84.75.155] has joined #go-nuts 15:10 -!- GilJ_ [~GilJ@zeus.ugent.be] has quit [Quit: leaving] 15:10 < fzzbt> ha, i found a case where gofmt breaks my perfectly working code by removing "extra" parens from it which are actually required. 15:11 < uriel> fzzbt: fill a bug? but sounds rather strange 15:12 < uriel> gofmt should certainly not break any valid program 15:13 < fzzbt> http://pastie.org/1787217 15:13 < fzzbt> now i get: utils_test.go:29: syntax error: unexpected {, expecting ( etc. 15:13 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-157-72.clienti.tiscali.it] has quit [Ping timeout: 260 seconds] 15:13 -!- napsy [~luka@88.200.96.18] has joined #go-nuts 15:15 < fzzbt> okay, maybe using function literals like that is dumb, but still.. 15:15 < uriel> dumb or not, if the input is valid, I think gofmt should always produce valid output 15:15 < uriel> at least that is my understanding 15:17 < fzzbt> i'll file a bug 15:18 < delinka> I see paren mismatch in the paste 15:19 < fzzbt> hmm? 15:19 < skelterjohn> i don't 15:19 < delinka> the ( after the if is closed where? 15:19 < fzzbt> it removed the parens from if-statement 15:19 < skelterjohn> many lines later 15:19 < skelterjohn> line 31 15:19 < skelterjohn> i mean 15:19 < skelterjohn> 14 15:20 < delinka> ah. my client puts 10 lines inline. I probably should have followed the link. 15:23 -!- Project_2501 [~Marvin@82.84.75.155] has quit [Read error: Operation timed out] 15:33 -!- piranha [~piranha@D57D1AB3.static.ziggozakelijk.nl] has quit [Quit: Computer has gone to sleep.] 15:36 -!- dfr|mac_ [~dfr|work@ool-182e3fca.dyn.optonline.net] has quit [Remote host closed the connection] 15:40 -!- pharris [~Adium@rhgw.opentext.com] has joined #go-nuts 15:40 -!- Fish-- [~Fish@coss6.exosec.net] has quit [Quit: So Long, and Thanks for All the Fish] 15:40 -!- Fish [~Fish@exo3753.pck.nerim.net] has joined #go-nuts 15:41 -!- joelkronander [~joelkrona@130.236.243.164] has quit [Quit: joelkronander] 15:49 -!- firwen [~firwen@adevlaptop.cern.ch] has quit [Remote host closed the connection] 15:53 < fzzbt> oh great, go's google code's issue reporting thing gave me an error message when i tried to sent my issue, so i thought it didn't go through, so i decided to retry sending 3 more times. now, there's 4 duplicates of the same and i can't remove them ... 15:55 < exch> oops :p 15:55 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 15:55 < skelterjohn> lol 15:55 < skelterjohn> now they're all going to hate you 15:55 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has quit [Read error: Operation timed out] 15:57 < skelterjohn> they all hate me already, so you're not alone 15:58 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 15:58 < fzzbt> ;) 15:59 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts 16:02 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts 16:06 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts 16:07 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 16:08 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has quit [Read error: Connection reset by peer] 16:09 -!- virtualsue [~chatzilla@nat/cisco/x-ckkouwsplctthgyz] has quit [Ping timeout: 240 seconds] 16:09 -!- iant [~iant@nat/google/x-mqtvirgugmdedmol] has joined #go-nuts 16:09 -!- mode/#go-nuts [+v iant] by ChanServ 16:10 -!- GeertJohan [~Squarc@D978EC5D.cm-3-1d.dynamic.ziggo.nl] has joined #go-nuts 16:10 < GeertJohan> Hi all :) 16:13 < GeertJohan> void... 16:14 -!- jesusaurus1 [jesusaur@firefly.cat.pdx.edu] has left #go-nuts ["WeeChat 0.3.2"] 16:15 < exch> lo 16:22 -!- keithcascio [~keithcasc@nat/google/x-jjatbbcqsqeeynwg] has joined #go-nuts 16:24 -!- rurban [~demo@178-191-156-58.adsl.highway.telekom.at] has joined #go-nuts 16:28 -!- zozoR [~Morten@56344b27.rev.stofanet.dk] has joined #go-nuts 16:41 < plexdev> http://is.gd/hnnwtj by [Brad Fitzpatrick] in go/src/pkg/http/ -- http: client gzip support 16:41 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-155-53.clienti.tiscali.it] has joined #go-nuts 16:42 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has joined #go-nuts 16:46 -!- boscop__ [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 16:46 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has quit [Read error: Connection reset by peer] 16:47 -!- firwen [~firwen@146.123.98-84.rev.gaoland.net] has joined #go-nuts 16:48 -!- bjarneh [~bjarneh@1x-193-157-193-225.uio.no] has joined #go-nuts 16:50 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 16:50 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Ping timeout: 260 seconds] 16:51 -!- zerosanity [~josh@8.20.178.82] has quit [Read error: Connection reset by peer] 16:51 -!- boscop__ [~boscop@g230090246.adsl.alicedsl.de] has quit [Read error: Connection reset by peer] 16:52 -!- zerosanity [~josh@8.20.178.82] has joined #go-nuts 16:52 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 16:55 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 16:56 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has quit [Read error: Connection reset by peer] 16:57 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 16:57 -!- snearch [~snearch@f053012201.adsl.alicedsl.de] has joined #go-nuts 16:59 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has quit [Excess Flood] 17:00 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 17:02 -!- scyth_ [~scyth@194.247.195.133] has joined #go-nuts 17:02 -!- tav [~tav@92.7.142.193] has quit [Read error: Connection reset by peer] 17:03 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-159-138.clienti.tiscali.it] has joined #go-nuts 17:04 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 17:05 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-155-53.clienti.tiscali.it] has quit [Read error: Operation timed out] 17:06 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has quit [Ping timeout: 240 seconds] 17:07 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 17:09 -!- nixness [~dsc@dyn-86-36-43-184.wv.qatar.cmu.edu] has joined #go-nuts 17:10 -!- boscop_ [~boscop@g230090246.adsl.alicedsl.de] has quit [Ping timeout: 248 seconds] 17:12 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 17:12 -!- tav [~tav@92.7.142.193] has joined #go-nuts 17:13 -!- firwen [~firwen@146.123.98-84.rev.gaoland.net] has quit [Ping timeout: 260 seconds] 17:19 -!- araujo [~araujo@190.38.51.34] has joined #go-nuts 17:19 -!- araujo [~araujo@190.38.51.34] has quit [Changing host] 17:19 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts 17:20 < Glasswalker> If I have a large byte array, and I want to insert other smaller byte arrays into it at fixed locations. Can I simply use a slice to identify it, and insert to that slice? 17:20 < Glasswalker> like bigbuf[1000:2000] = smallbuf 17:21 <+iant> no, you can't use a slice on the left hand side of an assignment 17:21 <+iant> you have to use the copy builtin function 17:22 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 17:23 < skelterjohn> Glasswalker: as in, copy(bigbuf[1000:2000], smallbuf) 17:23 -!- saschpe [~quassel@opensuse/member/saschpe] has quit [Remote host closed the connection] 17:24 < Glasswalker> was just looking that up :) 17:24 < exch> 'bigbuf[1000:2000] = smallbuf' is a bit ambiguous.. Should it remove all 1k elements and replace with whatever smallbuf contains Or just replace len(smallbuf) elements and leave the rest intact? 17:24 < exch> what if smallbuf is larger than 1k 17:24 < Glasswalker> hmm 17:24 < Glasswalker> good point 17:25 < Glasswalker> in my case I want it to explicitly replace the range with the contents of smallbuf 17:25 < Glasswalker> smallbuf should never be longer in this case (I'm doing checking on that to be sure) 17:25 < Glasswalker> if smallbuf is full of nulls, it should replace all 1000 with null 17:25 < Glasswalker> but smallbuf should never be smaller either 17:26 < Glasswalker> the reason I know this is I'm calculating the length of the slice based on smallbuf 17:26 < exch> k 17:26 < Glasswalker> in otherwords it actually looks like bigbuf[1000:1000+len(smallbuf)] = smallbuf 17:26 < Glasswalker> and len bigbuf is allways 1000+len(smallbuf) 17:26 < skelterjohn> i don't know what happens if you give copy two slices of different length 17:27 < skelterjohn> presumably something sensible 17:27 < Glasswalker> ok cool 17:27 < Glasswalker> thanks 17:27 -!- kaichenxyz [~kaichenxy@li261-87.members.linode.com] has quit [Ping timeout: 246 seconds] 17:27 < skelterjohn> Glasswalker: if you know that, you can say bigbuf[1000:] instead of bigbuf[1000:1000+len(smallbuf)] 17:27 < skelterjohn> omitting the index means 0 or len(theslice), depending on which index you omit 17:28 -!- arun_ [~arun@unaffiliated/sindian] has quit [Ping timeout: 246 seconds] 17:30 -!- Fish- [~Fish@9fans.fr] has joined #go-nuts 17:33 -!- GilJ [~GilJ@zeus.ugent.be] has joined #go-nuts 17:34 -!- snearch [~snearch@f053012201.adsl.alicedsl.de] has quit [Quit: Verlassend] 17:35 -!- Adys [~Adys@unaffiliated/adys] has quit [Quit: Quit] 17:47 -!- alexandere [~alexander@eijg.xs4all.nl] has joined #go-nuts 17:50 -!- tvw [~tv@212.79.9.150] has quit [Remote host closed the connection] 17:53 -!- krutcha [~krutcha@remote.icron.com] has joined #go-nuts 17:57 -!- Evesong [~evesong@ruby.nanocore.co.uk] has quit [Quit: Leaving] 17:57 -!- Adys [~Adys@unaffiliated/adys] has joined #go-nuts 17:58 < plexdev> http://is.gd/Ito9UB by [Rob Pike] in go/ -- C+A: Add Lucio De Re 17:59 < ww> skelterjohn, Glasswalker i believe it will copy as much as it can and truncate 17:59 < skelterjohn> right - the only sensible thing possible (besides giving up entirely) 18:04 < Glasswalker> here is a general question about types... If I have a type call it "A" which has several fields and methods... Then I create a type B with: "type B A{newfield bool 18:04 < Glasswalker> didn't mean to hit enter there lol 18:04 < Glasswalker> "type B A{newfield bool}" 18:05 < Glasswalker> and add a new method to it 18:05 < Glasswalker> if I have a value of type B, will it be able to access all of Type A's fields, and methods? (common inheritance) 18:05 < Glasswalker> that's what I would expect, just checking 18:05 < ww> you mean "type B struct { A; newfield bool }" right? 18:05 < Glasswalker> as I haven't done any kind of inheritance in Go yet. 18:05 < ww> yes it wil inherit the methods 18:06 < Glasswalker> ahh see I had the syntax wrong 18:06 < ww> and you can override them as you would expect 18:06 < Glasswalker> I assumed struct was the type it was inheriting from 18:06 < Glasswalker> ok 18:06 < Glasswalker> so yeah that's what I needed to know 18:06 < Glasswalker> thanks 18:06 < ww> np! 18:07 < Glasswalker> do I need to do anything special to override? or just re-implement them and the new one in B will naturally override A 18:08 < skelterjohn> just give them the same names 18:08 < Glasswalker> ok cool 18:08 < skelterjohn> but just in case - this does *not* give any kind of polymorphism 18:08 -!- aconran_ [~aconran-o@38.104.129.126] has quit [Ping timeout: 258 seconds] 18:09 < skelterjohn> if you turn a *B into a *A, the "overridden" methods don't make any difference 18:09 < skelterjohn> it will use A's methods 18:09 < Glasswalker> ok 18:09 < Glasswalker> basically I have a struct for Packet, which contains a size, and a payload (among other data). The packet has methods for encrypting, decrypting, and transmitting/recieving (as well as checksums and all that) 18:10 < Glasswalker> I want to now break out into different types of packets. Which will add an Encode and Decode method 18:10 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 18:10 < Glasswalker> allowing the added fields specific to the new type to be encoded into the payload, or decoded from the payload 18:10 -!- aconran [~aconran-o@38.104.129.126] has joined #go-nuts 18:10 < Glasswalker> other than that it can be treated as a normal packet 18:11 < skelterjohn> then you'll want to define an interface 18:11 < Glasswalker> so I could create a new packet_connect for example, which contains auth data... Then run p.Encode() then from that point forward treat it as a normal packet, since the data is all encoded into the Payload at that point (a field of the base packet) 18:11 < skelterjohn> type PacketEncorder interface { encode(stuff) } 18:11 < skelterjohn> or something similar 18:12 < Glasswalker> Why? 18:12 < Glasswalker> the encoder/decoder are all specific to the individual packet types 18:12 < Glasswalker> as they all have completely different formats for the payload 18:12 < skelterjohn> presumably you want something that can take any one of these packet types and encode them 18:12 -!- nixness [~dsc@dyn-86-36-43-184.wv.qatar.cmu.edu] has quit [Quit: Leaving] 18:13 < Glasswalker> not really 18:13 < Glasswalker> I already have all the pieces in place for packet transmission, recieving and all the supporting parts 18:13 < skelterjohn> ok, well you know the context better than i do 18:13 < Glasswalker> I plan on having factory functions for each packet type 18:13 < skelterjohn> i'm not great at internalizing the entire problem over IRC 18:13 < Glasswalker> NewConnectPacket() for example 18:14 < Glasswalker> which I pass all the useful details for a Connect Packet for example. It then returns a ConnectPacket type 18:14 < Glasswalker> already assembled and encoded 18:14 < Glasswalker> (using the ConnectPacket.Encode() method, which is unique to the ConnectPacket type) 18:14 -!- arun_ [~arun@unaffiliated/sindian] has joined #go-nuts 18:14 < Glasswalker> the same goes for NewDisconnectPacket() and so on 18:14 -!- arun__ [~arun@i172010.upc-i.chello.nl] has joined #go-nuts 18:15 < Glasswalker> all of those packet types inherit from the main Packet type, which is used in all the transmission and reciept code 18:15 < Glasswalker> and encryption code and so on 18:15 < plexdev> http://is.gd/7TXFe0 by [Lucio De Re] in go/src/cmd/ld/ -- ld: ELF header function declarations. 18:15 -!- arun__ [~arun@i172010.upc-i.chello.nl] has quit [Read error: Connection reset by peer] 18:15 < plexdev> http://is.gd/RpGvSm by [Rob Pike] in go/src/pkg/fmt/ -- fmt: allow %U for unsigned integers. 18:15 < skelterjohn> "inherit" is the wrong word 18:15 < skelterjohn> but correct me if i'm wrong: 18:15 < skelterjohn> you have a function that takes a *Packet, serializes it and sends it over the wire? 18:15 < Glasswalker> yes 18:16 < Glasswalker> that is a method on the Packet 18:16 < Glasswalker> (Packet.TyBytes() to be exact) 18:16 < Glasswalker> err ToBytes 18:16 < skelterjohn> and you define Packet.ToBytes(), ok 18:16 < skelterjohn> and you also define DisconnectPacket.ToBytes()? 18:17 < Glasswalker> no 18:17 < Glasswalker> I want DisconnectPacket to use the Packet.ToBytes 18:18 < Glasswalker> since from the perspective of ToBytes it's only encoding the payload 18:18 < Glasswalker> which is just a big byte array already 18:18 < Glasswalker> (and the other packet header data) 18:18 < Glasswalker> the DisconnectPacket.Encode encodes all the DisconnectPacket specific stuff into the packet.Payload byte array 18:18 < Glasswalker> so it's ready for transmission by the Packet methods 18:18 < skelterjohn> is there any code that refers to something that might be one of several different types of packets? 18:19 < Glasswalker> yes... all of the Packet methods 18:19 < Glasswalker> but as I said all they care about are the header and payload 18:19 < Glasswalker> (ignoring all other data) 18:20 < Glasswalker> hold on, I can post some code to show examples 18:20 < skelterjohn> something external to packets 18:20 < skelterjohn> presumably there is some kind of event loop somewhere 18:20 < Glasswalker> right 18:20 < Glasswalker> but it's only dealing with the Packet type 18:21 < Glasswalker> (for transmission and reciept on the wire) 18:21 < Glasswalker> Ah 18:21 < Glasswalker> think I see it now 18:21 < Glasswalker> so once the packet is received, it needs to turn it into it's appropriate packet type 18:21 < Glasswalker> the packet has a header in it 18:22 < Glasswalker> which has a single byte "Command" which identifies the type of packet 18:22 < Glasswalker> along with other header data 18:22 < Glasswalker> so I was planning on reading the command, and then creating a new packet of whatever type is relevant 18:22 < Glasswalker> then running a decode on that new packet type, to read the useful data out of the payload 18:22 < Glasswalker> so basically turn the Packet into a DisconnectPacket for example 18:23 < skelterjohn> but then what do you give this DisconnectPacket to 18:23 < Glasswalker> there are no central handlers for the various packet types 18:23 -!- fabled [~fabled@83.145.235.194] has quit [Quit: Ex-Chat] 18:23 < skelterjohn> ok 18:23 < Glasswalker> each has it's own function 18:23 < Glasswalker> the packets are only a transport medium 18:23 < Glasswalker> they are assembled into envelopes 18:23 < Glasswalker> which contain a message 18:23 < Glasswalker> the messages are what I act on 18:24 < Glasswalker> right now I'm writing the underlying transport 18:24 < Glasswalker> so a packet can either be a connect, disconnect, header, footer, data, retransmit, envelope_ack 18:24 < Glasswalker> connect gets handled during the initial connection by the client, to authenticate 18:25 < Glasswalker> header triggers creation of a new envelope with the appropriate header data 18:25 < Glasswalker> data get fed into an envelope until a footer is recieved 18:25 < Glasswalker> the footer contains checksum data 18:25 < Glasswalker> if the envelope checks out clean 18:25 < Glasswalker> then an envelopeack is sent 18:25 < Glasswalker> otherwise a retransmit is sent with the 18:25 < Glasswalker> err 18:25 < Glasswalker> with the data packets that it needs re-sent 18:25 < Glasswalker> or a flag saying retransmit the entire envelope 18:25 < Glasswalker> depending on the error type 18:26 < Glasswalker> once a complete envelope is recieved, it is checksummed and such 18:26 < Glasswalker> and provided it is complete and clean, it is decoded into a message 18:26 < Glasswalker> the message is then routed based on the routing rules on the message 18:26 < Glasswalker> (I'm writing a message bus system) 18:26 < Glasswalker> so it doesn't care about the actual content of the message 18:27 < Glasswalker> just how to route it to the other connected clients 18:27 < skelterjohn> and by route, you mean send over a different wire? 18:27 < skelterjohn> rather than call-a-handler-function? 18:27 < Glasswalker> right 18:27 < Glasswalker> there is a client object 18:27 < skelterjohn> ok, should be fine then 18:28 < Glasswalker> and it contains a UID, class, and subclass 18:28 < Glasswalker> those are used for routing 18:28 < Glasswalker> you can send a message with the following routing types: system, broadcast, class, subclass, direct 18:28 < Glasswalker> direct goes to a specific UID, broadcast goes to all connected clients, class goes to all clients of a specific class and so on 18:29 < Glasswalker> there is a bit more logic than that to it, because multiple servers can network, and routing can bounce through multiple servers... but that is handled by a client array at each end, and a distributed registry 18:30 < skelterjohn> (tmi) :) 18:30 < Glasswalker> lol 18:30 < Glasswalker> sorry :) 18:30 < Glasswalker> I have a tendency to be a bit verbose when I get going ;) 18:30 -!- tvw [~tv@e176006168.adsl.alicedsl.de] has joined #go-nuts 18:31 -!- gregschlom [~quassel@118.68.142.103] has quit [Ping timeout: 246 seconds] 18:33 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has quit [Read error: Connection reset by peer] 18:33 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has joined #go-nuts 18:35 -!- TheMue [~TheMue@p5DDF5B02.dip.t-dialin.net] has joined #go-nuts 18:35 -!- skelterjohn_ [~jasmuth@lawn-gw.rutgers.edu] has joined #go-nuts 18:35 < skelterjohn_> happens to me all the time 18:35 -!- skelterjohn [~jasmuth@lawn-gw.rutgers.edu] has quit [Read error: No route to host] 18:40 -!- Caphalor90 [~heandreas@dslb-088-075-140-241.pools.arcor-ip.net] has joined #go-nuts 18:41 -!- Caphalor90 [~heandreas@dslb-088-075-140-241.pools.arcor-ip.net] has quit [Client Quit] 18:41 -!- artefon [~thiago@dhcp10.usuarios.dcc.ufmg.br] has quit [Ping timeout: 240 seconds] 18:42 -!- aiju [~aiju@unaffiliated/aiju] has quit [Quit: ZNC - http://znc.sourceforge.net] 18:43 -!- aiju [~aiju@unaffiliated/aiju] has joined #go-nuts 18:45 < ww> Glasswalker: sounds to me like you want type Packet interface { Encode() []byte } 18:45 < ww> curious: what sort of protocol is this you are implementing? 18:46 -!- alexandere [~alexander@eijg.xs4all.nl] has quit [Quit: alexandere] 18:50 -!- gregschlom [~quassel@118.68.142.103] has joined #go-nuts 18:52 -!- awidegreen [~quassel@c-cfc5e555.08-2-73746f39.cust.bredbandsbolaget.se] has joined #go-nuts 18:54 -!- artefon [~thiago@bananal.lbd.dcc.ufmg.br] has joined #go-nuts 18:57 -!- Venom_X [~pjacobs@75-27-133-72.lightspeed.austtx.sbcglobal.net] has quit [Quit: Venom_X] 19:00 -!- gregschlom [~quassel@118.68.142.103] has quit [Ping timeout: 246 seconds] 19:06 -!- awidegreen [~quassel@c-cfc5e555.08-2-73746f39.cust.bredbandsbolaget.se] has quit [Read error: Operation timed out] 19:08 -!- awidegreen [~quassel@c-cfc5e555.08-2-73746f39.cust.bredbandsbolaget.se] has joined #go-nuts 19:09 -!- huin [~huin@91.85.185.181] has joined #go-nuts 19:10 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has joined #go-nuts 19:14 -!- boscop [~boscop@g230090246.adsl.alicedsl.de] has quit [Ping timeout: 240 seconds] 19:17 -!- fabled [~fabled@83.145.235.194] has joined #go-nuts 19:20 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined #go-nuts 19:29 -!- wrtp [~rog@92.17.67.64] has quit [Quit: wrtp] 19:30 -!- wrtp [~rog@92.17.67.64] has joined #go-nuts 19:34 < skelterjohn> anyone here know about doing basic os x windowing work from C (rather than objC)? 19:36 -!- Surma [~surma@g230118190.adsl.alicedsl.de] has joined #go-nuts 19:38 < Surma> Hey guys. How come, that if I unmarshall a number from JSON-string into a int64, it fails the second the number has 7 digits? 19:38 < Surma> The error just says, that the number doesn't can't be umarshalled into a go value of that type (i.e. int64) 19:40 < skelterjohn> should be allowed approx 63/3 digits 19:41 < skelterjohn> can you give me the number that failed? 19:44 < Surma> any 6-digit numer succeeds, any 7-digit number fails 19:44 < Surma> well, I didn't test *any* number, but bunch of both ;) 19:44 < skelterjohn> you've tried them all, have you? :) 19:45 < skelterjohn> can you make a pastebin that will demonstrate the failure? 19:47 < skelterjohn> this works fine: http://pastebin.com/2JhfjSme 19:47 < skelterjohn> i suspect the problem is elsewhere 19:48 < skelterjohn> can you paste the exact error text? 19:48 < skelterjohn> since it includes both the number and the type you're trying to put it into 19:48 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has joined #go-nuts 19:49 < skelterjohn> i can fit a 19 digit number into an int64 19:50 < skelterjohn> the exact bound is at 2^63 19:50 < skelterjohn> i can fit 2^63-1, but not 2^63 19:50 < Surma> That's what I thought, that's why I'm so confused 19:50 < skelterjohn> so paste your code 19:50 < skelterjohn> the error is somewhere else 19:50 < Surma> well, let me see if I can extract an demonstration 19:51 < Surma> it's big, so lemme strip it down first 19:51 -!- PortatoreSanoDiI [~Marvin@dynamic-adsl-94-36-161-78.clienti.tiscali.it] has joined #go-nuts 19:51 < skelterjohn> then paste the exact error message 19:51 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit [Ping timeout: 252 seconds] 19:51 < Surma> json: cannot unmarshal number 1.83456e+06 into Go value of type int64 19:52 < skelterjohn> it's probably choking on the e+ notation 19:53 < Surma> That's not how I wrote the number 19:53 < skelterjohn> certainly if you convert it to 1834560, it works 19:53 -!- emjayess [~emjayess@pix1.i29.net] has quit [Quit: Leaving] 19:53 < Surma> That conversion is happening implicitely somewhere 19:53 < Surma> Yeah, I saw that from your testcase 19:53 < skelterjohn> fmt.Sprintf might do that 19:53 < Surma> I guess it failes because I'm using reflections in the process 19:53 < skelterjohn> json.Marshal won't 19:54 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-159-138.clienti.tiscali.it] has quit [Ping timeout: 258 seconds] 19:55 < Surma> hm 19:56 < Surma> so basically, I'm umarshalling into a pointer of an int64, but it's passed as an interface{} due to reflections 19:56 < skelterjohn> that's fine 19:56 < Surma> I'll try to write a small test 19:56 < skelterjohn> the fact that it is passed as an interface is irrelevant 19:56 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.4] 19:57 < skelterjohn> it's the fact that the data you are unmarshalling from uses exponential notation 19:57 < skelterjohn> find out what is creating that string 19:57 < skelterjohn> or []byte, i mean 19:58 < Surma> I checked, it's not exponential notation 19:59 < skelterjohn> print out the data right before you try to unmarshal it 20:00 < skelterjohn> it has to be getting "1.83456e+06" from somewhere, and the only place it can be is the []byte you pass into json.Unmarshal 20:01 < Surma> ah, i got it 20:02 < Surma> Well, the explanation is a bit longer: 20:03 < Surma> So I know I get an array of some stuff, so I unmarshall it into an []interface{}. Then I marshall each of the elements back into string form. SO effectively I parse an json-string to []json-string. However, unmarshalling a number into an nil-interface{} makes the json package use float64, hence the exponential notation at the actual unmarshalling stage 20:04 < Surma> damn, now I realize how stupid this layout is ^^ 20:06 < skelterjohn> didn't really follow that, but glad you got it working 20:12 < Surma> well short-version: I unmarshalled into an nil-interface, and then marshalled back which introduced the exponential notation 20:14 < skelterjohn> how can you unmarshal into a nil interface? 20:15 < skelterjohn> i get "json: Unmarshal(nil)" as an error 20:15 -!- zozoR [~Morten@56344b27.rev.stofanet.dk] has quit [Remote host closed the connection] 20:22 < hopso> Anyone got ideas on a simple(ish) distributed computing application to get my hands dirty with? 20:23 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has quit [Ping timeout: 246 seconds] 20:23 < skelterjohn> hows your linear algebra? 20:24 -!- femtoo [~femto@95-89-249-242-dynip.superkabel.de] has quit [Read error: Connection reset by peer] 20:24 < hopso> Ok, I guess. Been a while since I used it last time. 20:25 < huin> is it safe to remove items from a map as it's being iterated over? 20:25 < huin> specifically removing the "current" item 20:25 < skelterjohn> huin: not threadsafe 20:25 < huin> that's fine 20:25 < skelterjohn> oh i see 20:25 < skelterjohn> i think so 20:26 < huin> excellent. that makes life easier 20:29 < hopso> skelterjohn: Why you asked about linear algebra? 20:29 < aiju> huin: i don't think so 20:29 < huin> arg :( 20:30 < skelterjohn> hopso: oh right. if you want you can take a look at gomatrix.googlecode.com and see if you can make some of the more fun algorithms in there concurrent 20:30 < skelterjohn> aiju: how sure are you? 20:30 * huin tries some code out 20:30 < huin> thing that worries me is that even if it works in test code, i don't know if that's just luck 20:30 < aiju> skelterjohn: somewaht 20:30 < hopso> skelterjohn: I'll check it, thanks. 20:31 < skelterjohn> hopso: I already did straight matrix multiplication, but it could probably be improved 20:32 < aiju> okay, it seems to work here 20:32 -!- bjarneh [~bjarneh@1x-193-157-193-225.uio.no] has quit [Quit: leaving] 20:33 < aiju> weird things happen if you *insert* elements 20:33 < plexdev> http://is.gd/ICfuu8 by [Lucio De Re] in go/src/cmd/8l/ -- 8l: correct Plan 9 compiler warnings 20:34 < skelterjohn> aiju: right - then it's not clear if they should be iterated over on the current shot, or not. my guess would be "depending on where they got inserted" 20:34 < huin> yeah seems to work for me as well 20:34 < huin> removal at least 20:35 < aiju> skelterjohn: *really* strange things happen 20:35 < skelterjohn> heh ok 20:36 -!- rlab [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org] 20:37 < huin> sounds fun :D 20:37 < skelterjohn> huin: read WoT at all? 20:38 < huin> not heard of it 20:38 < skelterjohn> nvm 20:41 -!- Adys [~Adys@unaffiliated/adys] has quit [Quit: Quit] 20:43 < scyth_> hey, in I/O 2010 session with Rob and Russ (Go Programming), they made an example of load balancer 20:43 < scyth_> is there a code available from that session? 20:47 -!- zerosanity [~josh@8.20.178.82] has quit [Remote host closed the connection] 20:48 -!- cafesofie [~cafesofie@ool-4a5a6ee5.dyn.optonline.net] has joined #go-nuts 20:51 -!- iant [~iant@nat/google/x-mqtvirgugmdedmol] has quit [Ping timeout: 252 seconds] 20:54 -!- iant [~iant@216.239.45.19] has joined #go-nuts 20:54 -!- mode/#go-nuts [+v iant] by ChanServ 20:56 -!- joelkronander [~joelkrona@c-bf2fe253.617-1-64736c22.cust.bredbandsbolaget.se] has joined #go-nuts 20:58 -!- iant1 [~iant@nat/google/x-nmboofmcpnjuhdfs] has joined #go-nuts 21:00 -!- iant [~iant@216.239.45.19] has quit [Ping timeout: 240 seconds] 21:01 -!- huin [~huin@91.85.185.181] has quit [Quit: bed] 21:02 -!- Surma [~surma@g230118190.adsl.alicedsl.de] has left #go-nuts [] 21:04 -!- TheMue [~TheMue@p5DDF5B02.dip.t-dialin.net] has quit [Quit: TheMue] 21:07 -!- aconran [~aconran-o@38.104.129.126] has quit [Read error: Operation timed out] 21:08 < hopso> scyth_: Doesn't the session video have some code and a good explanation on how it works? 21:09 < hopso> It was pretty clearly explained if I recall correctly. 21:09 < scyth_> yes 21:10 < scyth_> but I'm more interested in other surrounding stuff (scheduling 100 requesters, setting up workers) 21:10 < scyth_> using heap to balance the requests is all clear 21:10 -!- zimsim [~simon@87.72.77.195] has quit [Quit: /dev/null] 21:13 < skelterjohn> hopso: any interest in the gomatrix stuff? 21:14 < scyth_> brb 21:14 -!- scyth_ [~scyth@194.247.195.133] has quit [Quit: Leaving] 21:14 -!- Fish- [~Fish@9fans.fr] has quit [Quit: So Long, and Thanks for All the Fish] 21:17 < hopso> Yep, looks interesting. I'll need a quick refresher about linear algebra, though. 21:28 -!- aconran [~aconran-o@38.104.129.126] has joined #go-nuts 21:34 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has joined #go-nuts 21:38 -!- aconran [~aconran-o@38.104.129.126] has quit [Ping timeout: 258 seconds] 21:42 -!- artefon [~thiago@bananal.lbd.dcc.ufmg.br] has quit [Quit: bye] 21:45 -!- rurban [~demo@178-191-156-58.adsl.highway.telekom.at] has quit [Ping timeout: 276 seconds] 21:46 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|] 21:47 -!- gtaylor [~gtaylor@99-126-136-139.lightspeed.gnvlsc.sbcglobal.net] has quit [Quit: gtaylor] 21:49 -!- wrtp [~rog@92.17.67.64] has quit [Quit: wrtp] 21:52 -!- aconran [~aconran-o@38.104.129.126] has joined #go-nuts 21:55 -!- napsy [~luka@88.200.96.18] has quit [Ping timeout: 276 seconds] 21:57 -!- GeertJohan [~Squarc@D978EC5D.cm-3-1d.dynamic.ziggo.nl] has quit [Quit: Leaving.] 21:57 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 21:58 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Quit: Computer has gone to sleep.] 21:59 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts 21:59 -!- piranha [~piranha@5ED43A0B.cm-7-5a.dynamic.ziggo.nl] has quit [Client Quit] 22:01 -!- awidegreen [~quassel@c-cfc5e555.08-2-73746f39.cust.bredbandsbolaget.se] has quit [Remote host closed the connection] 22:11 < exch> http://google-opensource.blogspot.com/2011/04/introducing-cityhash.html 22:11 < ttblrs_> google ist still programming c++? 22:14 < scyth> :) 22:19 < krutcha> maybe the real world can still bind to it from javascript to do some heavy lifting in datacenters in farmville or something 22:31 -!- hopso [~hopso@a91-152-176-165.elisa-laajakaista.fi] has left #go-nuts [] 22:31 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit: Verlassend] 22:36 -!- nixness [~dsc@78.100.166.168] has joined #go-nuts 22:37 -!- Guest47288 [~dfc@124-149-97-178.dyn.iinet.net.au] has quit [Quit: Guest47288] 22:40 -!- nixness [~dsc@78.100.166.168] has quit [Client Quit] 22:45 -!- virtualsue [~chatzilla@nat/cisco/x-gjqeacbkdzdscegd] has joined #go-nuts 22:49 -!- katakuna [pie@kjal.demon.co.uk] has quit [Ping timeout: 260 seconds] 22:52 -!- taruti [taruti@ultra.violetti.org] has quit [Ping timeout: 248 seconds] 22:53 -!- nixness [~dsc@78.100.166.168] has joined #go-nuts 22:53 -!- iant1 [~iant@nat/google/x-nmboofmcpnjuhdfs] has quit [Quit: Leaving.] 23:04 -!- skelterjohn [~jasmuth@lawn-gw.rutgers.edu] has quit [Quit: skelterjohn] 23:06 -!- virtualsue [~chatzilla@nat/cisco/x-gjqeacbkdzdscegd] has quit [Ping timeout: 248 seconds] 23:10 -!- taruti [taruti@ultra.violetti.org] has joined #go-nuts 23:12 -!- iant [~iant@nat/google/x-wdtveliuwkqzpmyh] has joined #go-nuts 23:12 -!- mode/#go-nuts [+v iant] by ChanServ 23:21 -!- Adys [~Adys@unaffiliated/adys] has joined #go-nuts 23:29 -!- iant [~iant@nat/google/x-wdtveliuwkqzpmyh] has quit [Quit: Leaving.] 23:31 -!- dfc [~dfc@eth59-167-133-99.static.internode.on.net] has joined #go-nuts 23:33 -!- foolusion [43fcbebc@gateway/web/freenode/ip.67.252.190.188] has joined #go-nuts 23:34 -!- iant [~iant@67.218.107.170] has joined #go-nuts 23:34 -!- mode/#go-nuts [+v iant] by ChanServ 23:37 -!- ExtraSpice [XtraSpice@88.118.35.153] has quit [Remote host closed the connection] 23:38 -!- tvw [~tv@e176006168.adsl.alicedsl.de] has quit [Ping timeout: 246 seconds] 23:40 -!- PortatoreSanoDiI [~Marvin@dynamic-adsl-94-36-161-78.clienti.tiscali.it] has quit [Read error: Connection reset by peer] 23:44 < foolusion> I'm working on project euler problem 1 using channels and my program is deadlocking is there a way to stop a receiver from blocking? here's the code I'm using http://pastebin.com/LGJRcx9Z 23:47 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has quit [] 23:51 < exch> it's deadlocking because sum() writes to results but nothing reading from it. the last Printf() will never be reached. Either call sum() as a goroutine, or make results a buffered channel 23:52 < foolusion> In the final printf it calls <-result 23:52 < exch> yea, but it's never reached 23:52 < exch> the write to results in sum() is a blocking write 23:53 < foolusion> oh, will i have to worry about closing channels? 23:53 < foolusion> or goroutines 23:53 < exch> results := make(chan int, 1) <- that makes results a buffered channel, You can write one value without blocking this way 23:53 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Quit: Leaving] 23:54 < exch> or do 'go sum(mults, result)' 23:54 < exch> that way the blocking will happen in a separate thread and the main thread will continue to the last Printf() call 23:55 -!- itrekkie [~itrekkie@ip72-200-105-157.tc.ph.cox.net] has joined #go-nuts 23:56 < krutcha> I read it differently but might be drunk 23:56 < foolusion> it must be deadlocking before that 23:56 < krutcha> isn't sum ranging over a channel that's never closed 23:56 < krutcha> so never returning a result? 23:56 < foolusion> before sending to result 23:56 < foolusion> yeah 23:57 < krutcha> so multiples could close the mult channel when it's done 23:58 < krutcha> causing the range to terminate 23:58 < foolusion> how do i close channels? 23:58 < exch> close(c) 23:58 < krutcha> close(mult) 23:59 -!- pharris [~Adium@rhgw.opentext.com] has quit [Quit: Leaving.] 23:59 < foolusion> nice it worked --- Log closed Wed Apr 13 00:00:43 2011