Go Language Resources Go, golang, go... NOTE: This page ceased updating in October, 2012

--- Log opened Sun May 01 00:00:26 2011
--- Day changed Sun May 01 2011
00:00 -!- tylerl [~tylerl@ip24-251-232-171.ph.ph.cox.net] has joined #go-nuts
00:00 < tylerl> are there runtime dependencies for programs built in go?
00:01 < Namegduf> No.
00:02 < tylerl> so if you use library code like the webserver, it compiles
in statically?
00:02 < Namegduf> Yes.
00:02 < tylerl> coo.  thanks
00:02 < Namegduf> Unless you're using cgo to link with non-Go code outside
the stdlib.
00:02 < tylerl> ic
00:03 < Namegduf> Later versions of Go may depend on the OS's libc, but
aside that, no runtime dependencies.
00:04 < tylerl> thats helpful.
00:05 < uriel> Namegduf: that is a real shame, shame on the OSes that have
destroyed all that was good about Unix *sigh*
00:05 < tylerl> when i install the developer libraries, whats the best way
to put it in a shared location for all users?  Does "sudo.bash" fit in there
anywhere?
00:06 < Namegduf> As far as I know, the easiest way is "don't", but for
actually doing it, I'm not sure.
00:06 < uriel> tylerl: just curious, but why do you want to do a system
install?
00:06 < Namegduf> Go gets "unhappy" if it can't write to its package
directory, and I don't know how to fix that (although it might be fixable)
00:06 < tylerl> uriel: several users on a machine wanting to write with go,
and would prefer to not duplicate the entire 250M tree in each's home dir
00:08 < tylerl> sorry..  800M source tree.
00:08 < Namegduf> Shouldn't be 800MB.
00:09 < Namegduf> It's 224MB here.
00:09 < vsmatck> 128mB
00:09 < tylerl> it balooned up to 800M after I ran "all.bash"
00:09 < Namegduf> Mine's had that run, so odd.
00:10 < cbeck> Mine is about 800M, but that's with all three toolchains
00:12 < tylerl> you still need ./src after you've built the toolchains?
00:12 < vsmatck> You'd need it for goinstall.
00:13 < tylerl> vsmatck: otherwise no?
00:14 < vsmatck> tylerl: Not sure.
00:14 < uriel> you really want goinstall
00:14 < tylerl> i do?
00:15 < uriel> yes
00:15 < uriel> goinstall is the way to install libraries and pretty much
anything go-related that is not part of the distribution
00:21 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
00:23 -!- Allotabits [~Joshwa@h18.214.213.151.dynamic.ip.windstream.net] has quit
[Ping timeout: 240 seconds]
00:44 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has joined #go-nuts
00:54 -!- tylerl [~tylerl@ip24-251-232-171.ph.ph.cox.net] has quit [Ping timeout:
276 seconds]
00:57 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
01:04 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
Verlassend]
01:06 -!- shvntr [~shvntr@116.26.135.102] has joined #go-nuts
01:11 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
01:13 -!- espeed [~espeed@63.246.231.57] has joined #go-nuts
01:16 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
01:17 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
01:17 -!- xash [~xash@d062158.adsl.hansenet.de] has quit [Quit: Lost terminal]
01:19 -!- Allotabits [~Joshwa@h18.214.213.151.dynamic.ip.windstream.net] has
joined #go-nuts
01:27 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has quit [Ping
timeout: 240 seconds]
01:29 -!- damikin11 [~chris@cpe-24-30-179-173.socal.res.rr.com] has joined
#go-nuts
01:30 -!- thomas_b [~thomasb@cm-84.215.47.51.getinternet.no] has joined #go-nuts
01:31 -!- gtaylor [~gtaylor@99-5-124-9.lightspeed.gnvlsc.sbcglobal.net] has joined
#go-nuts
01:31 -!- gtaylor [~gtaylor@99-5-124-9.lightspeed.gnvlsc.sbcglobal.net] has left
#go-nuts []
01:38 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 246 seconds]
01:41 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
01:49 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
01:53 -!- espeed [~espeed@63.246.231.57] has quit [Ping timeout: 250 seconds]
02:01 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has quit [Ping timeout:
248 seconds]
02:06 -!- anticw [~anticw@67.169.68.180] has quit [Ping timeout: 260 seconds]
02:09 -!- rlab [~Miranda@91.200.158.34] has quit [Read error: Connection reset by
peer]
02:25 -!- boscop_ [~boscop@g225209076.adsl.alicedsl.de] has joined #go-nuts
02:27 -!- boscop [~boscop@f055008161.adsl.alicedsl.de] has quit [Ping timeout: 250
seconds]
02:29 -!- artefon [~thiago@189.59.180.35.dynamic.adsl.gvt.net.br] has quit [Read
error: Connection reset by peer]
02:30 -!- Allotabits [~Joshwa@h18.214.213.151.dynamic.ip.windstream.net] has quit
[Ping timeout: 240 seconds]
02:41 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
02:43 -!- ab3 [~abe@83.101.90.66] has quit [Read error: Operation timed out]
02:47 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
02:56 < plexdev> http://is.gd/DxTyo4 by [Brad Fitzpatrick] in
go/src/pkg/http/ -- http: new error for reading a body after it's been closed
02:56 < plexdev> http://is.gd/5MoSK9 by [Brad Fitzpatrick] in
go/src/pkg/mime/multipart/ -- mime/multipart: fix regression from previous
ReadSlice change
02:58 -!- kr [~kr@182.sub-174-254-229.myvzw.com] has joined #go-nuts
03:01 -!- kr [~kr@182.sub-174-254-229.myvzw.com] has quit [Client Quit]
03:15 -!- jhawk28 [~jhawk28@user-387c58d.cable.mindspring.com] has quit [Quit:
Linkinus - http://linkinus.com]
03:25 -!- anticw [~anticw@c-98-210-108-13.hsd1.ca.comcast.net] has joined #go-nuts
03:28 -!- gedevan [~gedevan@83.167.106.253] has quit [Quit: Leaving...]
03:29 -!- Adys [~Adys@unaffiliated/adys] has quit [Quit: Quit]
03:29 -!- Adys [~Adys@unaffiliated/adys] has joined #go-nuts
03:57 -!- nictuku [~yvesj@unaffiliated/nictuku] has quit [Ping timeout: 250
seconds]
03:57 -!- nictuku [~yvesj@unaffiliated/nictuku] has joined #go-nuts
04:13 -!- vpit3833 [~user@CPE-58-160-37-24.phzl1.ken.bigpond.net.au] has joined
#go-nuts
04:17 -!- rejb [~rejb@unaffiliated/rejb] has quit [Disconnected by services]
04:17 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
04:18 -!- photron_ [~photron@port-92-201-19-120.dynamic.qsc.de] has joined
#go-nuts
04:19 -!- chadk [~chadk@S010600045a27676a.vs.shawcable.net] has joined #go-nuts
04:24 -!- a2800276_ [~a2800276@xdsl-87-79-214-206.netcologne.de] has joined
#go-nuts
04:24 -!- wchicken [~chicken@c-24-7-112-207.hsd1.ca.comcast.net] has joined
#go-nuts
04:24 < wchicken> hey guys -- how can I set the usage message with the flags
package?
04:26 -!- a2800276 [~a2800276@xdsl-213-196-209-13.netcologne.de] has quit [Ping
timeout: 246 seconds]
04:30 -!- jamesr [~jamesr@173-164-251-190-SFBA.hfc.comcastbusiness.net] has joined
#go-nuts
04:55 -!- gtaylor [~gtaylor@99-5-124-9.lightspeed.gnvlsc.sbcglobal.net] has joined
#go-nuts
04:58 < edsrzf> wchicken: You set a usage string for each flag that your
command uses
04:59 < edsrzf> wchicken: Alternatively, you can set the flag.Usage variable
to your own custom function that prints the usage.
04:59 < edsrzf> (I never noticed that second one before now, actually.)
05:00 < wchicken> edsrzf: ahh, I see.  the second is what I need since I
want to specify the usage of args instead of flags and it's nice to stay within
the flags package.  thanks!
05:10 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has joined #go-nuts
05:11 -!- jamesr [~jamesr@173-164-251-190-SFBA.hfc.comcastbusiness.net] has quit
[Quit: Leaving]
05:15 -!- arun_ [~arun@unaffiliated/sindian] has quit [Ping timeout: 250 seconds]
05:24 -!- damikin11 [~chris@cpe-24-30-179-173.socal.res.rr.com] has quit [Quit:
Leaving]
05:27 -!- tylerl_ [~tylerl@ip24-251-232-171.ph.ph.cox.net] has joined #go-nuts
05:29 < tylerl_> does go use epoll?
05:29 < tylerl_> (where available)
05:31 < vsmatck> yup
05:39 -!- gedevan [~gedevan@83.167.106.253] has joined #go-nuts
05:43 -!- foocraft [~dsc@78.100.208.32] has quit [Quit: Leaving]
05:46 -!- iant [~iant@216.239.45.130] has quit [Read error: Connection reset by
peer]
06:08 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts
06:08 -!- mode/#go-nuts [+v iant] by ChanServ
06:32 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has joined
#go-nuts
06:34 -!- nf [~nf@2001:470:21:20::4444:61d9] has joined #go-nuts
06:34 -!- mode/#go-nuts [+o nf] by ChanServ
06:36 -!- Viriix [~joseph@c-67-169-172-251.hsd1.ca.comcast.net] has left #go-nuts
[]
06:55 -!- wrtp [~rog@92.17.111.113] has joined #go-nuts
07:03 -!- gtaylor [~gtaylor@99-5-124-9.lightspeed.gnvlsc.sbcglobal.net] has quit
[Quit: gtaylor]
07:04 -!- piranha [~piranha@83.221.140.244] has joined #go-nuts
07:09 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
07:15 < kevlar> tylerl_: The best way to install Go for multiple users is to
put it in a standard place (say /opt/go) and add all users to a "gousers" group or
similar
07:16 < tylerl_> kevlar: do you only need write access to be able to install
new packages, or do you need it to be able to compile as well?
07:16 < kevlar> I would then make a root crontab to chown -R root:gousers
/opt/go && chmod -R g+w /opt/go
07:17 < kevlar> and then make a common goenv.sh file in /etc/bash.d/ or
whatever it is for your distro that adds the /opt/go/bin to their paths.
07:17 < kevlar> tylerl_: you only would need read access to compile your own
Go code, but you would need write access to update Go to the latest version or to
goinstall new packages or to make install your own packages to the Go root
07:18 < kevlar> which you probably will want to do when you're writing your
own programs.
07:19 < kevlar> (if you don't trust the other go users or you just want to
be secure, you might make that crontab chmod also take off setuid and setgid)
07:21 < tylerl_> it seems like there should be some logical way of putting
shared code in /usr/lib/...  and goinstall'ing to your own local store if not root
07:21 < tylerl_> you know, like *every other language*
07:21 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has joined
#go-nuts
07:23 < tylerl_> not complaining or anything -- it's just that it all seems
like a temporary workaround for now until someone comes up with an intentional
structure
07:24 < kevlar> It's actually intended to be installed on a per-user basis
07:25 < kevlar> that way each user can maintain the source tree however they
wish
07:25 < tylerl_> and that doesn't seem at all silly to you?
07:25 < kevlar> Go executable are, at present, largely statically linked and
as such don't need a central repository
07:25 < kevlar> tylerl_: nope.
07:25 < tylerl_> I don't install python on a per-user basis and maintain my
own source tree, even though I may be the only one using it.
07:26 < kevlar> Most people using C aren't going to touch cstdlib with a ten
foot pole
07:26 < kevlar> Go users are comparatively quite likely to hack on the
libraries or add their own
07:26 < kevlar> therefore it makes sense that they have their own complete
set.
07:26 < kevlar> *of libraries and binaries.
07:27 < tylerl_> I don't have to maintain my own private source tree of gcc
in order to compile C code...
07:27 < tylerl_> is that any different?
07:27 < kevlar> Yes.
07:27 < kevlar> See above.
07:27 < kevlar> Nobody on your system is going to be changing how "printf"
works
07:28 -!- Cobi [~Cobi@2002:1828:88fb:0:aede:48ff:febe:ef03] has quit [Ping
timeout: 260 seconds]
07:28 < kevlar> but if you have more than one user, it's entirely possible
that one will decide that he doesn't quite like the way that prints something and
make the change
07:28 < kevlar> blah, %U *
07:28 < tylerl_> kevlar: you mean printf in go, or in stdlib?
07:28 < kevlar> go.
07:28 < kevlar> well, the "nobody will change it" is C, the "someone might
try" is for Go
07:29 < kevlar> also, how often do you update your gcc install?  your glibc
install?
07:29 < tylerl_> kevlar: you mean hack the original definition, or extend
the functionality?
07:29 < kevlar> if you're using Go, you're probably updating it weekly or
monthly.
07:29 < kevlar> tylerl_: it doesn't matter.
07:30 < kevlar> The point is, you have your own Go source tree because it's
mutable and other users shouldn't be subject to your mutations and you REALLY do
not want to be subject to theirs.
07:30 < tylerl_> kevlar: well, the nice thing about go is i can change the
way library code works without having to edit the canonical definitions.
07:30 < kevlar> Not really, no...
07:30 < tylerl_> kevlar: but doesen't that make your code non-portable?
07:31 < tylerl_> because your code will only work with your printf
modifications that no one else wants?
07:31 < kevlar> tylerl_: Only if you release something before you get the CL
approved.
07:31 < tylerl_> kevlar: then you're talking about developing Go itself, not
developing applications with Go.
07:31 < kevlar> for instance, my IRC daemon was running with a change to the
DNS library for a few weeks before it made it into a release
07:32 < kevlar> it wouldn't make sense for another developer on my machine
to have his code possibly break when he didn't know it was going to happen
07:33 < kevlar> and he wouldn't, because he'd be running with his own
$GOROOT.
07:33 < kevlar> And if he was inadvisably using mine, that's his fault.
07:34 < tylerl_> So, you're saying that the private package layout is a
reaction to the fact that Go is under heavy development?
07:34 < kevlar> Putting the word "reaction" in my mouth is a
mischaracterization of everything I said.
07:34 < tylerl_> "answer"?
07:35 < kevlar> It *empowers* heavy development
07:35 < tylerl_> or "solution"?
07:35 < kevlar> but even if you don't like that argument, there's still the
fact that there are no go shared libraries that have to stick around somewhere for
binaries to work
07:35 < tylerl_> well, if I'm on the Python team, I'm not using a shared
install even though it would otherwise be the default.
07:36 < kevlar> and that's almost the definition of how C binaries work
07:36 < tylerl_> but the package structure doesn't force *everyone* to be
empowered to be a language developer
07:37 < kevlar> so, since you apparently don't like my reasons for the way
it is, tell me: why do you *dislike* the way it is?
07:37 < kevlar> If you don't like the extra "800M" of disk space, stop
complaining because disk space is cheap on average
07:38 < tylerl_> ...
07:38 < kevlar> if you don't like the fact that it requires users to set it
up themselves, then stop complaining because if they can't figure that out then
they probably will have even more issues when they get to the actual coding
07:38 -!- aho [~nya@fuld-590c7ef0.pool.mediaWays.net] has joined #go-nuts
07:39 < tylerl_> complaining?
07:39 < kevlar> and if you don't like it because you think you have a better
idea, stop complaining and submit a CL to fix it :)
07:39 < tylerl_> /sigh
07:39 -!- wrtp [~rog@92.17.111.113] has quit [Quit: wrtp]
07:39 < tylerl_> no complaining here.  don't get too worked up.
07:40 < edsrzf> I don't see any reason packages couldn't be kept in /usr/lib
now.
07:41 < tylerl_> edsrzf: i think in some cases they may be.
07:42 < tylerl_> i would wager that the RPM package they're trying to get in
to Fedora doesn't install to $HOME/go
07:43 < kevlar> There's no reason your $GOROOT can't be /usr/lib/go, but the
semantics of /usr/lib in the C world are completely different from Go.
07:43 < tylerl_> kevlar: the semantics?
07:44 < kevlar> tylerl_: /usr/lib would be more analogous to
$GOROOT/pkg/$GOOS_$GOARCH
07:44 < edsrzf> I'm not talking about putting the entire tree under
/usr/lib, just the package files that currently go under $GOROOT/pkg/$GOOS_$GOARCH
07:44 -!- Cobi [~Cobi@2002:1828:88fb:0:aede:48ff:febe:ef03] has joined #go-nuts
07:45 < kevlar> if you were so inclined, I think you could edit the standard
Make.inc (?) to change the pkgroot from that to /usr/lib/go
07:46 < kevlar> but I still think the fact that it's used at compile-time
not run-time is different enough from the c/c++ model to warrant pause.
07:46 < edsrzf> Static C/C++ libraries still go under /usr/lib
07:46 < kevlar> indeed that's why /usr/lib exists, is it not?
07:46 < edsrzf> Shared libraries go there too
07:47 < kevlar> oh, I see what you meant
07:47 * kevlar was thinking "not changing" not "statically linked"
07:47 < edsrzf> Ah :P
07:47 < edsrzf> "static" means many different things in the programming
world.  :)
07:47 < tylerl_> ideally the API will be relatively static once things get a
little more stable
07:48 < kevlar> heh.  "Oh, you didn't mean 'there's only ever one in
existence?'"
07:48 < kevlar> tylerl_: we've actually started moving in that direction
07:48 < kevlar> we now have weekly releases and "release" tags
07:48 < tylerl_> i saw that.
07:48 < kevlar> and we're getting close to having release tags be more than
just retags of stable weekly things by intentionally omitting certain things
07:49 < edsrzf> There are still some pretty big breaks between releases
though.
07:49 < kevlar> like I think the net rewrite won't go into the next release
but is still in weekly
07:49 < edsrzf> Release and weekly are on the same branch
07:49 < kevlar> for now
07:50 < edsrzf> It's pretty much, release weeklies and then every so often
say "hey, that was a pretty good weekly" and then it's tagged as a release.
07:50 < kevlar> I think with some of the major changes planned release will
be its own branch, at least until some things are proven out
07:50 < edsrzf> Anything's possible, but I don't see that happening any time
soon.
07:54 < tylerl_> what are the practical limits to how many goroutines you'd
want to create at a time?
07:55 < edsrzf> I'm not sure what you're really asking
07:56 < tylerl_> say you're writing a c10k application -- you wouldn't want
10k goroutines active at a time --
07:56 < |Craig|> I had 20000 go routines running for a while.  didn't cause
any issues
07:56 < tylerl_> right?
07:57 < tylerl_> so maybe you would, then.
07:57 < |Craig|> I can't say performance was great as I had nothing to
compare to, but it seemed ok
07:57 < KirkMcDonald> tylerl_: Goroutines are multiplexed over actual
threads.  In theory, the language is designed such that you can create goroutines
without worrying about how many you have.
07:58 < tylerl_> So, if you were re-implementing nginx in Go, would you
create a pool of goroutines, or do one per connection?
07:59 < edsrzf> I'm not sure which would be better.  I'd probably start out
with one goroutine per connection for simplicity.
08:07 -!- ExtraSpice [XtraSpice@88.118.35.153] has joined #go-nuts
08:08 -!- tylerl_ [~tylerl@ip24-251-232-171.ph.ph.cox.net] has quit [Quit:
leaving]
08:17 -!- Kafo [~Henry@a91-154-0-50.elisa-laajakaista.fi] has joined #go-nuts
08:22 -!- nkdnstbr [~nkdnstbr@cpe-173-172-231-83.rgv.res.rr.com] has quit [Quit:
Lost terminal]
08:30 -!- |Craig| [~|Craig|@panda3d/entropy] has quit [Quit: |Craig|]
08:53 -!- bortzmeyer [~stephane@2a01:e35:8bd9:8bb0:c184:a11c:a961:2072] has joined
#go-nuts
08:56 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
08:58 -!- SecretAgent [sa@28.158.143.98.nitemare.name] has quit [Ping timeout: 276
seconds]
08:58 -!- SecretAgent [sa@28.158.143.98.nitemare.name] has joined #go-nuts
09:07 -!- cenuij [~cenuij@93.26.130.28] has joined #go-nuts
09:07 -!- cenuij [~cenuij@93.26.130.28] has quit [Changing host]
09:07 -!- cenuij [~cenuij@base/student/cenuij] has joined #go-nuts
09:07 -!- cenuij [~cenuij@base/student/cenuij] has quit [Remote host closed the
connection]
09:11 -!- huin [~huin@91.84.64.19] has joined #go-nuts
09:27 < Kafo> Is there SDL or similar bindings working on Windows?
09:29 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts
09:33 -!- edsrzf [~edsrzf@122-61-221-144.jetstream.xtra.co.nz] has quit [Remote
host closed the connection]
09:35 -!- nkdnstbr [~nkdnstbr@cpe-173-172-231-83.rgv.res.rr.com] has joined
#go-nuts
09:41 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
09:42 < uriel> I think the windows helper libs will let you do graphics on
windows
09:42 < uriel> I'm not sure any of the sdl bindings have been ported to
windows
10:05 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 240 seconds]
10:13 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
10:16 -!- rlab [~Miranda@91.200.158.34] has quit [Read error: Connection reset by
peer]
10:18 * ww is happier having wrangled xml package sufficiently (and just resorted
to hard-coding the dictionary of namespaces in the template)
10:18 * ww wonders why he is labouring on labour day...
10:18 < ww> happy labour day everyone
10:20 -!- fmoo1 [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
10:24 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Ping
timeout: 240 seconds]
10:25 -!- fmoo1 [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
10:32 -!- vpit3833 [~user@CPE-58-160-37-24.phzl1.ken.bigpond.net.au] has left
#go-nuts ["ERC Version 5.3 (IRC client for Emacs)"]
11:16 -!- Kafo [~Henry@a91-154-0-50.elisa-laajakaista.fi] has quit [Read error:
Connection reset by peer]
11:42 -!- ab3 [~abe@83.101.90.66] has joined #go-nuts
11:52 -!- flaguy48 [~gmallard@user-0c6s350.cable.mindspring.com] has joined
#go-nuts
11:54 -!- TheMue [~TheMue@p5DDF5522.dip.t-dialin.net] has joined #go-nuts
11:57 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 240 seconds]
11:59 -!- wrtp [~rog@host81-149-212-233.in-addr.btopenworld.com] has joined
#go-nuts
12:02 -!- wrtp [~rog@host81-149-212-233.in-addr.btopenworld.com] has quit [Client
Quit]
12:03 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
12:09 -!- tvw [~tv@e176005164.adsl.alicedsl.de] has joined #go-nuts
12:10 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 258 seconds]
12:34 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
12:38 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has quit [Ping
timeout: 240 seconds]
12:40 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
12:42 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Client Quit]
12:46 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
12:50 -!- zimsim [~simon@87.72.77.195] has quit [Ping timeout: 248 seconds]
13:03 -!- [Pete_27] [~noname@110-174-103-31.static.tpgi.com.au] has joined
#go-nuts
13:04 -!- zimsim [~simon@87.72.77.195] has joined #go-nuts
13:31 -!- welterde [welterde@thinkbase.srv.welterde.de] has quit [Read error:
Operation timed out]
13:42 -!- welterde [welterde@thinkbase.srv.welterde.de] has joined #go-nuts
13:52 -!- gedevan [~gedevan@83.167.106.253] has quit [Quit: Linkinus -
http://linkinus.com]
13:57 -!- a2800276 [~a2800276@xdsl-87-79-214-206.netcologne.de] has quit [Remote
host closed the connection]
13:57 -!- artefon [~thiago@189.59.180.35.dynamic.adsl.gvt.net.br] has joined
#go-nuts
13:57 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Ping timeout: 246 seconds]
14:02 -!- chadk [~chadk@S010600045a27676a.vs.shawcable.net] has quit [Quit:
Leaving]
14:04 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has quit [Quit:
skelterjohn]
14:05 -!- skelterjohn [~jasmuth@c-24-0-2-70.hsd1.nj.comcast.net] has joined
#go-nuts
14:40 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
14:52 -!- unhygienix [~unhygieni@host86-135-59-30.range86-135.btcentralplus.com]
has joined #go-nuts
14:58 -!- rlab [~Miranda@91.200.158.34] has quit [Ping timeout: 260 seconds]
15:00 -!- djcapelis [~djc@blender/coder/DJCapelis] has quit [Read error: Operation
timed out]
15:01 -!- djcapelis [~djc@capelis.dj] has joined #go-nuts
15:01 -!- djcapelis [~djc@capelis.dj] has quit [Changing host]
15:01 -!- djcapelis [~djc@blender/coder/DJCapelis] has joined #go-nuts
15:06 -!- shvntr [~shvntr@116.26.135.102] has quit [Quit: leaving]
15:23 -!- rlab [~Miranda@91.200.158.34] has joined #go-nuts
15:23 -!- meanburrito920 [~john@woozy.STUDENT.CWRU.Edu] has joined #go-nuts
15:23 -!- meanburrito920 [~john@woozy.STUDENT.CWRU.Edu] has quit [Changing host]
15:23 -!- meanburrito920 [~john@unaffiliated/meanburrito920] has joined #go-nuts
15:26 -!- piranha [~piranha@83.221.140.244] has quit [Quit: Computer has gone to
sleep.]
15:33 -!- jyxent [~jyxent@129.128.191.54] has quit [Ping timeout: 264 seconds]
15:37 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
16:18 -!- napsy [~luka@88.200.96.18] has quit [Quit: Lost terminal]
16:22 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
16:22 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
16:24 -!- artefon [~thiago@189.59.180.35.dynamic.adsl.gvt.net.br] has quit [Quit:
bye]
16:25 -!- mattn_jp [~mattn@112-68-60-198f1.hyg1.eonet.ne.jp] has joined #go-nuts
16:35 -!- keidaa [~keidaa@cm-84.210.56.138.getinternet.no] has joined #go-nuts
16:42 -!- ako [~nya@fuld-590c7cf0.pool.mediaWays.net] has joined #go-nuts
16:45 -!- aho [~nya@fuld-590c7ef0.pool.mediaWays.net] has quit [Ping timeout: 250
seconds]
16:53 -!- keidaa [~keidaa@cm-84.210.56.138.getinternet.no] has quit [Ping timeout:
250 seconds]
16:56 -!- keidaa [~keidaa@cm-84.210.56.138.getinternet.no] has joined #go-nuts
17:08 -!- nictuku [~yvesj@unaffiliated/nictuku] has quit [Ping timeout: 246
seconds]
17:09 -!- tvw [~tv@e176005164.adsl.alicedsl.de] has quit [Read error: Connection
reset by peer]
17:21 < ww> hmmm...  something's broken in the latest weekly on freebsd
17:24 -!- nictuku [~yvesj@unaffiliated/nictuku] has joined #go-nuts
17:28 -!- juliankrause [~juliankra@li55-88.members.linode.com] has joined #go-nuts
17:29 < juliankrause> I am currently trying to run a networked server and
I'd like to every so often do some maintience task.  If I was doing a select loop
I could do that with a non blocking accept but it does not seem that you can get
access to that.  How does one do such a thing?
17:31 -!- rejb [~rejb@unaffiliated/rejb] has quit [Ping timeout: 246 seconds]
17:31 -!- |Craig| [~|Craig|@panda3d/entropy] has joined #go-nuts
17:39 < aiju> juliankrause: not at all
17:39 < aiju> or what do you mean?
17:40 < juliankrause> So I'm running a server which will accept multiple
connections, let's say I want to do something every 10 or so seconds like send out
a ping message to all currently connected clients to make sure everyone is still
online.
17:40 < juliankrause> How would I do such a thing?
17:40 < aiju> go routines?
17:40 < aiju> go func() {for {connection.Ping() ; time.Sleep(1e10))}
17:40 < exch> spawn a single goroutine which polls clients and then sleeps
for x seconds
17:40 < aiju> +}
17:41 < juliankrause> It is non obvious how to do that when Accept is
blocking.
17:41 < ww> go func() { for { _ <- time.After(10e9); ping(); }}()
17:41 < ww> istr some sort of threading issue with time.Sleep that doesn't
affect time.After
17:42 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
17:42 < aiju> time.Sleep is broken, wtf?
17:42 < ww> i vaguely remember something on the list about it occupying an
os thread
17:42 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
17:42 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
17:43 < aiju> i highly doubt it
17:46 < ww>
https://groups.google.com/group/golang-nuts/browse_thread/thread/5c1d3741a2ef97f3/1bc91127543cc0da?lnk=gst&q=Sleep+After#1bc91127543cc0da
17:46 < ww> pike says: Sleep should be implemented in the runtime rather
than by a system
17:46 < ww> call.  Until then, time.After is your friend.
17:47 < skelterjohn> time.Sleep() blocks
17:48 < juliankrause> So yeah, blocking is bad, and it doesn't seem you can
get a nonblocking accept?  So how do you do other things in "downtime" while
waiting for accepts.
17:48 < aiju> juliankrause: just use a damn go routine
17:48 < skelterjohn> what's a non-blocking accept?
17:48 < skelterjohn> oh, for listening to a port?
17:48 < juliankrause> Yeah
17:48 < skelterjohn> yes - the solution is to accept in a different
goroutine
17:48 * aiju throws goroutines at juliankrause
17:48 < skelterjohn> as aiju says so caustically
17:49 < ww> much as i hate to admit it, aiju's right :)
17:49 < juliankrause> Okay, that's starting to make sense, thanks.
17:49 < aiju> hahahah
17:49 < skelterjohn> aiju: people don't pay attention to you when you swear
at them
17:49 < skelterjohn> fact of life
17:50 < aiju> some do
17:50 < aiju> and i don't give a fucking shit what the rest does ;P
17:50 < ww> weekly's seriously broken on freebsd...  the dynamic linker
yells me about invalid format of /lib/ when trying to run a go program
17:50 < ww> downgrated to lastweekly and all is fine...
17:50 < aiju> go doesn't use dynamic linking
17:51 < aiju> so someone is *really* fucked up
17:51 < aiju> s/one/thing
17:51 < ww> ummm aiju...  sorry...  kind of necessary unless i want to
rewrite a bunch of libraries in go
17:52 < aiju> oh right cgo
17:52 < ww> if you want to rewrite libxslt and libraptor for me in go, i'll
happily use them
17:52 < aiju> xslt is wrong either way
17:52 -!- ayo [~nya@fuld-590c7eb1.pool.mediaWays.net] has joined #go-nuts
17:53 < ww> nobody likes xml but sometimes needs must
17:54 -!- a2800276 [~a2800276@xdsl-87-79-211-11.netcologne.de] has joined #go-nuts
17:55 -!- ako [~nya@fuld-590c7cf0.pool.mediaWays.net] has quit [Ping timeout: 250
seconds]
17:56 < ww> until then, i make pretty pictures with it like this:
http://semantic.ckan.net/record/9df8df51-6327-37a8-e044-0003ba9b0d98
17:59 < skelterjohn> ww: did you do a clean of your existing stuff?
17:59 < skelterjohn> you might be trying to link old binaries
18:00 < skelterjohn> i always do a "goinstall -a -clean" whenever i rebuild
go
18:00 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Quit:
Lost terminal]
18:00 < ww> skelterjohn: yes, did clean out everything
18:01 < ww> i'll try recreating in a sandbox a bit later...
18:05 -!- Guest10648 [~nya@fuld-590c7eb1.pool.mediaWays.net] has quit [Ping
timeout: 250 seconds]
18:06 -!- Guest10648 [~nya@fuld-590c7f0b.pool.mediaWays.net] has joined #go-nuts
18:07 -!- napsy [~luka@88.200.96.18] has joined #go-nuts
18:10 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has quit [Quit:
Geek insindeĀ®]
18:11 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has joined
#go-nuts
18:18 -!- tvw [~tv@e176005164.adsl.alicedsl.de] has joined #go-nuts
18:19 -!- Kafo [~Henry@a91-154-0-50.elisa-laajakaista.fi] has joined #go-nuts
18:23 < vsmatck> The inotify API is weird.  I watch a file for modify and
delete.  Only sometimes does it tell me the name of the deleted file.  According
to man inotify 7 the name is only supposed to be present for files in watched
directories.
18:23 < vsmatck> But it is present sometimes when I just watch files.
18:24 < vsmatck> If it's not going to be there all the time I wonder if I
should just do one goroutine per file.  Then I could infer the file name because
it'd be the only one watched.  Hm.
18:26 < kevlar> vsmatck: Whether or not you are provided with the name
should be deterministic
18:27 < kevlar> you could also run through all of the watched files and
store their names as a map from inode
18:28 -!- ako [~nya@fuld-590c7fe1.pool.mediaWays.net] has joined #go-nuts
18:28 < vsmatck> Is the cookie the inode?
18:28 * vsmatck writes some code to check.
18:30 -!- juliankrause [~juliankra@li55-88.members.linode.com] has left #go-nuts
[]
18:30 -!- Guest10648 [~nya@fuld-590c7f0b.pool.mediaWays.net] has quit [Ping
timeout: 250 seconds]
18:30 < vsmatck> oh nvm.  That's just to identify two events are for the
same file for when there's a rename.
18:31 -!- zozoR [~Morten@90.185.81.29] has joined #go-nuts
18:33 < vsmatck> kevlar: The inode idea is good.  That should work for me.
:)
18:34 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has left
#go-nuts []
18:35 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has quit [Read error:
Connection reset by peer]
18:35 < vsmatck> Wait a minute.  No it won't.  I think I'll just invalidate
entire cache upon every delete event.  I'm only caching a few hundred k of text
files.
18:36 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has joined #go-nuts
18:38 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has joined
#go-nuts
18:48 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
18:48 -!- nkdnstbr [~nkdnstbr@cpe-173-172-231-83.rgv.res.rr.com] has quit [Quit:
Lost terminal]
18:59 -!- ekontsevoy [~ekontsevo@209.20.66.251] has quit [Ping timeout: 246
seconds]
19:00 < aiju> i wish go { foo } was valid syntax
19:01 -!- xb95 [~xb95@dreamwidth/staff/mark] has quit [Remote host closed the
connection]
19:02 < fzzbt> why go foo() instead of go foo
19:02 < fzzbt> or nvm
19:02 < aiju> foo could be anything
19:02 < aiju> go { ch <- 42 }
19:02 < aiju> go { for { ch <- 1 } }
19:02 < aiju> it's the common case for me
19:03 -!- xb95 [~xb95@dreamwidth/staff/mark] has joined #go-nuts
19:03 < kevlar> aiju: There's been recent discussions about adding that,
actually
19:03 < |Craig|> when compared to the existing use of go, that goes not
change the functionality, makes a lot of stuff shorter/cleared, and at worst adds
2 characters.
19:03 -!- mattn_jp [~mattn@112-68-60-198f1.hyg1.eonet.ne.jp] has quit [Quit:
Ex-Chat]
19:03 < aiju> hehe
19:03 < aiju> "adds 2 characters"?
19:03 < kevlar> aiju: but the thought is that we are going to avoid adding
syntactic sugar now so that we don't screw ourselves later
19:04 < |Craig|> go foo() could be go {foo()}
19:04 < aiju> well, make the common case easy
19:04 < aiju> currently it allows *only* function calls
19:04 < aiju> go ch <- 42 is invalid
19:04 -!- rejb [~rejb@unaffiliated/rejb] has joined #go-nuts
19:04 < |Craig|> without a closure yes thats invalid
19:05 < kevlar> it only allows function calls because that's how "go" and
"defer" work, by creating a stack frame and not running it
19:05 -!- ekontsevoy [~ekontsevo@209.20.66.251] has joined #go-nuts
19:05 < aiju> {} could be just syntactic sugar for func() {} () ...
19:06 < kevlar> aiju: I think that would also make it even easier for the
loop-goroutine bug
19:06 < aiju> loop goroutine bug?
19:06 < aiju> sounds awkward
19:06 < kevlar> for x := range whatever { go func() { do something with x }
() }
19:06 < |Craig|> sending using a closure in a loop...
19:06 < |Craig|> I had that bug.
19:07 < kevlar> that's a very common bug and it would be difficult to see
the solution if you had the syntactic sugar in place of the go func(){}()
19:07 < aiju> what is the solution?
19:07 < aiju> i'd prefer fixing the damn bug
19:07 < kevlar> for x := range whatever { go func(x type) { do something
with x } (x) }
19:08 -!- ab3 [~abe@83.101.90.66] has quit [Read error: Operation timed out]
19:08 < |Craig|> kevlar, would putting x:=x in the loop body work too?  (oh
what a mess)
19:09 < kevlar> |Craig|: I don't know.  Possibly?
19:10 < |Craig|> I'd guess it wouldn't, but it kinda seems like it should
19:10 < kevlar> no, I think it might
19:11 < kevlar> but to understand that solution you'd still need to
understand what went wrong, and it's difficult to do that if you've been using the
syntactic sugar, which most people would all the time.
19:11 < aiju> it's like 2[array] in C
19:11 < kevlar> how so?
19:11 < kevlar> 2[array] might look weird, but it doesn't introduce weird
bugs
19:11 < aiju> to understand that, you must also get behind the syntactic
sugar
19:12 < aiju> ture
19:12 < aiju> *true
19:12 -!- chadk [~chadk@S010600045a27676a.vs.shawcable.net] has joined #go-nuts
19:12 < kevlar> one of the things I like about Go is that it's easy to write
code that works, so I'm really hesitant to support sugar that may make it easier
to write wrong code.
19:13 < kevlar> (even though I wish for sugar like that quite often)
19:13 -!- chadk [~chadk@S010600045a27676a.vs.shawcable.net] has quit [Client Quit]
19:13 < aiju> x := x works
19:14 < aiju> so i don't quite see the problem
19:15 < kevlar> aiju: but would you know to do that if you'd been using go
{} the entire time you'd been programming Go and had no idea that it was actually
a defered function call on a separate stack?
19:15 < kevlar> it would look to you like the elements in your slice or the
values coming from your channel were wrong
19:16 < Namegduf> I wonder if the language could just outlaw closing over
loop variables.
19:16 < Namegduf> In a range.
19:16 < rm445_> hmm, the for x:=range..  { go func() {..  thing, what does
that do?  Completely unpredictable x based on which of the caller and goroutines
happen to run?
19:16 < Namegduf> It's almost certainly an error.
19:17 < Namegduf> rm445_: x is a single variable, so all the goroutines
operate on the same x, which is changed concurrently to their execution
19:18 < kevlar> if you put a fmt.Println(x) in there, you'll typically see N
prints of Y, where N is the number of elements and Y is the last element
19:18 < |Craig|> Namegduf: its not always an error, suppose you have a loop
that blocks until the call is done
19:18 < kevlar> then why use a goroutine?
19:18 < kevlar> but yes, it's not always an error.
19:18 < Namegduf> You can't detect that a goroutine is being used easily.
19:18 < |Craig|> kevlar: I mean without a go routine
19:19 < Namegduf> You'd have to detect the closure, then detect a goroutine
on that closure...
19:19 < kevlar> oh, true, closures don't have to be executed in a goroutine.
19:19 < Namegduf> It gets messy and unreliable.
19:19 < Namegduf> The closure creation can be distinct from the go
statement, as well.
19:19 < kevlar> so it's just defering a closure around a loop variable
that's bad.
19:19 < |Craig|> suppose you need the loop var in a map reduce in a loop
19:19 < Namegduf> Hmm.
19:19 < Namegduf> You can still use x := x, though.
19:19 < |Craig|> closures are not only useful for use with goroutines
19:19 < kevlar> Namegduf: what if you make the closure and store it in a map
and then use "go" to run that closure later?
19:19 < kevlar> it's not an easy problem
19:20 < Namegduf> Right, exactly.
19:20 < Namegduf> You can't detect just closures starting goroutines easily.
19:20 -!- dataviruset [~datavirus@90-230-44-14-no55.tbcn.telia.com] has joined
#go-nuts
19:20 < Namegduf> The legitimate usecases, you're doing a function call
anyway, you can afford to copy your loop variable.
19:20 < Namegduf> And close over the copy.
19:21 < aiju> you don't need to for range
19:21 < Namegduf> You do.
19:21 < aiju> no
19:21 < aiju> for i := 1; i < 10; i++ {
19:21 < aiju> go func() {ch <- i} ()
19:21 < aiju> }
19:21 < aiju> is just as wrong
19:21 < Namegduf> Yes, it is.
19:21 < kevlar> Namegduf: but there could still be instances where you DO
want the behavior of closing over the loop variable
19:21 < Namegduf> It's also much more obvious.
19:21 < Namegduf> But just as wrong.
19:21 < Namegduf> kevlar: There is no behaviour you can only get that way.
19:21 < aiju> it happens with any changing variable
19:22 < |Craig|> if you hide the issue with loops where its common, people
will still have the bug, but it will be worse.  Close over the var, then change it
later not in a loop has the same issue
19:22 < Namegduf> Closing over the loop variable is the same as closing over
a copy of it, and copying it back after if you need to be able to change it.
19:22 < Namegduf> I'm saying to forbid the closing.
19:22 < Namegduf> So it's not being "hidden".
19:22 < kevlar> Namegduf: no, what if I *want* the loop variable to change
inside my closure because I know I'm not going to call the closure until after the
loop?
19:23 < Namegduf> kevlar: Then you can explicitly create a variable
containing an address
19:23 < Namegduf> And close over that
19:23 < Namegduf> Which is weird but still possible, and your use case is
weird but possible, so it suits.
19:24 < kevlar> but see, now you're forcing people to work around the rules
19:24 < aiju> what if you WANT to shoot yourself in the foot?
19:24 < |Craig|> I wouldn't mind closures doing a copy, so if you want the
value to change you use a pointer
19:24 < kevlar> which is a worse case.
19:24 < Namegduf> No, not really.
19:24 < Namegduf> I'm forcing people who actually want to do something which
is almost always a bug to be more explicit about it, and if they want to do
something really arcane they have to do it oddly.
19:25 < aiju> the weird world of closure semantics
19:25 < Namegduf> That's it.
19:25 -!- tav [~tav@2.96.34.10] has quit [Ping timeout: 250 seconds]
19:25 < kevlar> Also, you're special-casing loop variables
19:25 < Namegduf> I dispute that that's worse than people closing over
variables accidentally, because it's an irritating source of bugs.
19:25 < |Craig|> when I call a function, it does a copy, why not when I make
a closure?  Personally I don't care which it is, the issue is that while learning
go, I never learned which it was until I had a bug caused by my assuming it was
the other way
19:25 < kevlar> unless you really want all closures to have to have pointers
to what they modify
19:26 < Namegduf> What they modify is pushed onto the heap anyway.
19:26 < kevlar> in which case you'll end up with more than single-pointers
and suddenly Go turns nasty.
19:26 < Namegduf> Why would all closures need to have pointers to what they
modify?
19:26 < kevlar> (does go even allow x **int?)
19:26 < aiju> kevlar: sure
19:26 < Namegduf> That's hyperbole in no way implied by anything I said.
19:26 < aiju> i've used **int somewhere
19:26 -!- tav [~tav@92.7.116.120] has joined #go-nuts
19:27 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
19:27 < aiju> i've used ****int in C code lol
19:27 < Namegduf> They would need to have a single pointer in one case: to a
variable generated by range.
19:27 < kevlar> I figured it did.  It allows pointers to interfaces, so it
should.
19:27 < |Craig|> you can use **********in
19:27 < kevlar> Namegduf: so you are special-casing loop variables?
19:27 < aiju> in Go i rather have a slice in between
19:27 < aiju> *[]*int is not that rare
19:27 < Namegduf> kevlar: Yes.
19:27 < rm445_> tbh I probably wouldn't mind if Go just didn't have closures
at all, but I know it's just ignorance.  Can someone explain why closures are
good?
19:27 < kevlar> Namegduf: that violates the principle of least surprise
19:27 < Namegduf> kevlar: The suggestion was "why not forbid closing over
loop variables?"
19:28 < Namegduf> kevlar: It violates nothing for 99.9% of code which
doesn't close over loop variables because there's very little legitimate reason to
do that.
19:29 < Namegduf> Where it is being done, the odds are the user is expecting
it to be a separate variable per loop iteration
19:29 < Namegduf> And the violation of least surprise is there, the compiler
is just catching it before it gets to runtime
19:29 < |Craig|> the change I'd like to see is one in the docs to make the
issue more clear.  I'd like to avoid adding special cases (which would need
documentation too)
19:29 < kevlar> when the actual behavior and the expected behavior are at
odds, the best thing to do is what is done everywhere else, POLS.
19:30 -!- ab3 [~abe@83.101.90.66] has joined #go-nuts
19:30 < kevlar> |Craig|: it is in the docs
19:30 < kevlar> !gofaq closures
19:30 < GoBIR_> kevlar: Q. closures and goroutines -
http://golang.org/doc/go_faq.html#closures_and_goroutines
19:30 < aiju> heh
19:30 < aiju> nice bot
19:30 < kevlar> half the time I try that he's not here or i don't know what
keyword to use, lol.
19:30 < |Craig|> ah, the faq, I guess that counts
19:31 < Namegduf> I dispute that...  claim.
19:31 < Namegduf> WHen the actual behaviour and the expected behaviour are
at odds, the best thing to do remains a complex equation of safety, usefulness,
maintainability, ease of use, etc
19:31 < Namegduf> Just like it is when they aren't
19:31 < Namegduf> That may or may not be the solution used elsewhere
19:32 < Namegduf> Not surprising people for no reason is good, but useful
changes are also good.
19:32 < Namegduf> Also a whole bunch of other relevant languages lack
closures, or don't do what Go does with loop variables, so...
19:33 < Namegduf> There's nothing done "everywhere else" anyway, making it a
moot point.
19:33 < rm445_> There are different expected behaviours, and different
mental models they are based on.  What you expect if you know how closures work,
may be less common than other expectations, but may be based on a less complex or
better model of understanding.
19:33 < kevlar> the only change I might support in this case would be making
for x := range actually have a separate "x" for each loop
19:33 < Namegduf> That has a performance hit
19:34 < Namegduf> I think that is why it is not done.
19:34 < kevlar> but it would not be special casing the treatment of loop
variables in closures.
19:34 < aiju> it doesn't solve anything
19:34 < aiju> for i := 1; i < 100; i++ {
19:34 < aiju> is still broken
19:34 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
19:34 < kevlar> aiju: correct, but that is (as was mentioned earlier) much
more clearly wrong
19:34 -!- GeertJohan [~Squarc@ip4da06866.direct-adsl.nl] has joined #go-nuts
19:35 -!- GeertJohan1 [~Squarc@ip4da06866.direct-adsl.nl] has joined #go-nuts
19:35 -!- a2800276 [~a2800276@xdsl-87-79-211-11.netcologne.de] has quit [Quit:
a2800276]
19:35 -!- GeertJohan1 [~Squarc@ip4da06866.direct-adsl.nl] has quit [Client Quit]
19:35 < Namegduf> I'm not sure the change is worth the complexity add, but I
think it'd otherwise be a useful check.  Maybe we need a golint.
19:35 < kevlar> just like var x int; for x = range y {...} would be a lot
more easy to see the issue because you hand-wrote the definition
19:35 < Namegduf> Yeah, that's obvious.
19:35 < Namegduf> Hmm.
19:36 < kevlar> it's mostly the range operator that people slip up on with
closures.
19:36 < kevlar> from what I've seen and what I've done.
19:36 < Namegduf> for var x int; x = range y { ...  }
19:36 < Namegduf> Not really worth it to make a very nice construct longer.
19:36 < kevlar> nope.
19:36 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Quit:
Lost terminal]
19:37 < kevlar> though that might indeed be a good way to express the reason
why it is wrong...  I've never written it out like that.
19:37 * kevlar wonders if that could be incorporated into the FAQ.
19:37 < Namegduf> I find myself wishing for a program-at-once golint, heh.
19:38 < Namegduf> Just because there's a lot you could do at that scale to
detect errors.
19:38 < plexdev> http://is.gd/95mfVc by [Andrew Gerrand] in go/src/pkg/http/
-- http: rename ErrBodyReadAferClose to ErrBodyReadAfterClose
19:38 < Namegduf> Maybe I should try to write one this summer, if I'm
free...  I doubt I'll have time, though.
19:38 < kevlar> lol, nice one adg.
19:39 < kevlar> I wish someone had done that years ago with Referer.
19:39 < kevlar> now half the time I spell it wrong in real life and half the
time I spell it wrong in code.
19:43 -!- dataviruset [~datavirus@90-230-44-14-no55.tbcn.telia.com] has quit []
20:10 -!- bortzmeyer [~stephane@2a01:e35:8bd9:8bb0:c184:a11c:a961:2072] has quit
[Quit: Leaving.]
20:13 -!- foocraft [~dsc@178.152.93.75] has joined #go-nuts
20:19 -!- zozoR [~Morten@90.185.81.29] has quit [Ping timeout: 250 seconds]
20:21 -!- nbm [~nathan@dhcp-0-25-9c-d3-a7-c7.cpe.townisp.com] has quit [Quit:
Leaving]
20:25 -!- Blue_Opal_ [~quassel@5e0f02fb.bb.sky.com] has joined #go-nuts
20:25 -!- Blue_Opal_ [~quassel@5e0f02fb.bb.sky.com] has left #go-nuts []
20:27 < skelterjohn> aiju: regarding go { stuff }:
http://code.google.com/p/go/issues/detail?id=404
20:28 < aiju> too bad
20:29 -!- pothos_ [~pothos@111-240-171-155.dynamic.hinet.net] has joined #go-nuts
20:30 -!- pothos [~pothos@111-240-167-21.dynamic.hinet.net] has quit [Ping
timeout: 276 seconds]
20:31 -!- artefon [~thiago@189.59.180.35.dynamic.adsl.gvt.net.br] has joined
#go-nuts
20:37 -!- wchicken [~chicken@c-24-7-112-207.hsd1.ca.comcast.net] has quit [Ping
timeout: 260 seconds]
20:39 -!- TheMue [~TheMue@p5DDF5522.dip.t-dialin.net] has quit [Quit: TheMue]
20:42 -!- artefon [~thiago@189.59.180.35.dynamic.adsl.gvt.net.br] has quit [Ping
timeout: 240 seconds]
20:53 -!- angasule [~angasule@190.2.33.49] has joined #go-nuts
20:55 -!- artefon [~thiago@189.59.176.40.dynamic.adsl.gvt.net.br] has joined
#go-nuts
20:59 -!- a2800276 [~a2800276@xdsl-87-79-211-11.netcologne.de] has joined #go-nuts
20:59 -!- dshep [~dss@c-76-21-12-46.hsd1.ca.comcast.net] has quit [Ping timeout:
260 seconds]
21:00 -!- Paradox924X [~Paradox92@vaserv/irc/founder] has quit [Ping timeout: 240
seconds]
21:02 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has joined
#go-nuts
21:04 < skelterjohn> that was like a year ago, though
21:04 < skelterjohn> perhaps minds have changed
21:08 -!- photron_ [~photron@port-92-201-19-120.dynamic.qsc.de] has quit [Read
error: Operation timed out]
21:10 -!- a2800276 [~a2800276@xdsl-87-79-211-11.netcologne.de] has quit [Remote
host closed the connection]
21:14 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Ping timeout: 260 seconds]
21:19 -!- firwen [~firwen@2a01:e34:eea3:7e10:4a5b:39ff:fe51:e8ae] has quit [Remote
host closed the connection]
21:23 -!- keidaa [~keidaa@cm-84.210.56.138.getinternet.no] has quit [Quit:
Leaving]
21:24 -!- wchicken [~chicken@adsl-71-132-206-248.dsl.pltn13.pacbell.net] has
joined #go-nuts
21:24 < Namegduf> The big case I wish for more conciseness is when I'm
passing many-parametered closures to things taking functions, but I don't see an
easy way to do that.
21:24 < Namegduf> I'm considering refactoring all that anyway.
21:24 -!- GeertJohan [~Squarc@ip4da06866.direct-adsl.nl] has quit [Quit: Leaving.]
21:25 -!- kamaji [~kamaji@cpc2-aztw22-2-0-cust775.aztw.cable.virginmedia.com] has
quit [Read error: Operation timed out]
21:27 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
21:28 -!- KingPhilroy [~kingphilr@shc-nat-newhall.stonehill.edu] has quit [Remote
host closed the connection]
21:30 -!- wchicken [~chicken@adsl-71-132-206-248.dsl.pltn13.pacbell.net] has quit
[Quit: leaving]
21:32 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
21:36 -!- zimsim [~simon@87.72.77.195] has quit [Remote host closed the
connection]
21:43 -!- rlab [~Miranda@91.200.158.34] has quit [Read error: Connection reset by
peer]
21:47 -!- boomtopper
[~boomtoppe@cpc12-nrte22-2-0-cust249.8-4.cable.virginmedia.com] has quit [Ping
timeout: 240 seconds]
21:49 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has quit [Quit:
Leaving.]
21:51 -!- fmoo [~Adium@c-76-102-41-101.hsd1.ca.comcast.net] has joined #go-nuts
22:06 -!- Paradox924X [~Paradox92@vaserv/irc/founder] has joined #go-nuts
22:14 -!- ShadowIce [~pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
Verlassend]
22:17 -!- l00t [~i-i3id3r_@189.105.102.222] has quit [Remote host closed the
connection]
22:18 -!- Kafo [~Henry@a91-154-0-50.elisa-laajakaista.fi] has quit [Read error:
Connection reset by peer]
22:19 -!- huin [~huin@91.84.64.19] has quit [Quit: off to bed]
22:24 -!- thiago__ [~thiago@189.59.176.40.dynamic.adsl.gvt.net.br] has joined
#go-nuts
22:27 -!- artefon [~thiago@189.59.176.40.dynamic.adsl.gvt.net.br] has quit [Read
error: Connection reset by peer]
22:40 -!- nictuku [~yvesj@unaffiliated/nictuku] has quit [Quit: .bye.]
22:43 -!- jyxent [~jyxent@129.128.191.54] has quit [Read error: Connection reset
by peer]
22:43 -!- jyxent [~jyxent@129.128.191.54] has joined #go-nuts
22:55 -!- gedevan [~gedevan@83.167.106.253] has joined #go-nuts
22:56 -!- gtaylor [~gtaylor@99-5-124-9.lightspeed.gnvlsc.sbcglobal.net] has joined
#go-nuts
23:11 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has joined
#go-nuts
23:18 -!- gedevan [~gedevan@83.167.106.253] has quit [Quit: Leaving...]
23:29 -!- htoothrot [~mux@66-169-185-121.dhcp.ftwo.tx.charter.com] has quit [Read
error: Connection reset by peer]
23:32 -!- dreadlorde [~dreadlord@c-24-11-39-160.hsd1.mi.comcast.net] has quit
[Ping timeout: 240 seconds]
23:33 -!- htoothrot [~mux@66-169-185-121.dhcp.ftwo.tx.charter.com] has joined
#go-nuts
23:45 < plexdev> http://is.gd/SmnlQ8 by [Evan Shaw] in go/src/pkg/syscall/
-- syscall: add Windows file mapping functions and constants
23:45 -!- res99 [~anonymous@201.237.130.70] has quit [Quit: res99]
23:52 -!- ExtraSpice [XtraSpice@88.118.35.153] has quit [Remote host closed the
connection]
23:55 -!- prip [~foo@host217-133-dynamic.43-79-r.retail.telecomitalia.it] has quit
[Ping timeout: 240 seconds]
--- Log closed Mon May 02 00:00:50 2011