--- Log opened Thu Jan 27 00:00:05 2011 00:06 -!- devrim [~Adium@160.79.7.234] has quit [Quit: Leaving.] 00:11 -!- adu_ [~ajr@pool-173-73-1-173.washdc.fios.verizon.net] has joined #go-nuts 00:12 -!- adu [~ajr@pool-72-83-254-159.washdc.fios.verizon.net] has quit [Ping timeout: 240 seconds] 00:15 -!- adu [~ajr@pool-173-66-10-202.washdc.fios.verizon.net] has joined #go-nuts 00:17 -!- adu_ [~ajr@pool-173-73-1-173.washdc.fios.verizon.net] has quit [Ping timeout: 240 seconds] 00:19 -!- ildorn [~ildorn@vpnclient-241-246.extern.uni-ulm.de] has quit [Read error: Connection reset by peer] 00:19 -!- adu [~ajr@pool-173-66-10-202.washdc.fios.verizon.net] has quit [Ping timeout: 240 seconds] 00:21 -!- idr [~idr@g230125222.adsl.alicedsl.de] has quit [Remote host closed the connection] 00:27 -!- jodaro` [~user@poquito.divinia.com] has quit [Ping timeout: 255 seconds] 00:29 -!- iant [~iant@nat/google/x-hhcrnmkakhopbdhd] has quit [Ping timeout: 241 seconds] 00:31 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 00:34 -!- iant [~iant@67.218.105.75] has joined #go-nuts 00:34 -!- mode/#go-nuts [+v iant] by ChanServ 00:35 -!- iant [~iant@67.218.105.75] has quit [Client Quit] 00:35 -!- thiago__ [~thiago@189.59.200.174] has joined #go-nuts 00:35 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 00:36 -!- iant [~iant@67.218.105.75] has joined #go-nuts 00:36 -!- mode/#go-nuts [+v iant] by ChanServ 00:37 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has quit [] 00:39 -!- ildorn [~ildorn@dslb-188-105-116-027.pools.arcor-ip.net] has joined #go-nuts 00:44 < plexdev> http://is.gd/h1Zv0F by [Andrew Gerrand] in go/doc/codelab/wiki/ -- doc/codelab/wiki: replace curl with a Go program 00:48 -!- franksalim [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has joined #go-nuts 00:50 -!- meanburrito920 [~john@192.5.109.49] has joined #go-nuts 00:50 -!- meanburrito920 [~john@192.5.109.49] has quit [Changing host] 00:50 -!- meanburrito920 [~john@unaffiliated/meanburrito920] has joined #go-nuts 00:53 -!- devrim [~Adium@cpe-72-225-239-227.nyc.res.rr.com] has joined #go-nuts 00:55 -!- Scorchin [~Scorchin@host86-148-179-0.range86-148.btcentralplus.com] has quit [Quit: Scorchin] 01:02 -!- gabriel9 [~gabriel9@93.157.192.28] has quit [Remote host closed the connection] 01:20 -!- saturnfive [~saturnfiv@210.74.155.131] has joined #go-nuts 01:30 -!- decaf [~mehmet@95.15.18.7] has joined #go-nuts 01:31 -!- Tuller [~tuller@c-69-143-52-174.hsd1.va.comcast.net] has quit [Remote host closed the connection] 01:35 < decaf> anyone tried this doc? 01:35 < decaf> it seems, fields of page struct has to be uppercase 01:36 -!- felipe [~felipe@unaffiliated/felipe] has quit [Quit: felipe] 01:40 -!- thiago__ [~thiago@189.59.200.174] has quit [Quit: bye] 01:42 < skelterjohn> decaf: What exactly are you asking? 01:43 < decaf> didn't work for me, variables in templates, with "not exported" error 01:44 < skelterjohn> I need some context 01:45 -!- CrazyThinker [~san@unaffiliated/mosva] has quit [Ping timeout: 240 seconds] 01:45 < skelterjohn> for instance, what didn't work for you 01:46 < decaf> edit page of wiki for example 01:46 < skelterjohn> is this something to do with godoc? 01:47 < decaf> sorry 01:47 < decaf> http://golang.org/doc/codelab/wiki/ 01:48 < decaf> I tought I pasted this first 01:49 < skelterjohn> are you doing this via multiple packages? 01:49 < skelterjohn> perhaps, one package for your code and another main package to make an executable? 01:49 < decaf> no, only one source file 01:49 < skelterjohn> the export issue only arises when you are doing things between packages 01:49 < skelterjohn> could you put the source file in a pastebin? I can try to compile it 01:50 < skelterjohn> then i'd have a better idea of what's going on 01:50 < decaf> http://golang.org/doc/codelab/wiki/final.go I used this one in secont try, to make sure code is correctly written 01:52 < skelterjohn> i wish those line numbers weren't there... 01:52 < skelterjohn> what line number is the compile error? 01:52 -!- meanburrito920 [~john@unaffiliated/meanburrito920] has quit [Ping timeout: 240 seconds] 01:52 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has joined #go-nuts 01:53 < decaf> use vim, ctrl+v :) 01:53 -!- meanburrito920 [~john@192.5.109.49] has joined #go-nuts 01:53 -!- meanburrito920 [~john@192.5.109.49] has quit [Changing host] 01:53 -!- meanburrito920 [~john@unaffiliated/meanburrito920] has joined #go-nuts 01:53 < skelterjohn> can't stand vim 01:53 < skelterjohn> but that's another conversation 01:54 < decaf> there is no compile error 01:54 < decaf> it doesn't render templates 01:55 -!- m4dh4tt3r [~Adium@70-36-245-216.dsl.static.sonic.net] has quit [Quit: Leaving.] 01:55 < skelterjohn> oh 01:55 < skelterjohn> if there is no compile error then it's not an export issue 01:56 < skelterjohn> that is purely compile-time 01:56 < rm445> I just tried it, if you run the executable you get: <h1>Editing line 7: name not exported: title in type *main.page 01:57 < skelterjohn> i guess it's doing some reflect stuff? 01:57 < skelterjohn> which kinda invalidates what i said a second ago 01:57 -!- jodaro` [~user@poquito.divinia.com] has joined #go-nuts 01:57 -!- meanburrito920 [~john@unaffiliated/meanburrito920] has quit [Client Quit] 02:00 -!- iant [~iant@67.218.105.75] has quit [Quit: Leaving.] 02:06 -!- niemeyer [~niemeyer@189-10-208-149.pltce701.dsl.brasiltelecom.net.br] has quit [Ping timeout: 240 seconds] 02:11 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has quit [Quit: adu] 02:14 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has joined #go-nuts 02:29 -!- exch [~exch@h78233.upc-h.chello.nl] has quit [Ping timeout: 240 seconds] 02:30 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 02:31 -!- exch [~exch@h78233.upc-h.chello.nl] has joined #go-nuts 02:31 -!- ildorn1 [~ildorn@dslb-188-099-197-114.pools.arcor-ip.net] has joined #go-nuts 02:33 -!- ildorn [~ildorn@dslb-188-105-116-027.pools.arcor-ip.net] has quit [Ping timeout: 276 seconds] 02:38 -!- felipe [~felipe@unaffiliated/felipe] has joined #go-nuts 02:39 -!- m4dh4tt3r [~Adium@adsl-76-205-56-82.dsl.pltn13.sbcglobal.net] has joined #go-nuts 02:39 -!- m4dh4tt3r1 [~Adium@217.sub-75-210-4.myvzw.com] has joined #go-nuts 02:44 -!- m4dh4tt3r [~Adium@adsl-76-205-56-82.dsl.pltn13.sbcglobal.net] has quit [Ping timeout: 272 seconds] 03:22 -!- decaf [~mehmet@95.15.18.7] has quit [Quit: Leaving.] 03:25 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has quit [Quit: adu] 03:31 < plexdev> http://is.gd/bBnCIr by [Robert Griesemer] in go/src/cmd/gofmt/ -- gofmt -r: match(...) arguments may be nil; add missing guards 03:36 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has joined #go-nuts 03:36 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts 03:36 -!- mode/#go-nuts [+v iant] by ChanServ 03:36 -!- fzzbt [~fuzzybyte@77.79.7.8] has quit [Ping timeout: 240 seconds] 03:50 < Broady> http://lca2011.linux.org.au/stream/N518-Videokollektiv(US).html 03:50 < Broady> watch adg talking live 03:54 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Quit: itrekkie] 03:54 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 03:56 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has quit [Remote host closed the connection] 04:00 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 04:03 -!- quantumelixir [~chillu@203.110.240.41] has quit [Ping timeout: 240 seconds] 04:05 -!- quantumelixir [~chillu@203.110.240.41] has joined #go-nuts 04:05 -!- camnaes [~cm@c-69-255-143-16.hsd1.md.comcast.net] has quit [Quit: ] 04:12 -!- Eridius [~kevin@unaffiliated/eridius] has quit [Ping timeout: 241 seconds] 04:13 -!- jodaro [~user@70-36-136-156.dsl.dynamic.sonic.net] has joined #go-nuts 04:24 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 276 seconds] 04:43 -!- jodaro [~user@70-36-136-156.dsl.dynamic.sonic.net] has left #go-nuts ["ERC Version 5.3 (IRC client for Emacs)"] 04:43 -!- jodaro` [~user@poquito.divinia.com] has quit [Quit: ERC Version 5.3 (IRC client for Emacs)] 04:44 -!- m4dh4tt3r1 [~Adium@217.sub-75-210-4.myvzw.com] has quit [Ping timeout: 255 seconds] 04:44 -!- jodaro [~user@70-36-136-156.dsl.dynamic.sonic.net] has joined #go-nuts 04:47 -!- SmoothPorcupine [~smooth@207.224.112.146] has joined #go-nuts 04:50 < SmoothPorcupine> Okay who's the one who was giving me grief about Go being simple and that some statements can't be expressions? 04:50 < SmoothPorcupine> Or the other way around or whatever. That the difference is valid. 04:56 < cbeck> Huh? 04:57 < cbeck> statement != expression, whats the issue? 04:58 < adu> that's what lines are for 04:58 < adu> and I think it makes up for it with the BLA x = y; z {} syntax 05:01 < cbeck> If you want to get all denotational about it, statements map an environment to a new environment, expressions map an environment to a value. 05:02 < adu> anyways, I think Go is not simple enough 05:02 < SmoothPorcupine> Issue? 05:03 < SmoothPorcupine> I guess if there's an issue, it's that people are allergic to advanced control flow. 05:03 < SmoothPorcupine> "I can't understand how this flows without reading the code, RAAAAAGE!" 05:03 < adu> and advanced synchronization primitives 05:04 < adu> channels are way cool 05:04 < SmoothPorcupine> But there was someone earlier telling me there are certain things that cannot be used as values. 05:04 < adu> what, like unicorns? 05:05 < SmoothPorcupine> No, like i++ or something I think. 05:05 < Boney> cbeck is right. 05:05 < Boney> I also add that seperation of statements and expressions is a good thing and aids in debugging. 05:05 < Boney> consider 05:05 < SmoothPorcupine> somecall(someint++) isn't valid I think. 05:05 < SmoothPorcupine> Not sure. 05:06 < Boney> x = f(y++, y++); 05:06 < SmoothPorcupine> It is? 05:07 < Boney> yeah sure, different programmers can resionably disagree about what they think the above language should do. 05:07 < Boney> that is they'd have to refer to the language spec. 05:07 < Boney> if you make it illegal to embed a statement within an expression you solve this problem. 05:08 < SmoothPorcupine> People arguing is a problem? 05:08 < SmoothPorcupine> But let's be direct: That applies globally. 05:08 < Boney> this makes reading code and debugging easier - the two things that contribute the most to a programmer's time. 05:08 < SmoothPorcupine> f(y(),y()) 05:08 < Boney> does y() modify y? 05:09 < Boney> it may modify the environment (in most languages) which I beleive is bad. 05:09 < Boney> I prefer pure declarative languages. 05:09 < SmoothPorcupine> No. 05:11 < SmoothPorcupine> I don't see how it matters if it does or doesn't. 05:11 < SmoothPorcupine> y is called twice. 05:12 < SmoothPorcupine> But, oh no! How can I tell what order they are executed in! 05:12 < SmoothPorcupine> What if the calls are reversed and I get the wrong return value?! 05:13 < SmoothPorcupine> The call on the left is executed first and it's return value will be used as the first parameter to f. 05:13 < SmoothPorcupine> This is all before the second call to y. 05:16 < SmoothPorcupine> Really there's only one way f(y++,y++) is gonna go down unless the same uncertainty applies to f(y(),y()). 05:26 < SmoothPorcupine> Ah it was Namegduf. 05:28 -!- keithcascio [~keithcasc@nat/google/x-qfxpxiurtesaqvos] has quit [Quit: Leaving] 05:29 < SmoothPorcupine> Well so anyway, I figured out the return value for the remaining statements I couldn't think of a real return value for. 05:29 < SmoothPorcupine> Sorta. 05:30 < SmoothPorcupine> Not entirely sure how it works for some goto cases. 05:34 < SmoothPorcupine> What's the nice thing panic does? 05:35 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Quit: JusticeFries] 05:35 -!- fzzbt [~fuzzybyte@77.79.7.8] has joined #go-nuts 05:37 < SmoothPorcupine> When did each of these features come into the language: panic(); defer ...; recover() 05:38 < cbeck> defer was there since release, as I think was panic 05:38 < cbeck> recover was maybe 10mo ago? 05:40 < SmoothPorcupine> Yeah too bad about that. 05:44 < SmoothPorcupine> Actually I'm quite curious. What was the final thought that got recover() 'designed'? 05:49 -!- werdan7 [~w7@freenode/staff/wikimedia.werdan7] has quit [Read error: Operation timed out] 06:03 < plexdev> http://is.gd/2EbNL1 by [Robert Griesemer] in go/src/pkg/go/token/ -- token/position: added SetLinesForContent 06:03 < plexdev> http://is.gd/nfytwj by [Robert Griesemer] in go/src/cmd/godoc/ -- godoc: full text index for whitelisted non-Go files 06:20 < plexdev> http://is.gd/vd7O1a by [Robert Griesemer] in go/src/pkg/go/scanner/ -- go/scanner: fix build (adjust scanner EOF linecount) 06:22 <+iant> SmoothPorcupine: I think the final points were 1) let's make it only meaningful in a function run by defer, and 2) it gives us a clean way to return a status from a goroutine which panics 06:25 < taruti> is there a cleaner way of saying fmt.Sprintf("%v",x) ? 06:25 < j3parker> when building 6g i get "net.TestDialGoogle 06:25 < j3parker> err, a FAIL in there 06:25 < j3parker> due to a timeout 06:26 < j3parker> for an ip which seems to timeout from everywhere 06:26 < j3parker> 74.125.19.99 06:27 < j3parker> is there a way to just uh, ignore the tests? :P 06:32 -!- adu [~ajr@pool-71-191-154-210.washdc.fios.verizon.net] has quit [Quit: adu] 06:37 < j3parker> removing the dialgoogle and timeout tests "solved" my problems 06:37 < j3parker> i will investigate what is going on tomorrow; sleep now. 06:38 -!- tdc [~santegoed@host86-143-115-73.range86-143.btcentralplus.com] has joined #go-nuts 06:40 -!- gobeginner [~nwood@cpc2-lee23-0-0-cust152.7-1.cable.virginmedia.com] has joined #go-nuts 06:41 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 06:42 < SmoothPorcupine> iant, as opposed to...? 06:43 <+iant> j3parker: fixed in current sources; set DISABLE_NET_TESTS to disable temporarily 06:43 <+iant> SmoothPorcupine: not sure what you mean 06:43 < SmoothPorcupine> Go didn't ship with a way to stop panics for a reason. 06:44 < SmoothPorcupine> It's not really something you just forget to do. 06:44 <+iant> Because we hadn't figure out what we thought it should look like 06:44 < SmoothPorcupine> Right, because you hadn't decided to even do it. 06:44 -!- tdc [~santegoed@host86-143-115-73.range86-143.btcentralplus.com] has quit [Quit: tdc] 06:44 < SmoothPorcupine> If you had, you would. 06:44 <+iant> that was one of the choices on the table, yes 06:44 < SmoothPorcupine> As you do now. 06:44 <+iant> we had a sketch of a plan for how to do it before the release 06:44 <+iant> but it wasn't quite right 06:45 <+iant> we hadn't thought of only running recover in a defer function 06:45 <+iant> and we hadn't realize the way it would let us pick up goroutine status, which was another ongoing issue 06:45 < SmoothPorcupine> I want to know what finally got it into the language, where it deliberately was not. 06:45 <+iant> well, that's my answer 06:46 <+iant> the language is continuing to evolve 06:46 <+iant> as you can see from the mailing list 06:46 <+iant> we didn't make a deliberate choice to say "there is no way to catch a panic" 06:46 <+iant> we made a deliberate choice to say "we're not sure what the right way is, or even whether we want to do it" 06:47 < SmoothPorcupine> I'm just wondering if it was an arbitrary lapse in judgment like, "Oh well. I guess it's time to do 'exceptions,'" or was there some logic behind it that I don't see? 06:48 <+iant> You seem to be disbelieving my statements, but I'm not sure why 06:48 <+iant> for example, generics continue to be an open issue 06:49 <+iant> it may be that the decision is to not add generics 06:49 < SmoothPorcupine> Isn't the initial release date a decision? 06:49 <+iant> it may be that we add generics at some point 06:49 <+iant> sure, it was a decision that the language was good enough that other people could get useful work done in it 06:49 <+iant> and it was a decision that it was time to get more input 06:50 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 06:50 < SmoothPorcupine> So you chose just going public? :P 06:50 <+iant> it was the plan all along 06:50 < SmoothPorcupine> I mean, there are many ways to get input. 06:50 <+iant> it was public inside Google before it was public outside Google, if that is what you mean 06:51 <+iant> but there was no point to having a proprietary language 06:51 < SmoothPorcupine> Not wanting to turn Go into an incompatibility mess, you also want to minimize feature removal, which becomes considerably harder the longer the language is in "use." 06:51 <+iant> doing it open source was always the plan 06:51 <+iant> we're still willing to remove features 06:52 <+iant> I agree that compatibility is a consideration, but not yet a major one 06:52 <+iant> as I'm sure all Go developers are painfully aware 06:52 < SmoothPorcupine> Not as willing as you were when it'd only piss people inside Google off, though. 06:52 <+iant> I'm not sure it makes too much difference, to be honest 06:52 <+iant> maybe a little 06:52 <+iant> but not much 06:52 < SmoothPorcupine> Eh, I hope. 06:53 <+iant> in practice it's actually more painful for us to break code inside Google 06:53 < gobeginner> do you have a feel for how long the language feature set/syntax will take to settle down a bit? 6 months, a year, 5 years? 06:53 < SmoothPorcupine> So did you ever think /why/ exceptions cause pain? 06:53 <+iant> as in that case the programmers affected can walk over and yell at us in person 06:53 < SmoothPorcupine> As opposed to simple, "They do." 06:53 < SmoothPorcupine> simply* 06:54 <+iant> gobeginner: I think a year, but it's hard to know and I'm not in charge 06:54 -!- devrim [~Adium@cpe-72-225-239-227.nyc.res.rr.com] has quit [Quit: Leaving.] 06:54 <+iant> SmoothPorcupine: http://golang.org/doc/go_faq.html#exceptions 06:57 < SmoothPorcupine> "Instead of exceptions, it has a couple of built-in functions to signal and recover from truly exceptional conditions." 06:57 < SmoothPorcupine> Come on, be honest with me here. This is exceptions. 06:58 <+iant> it's a different way of thinking about them than in a language like C++, but, yes, it is exceptions 06:58 <+iant> they are dynamic rather than syntactic 06:58 < SmoothPorcupine> Er, oh, I guess maybe that's not someething you'd want to say publicly... 06:58 <+iant> is this not public? 06:58 <+iant> obviously I only speak for myself 06:59 <+iant> You seem to have a bit of a chip on your shoulder; did I do something to upset you? 07:00 < SmoothPorcupine> No, you're just the one that responded who gives the impression he knows what he's talking about. 07:00 < SmoothPorcupine> I'm sorry for coming off as abrasive if I am. 07:01 <+iant> not so much abrasive as cynical; I guess "chip on your shoulder" wasn't really the right phrase 07:01 <+iant> I'm just having fun with this work 07:01 < SmoothPorcupine> So, now, are you saying that the "convoluted code" resulting from exceptions is created by exception being syntactic, as opposed to dynamic? 07:02 < SmoothPorcupine> Essentially, the "why" I asked earlier would be, "Syntax complexity." 07:02 <+iant> I think that I personally would say that it's more a state of mind 07:02 < SmoothPorcupine> Hehehe, good answer. :P 07:03 <+iant> the throw catch syntax, and throw specifications on functions, make it seems that exceptions can be controlled 07:03 <+iant> people start to build exceptions into their API 07:04 -!- dforsyth_ [~dforsyth@bastion.inap.yelpcorp.com] has quit [Quit: Computer has gone to sleep.] 07:04 <+iant> I think the hope is that with a function called "panic" that is less likely to happen 07:04 <+iant> but yes, the mechanisms have similar power 07:04 -!- wrtp [~rog@92.17.43.14] has joined #go-nuts 07:04 <+iant> though of course defer is used for many things other than just recovering from a panic 07:05 < SmoothPorcupine> Okay, but then, wouldn't a better aim be to make exceptions controllable? 07:05 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 07:06 <+iant> I'm not sure that there is a language which has done that successfully 07:06 < SmoothPorcupine> *ahem* 07:06 < SmoothPorcupine> :P 07:06 <+iant> panic/recover seems to address the needs that we see 07:06 < SmoothPorcupine> Oh, I'm sure that it does. :P 07:07 <+iant> I'm sorry for missing your reference, but what language are you thinking of? 07:07 < SmoothPorcupine> Go. 07:07 < SmoothPorcupine> :P 07:07 <+iant> ha, OK 07:07 < SmoothPorcupine> The idea is that Go could be a language that does exceptions proper. 07:08 <+iant> We're open to ideas, but I think in this space it would have to be a really good idea 07:09 < SmoothPorcupine> I haven't formally conceptualized the specifics, but my "raw" idea is to make them resumable. 07:10 <+iant> C++ exceptions are resumable as I understand the term, by just using "throw;" 07:10 < SmoothPorcupine> "No such file? I know how to fix that. Let me just run this and... There! No need to panic." 07:11 < SmoothPorcupine> The thing about exceptions is they arbitrarity unwind the stack, yeah? 07:11 <+iant> well, they unwind the stack a bit, at least 07:12 <+iant> I see what you mean by resumable 07:12 < SmoothPorcupine> But that's it. There's never been a way to undo that damage. 07:12 <+iant> we've designed Go so that that kind of thing could be done at some point if we can figure out a way to make it work 07:13 <+iant> the deferred functions actually run without unwinding the stack 07:13 < SmoothPorcupine> Well, first you'd need a use case. 07:13 <+iant> then we unwind after one of them calls recover 07:13 <+iant> yeah 07:13 < SmoothPorcupine> But, how will you get a sense of a "valid" use of "exceptions" if they are discouraged? :P 07:14 <+iant> we look for ways that we find it frustrating or inefficient to write in Go 07:15 < SmoothPorcupine> Exceptions are simply another method of flow control, with a unique ability. 07:15 < SmoothPorcupine> That's the way I see it, anyway. 07:16 <+iant> sure 07:16 < SmoothPorcupine> A flow control in which you traverse long distances of stack. 07:16 < SmoothPorcupine> A "valid" use for them only arise in large systems, as I see it. 07:16 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 07:17 < SmoothPorcupine> Actually, now that I think of it, I have made such a system... 07:17 < SmoothPorcupine> Oh yeah that was the old input sytem I trashed. 07:17 < SmoothPorcupine> system* 07:18 < SmoothPorcupine> arises* 07:19 < SmoothPorcupine> Well anyway, what brought me here was I wanted to break from a function and return a function that would continue the execution after the break. 07:20 <+iant> call-with-current-continuation 07:20 <+iant> Go doesn't make that kind of code particularly simple 07:20 <+iant> we tend to use goroutines and channels instead 07:21 < SmoothPorcupine> Despite that the flow control is "wonky," I actually think this would make my code as clear as possible. 07:21 < SmoothPorcupine> Yeah this is in Ruby. 07:21 -!- chressie [~chressie@dreggn.in-ulm.de] has quit [Quit: WeeChat 0.3.4] 07:21 < gobeginner> If I followed the earlier part of this discussion the intention of panic/defer,recover rather than try/catch is to shift developer behavior from "Exceptions are for general error handling use them where you like" to "panic/recover is for genuinely exceptional cases use the 'comma,ok' return syntax to handle predicable errors". 07:21 < gobeginner> Do Google have enough production Go code not written/reviewed by the core language developers to show if the renaming is having the intended effect on developers behavior? 07:22 <+iant> Not a good sample case as Google C++ developers don't use exceptions either 07:24 < SmoothPorcupine> What I'm working on is an HTTP server, where I see 5 unique events: request line, header, end of headers, body, and end of body. 07:26 < SmoothPorcupine> I may be ready to return a response after the request line, or I may want to delay in case a Host is selected, in which case I wait for the end of headers. 07:27 -!- chressie [~chressie@dreggn.in-ulm.de] has joined #go-nuts 07:27 < SmoothPorcupine> Or maybe I need to process the body to generate a reponse. 07:30 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 240 seconds] 07:33 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 07:33 < SmoothPorcupine> response.* 07:36 -!- gobeginner [~nwood@cpc2-lee23-0-0-cust152.7-1.cable.virginmedia.com] has quit [Ping timeout: 240 seconds] 07:36 < SmoothPorcupine> The only thing giving my flow control here any hint of apparence is that I don't randomize the case: blocks. 07:37 < SmoothPorcupine> the order of* 07:43 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 276 seconds] 07:45 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 07:51 -!- piranha [~piranha@5ED42E59.cm-7-5a.dynamic.ziggo.nl] has joined #go-nuts 07:52 -!- gobeginner [~nwood@84.92.0.53] has joined #go-nuts 07:53 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 255 seconds] 07:54 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 07:55 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|] 07:56 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 07:59 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has joined #go-nuts 08:06 < wrtp> SmoothPorcupine: have you looked at the http package? 08:07 < SmoothPorcupine> wrtp, in Go or Ruby? Sorta and yes. They both suck. 08:08 < SmoothPorcupine> What's more, every HTTP library I've come across sucks. 08:10 < wrtp> what sucks about the Go http package? (i'm not saying it doesn't, mind, i'm just interested) 08:14 -!- ildorn1 [~ildorn@dslb-188-099-197-114.pools.arcor-ip.net] has quit [Quit: Leaving.] 08:15 < SmoothPorcupine> Well for one, Request and Response aren't Message. 08:18 -!- nettok [~quassel@200.119.190.14] has quit [Ping timeout: 246 seconds] 08:20 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|] 08:21 < SmoothPorcupine> I'll just throw this out there. 08:22 < SmoothPorcupine> package somepack ... panic ConfFile { f = file.Open("conf","r") } 08:22 < SmoothPorcupine> recover somepack.ConfFile { file.Copy("someconf","conf") } 08:23 -!- Skola [~ik@5352A3FB.cm-6-3c.dynamic.ziggo.nl] has joined #go-nuts 08:23 < SmoothPorcupine> Obviously you'd not want to be calling is panic, but you get the idea. (I hope.) 08:25 < wrtp> what do you mean by "Request and Response aren't Message"? 08:26 < wrtp> what's "Message"? 08:26 < SmoothPorcupine> Aside from the request line and the response line, requests and responses are indentical. 08:26 < SmoothPorcupine> "HTTP Message" 08:27 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts 08:27 < wrtp> the difference is that a server receives one and sends the other 08:28 < SmoothPorcupine> Actually that's not complete. The mechanism file.Open uses to tripped the panic/recover isn't shown. 08:28 -!- Cyd [~zinc@unaffiliated/cydd] has joined #go-nuts 08:28 < SmoothPorcupine> wrtp, and what does a client do? 08:28 < SmoothPorcupine> trip* 08:28 < SmoothPorcupine> triggger* 08:28 < SmoothPorcupine> trigger* 08:29 < Cyd> how about you shut up 08:29 < Cyd> SmoothPorcupine 08:29 < SmoothPorcupine> Why? 08:29 < Cyd> cause 08:29 < Cyd> who do you think you are 08:30 < Cyd> acting all big and tough 08:30 < SmoothPorcupine> Maybe panic ConfFile file.Exists("conf") or something. 08:30 < SmoothPorcupine> Who do you think I am? 08:30 < wrtp> you're right, they are similar. but different enough to be different types. 08:31 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 08:31 < SmoothPorcupine> s/are/have embedded field/ 08:32 < wrtp> ? 08:33 < SmoothPorcupine> In my server I actually moved request/reponse line parsing into another struct{... req,res Message ...} 08:33 < wrtp> if you want them both to implement Message, that implies that sometimes you want to deal with both requests and responses without knowing which one you're using. when do you want to do that? 08:33 < SmoothPorcupine> I'm not saying that's necessarily valid or wise, just something I'm trying. 08:34 < wrtp> it doesn't seem like a reason that the http package sucks 08:34 < SmoothPorcupine> When reading everything after the request/response line. 08:34 < wrtp> just a reasonable API decision 08:34 < SmoothPorcupine> It is indentical in all behaviors. 08:35 < wrtp> when reading everything after the request/response line, both Request and Response have Body, which behaves identically in both cases. 08:35 < SmoothPorcupine> So does header parsing. 08:36 < SmoothPorcupine> The syntax is literally identical. 08:36 < taruti> Has anyone got example code creating a x509.Certificate? 08:36 < SmoothPorcupine> Many of the headers share the exact same behavior. 08:36 < wrtp> same thing - any header parsing can work on a header of type map[string]string. no need to depend on Request or Response 08:37 < taruti> ah, x509 has that as a test 08:37 < SmoothPorcupine> Cyd, I think I'm someone who can make logical points. 08:38 < SmoothPorcupine> Now who do /you/ think I am? 08:38 < Cyd> LISTEN 08:38 < Cyd> im sorry 08:38 < Cyd> :,( 08:39 -!- idr [~idr@e179146032.adsl.alicedsl.de] has joined #go-nuts 08:39 < SmoothPorcupine> Too late, I forgave you already. :P 08:39 < Cyd> ily :D 08:39 < Cyd> <3 08:40 < wrtp> i think AddHeader and GetHeader should probably work on map[string]string, not just on Response. 08:40 < wrtp> but they're fairly trivial functions anyway 08:41 < wrtp> it's still not a reason that the whole package sucks. 08:42 -!- Cyd [~zinc@unaffiliated/cydd] has quit [] 08:43 -!- boscop [~boscop@f055249227.adsl.alicedsl.de] has joined #go-nuts 08:43 < SmoothPorcupine> To me, and what I have thus far not been able to find, an HTTP library ought to be able to read and write requests and responses. 08:43 < SmoothPorcupine> That is, an HTTP library does parsing for both a client and a server. 08:44 < gobeginner> SmoothPorcupine: instead of the restart-in-place behavior you're after for error handling couldn't you just use function returns or channel messages and a compensate/replay approach? 08:44 < gobeginner> server---request--->handlerA --request---> handlerB 08:44 < gobeginner> handlerB encounters no file error 08:44 < gobeginner> handlerA <-- noFile-- handlerB 08:44 < gobeginner> handlerA ----missingFileCompensation--->handlerC 08:44 < gobeginner> handlerA <-----ok-------------------------------- handlerC 08:44 < gobeginner> handlerA --request---> handlerB 08:44 < gobeginner> server<---result---- handlerA <----result--- handlerB 08:44 < gobeginner> It would be slower than your requested change since all the logic in handlerB to the point of noFile is being replayed in the second call to it admittedly. 08:44 < gobeginner> wonder if that is readable on other folks terminals... 08:46 < SmoothPorcupine> I'm not really using exceptions all that much for the HTTP server. 08:48 < SmoothPorcupine> Currently the code exceptions on parse errors, but I haven't tested that yet. 08:50 < SmoothPorcupine> What I wanted on that is to do some kind of `return continue` thing that I don't really understand yet. 08:51 < wrtp> SmoothPorcupine: are you talking about something like the common lisp condition/restart system? 08:51 < SmoothPorcupine> It'd return a func() that when called would continue the function after the `return continue` statement. 08:52 < SmoothPorcupine> wrtp, not familiar with that. 08:52 < wrtp> sounds quite similar 08:52 < SmoothPorcupine> But I don't really expect Go to start turning all statement into expressions. :P 08:53 < wrtp> that's not the point. the point is that in lisp, you can raise a condition, have some handler handle it, and then pass control back to the code that raised it 08:54 < SmoothPorcupine> Thinking about stack-destroying control flow mechanisms just made me think of panic/recover. 08:54 < wrtp> it can lead to quite convoluted control flow 08:55 -!- devrim [~Adium@cpe-72-225-239-227.nyc.res.rr.com] has joined #go-nuts 08:56 < wrtp> in Go you can use goroutines to achieve the same effect. 08:56 < SmoothPorcupine> And if there's no handler? 08:56 < wrtp> then it's just like a normal exception. 08:57 < wrtp> or did you mean when using goroutines? 08:57 < SmoothPorcupine> I meant in lisp. 08:57 < wrtp> what i said, then 08:57 < wrtp> you could have a look at http://chaitanyagupta.com/lisp/restarts.html 09:00 < wrtp> common lisp is a language worth learning, BTW, just because it's got ideas used in so many other languages. 09:06 < SmoothPorcupine> Urgh. I can't read lisp. 09:07 < wrtp> it's worth perservering 09:07 -!- snearch [~snearch@f053000207.adsl.alicedsl.de] has joined #go-nuts 09:07 < wrtp> get hold of Pete Seibel's "Practical Common Lisp". it's a great intro. 09:08 < SmoothPorcupine> Can't I learn ideas without learning lisp? 09:09 < wrtp> if the ideas are framed in lisp, then it's worth learning that language (or at least a little of it) 09:09 < wrtp> it's not hard 09:09 < mpl> SmoothPorcupine: http://smgl.fr.eu.org/mpl/pics/funnay/lisp.png 09:11 < wrtp> ;-) 09:11 < SmoothPorcupine> Is that a function call or a method declaration? 09:11 < mpl> no idea, I don't know lisp either :) 09:13 < wrtp> it's scheme, i think. 09:13 < wrtp> the point about lisp is that you can't read it without knowing what the names mean. 09:14 < wrtp> that's where the hyperspec is essential: http://www.lispworks.com/documentation/HyperSpec/Front/ 09:14 < wrtp> for common lisp anyway 09:14 < SmoothPorcupine> I thought the point of lisp was that it was easy to parse, algorithmically speaking. 09:15 < wrtp> yes, but algorithmically speaking doesn't mean that you can understand what the code is doing 09:16 < wrtp> the uniform syntax has other advantages. 09:16 < SmoothPorcupine> If you can give a shorter example of that feature than a CVS parser, well hey. 09:17 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal] 09:17 < taruti> still no luck with certificates 09:18 < taruti> has anyone created a certificate and succesfully used that with tls+http? 09:19 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts 09:27 < taruti> got it :) 09:30 -!- sahid [~sahid@LNeuilly-152-21-22-10.w193-253.abo.wanadoo.fr] has quit [Quit: Ex-Chat] 09:30 -!- sahid [~sahid@LNeuilly-152-21-22-10.w193-253.abo.wanadoo.fr] has joined #go-nuts 09:36 < wrtp> taruti: could you paste a working example please? 09:36 < wrtp> what was the bit you were getting wrong? 09:39 -!- tvw [~tv@212.79.9.150] has joined #go-nuts 09:41 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 09:47 -!- gid1 [~gid@220-253-33-186.VIC.netspace.net.au] has joined #go-nuts 09:48 -!- gid [~gid@220.253-197-230.VIC.netspace.net.au] has quit [Ping timeout: 272 seconds] 09:48 -!- petrux [~petrux@host16-224-static.53-82-b.business.telecomitalia.it] has joined #go-nuts 09:54 < SmoothPorcupine> "If not for this restriction, this code: ... would copy standard input into a copy of buf, not into buf itself. This is almost never the desired behavior." 09:54 < SmoothPorcupine> That's another thing I wonder about. 09:55 < SmoothPorcupine> If you almost never want to pass a copy as an argument, why not make everything pointers and have dup()? 09:56 < wrtp> where's that sentence from? 09:56 < SmoothPorcupine> http://golang.org/doc/go_faq.html#different_method_sets 09:57 < wrtp> BTW here's a better description of the CL condition system: http://gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html 09:59 < wrtp> SmoothPorcupine: "why not make everything pointers?" - that's kind of the point. the Read method on bytes.Buffer takes a pointer. 10:00 < wrtp> if you've just made a copy of the Buffer, there's not much point in calling the Read method on a pointer to that. 10:00 < wrtp> and that's what io.Copy(buf, os.Stdin) would do (if you were actually allowed to copy bytes.Buffer, that is) 10:01 < SmoothPorcupine> Yeah, pointers are what you want to pass 99% of the time. 10:01 < wrtp> there are good counter examples 10:01 < SmoothPorcupine> Yes, but they only happen 1% of the time. 10:01 < wrtp> here's an example http://golang.org/pkg/image/#Point 10:02 < wrtp> here's another one, which is used quite a lot: http://golang.org/pkg/os/#Errno 10:03 < SmoothPorcupine> Obviously numbers don't have to be pointers. 10:04 < wrtp> yeah, but numbers are just another value. 10:04 < wrtp> why is a struct different from a number 10:04 < wrtp> ? 10:05 < SmoothPorcupine> For Point, how would that interface be ruined if structs were always pointers? 10:06 < SmoothPorcupine> You wouldn't need to be calling dup() to pass the arguments to every function, it's just change the code internally. 10:06 < SmoothPorcupine> it'd* 10:07 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 10:07 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 10:07 < SmoothPorcupine> A struct is different because it contains numbers. 10:07 < wrtp> it would mean that each call that created a new point would need a new allocation 10:07 < SmoothPorcupine> As opposed to being a number. 10:07 < wrtp> what about struct { i int } 10:07 < wrtp> currently it's as efficient to pass that around as to pass an int 10:08 < SmoothPorcupine> Er, isn't each call in the current one creating three copies for each function? 10:09 < wrtp> yes. but that's just copying two words for each one. by way of comparison, a slice holds three words. 10:10 < SmoothPorcupine> That's the solution to the other problem created by making pointers for number containers the default. 10:10 < wrtp> what's the solution? 10:10 < SmoothPorcupine> struct{int} 10:10 < wrtp> i don't understand 10:11 < SmoothPorcupine> dup() is the other solution. 10:11 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 240 seconds] 10:11 < SmoothPorcupine> 99% of the time, you want pointers to the things containing numbers, yes? 10:12 < wrtp> no 10:12 < SmoothPorcupine> >50% of the time? 10:12 < wrtp> you could say that about passing any value around. when do you want a pointer to the value, and when do you want the value itself? 10:13 < wrtp> it depends on the type. 10:13 < SmoothPorcupine> You want the pointer when the "value" is multiple values. 10:13 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 10:13 < SmoothPorcupine> When the value is a number, you just want the value. 10:13 < SmoothPorcupine> 99% of the time. 10:13 < wrtp> so you'd make a distinction between struct {i int} and struct{i, j int} ? 10:13 < zozoR> pointers are more efficient, unless you pass around primitive types 10:14 < SmoothPorcupine> Yes. 10:14 < wrtp> not necessarily 10:14 < SmoothPorcupine> Or kinda, depend on what you mean. 10:14 < wrtp> it can depend on the garbage collector 10:14 -!- virtualsue [~chatzilla@nat/cisco/x-symflgmwlvpftrgv] has joined #go-nuts 10:14 < wrtp> and copying a value is much cheaper if you don't have to do a new allocation 10:15 < wrtp> so if you're making lots of copies, a non-pointer type makes sense. 10:15 < SmoothPorcupine> Don't you? 10:15 < SmoothPorcupine> This is Go and not C. 10:15 < wrtp> x := struct{a, b int}; y := x 10:15 < wrtp> no allocations 10:15 < SmoothPorcupine> No? 10:16 < wrtp> no 10:16 < wrtp> i meant x := struct{a, b int}{}; y := x of course 10:16 < SmoothPorcupine> f := func(){x.a++} 10:16 < wrtp> ok, well using variables from a closure or taking their address is different 10:17 < SmoothPorcupine> x := struct{a, b int};y := &x 10:17 < wrtp> sure 10:17 < SmoothPorcupine> Er, +{} 10:17 < wrtp> if you want a pointer, you're going to get one 10:17 < wrtp> and pointers == allocation 10:17 < SmoothPorcupine> Okay, but what happens there? 10:18 < wrtp> the compiler sees that the address of x is taken, and allocates it on the heap not the stack 10:22 < SmoothPorcupine> What does this do? y := *&x 10:23 -!- wrtp [~rog@92.17.43.14] has quit [Ping timeout: 240 seconds] 10:26 -!- saturnfive [~saturnfiv@210.74.155.131] has quit [Read error: Connection reset by peer] 10:27 -!- bmizerany [~bmizerany@204.14.152.118] has quit [Remote host closed the connection] 10:28 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 240 seconds] 10:29 -!- wrtp [~rog@92.17.57.33] has joined #go-nuts 10:30 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 10:30 < SmoothPorcupine> wrtp, what does this do? y := *&x 10:30 < aiju> haha 10:30 < aiju> why would anyone do that? :P 10:31 < Ina> aiju, I can see someone using it on an exam question. 10:31 < aiju> oh wait, yeah it's putting x on the heap 10:31 < SmoothPorcupine> To make the compiler go out of it's way to make slower code I guess. 10:32 -!- qutron_xyxy [~xxx@91.187.10.84] has joined #go-nuts 10:32 < SmoothPorcupine> Even with that? 10:32 < aiju> SmoothPorcupine: i have no clue 10:32 < aiju> it could be simply optimized away 10:33 < aiju> yes, it is 10:35 -!- qutron_xyxy [~xxx@91.187.10.84] has quit [Remote host closed the connection] 10:36 < SmoothPorcupine> Well if the compiler is making decisions about what goes on the heap and what goes on the stack, it could instead base those decisions on if something is returned, used in a closure, or dup()'d. 10:41 < wrtp> SmoothPorcupine: it's exactly the same as y = x 10:42 -!- rlab_ [~Miranda@91.200.158.34] has joined #go-nuts 10:43 < wrtp> SmoothPorcupine: it's not necessarily stack vs heap. it's pointer vs non-pointer 10:44 < wrtp> oh, i see some of my previous messages may have been lost 10:44 < wrtp> i'll repeat 10:44 < wrtp> the compiler sees that the address of x is taken, and allocates it on the heap not the stack 10:44 < wrtp> also, about values, memory cache behaviour is important. 10:44 < wrtp> if we've got type T struct {x, y int} then there's a considerable difference between type S1 {a, b *T} and type S2 {a, b T} 10:45 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 255 seconds] 10:46 < SmoothPorcupine> Yes, that would be an issue, is struct equality were defined, or you could Read to fill structs. 10:47 < SmoothPorcupine> if* 10:57 -!- rlab_ [~Miranda@91.200.158.34] has quit [Read error: Connection reset by peer] 11:00 < wrtp> even more significant, what about []T vs []*T ? 11:03 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 11:08 < SmoothPorcupine> When do you ever want []T? 11:12 < wrtp> what about this, from the image package? type RGBA struct { 11:12 < wrtp> // Pix holds the image's pixels. The pixel at (x, y) is Pix[y*Stride+x]. 11:12 < wrtp> Pix []RGBAColor 11:12 < wrtp> Stride int 11:12 < wrtp> // Rect is the image's bounds. 11:12 < wrtp> Rect Rectangle 11:12 < wrtp> } 11:13 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping timeout: 240 seconds] 11:14 < SmoothPorcupine> What difference would it make if it were []*RGBAColor? 11:14 < wrtp> type RGBAColor struct {R, G, B, A uint8} 11:15 < wrtp> well, on a 64 bit machine, it would use up *at least* 3 times the space 11:15 < wrtp> and that's if heap allocation is perfectly efficient, which it is not 11:16 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined #go-nuts 11:16 < wrtp> also each time you looked at a pixel you'd have to do a pointer indirection 11:16 < SmoothPorcupine> Let's put it this way. 11:16 < wrtp> and you couldn't copy pixels with a simple memmove 11:17 < Namegduf> It would remove the ability to control memory layout. 11:17 < SmoothPorcupine> If the compiler makes it []RGBAColor, but the code handles them like pointers, when do you need to use dup()? 11:18 < wrtp> how can the compiler be that clever? 11:18 < aiju> the compiler is a bit clever when it comes to adding pointer indirection 11:18 < aiju> cf. the identical use of *Struct and Struct 11:19 < wrtp> if i've got var pix []RGBAColor and i do pix[0] = pix[3], how can the compiler know where i want that to make a copy of the underlying value or not? 11:19 < wrtp> aiju: that's an easy, locally based decision 11:20 < SmoothPorcupine> Doesn't really need to be. The only case I can think of is if you want to store the same T in two arrays. 11:20 < Namegduf> Or in another variable. 11:20 < wrtp> pix[0].X = 99; pix[3] = pix[0]; pix[3].X = 100; print(pix[0].X) 11:20 < wrtp> what should that print? 11:21 < aiju> 99 11:21 < aiju> structs are assigned by value 11:21 < wrtp> indeed 11:21 -!- tensorpudding [~user@99.23.127.179] has quit [Read error: Connection reset by peer] 11:21 < wrtp> but SmoothPorcupine is saying that the code should handle those like pointers 11:21 < aiju> if pix were []*RGBAColor it would print 100 11:21 < Namegduf> I don't understand why you'd want it. 11:21 < wrtp> i don't either 11:22 < Namegduf> Go has explicit pointers. 11:22 < SmoothPorcupine> Not two arrays, but two array slots then. 11:22 < Namegduf> This is just a random instance of it. 11:22 < SmoothPorcupine> Namegduf, that's what I wonder about. 11:22 < SmoothPorcupine> Why? 11:22 < Namegduf> Go doesn't do anything magic. 11:22 < SmoothPorcupine> 99% of the time that's what you want. 11:22 < wrtp> SmoothPorcupine: i really don't understand why you want to get rid of value structs 11:22 < wrtp> 99% isn't good enough 11:22 < SmoothPorcupine> Outside of the cases I mentioned above. 11:23 < wrtp> and it's not true anyway 11:23 < Namegduf> Because it's the same behaviour as everything else. 11:23 < wrtp> in some places, (e.g. image) it's more like 10% 11:23 < Namegduf> A slice behaves exactly the same whether it's storing pointers or structs or ints. 11:23 < SmoothPorcupine> Image is array, arrays are contigious in memory. 11:24 < SmoothPorcupine> That's why they are arrays.. 11:24 < SmoothPorcupine> .* 11:24 < Namegduf> They wouldn't if it was an array of pointers. 11:24 < wrtp> +1 11:24 -!- shvntr [~shvntr@59.35.232.141] has joined #go-nuts 11:24 < Namegduf> While the array would be contigious, the data pointed to by each entry would not be. 11:26 < SmoothPorcupine> When do you need an array of pointers? 11:26 < Namegduf> Often. 11:26 < SmoothPorcupine> Then an example should be easy to provide. 11:26 < Namegduf> A slice referring to a bunch of items stored elsewhere is common. 11:27 < SmoothPorcupine> '' 11:27 < Namegduf> Sometimes, quite often, the same value needs to be referred to from multiple places. 11:28 < SmoothPorcupine> '' 11:28 < Namegduf> WHENEVER that happens, a pointer must be used. Also, copying large structs around is slow, so those want pointers. This cases happen inside slices and arrays as often as outside. 11:28 < wrtp> the mapping of go types to memory layout is very straightforward to understand. all these have exactly the same memory characteristics: [2]byte; struct {a, b byte}; uint16 11:28 -!- niemeyer [~niemeyer@189-10-208-149.pltce701.dsl.brasiltelecom.net.br] has joined #go-nuts 11:28 < wrtp> that consistency counts for a lot 11:29 < wrtp> making a struct look like a pointer just "because it's what you want most of the time" loses that consistency 11:29 < SmoothPorcupine> Outside of what I said above, when? 11:29 < Namegduf> I just said. 11:29 < SmoothPorcupine> Namegduf, you didn't speak code. 11:30 < wrtp> http://golang.org/src/pkg/time/sleep.go 11:30 < wrtp> as one recent example 11:30 < wrtp> any time you want to store a collection of references to objects you might want a slice of pointers 11:31 < Namegduf> Arrays and slices have simple, well-defined behaviour regardless of the type they contain. Pointers, orthagonally, have well defined behaviour, as do structs. This would require special-casing, remove consistency, and make it more complicated to reason with. 11:31 < wrtp> var events []*event 11:32 < aiju> making a struct a pointer is thoroughly evil 11:32 < aiju> a struct is simply a collection of values 11:33 < wrtp> more code: find $GOROOT/src -name '*.go' | xargs grep '\[]\*' | wc -l 11:33 < wrtp> 432 11:34 < wrtp> at least 432 places where arrays of pointers are useful 11:34 < aiju> does it hurt that much to type that extra *? 11:34 < SmoothPorcupine> And event list argumebly ought to be a linked list. 11:34 < SmoothPorcupine> An* 11:34 < SmoothPorcupine> I'm not suggesting a change /should/ happen. 11:35 < SmoothPorcupine> I'm wondering why it is the way it is. 11:35 < SmoothPorcupine> As opposed to say, the other way around. 11:35 < aiju> because it's simple and consistent? 11:35 < taruti> Is there a reason why os.Exit is not implemented via a special panic? 11:35 < aiju> taruti: why should it? 11:35 < Namegduf> Catching all panics is fairly common. 11:35 < wrtp> SmoothPorcupine: why should an event list be a linked list? 11:36 < taruti> aiju: to execute deferred actions 11:36 < SmoothPorcupine> wrtp, ease of list modification. 11:37 < wrtp> SmoothPorcupine: you can modify arrays easily too 11:37 < Namegduf> SmoothPorcupine: It's the way it is, because the way it is is what you get when you put the rules for slices/arrays, the rules for pointers, and the rules for structs together. 11:37 < SmoothPorcupine> Let's say you want to remove the second event. 11:37 < Namegduf> That's an application-specific concern. 11:37 < Namegduf> You may or may not want that capability. 11:37 < SmoothPorcupine> Namegduf, I'm asking that. 11:37 < SmoothPorcupine> I know that. 11:37 < Namegduf> A design should be used appropriate to your actual needs. 11:37 < wrtp> e[1] = e[len(e)-1]; e = e[:len(e)-1] 11:37 < SmoothPorcupine> I'm asking WHY. 11:38 < Namegduf> Why what? 11:38 < wrtp> that removes the second event 11:38 < Namegduf> Why those rules all combine like that? 11:38 < wrtp> Namegduf: two conversations at once! 11:38 < wrtp> i thought he/she was asking why the list of events was an array not a linked list... 11:39 < SmoothPorcupine> wrtp, okay you don't mind moving the array forward. 11:39 < taruti> Has anyone implemented a panic-exit? 11:39 < SmoothPorcupine> How about I want to remove the item in the middle? 11:39 < wrtp> that doesn't move the array forward 11:39 < wrtp> it works for any n 11:39 < aiju> taruti: yes 11:39 < aiju> panic("exit") 11:39 < wrtp> e[n] = [len(e)-1]; e = e[:len(e)-1] 11:39 < taruti> haha 11:39 < Namegduf> taruti: You could just panic() directly. You would need to catch it to make it clean, though. 11:40 < taruti> Namegduf: yes, just unsure if someone has already nicely packaged this 11:40 < wrtp> taruti: what about go func(){os.Exit(0)} ? 11:40 < Namegduf> I'm not sure how you could package it nicely 11:40 < wrtp> nothing could catch that panic 11:40 < SmoothPorcupine> Namegduf, let's put it simply, "Why aren't pointers the default?" 11:41 < Namegduf> Because Go provides control of memory layout. 11:41 < SmoothPorcupine> Since duplication is used so little by comparison. 11:41 < wrtp> SmoothPorcupine: because a pointer points to a value. you can have a value without a pointer, but not the other way around 11:41 < Namegduf> It also provides obvious meaning to what x = y does. 11:41 < SmoothPorcupine> nil? :P 11:42 < wrtp> that's got a value. the value is nil. 11:42 < SmoothPorcupine> That's another thing that bugs me. Why can I not Read directly into structs? 11:42 < wrtp> SmoothPorcupine: because there are millions of ways that structs can be encoded 11:43 < Namegduf> Because it's horrifically unportable 11:43 < Namegduf> Pick a portable encoding 11:43 < Namegduf> Use that 11:43 < SmoothPorcupine> That just means structs aren't portable. 11:43 < SmoothPorcupine> Which, kinda defeats the purpose, doesn't it? 11:43 < wrtp> SmoothPorcupine: there are lots of ways you can go from a Reader to a struct 11:43 < Namegduf> No, it does not mean that. 11:43 < wrtp> structs are portable 11:43 < Namegduf> If you really want to, you can. You just have to use unsafe. 11:44 < wrtp> the particular memory layout that a struct is given on a particular machine by a particular compiler is not portable 11:44 < Namegduf> Read it into a byte array, use unsafe to treat it as an instance of the struct. 11:44 < Namegduf> Horribly unportable, which is why unsafe is and should be required. 11:44 < wrtp> SmoothPorcupine: what does it mean to Read into a struct {i **int} ? 11:45 < SmoothPorcupine> You don't store memeory pointers on disk. 11:45 < SmoothPorcupine> memory* 11:45 < aiju> if you want to read in a struct, use encoding.binary 11:45 < SmoothPorcupine> (Swap notwithstanding.) 11:45 < aiju> that does exactly what you want 11:45 < aiju> and is portable 11:46 < wrtp> if you're talking about disk storage, there will be some defined external format, and you'll need to conform to that. 11:46 < SmoothPorcupine> The idea is that the struct IS the format. 11:46 < Namegduf> The struct is not a format. 11:46 < SmoothPorcupine> And ought to be able to be copied to memory directly. 11:46 < SmoothPorcupine> "Able" 11:46 < aiju> structs look different on all machines 11:46 < Namegduf> A given struct will be compiled to different formats on different machines. 11:46 < SmoothPorcupine> "ought to be able" 11:47 < aiju> e.g. endianness 11:47 < aiju> or alignment 11:47 < Namegduf> Go back in time 11:47 < SmoothPorcupine> "ought" 11:47 < SmoothPorcupine> Namegduf, I'm trying. ); 11:47 < aiju> Namegduf: VAX mixed endianness? :) 11:47 < Namegduf> Convince the entire industry what you think "ought" to be the case 11:47 < Namegduf> And then it's relevant. 11:47 < SmoothPorcupine> Oh. 11:48 < SmoothPorcupine> I don't need to go back in time for that. 11:48 < Namegduf> Aside that, what you think ought to be the case doesn't matter. Machines have different endianness, different type sizes different alignment rules. 11:48 < Namegduf> Only the middle one is possibly influenceable by Go. 11:49 < aiju> Go could force little endian storage on all machines! 11:49 < SmoothPorcupine> Does encoding.binary just read to the memory if the architecture allows it? 11:49 < Namegduf> It converts. 11:49 < aiju> SmoothPorcupine: no 11:49 < Namegduf> To a standard encoding. 11:49 < aiju> binary.Read(file, &struct, binary.LittleEndian) 11:49 < aiju> i might have mixed up argument order 11:50 * wrtp thinks that SmoothPorcupine might just be trolling. 11:51 < SmoothPorcupine> I share many common traits with a troll, by my wonder about why pointers is genuine. 11:52 < aiju> the Plan 9 os package is terrible UNIX centered 11:52 < Namegduf> Required to permit control of memory layout, semantics of copying via assignment. 11:52 < Namegduf> os in general is UNIX-centred, it has to try to provide the same stuff 11:52 < taruti> wrote the exit wrapper if anyone is interested 11:52 < aiju> well, e.g. it forces numeric uids 11:53 < SmoothPorcupine> Wait, so if read()ing straight to memory will never be done, why do you need to control memory layout? 11:53 < taruti> aiju: a cleaner solution needs generics 11:53 < aiju> we have those, they are called interfaces 11:53 < wrtp> aiju: yeah, that's a problem 11:54 < wrtp> SmoothPorcupine: because excess memory usage leads to slow programs 11:54 < wrtp> i don't see how generics would help the fact that FileInfo.Uid is an int 11:54 -!- jkakar [~jkakar@252.Red-88-0-173.dynamicIP.rima-tde.net] has quit [Quit: Ex-Chat] 11:55 < wrtp> SmoothPorcupine: and keeping things together in memory can speed things up enormously with modern processors 11:55 < aiju> just make an interface providing an Equal method or similar 11:55 < SmoothPorcupine> wrtp, modern processors obsolete optimization. 11:55 < Namegduf> Implementing algorithms that do what you tell them to do with memory, plus cache consciousness, etc. 11:56 < wrtp> aiju: yeah, i think that making uid_t into an interface inside os might be a good idea 11:56 < wrtp> SmoothPorcupine: ha ha ha ha! 11:56 * wrtp is still laughing. 11:56 < jumzi> SmoothPorcupine is allways trolling :p 11:57 < wrtp> yeah, it's quite entertaining though 11:57 < aiju> that's why Windows 7 boots slower than fucking UNIX V6 11:57 -!- jkakar [~jkakar@252.Red-88-0-173.dynamicIP.rima-tde.net] has joined #go-nuts 11:57 < aiju> despite the machine being over 3000 times faster 11:57 < SmoothPorcupine> Let's just supposed it was reversed. 11:57 < jumzi> lol unix v6 IS JUST 9K LINES OF CODES 11:57 < aiju> jumzi: UNIX V6 is ~70 KLOC 11:57 < SmoothPorcupine> If you want something embedded, struct{*int}. 11:57 < aiju> jumzi: the kernel is not the OS ;) 11:58 < jumzi> meh 11:58 < jumzi> You know what i mean *sobs* 11:58 < aiju> if you want a language without pointers, go play with Python 11:58 < SmoothPorcupine> Ruby. 11:58 < aiju> after you got frustrated with crying at the compiler what should be passed by value and what by reference, come back :P 11:58 < SmoothPorcupine> But I'm not saying that. 11:59 < aiju> s/compiler/interpreter/ 11:59 < SmoothPorcupine> Not now at least. 11:59 < Namegduf> If you want a language where performance is considered irrelevant, go use Ruby, yes. 11:59 < jumzi> anyhow, where do the OS ends? 11:59 < aiju> jumzi: at the disk limit 11:59 < SmoothPorcupine> Namegduf, performance is very important in Ruby. 11:59 < aiju> i.e. when the disk is full 11:59 < jumzi> lol 11:59 < SmoothPorcupine> Development performance. ;) 11:59 < aiju> yes, slowing down development is important 12:00 < aiju> doesn't ruby have a .Second() method or some other shit on lists? 12:00 < SmoothPorcupine> No. 12:00 < jumzi> i looked at ruby 12:00 < jumzi> ...once 12:00 < aiju> orthogonality is for wimps 12:01 < jumzi> <instert whatever statement> is overrated 12:01 < SmoothPorcupine> Somehow I've never needed to bother looking up what orthogonality means with regard to programming. 12:01 < jumzi> damn 12:01 -!- millergarym_ [~chatzilla@203-219-89-242.static.tpgi.com.au] has joined #go-nuts 12:01 < SmoothPorcupine> Despite not knowing what it means. 12:01 < aiju> it means being able to actually know the language 12:01 -!- millergarym [~chatzilla@203-219-89-242.static.tpgi.com.au] has quit [Read error: Connection reset by peer] 12:01 < Namegduf> You should, it's a good thing. 12:01 < aiju> and not just the scratch around on the surface of a huge bloated library turd 12:02 < aiju> (cf. Java) 12:02 < SmoothPorcupine> What does it mean to know a language? 12:03 < jumzi> SmoothPorcupine: You're going all philosophical on me! 12:03 < SmoothPorcupine> I wasn't the one that said it. 12:03 < jumzi> Yes you where 12:05 -!- gid1 [~gid@220-253-33-186.VIC.netspace.net.au] has quit [Quit: Leaving.] 12:06 -!- gid [~gid@220-253-33-186.VIC.netspace.net.au] has joined #go-nuts 12:08 < quantumelixir> /join #euler 12:08 -!- decaf [~mehmet@95.15.18.7] has joined #go-nuts 12:12 -!- xash [~xash@d126119.adsl.hansenet.de] has joined #go-nuts 12:14 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has joined #go-nuts 12:14 < quantumelixir> Anyone here had some luck building gccgo? 12:15 < wrtp> quantumelixir: what platform? 12:15 < quantumelixir> wrtp: debian 12:15 < quantumelixir> I managed to get a binary .deb build but I don't have root privileges on that machine :( 12:15 < quantumelixir> and compiling was a big pain.. 12:16 < quantumelixir> I installed mpc, gmp, mpfr and then finally gccgo refused to build 12:16 < quantumelixir> wrtp: 64 bit 12:17 < aiju> alpha? 12:17 -!- ukai [~ukai@nat/google/x-pzllkunxmbnuayey] has quit [Ping timeout: 240 seconds] 12:17 -!- ukai [~ukai@nat/google/x-dgyswzrngstlwhuk] has joined #go-nuts 12:18 < quantumelixir> alpha? I checked out the lastest svn revision 12:18 < wrtp> i've only tried on a mac, and it failed. 12:18 < aiju> quantumelixir: i was referring to the platform :P 12:18 < aiju> quantumelixir: 64-bit is a stupid ambiguous marketing term 12:18 < quantumelixir> ok.. 12:19 < quantumelixir> wrtp: what did it fail with? 12:19 < aiju> quantumelixir: why not use 6g? 12:19 < quantumelixir> wrtp: anything to do with undefined references to "lexer_line" or "yyend"? 12:20 < quantumelixir> aiju: just interested in how good the compiler is 12:20 < quantumelixir> I've heard some fairly vague things being said about the gccgo compiler 12:20 < quantumelixir> I'd like to ascertain how much of it is true 12:21 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts 12:22 < SmoothPorcupine> wrtp. the second link is much better. 12:22 < wrtp> quantumelixir: well, good luck 12:22 < wrtp> SmoothPorcupine: good. 12:22 < SmoothPorcupine> I'm sure it all makes sense within lisp. 12:23 < wrtp> SmoothPorcupine: well, lisp isn't too different from other languages. the main differences are the syntax and the macro system. 12:23 < wrtp> and the condition system could work in other languages too. 12:23 < SmoothPorcupine> Basic concept is the same, yeah. Some panics can be handled higher up so there's no need to panic. 12:23 < wrtp> yeah 12:24 < wrtp> but in go, you'd probably do that by having the panicing routine send a message down a channel asking how to handle the problem. 12:24 < wrtp> then the handler can be inside another goroutine 12:25 < SmoothPorcupine> Or just pass an closure. 12:25 < SmoothPorcupine> a* 12:26 < wrtp> pass a closure where? 12:26 < SmoothPorcupine> But, as I said way up there, I imagine the "valid" use case for exceptions is in large systems. 12:26 < wrtp> why do you imagine that? 12:26 < SmoothPorcupine> Where flow control has to pass through large regions of stack. 12:26 < wrtp> i think the larger the system, the less you want exceptions 12:27 < SmoothPorcupine> wrtp, scroll up I don't have time to repeat all that I said. 12:27 < SmoothPorcupine> The conversation was mainly (only?) between iant and I. 12:28 < wrtp> i think i came online after that discussion 12:29 < SmoothPorcupine> I think giving them names like labels in the idea I posted way back there is probably the way to start thinking about how to do exception proper. 12:29 < SmoothPorcupine> idea code* 12:30 < SmoothPorcupine> "exceptions"* 12:30 -!- erus_ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has joined #go-nuts 12:30 < taruti> How is one supposed to read unix datagrams? 12:31 < erus_> How do I tell 8l to build a package? 12:31 < erus_> without using make 12:32 < wrtp> do you mean having a special syntax for exceptions? 12:33 < SmoothPorcupine> wrtp, you joined mid-conversation but you get most of the important stuff. 12:33 < Ina> wrtp, I believe he's talking 'try ... catch' blocks (or equivalents) 12:33 < SmoothPorcupine> Ina, no, more like prevent blocks. 12:38 < wrtp> i've just looked at your conversation with iant above, and i can't see you gave any reasons for exceptions being more valid on large systems. 12:38 -!- visof [~visof@41.233.117.228] has joined #go-nuts 12:38 -!- visof [~visof@41.233.117.228] has quit [Changing host] 12:38 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 12:39 -!- visof [~visof@unaffiliated/visof] has quit [Client Quit] 12:39 <@adg> indeed. why not just handle errors? 12:39 -!- visof [~visof@unaffiliated/visof] has joined #go-nuts 12:40 < wrtp> SmoothPorcupine: you said earlier: "Well anyway, what brought me here was I wanted to 12:40 < wrtp> break from a function and return a function that would continue the execution 12:40 < wrtp> after the break." 12:40 < wrtp> why did you want to break from the function? 12:40 < SmoothPorcupine> That is unrelated to exceptions. 12:40 -!- Skola [~ik@5352A3FB.cm-6-3c.dynamic.ziggo.nl] has quit [Quit: ciao] 12:41 < wrtp> ok, i thought it was related, sorry. 12:41 < SmoothPorcupine> 'A "valid" use for them only arises in large systems, as I see it.' 12:41 < SmoothPorcupine> They are not valid simply because you have a large system. 12:42 < wrtp> go on. have you got anything to back up that thought? 12:42 < SmoothPorcupine> No. 12:42 < wrtp> right 12:43 < SmoothPorcupine> Are "valid" use cases for exceptions, assuming they exist, supposed to arise in small systems that can be easily refactored to work without them? 12:43 < taruti> Is it an error that ListenUnixgram returns an UDPConn instead of an UnixConn? 12:43 < taruti> Reading unixgrams from an UDPConn is an error :( 12:43 < wrtp> SmoothPorcupine: they can arise in small systems that can be made simpler with them 12:44 < wrtp> SmoothPorcupine: for example if you're writing a recursive descent parser, it's easier just to panic (and catch it at the top) than to handle errors on every recursive call 12:44 < SmoothPorcupine> Sure, when in small systems the recovery function is small and workable. 12:45 < SmoothPorcupine> If there is recovery needed at all. 12:45 < gobeginner> ***trolling*** goto? 12:45 < aiju> gobeginner: goto is great, once you stop being a bigot 12:46 < gobeginner> I've used it where it made sense and very clearly documented the fact 12:47 < SmoothPorcupine> http://go-lang.cat-v.org/irc-logs/go-nuts/2011-01-27 05:44 marks when the exceptions conversation really starts. 12:47 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has joined #go-nuts 12:47 < aiju> dat exception discussion 12:48 < wrtp> SmoothPorcupine: yeah, i read it 12:48 -!- niekie [~niek@CAcert/Assurer/niekie] has quit [Ping timeout: 245 seconds] 12:48 < quantumelixir> Why is the default "int" on a 64 bit machine only 32bits in size? 12:48 < quantumelixir> Is there a way to change this behaviour? 12:48 < aiju> quantumelixir: why should it be else? 12:49 < quantumelixir> aiju: So that I don't have to explicitly typecase every single time I use it 12:49 < aiju> what are you doing with it? 12:49 < quantumelixir> numerical kind of stuff.. 12:49 < wrtp> quantumelixir: 32 bit ints take less memory and are just as fast. 12:49 < SmoothPorcupine> wrtp, you show up at 07:04. 12:49 < quantumelixir> it's not about speed 12:49 < aiju> use int64 if you want 64-bit 12:49 < Namegduf> If you care how big it is, then you presumably care even if you're on a 32bit system, right? 12:49 -!- decaf [~mehmet@95.15.18.7] has quit [Quit: Leaving.] 12:49 < SmoothPorcupine> Oh hey look at the time. 12:49 < wrtp> SmoothPorcupine: yeah, i read it in the logs 12:49 < SmoothPorcupine> Ah. 12:49 < quantumelixir> with 32bits my answers keep overflowing and all kinds of unexpected behaviour happens 12:50 < aiju> quantumelixir: then use int64 12:50 < Namegduf> You'll need int64 on all architectures, then 12:50 < aiju> 1,$s/\<int\>/int64/ the mighty ed! 12:50 < quantumelixir> aiju: Yeah.. but it's *really* painful to do the typecasting 12:50 < wrtp> quantumelixir: go only guarantees 32 bit ints. if you need 64 bits, then you need to use int64 12:50 < quantumelixir> my eyes hurt :( 12:50 < aiju> quantumelixir: what typecasting? 12:50 < aiju> int64 works just like int 12:50 < quantumelixir> for instance.. for i := int664(0); i < blah; i++ 12:51 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 240 seconds] 12:51 < aiju> var i int64 12:51 < KBme> or var i int64 12:51 < Namegduf> That's longer 12:51 < KBme> oops 12:51 < wrtp> nah, i'd do it like quantumelixir did 12:51 < Namegduf> But that's not so bad, it's just defining what type you're making. 12:51 < quantumelixir> But, it's so much easier to do it the way gcc does it -- C programs use 64bit ints by default! 12:51 < aiju> wtf 12:51 < aiju> no 12:52 < aiju> C programs use 32bit ints 12:52 < Namegduf> Only on x86_64. 12:52 < wrtp> quantumelixir: but then your program will break on 32 bit architecture 12:52 < KBme> oh, he wants: pragma ( int_is_actually_int64_please = true ) 12:52 < aiju> Linux uses LP64 12:52 < quantumelixir> aiju: oh? 12:52 < quantumelixir> KBme: :D 12:52 < aiju> meaning only long and pointer are 64 bits 12:52 < Namegduf> Doing what you want will still leave your program unportable. 12:52 < Namegduf> time.Seconds() returns an int64 12:53 < wrtp> quantumelixir: if you find yourself doing a lot of int64(0), you could do: const Z = int64(0) 12:53 < wrtp> then for i := Z; i < blah; i++ { } 12:53 < aiju> wrtp: constants should be named anyway 12:53 < aiju> const ONE = 1 12:53 < aiju> const TWO = 2 12:53 < KBme> heh 12:53 < Namegduf> int64(0) is not that long. 12:53 < quantumelixir> aiju: won't solve my problem -- which is having i interact with int64 12:53 < wrtp> i agree, but i was just pointing out a possibility, that's 7 chars shorter 12:53 -!- SmoothPorcupine [~smooth@207.224.112.146] has left #go-nuts ["I'd like to see waht became of an exception system like that."] 12:54 < KBme> aiju: and const ONE64 = int64(1) 12:54 < Namegduf> Ding dong the troll is dead 12:54 < Namegduf> :P 12:54 < wrtp> sigh 12:55 < aiju> i wonder if i can just wipe all cgo code in the gofy kernel runtime 12:55 < wrtp> can you have cgo code in a Make.cmd makefile? 12:56 < KBme> no 12:56 < KBme> or? 12:56 < wrtp> yeah, looks like no 12:56 < quantumelixir> the pkg/big library is really lacking.. for instance I can't do the equivalent of x += y 12:56 < KBme> no, what i remember is that you can't install cgo stuff with goinstall, but i think it's for the same reason 12:56 < quantumelixir> I must do something like x = x + y 12:57 < quantumelixir> don't know why there is no inplace increment 12:57 < quantumelixir> the method to do addition (Add) returns a new big.Int* 12:57 < aiju> wtf Go has operator overloading? 12:57 < quantumelixir> aiju: no no.. conceptually 12:57 < Namegduf> No. 12:58 < wrtp> quantumelixir: x.Add(x, y) 12:58 < wrtp> that's an in place increment 12:58 < quantumelixir> ! 12:58 < quantumelixir> wiat a sec 12:58 < quantumelixir> I was fairly certain that it wasn't there 12:58 < wrtp> it's always been there. 12:58 < aiju> aaaaaaaaaah stack switching 12:58 -!- niekie [~niek@CAcert/Assurer/niekie] has joined #go-nuts 12:58 < quantumelixir> major fail on my part then, sorry 12:58 < aiju> it makes me head ache 13:00 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts 13:02 < quantumelixir> hehe.. can you tell what this code does: http://pastie.org/1502259 13:02 < KBme> eww 13:02 < KBme> :D 13:03 < aiju> can you tall what this code does: http://aiju.phicode.de/code/sort 13:03 < quantumelixir> correct answer: no! 13:03 < quantumelixir> :D 13:03 < quantumelixir> wait.. let me see 13:04 < quantumelixir> aah.. obfuscation.. below the belt :P 13:05 < quantumelixir> aiju: it would have been fun if the url wasn't such a giveaway 13:06 < quantumelixir> aiju: indent fails miserably when I give your code as input 13:06 < aiju> haha 13:06 < aiju> :P 13:07 < quantumelixir> anyways.. if you wrote the numbers 1, 2, 3, .. in sequence then that function d(n) returns the digit at the nth place 13:09 < quantumelixir> aiju: does that compile? 13:09 < plexdev> http://is.gd/h90ucz by [Yasuhiro Matsumoto] in go/misc/vim/syntax/ -- misc/vim/syntax: set large value to 'syntax sync'. 13:09 < wrtp> i always liked this one: http://www.de.ioccc.org/1989/roemer.c 13:09 < aiju> quantumelixir: with gcc 13:09 < quantumelixir> aiju: where's the main()? 13:09 < aiju> right at the startß 13:09 < aiju> oh 13:09 < aiju> oops, no 13:09 < aiju> you need to add a main 13:10 < aiju> it compiles, but it doesn't link ;) 13:10 < quantumelixir> with what args to s()? 13:10 < aiju> pointer to first and last element of an int array 13:10 < quantumelixir> ah.. pedant! 13:10 < aiju> if you add main() it runs fine 13:10 < quantumelixir> wrtp: looks beautiful.. but then you have to look closer! 13:11 < wrtp> yeah. sadly it no longer seems to work 13:11 < quantumelixir> what was the intended effect? 13:12 < aiju> i can't say this often enough RDMSR/WRMSR is fucking retarded 13:13 < wrtp> quantumelixir: it calculated e 13:13 < quantumelixir> aiju: what does that code s(a,b) do? 13:13 < aiju> quantumelixir: quicksort a list of numbers 13:14 < quantumelixir> ok.. interesting 13:14 < quantumelixir> the swapping is a big hint I suppose 13:15 < quantumelixir> anyways.. I have some gre prep to do :( :( 13:15 < aiju> gre prep? 13:15 < aiju> oh i love Go runtime comments 13:15 < quantumelixir> "graduate record examination" 13:15 < aiju> // make sure g != nil 13:15 < aiju> no check or anything 13:17 < aiju> it loads a register and ignores the value … wtf 13:25 -!- DerHorst [~Horst@e176102061.adsl.alicedsl.de] has joined #go-nuts 13:25 < plexdev> http://is.gd/B28nNJ by [Andrew Gerrand] in go/doc/codelab/wiki/ -- doc/codelab/wiki: tests use available TCP port 13:26 -!- mosva [~mosva@unaffiliated/mosva] has joined #go-nuts 13:30 -!- gid [~gid@220-253-33-186.VIC.netspace.net.au] has quit [Quit: Leaving.] 13:36 -!- erus_ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has quit [Ping timeout: 265 seconds] 13:41 < aiju> any idiomatic type for a channel signalling completion? 13:42 < plexdev> http://is.gd/6Rrnrk by [Wei Guangjing] in go/src/cmd/ld/ -- 8l: fix ldpe sym name length == 8 strdup incorrect. 13:42 < plexdev> http://is.gd/tGk0YQ by [Wei Guangjing] in 2 subdirs of go/src/cmd/ -- 8l: add PE dynexport 13:42 < KBme> bool? 13:44 < skelterjohn> aiju: chan bool 13:47 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3] 13:53 < wrtp> i usually use bool 13:53 < wrtp> another possibility is struct{} 13:55 -!- CrazyThinker [~san@unaffiliated/mosva] has joined #go-nuts 14:01 < Namegduf> I wonder what struct{} actually turns into. 14:02 < aiju> null pointer or similar 14:03 < aiju> hm a single null byte 14:08 < wrtp> same as false 14:09 < wrtp> it's just got a longer constructor: struct{}{} 14:10 < aiju> can i use a channel in both directions? 14:10 -!- qjcg [~qjcg@208.88.110.46] has joined #go-nuts 14:11 < KBme> if you don't specify the direction, yeah 14:11 < KBme> noone does anyways 14:11 < KBme> you can theoretically do make(<-chan, len) 14:11 < KBme> or make(chan <-, len) 14:12 < KBme> (check the spec) 14:13 -!- erus_ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has joined #go-nuts 14:14 < erus_> Whats a decent build system for Go? (works on windows, preferably) 14:14 < aiju> make 14:15 < erus_> the Make.pkg file in go/src doesnt seem to like windows 14:15 < aiju> uh hu 14:16 < erus_> I get make: *** [_obj/s3dm.a] Error 1 14:19 < aiju> erus_: that line is useless 14:19 < erus_> i know how can i debug it 14:20 < aiju> start with nopasting the whole output :P 14:20 < gobeginner> if you have a bi-directional buffered channel with N slots in the buffer is that N messages buffered in both directions or two buffers of N message one at each end? 14:21 < jnwhiteh> there's one buffer 14:21 < gobeginner> thanks 14:21 < jnwhiteh> it can hold a max of N messages 14:21 < erus_> http://paste.ubuntu.com/559015/ aiju 14:21 < skelterjohn> erus_: try go-gb.googlecode.com 14:21 < erus_> Makefile here https://github.com/tm1rbrt/s3dm/blob/master/Makefile 14:21 < jnwhiteh> once you reach N, it becomes a syncronous channel, although the message in is not the same as the message out 14:22 < skelterjohn> i don't have windows, but someone tested it on windows, once 14:22 < erus_> ok thanks skelterjohn 14:22 < skelterjohn> and if you find a problem, let me know so i can fix it :) 14:22 < aiju> erus_: uh 14:23 < skelterjohn> erus_, aiju: looked like an issue of \ vs / 14:23 < aiju> could be 14:23 < skelterjohn> which make should be able to handle 14:25 -!- root___ [~root@69.194.193.89] has joined #go-nuts 14:27 < xash> Erstmal wichtig: Nicht mehr die Festplatte benutzen 14:27 < xash> Nix drauff schreiben oder so 14:27 < xash> Ups, sorry! :-( 14:30 -!- im2ee [im2ee@gateway/shell/bshellz.net/x-drbzkwbpxtveekiq] has joined #go-nuts 14:35 -!- pingveno [~pingveno@c-98-246-133-8.hsd1.or.comcast.net] has quit [Ping timeout: 264 seconds] 14:36 -!- shvntr [~shvntr@59.35.232.141] has quit [Ping timeout: 246 seconds] 14:37 -!- pingveno [~pingveno@c-98-246-133-8.hsd1.or.comcast.net] has joined #go-nuts 14:38 -!- shvntr [~shvntr@221.172.250.87] has joined #go-nuts 14:39 -!- cafesofie [~cafesofie@rnwifi-164-107-92-100.resnet.ohio-state.edu] has quit [Remote host closed the connection] 14:41 -!- pharris [~Adium@rhgw.opentext.com] has joined #go-nuts 14:45 -!- root___ [~root@69.194.193.89] has quit [Quit: Lost terminal] 14:47 -!- emjayess [~emjayess@pix1.i29.net] has joined #go-nuts 14:49 -!- ExtraSpice [~XtraSpice@88.118.33.48] has joined #go-nuts 15:02 -!- emjayess [~emjayess@pix1.i29.net] has quit [Quit: Leaving] 15:02 -!- clip9 [clip9@er.en.svarteper.com] has joined #go-nuts 15:03 -!- erus__ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has joined #go-nuts 15:06 -!- erus_ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has quit [Ping timeout: 265 seconds] 15:07 -!- fabled [~fabled@mail.fi.jw.org] has quit [Quit: Ex-Chat] 15:15 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts 15:16 -!- cafesofie [~cafesofie@dhcp-140-254-202-160.osuwireless.ohio-state.edu] has joined #go-nuts 15:20 -!- nettok [~quassel@200.119.188.201] has joined #go-nuts 15:23 -!- DerHorst [~Horst@e176102061.adsl.alicedsl.de] has quit [Remote host closed the connection] 15:28 -!- enherit [~enherit@h-72-244-170-106.lsanca54.static.covad.net] has joined #go-nuts 15:45 -!- Belg [~kim@gw-gbg.ilait.se] has joined #go-nuts 15:50 < wrtp> am i right in saying that all init functions in a package are always called before any init functions in packages that depend on it? 15:50 -!- idr [~idr@e179146032.adsl.alicedsl.de] has quit [Read error: Connection reset by peer] 15:50 < aiju> wrtp: yes 15:50 < wrtp> the spec doesn't seem to say to explicitly 15:50 < wrtp> s/to/so/ 15:51 -!- imsplitbit [~imsplitbi@64.39.4.132] has joined #go-nuts 15:51 < wrtp> but i can't see how it would work properly otherwise 15:52 < Namegduf> "If a package has imports, the imported packages are initialized before initializing the package itself. If multiple packages import a package P, P will be initialized only once." 15:52 < skelterjohn> if you depend on a package, your init can call functions from that package. but those functions can't be called before that package's init 15:53 < Namegduf> From the "Program execution" part of the spec. 15:54 -!- marten_ [~marten@62.21.178.171] has joined #go-nuts 15:55 -!- emiel_ [~emiel_@82-197-205-84.dsl.cambrium.nl] has joined #go-nuts 15:56 -!- visof [~visof@unaffiliated/visof] has quit [Ping timeout: 260 seconds] 15:56 -!- mattn_jp [~mattn@112-68-73-14f1.hyg1.eonet.ne.jp] has joined #go-nuts 16:02 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal] 16:05 < wrtp> Namegduf: ah yes. how could i have missed that?! 16:18 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has joined #go-nuts 16:18 < Belg> Is there a way for people to register packages on the package dashboard, or do they just add stuff there manually and when they feel like it? Too much old cruft there that doesn't build anymore.. 16:19 < skelterjohn> on the top right of the package list there is an entry form 16:19 < skelterjohn> i believe adg gets notified of things submitted there and will add them 16:20 < Belg> skelterjohn: Really? I must be cross-eyed or something, I never saw that. 16:20 < skelterjohn> :) 16:20 < skelterjohn> it's in the place where ads often go 16:20 < skelterjohn> you may have trained yourself to have a blind spot there 16:20 < emiel_> :) 16:20 < Belg> Ah, it's under "Projects". 16:20 < skelterjohn> oh i'm sorry, yes 16:20 < Belg> No, I saw the tabs, I just didn't get that it'd be under Projects. thanks :) 16:20 < skelterjohn> not the package list 16:23 < skelterjohn> Belg: what project are you submitting? 16:26 < Belg> skelterjohn: Nothing yet, I was just curious how the process worked. I got kind of burned by first using goconfig, then goconf, and now neither of them builds, and they're both still on the dashboard. Somebody made a working fork for goconf, but it's not listed. It seems like a shame, since I figure many people use the dashboard as a starting point when they're starting to play with Go. 16:26 < skelterjohn> what do goconfig and goconf do? 16:27 < Belg> They're just simple configuration file parsers, but very useful :) 16:30 -!- piranha [~piranha@5ED42E59.cm-7-5a.dynamic.ziggo.nl] has quit [Quit: Computer has gone to sleep.] 16:32 -!- mosva [~mosva@unaffiliated/mosva] has quit [Quit: mosva] 16:36 -!- CrazyThinker [~san@unaffiliated/mosva] has quit [Ping timeout: 260 seconds] 16:36 -!- TheSeeker2 [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has joined #go-nuts 16:37 -!- TheSeeker [~n@99-153-250-110.lightspeed.irvnca.sbcglobal.net] has quit [Disconnected by services] 16:38 -!- shvntr [~shvntr@221.172.250.87] has quit [Quit: leaving] 16:38 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 16:41 -!- Renich [~Renich@189.161.1.126] has joined #go-nuts 16:41 < Renich> I am... 16:41 < Renich> guys, need some advice 16:42 < Renich> anybody here familiar with spec files? (rpm) http://fedorapeople.org/~renich/go.spec 16:42 < Renich> I have a problem. FHS and go might not be best friends... maybe... 16:43 < Renich> anyway, do I need to put src into $GOROOT?? can't I put it somewhere like /usr/share/go or /usr/src/go ? 16:43 < skelterjohn> src for what? 16:43 < skelterjohn> your own project? 16:43 < Renich> or, is only Make.inc necessary for all this? 16:43 < Renich> skelterjohn: well, I dunno 16:44 < Renich> skelterjohn: I noticed web.go uses the Make.inc file 16:44 < skelterjohn> if you write some go source, generally you don't put it into $GOROOT/src 16:44 < Renich> skelterjohn: and the Make.pkg 16:44 < Renich> skelterjohn: no, sorry, I'm not explaining it right 16:44 < skelterjohn> Make.inc specifies how to compile things 16:44 < skelterjohn> Make.cmd or Make.pkg specifies what to compile 16:44 < skelterjohn> so you really need both 16:44 < Renich> skelterjohn: I'm trying to package go for fedora 16:44 < skelterjohn> oh i see 16:45 < Renich> skelterjohn: so, I wanted to put things where they should be according to FHS 16:45 -!- idr [~idr@e179146032.adsl.alicedsl.de] has joined #go-nuts 16:45 < Renich> skelterjohn: that's the problemo... src shouldn't be in /usr/lib64/go ... get me? 16:46 < Renich> and, as far as I can see, there is no $GOSRC env var 16:46 < Renich> skelterjohn: should a project need all the source or only the Make.* failes? 16:46 < skelterjohn> yeah... 16:46 < skelterjohn> well i know one thing at least will break if you don't put it in $GOROOT/src 16:46 < skelterjohn> and that is godoc 16:47 < Renich> skelterjohn: maybe these can be copied into lib64/go 16:47 < Renich> skelterjohn: and web.go too 16:47 < skelterjohn> building a project outside of the core shouldn't need any of the source from the standard library 16:48 < Renich> skelterjohn: yeah but, still, godoc needs Make.inc, right? so... what to do... ;=s 16:48 < Renich> maybe asking for a $GOSRC in the feature request secton? ;) 16:48 < skelterjohn> i think you should have it just copy the whole thing into somewhere and call it $GOROOT 16:48 < skelterjohn> but i don't know much about red hat's system 16:49 < Renich> skelterjohn: yeah, well, the problem is that source files shouldn't go in /usr/lib64/go (where libs are) nor in /usr/bin (where bins are) 16:50 < skelterjohn> how about /usr/local/go 16:50 < Renich> skelterjohn: it will work if I just copy src into $GOROOT 16:50 < Renich> skelterjohn: well, that would be fine if I didn't package go for fedora and only for myself 16:50 -!- pingveno [~pingveno@c-98-246-133-8.hsd1.or.comcast.net] has quit [Read error: Operation timed out] 16:50 < Renich> skelterjohn: I mean, it's a wanabe package... not yet in the repos... ;) 16:51 < gobeginner> :w 16:51 < skelterjohn> yeah, i don't really know what standard practice is. maybe someone else will chime in 16:51 < Renich> I'll try and make a feature request and send a patch... see if they like it 16:52 -!- enherit [~enherit@h-72-244-170-106.lsanca54.static.covad.net] has quit [Quit: leaving] 16:52 < skelterjohn> anyone having problems with github? trying to push, and "ssh: connect to host githib.com port 22: Operation timed out" 16:52 < Renich> brb 16:52 < Namegduf> I wish there was some configuration file parser in the stdlib. It seems wide enough in usefulness. 16:54 < Belg> Namegduf: Seconded.. 16:54 -!- pingveno [~pingveno@c-98-246-133-8.hsd1.or.comcast.net] has joined #go-nuts 16:54 < fzzbt> githib.com? 16:55 < Namegduf> I also wish it wasn't ini-file based, but that's a personal thing 16:55 < Namegduf> For most applications what matters is *some* format. 16:55 -!- erus__ [50b135f2@gateway/web/freenode/ip.80.177.53.242] has quit [Ping timeout: 265 seconds] 16:55 < taruti> ndb-style parsing! 16:55 < skelterjohn> fzzbt: yes 16:56 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has quit [Read error: Connection reset by peer] 16:59 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has joined #go-nuts 17:01 -!- rlab [~Miranda@91.200.158.34] has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org] 17:03 < uriel> adg: silly question, but why not allow comments in the Go blog? 17:04 -!- tvw [~tv@212.79.9.150] has quit [Remote host closed the connection] 17:08 -!- Project_2501 [~Marvin@82.84.82.140] has joined #go-nuts 17:14 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Ping timeout: 240 seconds] 17:14 -!- iant [~iant@216.239.45.130] has joined #go-nuts 17:14 -!- mode/#go-nuts [+v iant] by ChanServ 17:32 -!- Venom_X [~pjacobs@66.54.185.130] has joined #go-nuts 17:37 -!- photron [~photron@port-92-201-62-229.dynamic.qsc.de] has joined #go-nuts 17:38 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has joined #go-nuts 17:42 -!- marten_ [~marten@62.21.178.171] has quit [Quit: marten_] 17:43 -!- marten [~marten@62.21.178.171] has joined #go-nuts 17:43 -!- marten [~marten@62.21.178.171] has quit [Client Quit] 17:44 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has joined #go-nuts 17:49 -!- qjcg [~qjcg@208.88.110.46] has quit [Quit: qjcg] 18:05 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has quit [Quit: Morten. Desu~] 18:08 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has joined #go-nuts 18:12 -!- Venom_X [~pjacobs@66.54.185.130] has quit [Ping timeout: 276 seconds] 18:15 -!- wobsite [~ian@68-112-244-225.dhcp.oxfr.ma.charter.com] has joined #go-nuts 18:20 -!- tvw [~tv@e176002055.adsl.alicedsl.de] has joined #go-nuts 18:25 -!- idr [~idr@e179146032.adsl.alicedsl.de] has quit [Disconnected by services] 18:25 -!- mattn_jp [~mattn@112-68-73-14f1.hyg1.eonet.ne.jp] has quit [Quit: Ex-Chat] 18:25 -!- idr0 [~idr@e179146032.adsl.alicedsl.de] has joined #go-nuts 18:25 < wobsite> Hey, so building a hello world program on my linux/amd64 machine is resulting a 1.8M executable. this seemed kinda big to me, so I had a look on the mailing list, all I could find was someone griping about 700K executables for the same thing on darwin/amd64. I get that statically linked excetuables are going to be a bit bigger, and the fmt library brings it a fair amount of stuff, but 1.8M still seems kinda huge. 6l's -s flag brings i 18:26 -!- TheMue [~TheMue@p5DDF67F0.dip.t-dialin.net] has joined #go-nuts 18:26 < Namegduf> It has debugging information attached. 18:26 < Namegduf> The large "Hello World" in no way indicates that real applications are overly huge. 18:27 < aiju> real applications are just massively huge, not overly huge 18:28 < Tonnerre> Wasn't there some guy who wrote a hello world in ELF which was just a couple of bytes large? 18:28 < aiju> Tonnerre: it just set the return status 18:28 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has quit [Read error: Connection reset by peer] 18:28 < Tonnerre> Ah ok, it was true, not hello 18:28 < aiju> high level languages tend to have huge binaries, go play with assembly if you want small binaries :P 18:29 < Namegduf> A lot of it is debug information, I think, because it used to be 700K, and that's the only thing that could change it that much, I think. 18:30 < wobsite> ok. 18:30 < Namegduf> My ~10,000 line program compiles to 3.6MB 18:30 < wobsite> that's encouraging at least. 18:30 < Namegduf> With the same debug information 18:30 < aiju> ELF is nearly twice as large as a.out here :D 18:30 < aiju> 234K kernel 18:30 < aiju> 429K kernel.elf 18:30 < niemeyer> jnwhiteh: http://codereview.appspot.com/4071044/ 18:32 -!- AndyP_ [~andyp@baud.org.uk] has quit [Ping timeout: 240 seconds] 18:41 -!- dal33tdvr [~jrs311@mac-rm242-0205.wilbur.Lehigh.EDU] has joined #go-nuts 18:45 < dal33tdvr> does anyone know of a way to install go on solaris 10? 18:45 <+iant> dal33tdvr: gccgo is pretty close to working on Solaris 18:45 <+iant> I don't think 6g/8g work there, though 18:45 <+iant> of course it would be great if somebody did a port 18:46 < aiju> i'd like a VAX port 18:46 <+iant> you are far more likely to get that from gccgo than from gc 18:46 < dal33tdvr> i have 8g working, the binary that 8l produces is segfaulting 18:46 <+iant> dal33tdvr: yeah, that's the kind of thing that will happen 18:47 -!- Darxus [~darxus@panic.chaosreigns.com] has joined #go-nuts 18:49 -!- qjcg [~qjcg@208.88.110.46] has joined #go-nuts 18:58 -!- cafesofie [~cafesofie@dhcp-140-254-202-160.osuwireless.ohio-state.edu] has quit [Remote host closed the connection] 19:04 < skelterjohn> yeah, i'd imagine porting the compiler to be much more straightforward than porting the linker 19:04 < aiju> SPARC? 19:05 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has joined #go-nuts 19:05 -!- keithgcascio [~keithcasc@nat/google/x-vfldxnnjaujbcecy] has joined #go-nuts 19:05 -!- Project-2501 [~Marvin@dynamic-adsl-94-36-165-36.clienti.tiscali.it] has joined #go-nuts 19:05 < skelterjohn> is that directed at me? 19:06 < skelterjohn> if so, i don't understand the question 19:08 < skelterjohn> but i said the Xg compiler would be more straightforward because, as far as i know, it compiles to a special go format of binary, and the linker then turns it into something usable by the machine 19:08 -!- virtualsue [~chatzilla@nat/cisco/x-symflgmwlvpftrgv] has quit [Ping timeout: 265 seconds] 19:09 -!- gobeginner [~nwood@84.92.0.53] has quit [Quit: Leaving.] 19:09 -!- Project_2501 [~Marvin@82.84.82.140] has quit [Ping timeout: 265 seconds] 19:10 -!- petrux [~petrux@host16-224-static.53-82-b.business.telecomitalia.it] has quit [Quit: leaving] 19:12 -!- artefon [~thiagon@150.164.2.20] has quit [Quit: Leaving] 19:15 < plexdev> http://is.gd/S37r2W by [Gustavo Niemeyer] in go/src/cmd/6l/ -- 6l: Relocate CMOV* instructions 19:16 -!- cafesofie [~cafesofie@rnwifi-164-107-92-233.resnet.ohio-state.edu] has joined #go-nuts 19:17 -!- cafesofie [~cafesofie@rnwifi-164-107-92-233.resnet.ohio-state.edu] has quit [Remote host closed the connection] 19:17 -!- Venom_X [~pjacobs@66.54.185.131] has joined #go-nuts 19:17 < dario_> how can 8g say append was undefined ... isnt that built-in ?? 19:19 < wrtp> god cgo errors are so unhelpful! 19:19 < Darxus> I was worrying about the licensing situation, but it looks like google doesn't actually get anything that every recipient of the software doesn't get? 19:20 < Darxus> So it's more like a BSD type license, and not a (scary) open core situation? 19:20 < skelterjohn> dario_: hg pull -u? 19:22 -!- qjcg [~qjcg@208.88.110.46] has quit [Quit: qjcg] 19:24 < quantumelixir> iant: I tried building gccgo on a debian system after installing gmp, mpfr and mpc but the build failed with an "undefine reference to lexer_line", yyend, etc.. any ideas? 19:25 -!- dforsyth_ [~dforsyth@bastion.inap.yelpcorp.com] has joined #go-nuts 19:25 -!- eikenberry [~jae@ivanova.zhar.net] has quit [Ping timeout: 240 seconds] 19:25 < quantumelixir> I have the full error log somewhere around 19:25 < taruti> quantumelixir: do you have flex and bison installed? 19:25 <+iant> Darxus: yes, Go is under a BSD-style license 19:25 < quantumelixir> taruti: I did install bison 19:25 -!- saschpe [~quassel@opensuse/member/saschpe] has joined #go-nuts 19:25 <+iant> quantumelixir: did you install flex? 19:25 < quantumelixir> but I don't think it provides "yyend" 19:25 < quantumelixir> iant: I didn't 19:25 <+iant> you need it 19:26 < quantumelixir> oh, from? 19:26 <+iant> it's a GNU program 19:26 < quantumelixir> oh ok 19:26 <+iant> ftp.gnu.org/gnu/flex 19:26 -!- eikenberry [~jae@ivanova.zhar.net] has joined #go-nuts 19:26 <+iant> probably in Solaris repos too if there are Solaris repos 19:26 < quantumelixir> got it thanks 19:27 < quantumelixir> how close is the compiler to the specification? (gccgo) 19:27 -!- mhi^ [~mhi^@fob.spline.inf.fu-berlin.de] has joined #go-nuts 19:29 < jnwhiteh> niemeyer: taking a look now 19:29 < niemeyer> jnwhiteh: That's one of the issues solved.. there's another one which I must look at later 19:30 < jnwhiteh> niemeyer: whats the other one? 19:30 < niemeyer> jnwhiteh: The other one is related to hidden symbols.. you can avoid it by avoiding them 19:30 < Darxus> iant: Thanks. 19:31 < niemeyer> jnwhiteh: I know of an interesting approach to solve it, but I have hit an unrelated bug in the linker which will require more attention again 19:31 <+iant> quantumelixir: gccgo follows the language spec pretty much exactly 19:31 < quantumelixir> iant: I just installed flex 2.5.35 but the build still fails. How do I check if libfl.a provides lexer_line, yyend, etc.. 19:31 < quantumelixir> iant: oh neat 19:31 <+iant> you probably need to restart the build from scratch 19:31 <+iant> but what is being built when it fails? 19:31 < quantumelixir> gccgo 19:31 < quantumelixir> all the dependencies build properly 19:31 <+iant> I mean what file 19:32 < jnwhiteh> niemeyer: ah well, at least it's keeping your occupied =) 19:32 < taruti> just delete the objdir and restart. 19:32 < niemeyer> jnwhiteh: Yeah, it's killing my free time :-) 19:32 < taruti> installing dependencies does not help unless one nukes the objdir 19:33 < quantumelixir> iant: http://pastebin.mozilla.org/982480 line 9 19:33 <+iant> yes, install flex, remove your build directory, and start over 19:33 < jnwhiteh> niemeyer: I've been benchmarking the Go http package all day 19:33 < niemeyer> jnwhiteh: Why? 19:33 < jnwhiteh> all sorts of fun :P 19:33 < Darxus> What if a program uses source from the go language and other software that requires saying who the copyright belongs to? Saying "Copyright 2011 The Go Authors." for source you do not own copyright to would not be appropriate.... 19:34 < niemeyer> jnwhiteh: What results did you get so far? 19:34 < quantumelixir> why does svn status take so long? 19:34 < jnwhiteh> my concurrency research uses Go as the target language and the web server architecture that I'm writing a paper about currently needs to be benchmarked against something.. so I'm using the http.Handle() server as my base result for 'Go' code. 19:35 < skelterjohn> Darxus: there is a file somewhere that lists the go authors 19:35 < aiju> 6g is a shame 19:35 < jnwhiteh> niemeyer: on the setup I have right now which is one server, two clients on a local GB switch the server can handle about 6000 requests per second (600 connections with 10 requests per connection) before things start to go awry 19:35 < skelterjohn> you could import that file 19:35 < aiju> it takes about one second to compile my 101619 line file 19:35 < aiju> ridiculous, they call THAT a compiler? 19:35 < skelterjohn> how long did it take you to type that source? 19:35 < jnwhiteh> niemeyer: just added the GB switch recently, was hitting the network bottleneck on a 100Mb switch so only have run a few tests so far 19:35 < aiju> skelterjohn: it's a hexdump of a binary 19:35 < niemeyer> jnwhiteh: Nice :) 19:35 < Darxus> skelterjohn: That doesn't make "Copyright 2011 The Go Authors." appropriate. "Copyright 2011 The Go Authors [and some other people]." might be appropriate. Is that acceptable? 19:36 < jnwhiteh> all I need to show is that my architecture doesn't introduce TOO much overhead on top of the stock package 19:36 < jnwhiteh> the comparisons against other servers will be intersting 19:36 < jnwhiteh> especially for non-trivial server constructions 19:36 < skelterjohn> Darxus: I dunno, I'm not a go author :) 19:36 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has quit [Quit: Leaving.] 19:36 < jnwhiteh> luckily my server wasn't written for performance, it was written to make doing difficult things easier to do =) 19:37 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has joined #go-nuts 19:42 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has joined #go-nuts 19:42 -!- decaf [~mehmet@95.15.18.7] has joined #go-nuts 19:45 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has joined #go-nuts 19:47 -!- Eridius [~kevin@unaffiliated/eridius] has joined #go-nuts 19:51 < quantumelixir> iant: I installed flex and I'm adding flex/lib/ to my LD_LIBRARY_PATH before running make but the build still fails 19:52 <+iant> did you restart from scratch? 19:52 <+iant> i.e., run configure in a new empty directory? 19:52 < quantumelixir> I'm doing an in-source build 19:52 <+iant> oh, don't do that 19:52 <+iant> generally a bad idea with gcc 19:52 <+iant> always run configure from a different empty directory 19:52 < quantumelixir> ok fine will give it a shot 19:53 <+iant> you should probably restart with fresh sources, it's really hard to get the detritus of ./configure out of the source tree 19:53 < quantumelixir> svn status? 19:53 <+iant> hmmm, yeah, that should work, good point 19:53 < quantumelixir> it's a *huge* source tree that I had to download 19:53 <+iant> yep 19:54 < quantumelixir> did it pull in the elements for building the c, c++ compilers as well? 19:54 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has joined #go-nuts 19:54 <+iant> yes, they are all in the source tree 19:55 < Darxus> Has there been any work on making go self hosting? 19:55 < quantumelixir> yeah, that be much less painful 19:55 < quantumelixir> s/that/that'd/ 19:57 -!- kashia_ [~Kashia@port-92-200-19-160.dynamic.qsc.de] has joined #go-nuts 19:59 -!- wobsite [~ian@68-112-244-225.dhcp.oxfr.ma.charter.com] has quit [Quit: leaving] 19:59 < quantumelixir> I'm still getting a "gcc/gengtype.c:978: undefined reference to `lexer_line'" 20:00 -!- camnaes [~cm@c-69-255-143-16.hsd1.md.comcast.net] has joined #go-nuts 20:00 < quantumelixir> i.e. after running an out of source build 20:00 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts 20:01 -!- Kashia [~Kashia@port-92-200-30-31.dynamic.qsc.de] has quit [Ping timeout: 272 seconds] 20:01 -!- femtooo [~femto@95-89-198-16-dynip.superkabel.de] has joined #go-nuts 20:02 < quantumelixir> iant: How do I know for sure if libfl.a provides lexer_line? 20:02 <+iant> quantumelixir: it shouldn't be coming from libfl.a, it should be coming from the generated file gcc/gengtype-lex.c 20:02 <+iant> what does that file look like in your build directory? 20:03 < quantumelixir> just says #include "bconfig.h" 20:03 <+iant> that file should be generated by flex 20:04 <+iant> something has gone wrong with the way that it was geneated 20:04 <+iant> look for those commands in your make output 20:04 < quantumelixir> oh wait a minute, I haven't added flex/bin to my path! doh! 20:04 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has quit [Ping timeout: 240 seconds] 20:04 -!- dahankzter [~henrik@92-244-3-192.customers.ownit.se] has quit [Read error: Connection reset by peer] 20:05 < wrtp> iant: are there any known issues with cgo callbacks (no threads involved?) 20:05 < wrtp> if not, i've got a good test case 20:06 < wrtp> i'm trying to cut it down, but it's quite hard working out how to build a dynamic library under mac os... 20:06 <+iant> wrtp: I don't know of any issues with cgo callbacks when new threads are not created, no 20:07 < wrtp> i suspect it's to do with having a callback from a dynamic library, because the code in question looks quite straightforward (both in the library and outside it) 20:07 < wrtp> and a normal callback works ok 20:07 <+iant> sounds plausible 20:07 <+iant> I know very little about Mac OS shared libraries 20:07 < wrtp> i get throw: bad g in cgocallback 20:08 < wrtp> me neither. it used to be simpler. 20:08 < Darxus> --- FAIL: net.TestDialGoogle 20:09 < quantumelixir> build still fails.. maybe another day 20:09 < Darxus> The specified IP does not appear to be listening on the specified port (74.125.19.99:80). 20:09 < Darxus> $ telnet 74.125.19.99 80 20:09 < Darxus> telnet: connect to address 74.125.19.99: Connection timed out 20:10 < Darxus> So go is currently failing to build for anyone because it's required to connect to an IP that is not currently listening? 20:11 <+iant> Darxus: it's fixed in the development sources, I think 20:12 < Darxus> iant: So if I omit the "-r release" from the hg clone, it should work? 20:12 <+iant> yes 20:12 < skelterjohn> i think if it fails at that point, everything else has been built and you can use it with no problem 20:12 < Darxus> iant: Thanks. 20:15 -!- tensorpudding [~user@99.23.127.179] has joined #go-nuts 20:19 < Darxus> Woo, built. 20:20 < KBme> skelterjohn: i don't think so. if networking tests fail it'll leave you with an unfinished build 20:20 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has quit [Remote host closed the connection] 20:20 < KBme> there is an envvar to disable the net tests 20:20 < skelterjohn> there is definitely one network based test that always used to fail for me, but things still worked 20:21 < KBme> imho the tests shoudln't fail the build imo 20:21 < Darxus> Somebody should make it so http://golang.org/doc/install.html has instructions that work :P (possibly removing "-r release"?) 20:22 < KBme> no, somebody should fix the build 20:23 < Darxus> KBme: That would qualify as making it so that page has instructions that work. 20:23 <+iant> we should probably just do a new release 20:23 -!- _nil [~aiden@c-24-147-65-44.hsd1.ma.comcast.net] has joined #go-nuts 20:23 -!- Fish- [~Fish@9fans.fr] has joined #go-nuts 20:23 < _nil> hey guys :) 20:24 < _nil> adg: around? 20:27 < skelterjohn> does parser.ParseFile walk comments? 20:27 < skelterjohn> i know i have comments in this source file but i don't see *ast.Comment showing up 20:28 -!- Renich [~Renich@189.161.1.126] has quit [Remote host closed the connection] 20:29 <+iant> skelterjohn: you have to pass ParseComments in the mode parameter to ParseFile or whatever you are calling 20:29 < skelterjohn> ah, thanks 20:30 -!- temoto [~temoto@2a02:6b0:16:0:21e:68ff:fe55:14b2] has joined #go-nuts 20:31 < temoto> quantumelixir, how's your gccgo build? 20:34 -!- dal33tdvr [~jrs311@mac-rm242-0205.wilbur.Lehigh.EDU] has quit [Quit: dal33tdvr] 20:35 -!- mhi^ [~mhi^@fob.spline.inf.fu-berlin.de] has left #go-nuts [] 20:46 -!- eikenberry [~jae@ivanova.zhar.net] has quit [Ping timeout: 264 seconds] 20:46 -!- eikenberry [~jae@ivanova.zhar.net] has joined #go-nuts 20:47 -!- boscop [~boscop@f055249227.adsl.alicedsl.de] has quit [Ping timeout: 240 seconds] 20:48 < plexdev> http://is.gd/TNDj6W by [Russ Cox] in go/doc/ -- spec: remove non-blocking channel operators 20:49 < KBme> huh wat? 20:49 < KBme> spec: remove non-blocking channel operators 20:49 < KBme> what the hell? 20:50 < exch> wut 20:50 -!- xash [~xash@d126119.adsl.hansenet.de] has quit [Ping timeout: 250 seconds] 20:50 -!- qjcg [~qjcg@208.88.110.46] has joined #go-nuts 20:50 <+iant> the new idea is to use select for non-blocking operations 20:50 < skelterjohn> ohh 20:51 < skelterjohn> so now we can be threadsafe? 20:51 < skelterjohn> :) 20:51 <+iant> yeah, threadsafe checks of closed() 20:51 < skelterjohn> will it reuse the val, ok <- ch syntax, or something new? 20:52 <+iant> yeah, it will use that syntax, but "ok" will mean the channel is not closed 20:52 < skelterjohn> right 20:52 < skelterjohn> that's what i'd expect 20:52 < skelterjohn> +1 20:53 < exch> closed() is going out then? 20:53 < skelterjohn> i feel like closed() is still a useful function 20:53 <+iant> I think it will still be there 20:54 < exch> it allows checking for closing without popping a value from the channel 20:54 < skelterjohn> you might not want to read something off the channel just to check if it's closed 20:54 -!- skejoe [~skejoe@188.114.142.162] has joined #go-nuts 20:54 < skelterjohn> risky to do in a multithreaded context, but that's not the only context in which you might want to do it 20:54 < Namegduf> I'm not sure if there's a case where it can be used to mean anything 20:55 < Namegduf> Aside with other external rules limiting concurrency 20:55 < KBme> hmmm, i don't really get how the new way works yet 20:55 < Namegduf> Between you calling closed() and doing stuff it could have become closed; it's still either closed or not. 20:56 < Namegduf> It doesn't tell you much, although a positive result might be useful. 20:57 -!- niemeyer_ [~niemeyer@189-10-154-68.pltce701.dsl.brasiltelecom.net.br] has joined #go-nuts 20:57 < skelterjohn> KBme: saying "val, ok <- ch" will return either a value when when is available (with ok=true), or a zeroed val when the channel got closed (with ok=false) 20:59 -!- m4dh4tt3r [~Adium@c-69-181-223-245.hsd1.ca.comcast.net] has quit [Quit: Leaving.] 21:00 < skelterjohn> it's the same as "val <- ch; ok = closed(ch)" except that this only works when there is only one possible reader of ch 21:00 -!- boscop [~boscop@f055249227.adsl.alicedsl.de] has joined #go-nuts 21:00 -!- niemeyer [~niemeyer@189-10-208-149.pltce701.dsl.brasiltelecom.net.br] has quit [Ping timeout: 240 seconds] 21:01 -!- tensorpudding [~user@99.23.127.179] has quit [Remote host closed the connection] 21:01 -!- qjcg [~qjcg@208.88.110.46] has quit [Read error: Connection reset by peer] 21:03 -!- qjcg [~qjcg@208.88.110.46] has joined #go-nuts 21:04 -!- femtooo [~femto@95-89-198-16-dynip.superkabel.de] has quit [Ping timeout: 240 seconds] 21:08 < wrtp> i think the proposal is to remove closed() 21:08 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has joined #go-nuts 21:08 < wrtp> i couldn't think of anywhere that i've used it without a receive 21:09 < skelterjohn> certainly you can (and probably should) add extra infrastructure if you want to check without reading 21:10 -!- franksalim_ [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has joined #go-nuts 21:10 < skelterjohn> well, what if you just want to use it as a queue? 21:10 < skelterjohn> i often use a buffered chan as a code mutex 21:10 < wrtp> ok, but do you ever close it? 21:10 < skelterjohn> actually, that has nothing to do with close() 21:10 < skelterjohn> sorry 21:11 < skelterjohn> does len(ch) give the number of things in the buffer? 21:12 < wrtp> i think so 21:12 < skelterjohn> i can picture a monitor checking if there is communication between two goroutines by checking closed(ch), but there are better ways to do that 21:12 < wrtp> although i've never used that 21:13 -!- franksalim [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has quit [Ping timeout: 240 seconds] 21:23 < skelterjohn> how does one code a string that has // in it? 21:23 < skelterjohn> "\/\/" doesn't compile 21:23 < aiju> uh hu? 21:23 < aiju> "//"? 21:23 < skelterjohn> becomes a comment 21:23 < KirkMcDonald> skelterjohn: Eh 21:23 < KirkMcDonald> It does not. 21:23 < skelterjohn> then my syntax colorer lies 21:23 < skelterjohn> :) 21:24 < KirkMcDonald> Which editor is doing this? 21:24 < skelterjohn> well, now that i changed it, it colors it correctly 21:24 < skelterjohn> so, i might be confused 21:24 < KirkMcDonald> heh 21:24 < skelterjohn> either way, everything works fine now 21:29 -!- franksalim__ [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has joined #go-nuts 21:30 -!- tensorpudding [~user@99.23.127.179] has joined #go-nuts 21:30 -!- femtoo [~femto@95-89-198-16-dynip.superkabel.de] has quit [Read error: Connection reset by peer] 21:31 -!- ExtraSpice [~XtraSpice@88.118.33.48] has quit [Ping timeout: 240 seconds] 21:32 -!- ymasory [~ymasory@c-76-99-55-224.hsd1.pa.comcast.net] has joined #go-nuts 21:32 -!- franksalim_ [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has quit [Ping timeout: 240 seconds] 21:33 < gmilleramilar> is there an api call to get the path to the current user's home directory? 21:33 -!- saschpe [~quassel@opensuse/member/saschpe] has quit [Remote host closed the connection] 21:35 -!- qjcg [~qjcg@208.88.110.46] has quit [Read error: Connection reset by peer] 21:36 < Darxus> gmilleramilar: I would guess you should look for a way to access environment variables, and then read $HOME. 21:36 < gmilleramilar> wont work on windows, right? 21:37 < gmilleramilar> (not that I'm personally too worried about that) 21:37 < Darxus> Don't know how that would work. 21:37 < TheMue> os.Getenv("HOME") 21:37 -!- Urtie [~urtie@90-227-159-22-no57.tbcn.telia.com] has joined #go-nuts 21:38 < gmilleramilar> yeah, on windows it appears to be HOMEPATH 21:38 -!- m4dh4tt3r [~Adium@70-36-245-216.dsl.static.sonic.net] has joined #go-nuts 21:39 < Darxus> Bastards. 21:39 -!- pharris [~Adium@rhgw.opentext.com] has quit [Quit: Leaving.] 21:40 < Urtie> I'm playing around with gomongo a bit, but got curious about thread-safety. Is it generally a good idea in Go to connect to a database, or open a file or whatever, and pass the handle along to go-routines? Are the packages generally "go-routine-safe"? 21:40 < Namegduf> Go doesn't have goroutine-local storage. 21:40 < Namegduf> So yes; it'd be hard not to be. 21:41 < Namegduf> Things often aren't safe for concurrent access, but that's a different issue. 21:41 -!- m4dh4tt3r1 [~Adium@70-36-245-216.dsl.static.sonic.net] has joined #go-nuts 21:41 -!- m4dh4tt3r [~Adium@70-36-245-216.dsl.static.sonic.net] has quit [Read error: Connection reset by peer] 21:42 < aiju> how does handle syscalls in a single OS thread without locking everything up? 21:42 -!- tensorpudding [~user@99.23.127.179] has quit [Read error: Connection reset by peer] 21:43 <+iant> aiju: are you asking how Go handles it? 21:43 < aiju> yeah 21:43 <+iant> basically when a goroutine enters a system call, it takes the thread out of the list of runnable threads 21:44 <+iant> then the scheduler observes that the number of runnable threads is too low, and it starts a new one 21:44 < aiju> sounds terribly expensive 21:44 <+iant> when the goroutine exits the system call, the scheduler observers that the number of runnable threads is too high, and it suspends a goroutine 21:44 <+iant> no, it's cheap 21:44 <+iant> the threads don't go away or anything, they sit around waiting to be useful 21:46 -!- Urtie [~urtie@90-227-159-22-no57.tbcn.telia.com] has quit [Ping timeout: 276 seconds] 21:48 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.3] 21:50 -!- Urtie [~urtie@90-227-159-22-no57.tbcn.telia.com] has joined #go-nuts 21:53 -!- qjcg [~qjcg@208.88.110.46] has joined #go-nuts 21:53 < kimelto> iant: sounds like GCD, but local to the app ;) 21:57 < Urtie> Namegduf: Ok, so another hypothetical then, if you are up for it. If I pass the db-handle to a number of go-routines, and the connection to the db is lost, what would be a good GO'ish way of handling that? I couldn't let all the go-routines suddenly start trying to reconnect. I thought about passing information about it back to the main thread on a channel and let it handle it, but I don't know how best let the other routines know to wa 21:57 < Urtie> it for it. The sync package comes to mind, but Mutexes seem like the ugly way out somehow. 21:58 < aiju> Urtie: don't pass the handle 21:58 < aiju> that's the Go way 21:58 < Namegduf> You can't have multiple using it at once anyway. 21:58 < Namegduf> If something can use it it can reconnect to it 21:58 < aiju> sync is evil as well 21:59 < Urtie> So I have to stick the db handling in its own routine? I'm not sure how I would instruct it to fire off queries and return the responses. interface{}-channels? 21:59 < aiju> yeah 21:59 -!- KptnKrill [KptnKrill@c-65-96-145-193.hsd1.ma.comcast.net] has joined #go-nuts 22:01 < Urtie> Neat. That ought to teach me a few things in the process :) 22:01 < aiju> or maybe not interface{} but something more specific 22:02 < aiju> depends on the db 22:02 < aiju> i prefer using the in-kernel database 22:02 < aiju> called "filesystem" 22:05 < plexdev> http://is.gd/4kXt6s by [Evan Shaw] in 2 subdirs of go/src/pkg/ -- bytes: Add Buffer.ReadBytes, Buffer.ReadString 22:05 < Urtie> aiju: Not an option for me in this case, since the go-program will run on several machines and handle a fairly large db. I think I understand what types of channels I could use, but how would I pass new channels to the db-routine as more worker-routines start? Can I pass a Vector of slices to the db-routine and add/remove channels as I go, or am I missing the proper way to do it? 22:06 < Urtie> sorry, that's a vector of channels, not slices 22:06 < aiju> hm last time i checked my filesystem could handle files of several GB without trouble 22:06 < Urtie> I tend to prefer MongoDB over NFS and flat files any day :) 22:06 < Namegduf> Have a reply channel sent with the request, perhaps? 22:07 < aiju> Urtie: a channel of channels? 22:07 < Urtie> aiju: Oh, I didn't realize that was possible. Cool. 22:08 -!- tensorpudding [~user@99.23.127.179] has joined #go-nuts 22:08 < aiju> you can combine Go types in all possible ways 22:08 < aiju> channels of pointers to slice of structs with maps? sure why not? 22:10 -!- im2ee [im2ee@gateway/shell/bshellz.net/x-drbzkwbpxtveekiq] has quit [Quit: Lost terminal] 22:10 -!- TheMue [~TheMue@p5DDF67F0.dip.t-dialin.net] has quit [Quit: TheMue] 22:11 -!- skejoe [~skejoe@188.114.142.162] has quit [Quit: Lost terminal] 22:12 -!- JusticeFries_ [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 22:15 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Ping timeout: 250 seconds] 22:17 -!- Fish- [~Fish@9fans.fr] has quit [Quit: So Long, and Thanks for All the Fish] 22:17 -!- photron [~photron@port-92-201-62-229.dynamic.qsc.de] has quit [Ping timeout: 264 seconds] 22:18 -!- lmoura [~lauromour@186.212.153.8] has quit [Ping timeout: 240 seconds] 22:20 -!- wrtp [~rog@92.17.57.33] has quit [Quit: wrtp] 22:21 <@adg> _nil: am now 22:21 < plexdev> http://is.gd/2S11YG by [Robert Griesemer] in go/src/cmd/godoc/ -- godoc: tiny bug fix - use correct filename when comparing files against the index whitelist 22:21 -!- lmoura [~lauromour@186.212.153.8] has joined #go-nuts 22:25 -!- nettok_ [~quassel@200.119.159.214] has joined #go-nuts 22:26 < gmilleramilar> I'm calling os.Mkdir and then checking if err == nil || err == os.EEXIST 22:26 < gmilleramilar> is that the right way to compare errors, because it doesn't seem to be taking the right branch in my if stmt 22:26 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Remote host closed the connection] 22:26 -!- nettok [~quassel@200.119.188.201] has quit [Ping timeout: 276 seconds] 22:26 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 22:26 < gmilleramilar> that is the else clause gets executed when the directory exists. 22:29 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit: Verlassend] 22:35 -!- zozoR [~zozoR@56346ed3.rev.stofanet.dk] has quit [Quit: Morten. Desu~] 22:36 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has quit [Remote host closed the connection] 22:36 -!- JusticeFries [~JusticeFr@173-8-247-218-Colorado.hfc.comcastbusiness.net] has joined #go-nuts 22:39 -!- dju [dju@fsf/member/dju] has quit [Quit: Quitte] 22:40 <@adg> gmilleramilar: it should be 22:40 <@adg> gmilleramilar: put some print statements in to compare 22:41 < gmilleramilar> ok, thx. still wrestling with file permissions. will try in a minute 22:44 -!- artefon [~thiago@189.59.200.174] has joined #go-nuts 22:45 -!- dju [dju@fsf/member/dju] has joined #go-nuts 22:45 -!- m4dh4tt3r1 [~Adium@70-36-245-216.dsl.static.sonic.net] has quit [Quit: Leaving.] 22:46 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts 22:53 -!- imsplitbit [~imsplitbi@64.39.4.132] has quit [Quit: Bye!] 22:53 -!- qjcg [~qjcg@208.88.110.46] has left #go-nuts [] 22:54 -!- piranha [~piranha@5ED4B890.cm-7-5c.dynamic.ziggo.nl] has quit [Quit: Computer has gone to sleep.] 22:57 < gmilleramilar> adg: ok so os.EEXIST is an os.Errno and the return value of Mkdir is an os.PathError 22:58 <@adg> :) 23:01 < skelterjohn> what i do, when this is an issue, is fmt.Printf("%v\n", whateverIGot) 23:02 < gmilleramilar> yeah, but because they're all os.Errors (an interface implementing String()), that was less than helpful. 23:02 < gmilleramilar> it was %T that saved the day. 23:03 < gmilleramilar> so what I have now though is ugly, type-assert it to a *PathError, and check the Error field against os.EEXIST 23:03 < gmilleramilar> but maybe that's the right answer. 23:06 < uriel> good ridance to closed(), it caused way more confusion than anything 23:10 < uriel> adg: 17:03 < uriel> adg: silly question, but why not allow comments in the Go blog? 23:11 -!- snearch [~snearch@f053000207.adsl.alicedsl.de] has quit [Quit: Verlassend] 23:12 <@adg> uriel: the various aggregator sites do a good job of providing a space for comments 23:14 -!- idr0 [~idr@e179146032.adsl.alicedsl.de] has quit [Remote host closed the connection] 23:18 < rm445> hah, at least *we* get to comment at you! Seriously, I think your recent tutorial content on the Go blog is great. 23:19 < rm445> The more content like that there is around, the greater the chance people go from 'looking at Go' to actually feeling they can get to grips with it and use it for whatever they want to do. 23:20 -!- franksalim_ [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has joined #go-nuts 23:23 -!- franksalim [~frank@108-65-76-174.lightspeed.sntcca.sbcglobal.net] has quit [Ping timeout: 240 seconds] 23:24 < rm445> actually, adg, I had a question about your ODSC tech talk video (the url-shortening service). At the start, you introduce memory protection with mutexes, and I was *sure* you were going to go ah-ha, there is a better way, we shall share memory by communicating, with goroutines! 23:25 < rm445> I mean, your code was fine, but did you feel it was idiomatic Go, or were there specific reasons you went with using mutexes? 23:25 -!- cafesofie [~cafesofie@dhcp-140-254-202-51.osuwireless.ohio-state.edu] has joined #go-nuts 23:27 -!- Venom_X [~pjacobs@66.54.185.131] has quit [Quit: Venom_X] 23:29 <@adg> i think it's fine to use mutexes for some things 23:29 <@adg> but i am about to rework that whole talk for FOSDEM next week 23:30 <@adg> and thanks for your kind words about the blogs, we work hard on them 23:31 < rm445> :-) keep up the good work 23:38 -!- rinzai [~rinzai@host86-132-154-175.range86-132.btcentralplus.com] has joined #go-nuts 23:39 < mpl> damn, I didn't know Go would be at fosdem. I'd have planned to go then :( 23:40 -!- camnaes [~cm@c-69-255-143-16.hsd1.md.comcast.net] has quit [Quit: ] 23:48 < Boney> adg: Have you read about STM. It's a nice replacement for mutexes in that it avoids deadlocks. 23:49 < Boney> I realize Go has channels and all that business, just offereing another idea/perspective. 23:52 -!- dju [dju@fsf/member/dju] has quit [Quit: Quitte] 23:53 < temoto> Boney, have you read about MS Research abandoning STM project? :) 23:54 -!- itrekkie [~itrekkie@ip72-211-129-122.tc.ph.cox.net] has quit [Quit: itrekkie] 23:57 < Boney> temoto: nope. 23:57 -!- dju [dju@at.dmz.me] has joined #go-nuts 23:57 -!- dju [dju@at.dmz.me] has quit [Changing host] 23:57 -!- dju [dju@fsf/member/dju] has joined #go-nuts 23:58 < KBme> doesn't haskell also use stm? 23:59 < KBme> yep 23:59 < Boney> KBme: yes, Microsoft Research employes many of the GHC developers. 23:59 < temoto> Boney, http://www.infoq.com/news/2010/05/STM-Dropped 23:59 < KBme> i know, yea --- Log closed Fri Jan 28 00:00:05 2011