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

--- Log opened Wed Dec 23 00:00:35 2009
00:03 -!- oal [n=olav@5.79-160-122.customer.lyse.net] has quit [Read error: 54
(Connection reset by peer)]
00:06 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit []
00:07 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
00:10 -!- callidus [n=callidus@cpc2-newc1-0-0-cust1524.gate.cable.virginmedia.com]
has quit [Remote closed the connection]
00:11 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit [Client Quit]
00:12 -!- pvandusen [n=pdusen@crob4-55.flint.umich.edu] has joined #go-nuts
00:17 -!- jhh [n=jhh@f048174027.adsl.alicedsl.de] has quit []
00:17 -!- decriptor [n=decripto@174-27-183-117.slkc.qwest.net] has joined #go-nuts
00:18 -!- zaker__ [n=zaker@] has quit ["Ex-Chat"]
00:28 -!- DerHorst_ [n=Horst@e176111048.adsl.alicedsl.de] has joined #go-nuts
00:30 -!- pdusen [n=pdusen@crob4-55.flint.umich.edu] has quit [Read error: 110
(Connection timed out)]
00:30 -!- omykron [n=omykron@] has joined #go-nuts
00:32 -!- omykron [n=omykron@] has quit [Remote
closed the connection]
00:32 -!- omykron [n=omykron@] has joined #go-nuts
00:35 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
00:36 -!- Fish-Work [n=Fish@] has joined #go-nuts
00:38 -!- omykron__ [n=omykron@] has joined
00:41 -!- iant [n=iant@nat/google/x-mdwzvwhdnwelbihp] has quit [Read error: 110
(Connection timed out)]
00:44 -!- omykr956 [n=omykron@] has joined #go-nuts
00:45 -!- DerHorst [n=Horst@e176115129.adsl.alicedsl.de] has quit [Read error: 110
(Connection timed out)]
00:50 -!- omykron [n=omykron@] has quit [Connection
timed out]
00:50 -!- omykr956 [n=omykron@] has quit [Remote
closed the connection]
00:51 -!- omykron [n=omykron@] has joined #go-nuts
00:52 -!- iant [n=iant@] has joined #go-nuts
00:52 -!- mode/#go-nuts [+v iant] by ChanServ
00:53 -!- Xera^ [n=brit@87-194-208-246.bethere.co.uk] has joined #go-nuts
00:56 -!- omykron__ [n=omykron@] has quit
[Connection timed out]
00:57 < drhodes> I'm porting a C program that #includes <setjmp.h>, is
there a parallel in the go stdlib, or would that open a gate to hell?
00:57 -!- omykron__ [n=omykron@] has joined
00:57 <+iant> drhodes: there is no parallel
00:57 <+iant> one approach might be to use a goroutine which reports back on
a channel
00:57 < drhodes> ok, thanks iant.
01:02 -!- kanru [n=kanru@61-30-10-70.static.tfn.net.tw] has joined #go-nuts
01:02 -!- aaront [n=aaront@unaffiliated/aaront] has quit [Remote closed the
01:03 -!- omykr3 [n=omykron@] has joined #go-nuts
01:05 -!- RolaBlade [n=eddw@78-28-65-193.cdma.dyn.kou.ee] has quit ["Leaving"]
01:05 -!- Xera^ [n=brit@87-194-208-246.bethere.co.uk] has quit [Read error: 54
(Connection reset by peer)]
01:06 -!- DerHorst_ [n=Horst@e176111048.adsl.alicedsl.de] has quit ["Verlassend"]
01:08 -!- omykron [n=omykron@] has quit [Success]
01:08 -!- tps_ [n=eddw@78-28-65-193.cdma.dyn.kou.ee] has joined #go-nuts
01:09 -!- omykron [n=omykron@] has joined #go-nuts
01:11 -!- iammisc [n=travfar@pool-173-51-244-73.lsanca.dsl-w.verizon.net] has
joined #go-nuts
01:13 -!- pvanduse [n=pdusen@crob4-55.flint.umich.edu] has joined #go-nuts
01:14 -!- omykron__ [n=omykron@] has quit
[Connection timed out]
01:14 -!- omykron [n=omykron@] has quit [Remote
closed the connection]
01:15 -!- omykron [n=omykron@] has joined #go-nuts
01:19 -!- pvandusen [n=pdusen@crob4-55.flint.umich.edu] has quit [Read error: 60
(Operation timed out)]
01:19 -!- Xera^ [n=brit@87-194-208-246.bethere.co.uk] has joined #go-nuts
01:20 -!- omykr3 [n=omykron@] has quit [Connection
timed out]
01:20 -!- amuck_ [n=amuck_@rrcs-76-79-44-2.west.biz.rr.com] has quit []
01:21 -!- omykron__ [n=omykron@] has joined
01:26 < iammisc> how is go different
01:27 -!- omykr256 [n=omykron@] has joined #go-nuts
01:27 < jessta> that is a good plan
01:27 < jessta> iammisc: to what?
01:27 < iammisc> huh?
01:27 -!- Sungem [i=ss@118-160-171-222.dynamic.hinet.net] has quit [Client Quit]
01:27 < iammisc> from current languages
01:28 < iammisc> what else would I compare it to?
01:28 < jessta> compared to all other languages it's not different at all
01:29 < iammisc> Okay, then, C, Python, Perl, Java, Javascript, and Haskell
01:30 < jessta> go has channels and goroutines
01:30 < iammisc> okay
01:31 < jessta> if you compared it to java, I could say, it's natively
compiled and doesn't allow inheritance
01:32 < Gracenotes> differentness is not the ultimate virtue.  I'd rather
have no inheritance than class-based inheritance being the only means of dynamic
dispatch.  ugggh, that caused a freaking mess in Java.
01:33 -!- omykr256 [n=omykron@] has quit [Read
error: 54 (Connection reset by peer)]
01:33 < iammisc> Gracenotes, that would be a difference
01:33 -!- omykr923 [n=omykron@] has joined #go-nuts
01:33 < Gracenotes> yes, it is.  the two points were a bit separate I
01:33 -!- triplez [n=triplez@cm52.sigma225.maxonline.com.sg] has quit []
01:33 -!- omykron [n=omykron@] has quit [Connection
timed out]
01:34 < jessta> and now it's time to go outside in this ridiculous heat and
drink hot coffee
01:37 * Boggy-B has a foot of snow outside his window
01:37 < Boggy-B> and it's..  2am lol
01:38 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has quit []
01:38 -!- omykron__ [n=omykron@] has quit
[Connection timed out]
01:38 < Soak> where do you from Boggy-B?
01:39 -!- omykron [n=omykron@] has joined #go-nuts
01:39 < Boggy-B> Soak: UK
01:39 < Soak> Boggy-B: ok France me
01:39 < Soak> It's 2.41am
01:40 < Boggy-B> i need to be up early, i should be in bed, i have a whole
bunch of stuff garentted delivery before christmas eve
01:40 < Boggy-B> which means it's in the morning, or never :p
01:40 -!- aaront [n=aaront@d226-110-84.home.cgocable.net] has joined #go-nuts
01:40 < Soak> x)
01:41 -!- Xera^ [n=brit@87-194-208-246.bethere.co.uk] has quit ["(
www.nnscript.com :: NoNameScript 4.21 :: www.esnation.com )"]
01:42 -!- aaront [n=aaront@unaffiliated/aaront] has quit [Remote closed the
01:43 < Boggy-B> while we're barely off topic, ive only just got a chance to
start using Go
01:43 < Boggy-B> and it's seriously making life easier lol
01:43 -!- stalled_ [n=411@unaffiliated/stalled] has joined #go-nuts
01:44 -!- lux` [n=lux@] has quit [Remote closed the connection]
01:45 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
01:45 -!- Sungem [i=ss@220-136-226-135.dynamic.hinet.net] has joined #go-nuts
01:46 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has joined #go-nuts
01:47 -!- stalled [n=411@unaffiliated/stalled] has quit [Read error: 60 (Operation
timed out)]
01:47 < iammisc> Boggy-B: could you tell me how Go is making life easier?  I
want to know if I should try it or not?
01:48 < Boggy-B> well, i have a backgound in Java, and OCCAM-PI.
01:48 < Boggy-B> concurrancy in java makes me cry, and occam is SO safe you
can't actually..  do anything with it
01:50 < Boggy-B> so this thing is like a dream come true for me, no need to
mess with JCSP, and loose the whole fat end of Java while im at it, yet get the
power and simple syntax im after
01:50 -!- omykr923 [n=omykron@] has quit
[Connection timed out]
01:51 -!- triplez [n=triplez@bb116-14-64-38.singnet.com.sg] has joined #go-nuts
01:51 < iammisc> I definitely agree with you over java
01:52 < iammisc> don't know about occam-pi
01:52 -!- stalled [n=411@unaffiliated/stalled] has joined #go-nuts
01:53 -!- triplez_ [n=triplez@bb116-14-64-38.singnet.com.sg] has joined #go-nuts
01:53 < Boggy-B> well it's a process based language, so you're more writing
threads, than objects
01:53 -!- Ortzinator [n=ortzinat@unaffiliated/ortzinator] has quit [Read error: 60
(Operation timed out)]
01:53 < Boggy-B> and you just set them off in parralel
01:53 -!- iant [n=iant@] has quit [Read error: 60 (Operation timed
01:54 < iammisc> yeah, I looked it up
01:54 < Boggy-B> GO allows something very similar :)
01:54 < Boggy-B> the people i know who work with occam say 'Go is ugly
occam' but after so long with java, it looks plenty pretty to me :P
01:55 < iammisc> Uggh, Java code makes my eyes burn in their sockets
01:55 < Boggy-B> haha, what do you use?
01:56 -!- omykron [n=omykron@] has quit [Remote
closed the connection]
01:56 -!- omykron [n=omykron@] has joined #go-nuts
01:57 -!- triplez__ [n=triplez@bb116-14-64-38.singnet.com.sg] has joined #go-nuts
01:57 < iammisc> I'
01:57 < iammisc> I'm a C/C++ guy
01:57 < iammisc> python for anything quick
01:57 < Boggy-B> i did a little c++, but ive never used c
01:57 < Boggy-B> and i dont enjoy python :p
01:58 < iammisc> Haskell for prototyping and utilities
01:58 -!- triplez [n=triplez@bb116-14-64-38.singnet.com.sg] has quit [Read error:
60 (Operation timed out)]
01:58 < Boggy-B> wow, i did some haskell, that language owns me
01:58 < iammisc> haha
01:58 < iammisc> yeah it's interesting
01:59 -!- rrr [i=rrr@gateway/gpg-tor/key-0x9230E18F] has quit [Remote closed the
01:59 < iammisc> but once you get it, you can write valid code pretty
01:59 < iammisc> its very expressive
01:59 < Boggy-B> any programing language that calls a 'good program'
something that's 5 lines long and uses a lot of recursion is really beyond me
01:59 < iammisc> haha
02:01 -!- Ortzinator [n=ortzinat@cpe-065-191-006-129.nc.res.rr.com] has joined
02:01 -!- Tuller [n=Tuller@pool-72-84-246-12.rcmdva.fios.verizon.net] has joined
02:01 -!- dwery [n=dwery@nslu2-linux/dwery] has joined #go-nuts
02:01 -!- stalled_ [n=411@unaffiliated/stalled] has quit [Connection timed out]
02:01 -!- iammisc [n=travfar@pool-173-51-244-73.lsanca.dsl-w.verizon.net] has left
#go-nuts []
02:01 < dwery> hello.  do we have compile time directives (like #ifdef) in
go ?
02:01 < Boggy-B> at the moment im trying to re-write some of my occam code
into Go, and it seems really straightforward
02:01 < Boggy-B> and lots more readable
02:02 < goplexian> do we have any kind of testing library for doing tdd in
02:04 -!- tps_ [n=eddw@78-28-65-193.cdma.dyn.kou.ee] has quit ["Leaving"]
02:05 -!- Associat0r [n=Associat@h163153.upc-h.chello.nl] has quit []
02:05 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has quit [Read error:
104 (Connection reset by peer)]
02:06 -!- amuck [n=amuck@h196.105.117.75.dynamic.ip.windstream.net] has joined
02:06 -!- Soak [n=Soak@mst45-1-82-231-239-194.fbx.proxad.net] has quit []
02:06 < Gracenotes> dwery: hm..  for what purpose?  architecture/OS-specific
02:07 -!- Fish-Work [n=Fish@] has joined #go-nuts
02:07 < dwery> Gracenotes: that's an option.  another would be a debug
version of the same program.
02:08 < dwery> sometimes is handy to generate multiple binaries from the
same source code
02:09 < Gracenotes> you just made me realize how similar preprocessing and
inclusion systems are to DNA transcription
02:10 < dwery> let's hope my code does not modify itself as sometimes the
DNA does :D
02:10 < Boggy-B> lol that'd be an interesting bug
02:10 < Boggy-B> from hello world to skynet in 24 hours
02:10 < Gracenotes> polymorphic code is fun still.  I'd like to learn how to
make that.
02:11 < Gracenotes> well, it seems easy enough to hook C into Go. there seem
to be plenty of #s in the Go source, but all in c files
02:12 < Gracenotes> available through cgo
02:12 < dwery> well, I think I can preprocess the source code with some
02:12 < Gracenotes> but, yeah, you want to preprocess Go, not C
02:12 < dwery> cpp will probably do the trick
02:15 < dwery> see you
02:15 -!- triplez_ [n=triplez@bb116-14-64-38.singnet.com.sg] has quit [Read error:
113 (No route to host)]
02:15 < Gracenotes> sure.  maybe it'll be added as a feature.  but doesn't
seem to be one now.
02:15 < Gracenotes> at least there is a sane module system that's not based
in preprocessing
02:15 < dwery> maybe I'll open a bug..
02:16 < dwery> time to call it a day..
02:16 < dwery> ty
02:16 < Gracenotes> used only with debugging it should be harmless.  Still,
there is a logging library included
02:16 < Gracenotes> with logging levels which can be set to e.g.  silent
02:16 < Gracenotes> okay.  see ya
02:16 -!- dwery [n=dwery@nslu2-linux/dwery] has left #go-nuts ["Leaving."]
02:18 -!- aaront [n=aaront@d226-110-84.home.cgocable.net] has joined #go-nuts
02:21 -!- Tuller [n=Tuller@pool-72-84-246-12.rcmdva.fios.verizon.net] has quit
["to the batcave?"]
02:22 -!- aaront [n=aaront@unaffiliated/aaront] has quit [Remote closed the
02:24 < plexdev> http://is.gd/5y1EL by [Robert Griesemer] in 3 subdirs of
go/src/pkg/ -- Replace container/vector with exp/vector (faster).
02:28 < drhodes> I saw something neat in someone's code...  type A struct {
errorlog string; b int; c float; } so the errors are stored locally - haven't had
a chance to explore programming with that yet.
02:30 -!- Alkavan_ [n=alkavan@] has quit ["Leaving"]
02:30 -!- StDan [n=danielb@124-197-59-227.callplus.net.nz] has joined #go-nuts
02:32 -!- rbohn [n=chatzill@d103.digis.net] has joined #go-nuts
02:37 -!- hmmmm [n=asdf@pool-72-79-133-142.sctnpa.east.verizon.net] has joined
02:37 < hmmmm> woohoo i'm going!
02:38 < Boggy-B> grats!
02:39 -!- stalled_ [n=411@unaffiliated/stalled] has joined #go-nuts
02:39 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
02:40 -!- Fish-Work [n=Fish@] has joined #go-nuts
02:42 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has joined
02:44 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has joined
02:44 -!- Kniht [n=kniht@c-68-58-17-177.hsd1.in.comcast.net] has joined #go-nuts
02:51 -!- omykron [n=omykron@] has quit [Remote
closed the connection]
02:53 -!- stalled [n=411@unaffiliated/stalled] has quit [Read error: 110
(Connection timed out)]
02:54 -!- raichoo [n=raichoo@i577B98BA.versanet.de] has quit
02:56 < plexdev> http://is.gd/5y3zC by [Robert Griesemer] in
go/src/pkg/container/vector/ -- Cleanup: remove Exp ending in identifiers
02:56 < plexdev> http://is.gd/5y3zE by [Rob Pike] in go/doc/ -- fix
documentation bug in example
02:58 < exitstate> hmm, weird
02:58 < exitstate> the sites search engine kind of sucks
02:59 < exitstate> search for exact syntax or results of said syntax and it
just sys illegal query syntax
03:01 -!- Kniht [n=kniht@c-68-58-17-177.hsd1.in.comcast.net] has quit ["Leaving"]
03:05 -!- Ortzinator [n=ortzinat@unaffiliated/ortzinator] has quit [Read error:
104 (Connection reset by peer)]
03:09 -!- webbpa [n=chatzill@c-69-243-169-178.hsd1.in.comcast.net] has quit
["ChatZilla 0.9.86 [Firefox 3.5.6/20091215231754]"]
03:19 -!- ekidd [n=ekidd@pool-70-109-187-227.cncdnh.east.myfairpoint.net] has
joined #go-nuts
03:20 -!- Kibiz0r [n=kibiyama@99-48-204-31.lightspeed.brhmmi.sbcglobal.net] has
quit ["Leaving."]
03:23 -!- scarabx_ [n=scarabx@c-24-147-239-120.hsd1.ma.comcast.net] has joined
03:27 -!- path[l] [n=path@] has joined #go-nuts
03:31 -!- Sungem [i=ss@220-136-226-135.dynamic.hinet.net] has quit [Client Quit]
03:33 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
03:34 -!- Fish-Work [n=Fish@] has joined #go-nuts
03:35 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has quit ["Colloquy for
iPhone - http://colloquy.mobi"]
03:36 -!- scarabx [n=scarabx@c-24-147-239-120.hsd1.ma.comcast.net] has quit [Read
error: 110 (Connection timed out)]
03:37 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has joined
03:38 -!- binaryjohn_ [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has joined
03:38 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has quit [Read
error: 54 (Connection reset by peer)]
03:40 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has quit [Client
03:41 -!- stevenyvr [n=schan@76-10-184-108.dsl.teksavvy.com] has quit ["Computer
has gone to sleep"]
03:45 -!- stalled_ [n=411@unaffiliated/stalled] has joined #go-nuts
03:45 -!- giasone [n=giasone@adsl-ull-132-23.49-151.net24.it] has joined #go-nuts
03:45 < giasone> hi
03:45 < giasone> i'm in a trouble somebody could help me pls
03:46 < amuck> giasone, What's the problem?
03:46 -!- Ortzinator [n=ortzinat@cpe-065-191-006-129.nc.res.rr.com] has joined
03:47 < giasone> i just update my source but i try to compile and got some
03:47 < giasone> i'm on a mac platform
03:48 < giasone> $GOBIN $ GOROOT etc are setted
03:48 < Boggy-B> what's the error?
03:49 < giasone> i check on google if somebody report this error, look in
the project issue but nothing
03:49 < giasone> during compiling when arrive at
03:49 < giasone> %%%% making pkg %%%%
03:49 < giasone> make: *** [sort.install] Error 127
03:50 < giasone> are 4 error in 4 different file
03:54 < giasone> -/bin/sh: gomake: command not found
03:55 -!- [[sroracle]] [n=sroracle@unaffiliated/sroracle] has quit
03:58 < giasone> somebody have some good news for me?
03:59 < giasone> if i retry to compile i got the same error but not in the
same order
03:59 -!- Amaranth [n=travis@ubuntu/member/Amaranth] has quit ["Ex-Chat"]
03:59 < giasone> of course gomake is in the bin file
03:59 -!- Amaranth [n=travis@ubuntu/member/Amaranth] has joined #go-nuts
04:00 < giasone> sorry, folder
04:00 < Gracenotes> you're sure the go bin is visible in PATH?
04:00 < giasone> yes is the last one in $PATH var
04:00 -!- stalled [n=411@unaffiliated/stalled] has quit [Read error: 110
(Connection timed out)]
04:00 < Gracenotes> so echo $PATH shows Go, and it's exported
04:01 < giasone> only the bin folder
04:02 < giasone> but it works for some file and for something else no?
04:02 < anticw> giasone: you can ignore that
04:02 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has joined
04:02 < giasone> what?
04:03 < anticw> gomake missing on a clean build
04:03 < giasone> no
04:03 < anticw> make -k
04:04 < giasone> i retry
04:04 < anticw> i see the same issue here
04:05 < giasone> i got 300 errors now with -k param
04:05 < anticw> doing what?
04:05 < anticw> make clean gives me them ...  make should be ok
04:05 < giasone> make -k
04:06 < giasone> i retry
04:06 < anticw> worse case do 'ln -f /bin/true $GOBIN/gomake'
04:06 < anticw> worse case do 'ln -s /bin/true $GOBIN/gomake'
04:06 < anticw> sorry
04:08 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined
04:08 -!- mode/#go-nuts [+v iant] by ChanServ
04:08 < giasone> but i have gomake in bin folder
04:13 -!- amuck [n=amuck@h196.105.117.75.dynamic.ip.windstream.net] has quit
04:13 -!- amuck [n=amuck@h196.105.117.75.dynamic.ip.windstream.net] has joined
04:14 -!- amuck [n=amuck@h196.105.117.75.dynamic.ip.windstream.net] has quit
[Client Quit]
04:19 -!- ekidd [n=ekidd@pool-70-109-187-227.cncdnh.east.myfairpoint.net] has quit
04:20 -!- ekidd [n=ekidd@pool-70-109-187-227.cncdnh.east.myfairpoint.net] has
joined #go-nuts
04:22 -!- stalled [n=411@unaffiliated/stalled] has joined #go-nuts
04:28 -!- aaront [n=aaront@d226-110-84.home.cgocable.net] has joined #go-nuts
04:30 < anticw> giasone: back now ...  still not working?
04:30 < giasone> nothing
04:30 < anticw> what platform/cpu?
04:30 < giasone> darwin 386
04:31 < anticw> ok, let me find one
04:33 -!- ekidd [n=ekidd@pool-70-109-187-227.cncdnh.east.myfairpoint.net] has quit
04:35 -!- stalled_ [n=411@unaffiliated/stalled] has quit [Read error: 110
(Connection timed out)]
04:38 -!- Netsplit kornbluth.freenode.net <-> irc.freenode.net quits:
Yappo__, soul9, shasbot, plexdev
04:40 -!- nullpo [n=nullpo@221x252x46x83.ap221.ftth.ucom.ne.jp] has joined
04:40 -!- shasbot [n=shasbot@ip70-171-218-55.tc.ph.cox.net] has joined #go-nuts
04:40 -!- stalled_ [n=411@unaffiliated/stalled] has joined #go-nuts
04:41 < giasone> did you find something?
04:43 -!- rrr [i=rrr@gateway/gpg-tor/key-0x9230E18F] has joined #go-nuts
04:45 < anticw> sorry, children demanding my attention ....  i have it
building here on darwin 386
04:45 -!- stalled [n=411@unaffiliated/stalled] has quit [Read error: 60 (Operation
timed out)]
04:45 < anticw> actually, no :-)
04:45 < anticw> it see something now
04:47 -!- soul9 [n=none@unaffiliated/johnnybuoy] has joined #go-nuts
04:47 -!- plexdev [n=plexdev@arthur.espians.com] has joined #go-nuts
04:47 -!- Yappo__ [n=yappo@221x243x122x124.ap221.ftth.ucom.ne.jp] has joined
04:47 < giasone> i try to update my src in cases something going vrong
during download but nothing
04:47 < anticw> giasone: is $HOME/bin in your path?  i suspect it's not
04:47 < anticw> export PATH=$PATH:$HOME/bin
04:48 < giasone> i merrie you if i resolve with this ;-P
04:49 < anticw> $HOME/bin is missing from your path, fix that and it will
04:49 < anticw> do what i suggested above
04:49 < anticw> i just did a full build darwin 386 w/ tests and it worked
04:50 < giasone> doh!
04:50 < giasone> it's doesn't work
04:50 < anticw> paste the errors somewhere
04:51 < giasone> but $HOME/bin is $GOBIN?
04:51 < giasone> it's the same
04:51 < giasone> %%%% making pkg %%%%
04:51 < giasone> cd runtime && gomake install
04:51 < giasone> cd unicode && gomake install
04:51 < giasone> cd math && gomake install
04:51 < giasone> cd sort && gomake install
04:51 < giasone> make[1]: *** [unicode.install] Error 127
04:51 < giasone> make[1]: *** Waiting for unfinished jobs....
04:51 < giasone> make[1]: *** [runtime.install] Error 127
04:51 < giasone> make[1]: *** [math.install] Error 127
04:51 < giasone> make[1]: *** [sort.install] Error 127
04:51 < giasone> make: *** [build] Error 1
04:52 <+iant> giasone: are you really really really sure that $GOBIN is in
04:52 < giasone> Because now in my $PATH have $HOME/bin but i don't have
that folder
04:52 < giasone> i have to create an empty one?
04:52 < giasone> yes
04:52 <+iant> did you set the GOBIN environment variable?
04:52 < giasone> i'm pretty sure
04:52 < anticw> ls $GOBIN/.
04:53 < giasone> macbook-di-giasone:src giasone$ env | grep '^GO'
04:53 < giasone> GOBIN=/Users/giasone/svn/go/bin
04:53 < giasone> GOARCH=386
04:53 < giasone> GOROOT=/Users/giasone/svn/go
04:53 < giasone> GOOS=darwin
04:53 <+iant> what is PATH?
04:53 < anticw> export PATH=$PATH:/Users/giasone/svn/go/bin
04:53 < giasone> macbook-di-giasone:src giasone$ echo $PATH
04:54 < giasone> -
04:54 < anticw> typo
04:54 <+iant> it should be /Users
04:54 < giasone> damn
04:55 < anticw> iant: i should time this ...  i guess i will, but i want to
pull apart a large number of udp frames ...  the dns code using offsets +
reflection for this
04:55 < giasone> 8(
04:55 < anticw> iant: is that reasonable where i care about performance?  i
seems like it should be slow
04:56 <+iant> it's certainly reasonable to find out how slow it is
04:58 -!- rbohn [n=chatzill@d103.digis.net] has quit ["see you later"]
04:59 < anticw> iant: it seems we could even hoist that code the resolver
uses into it's own package
05:01 < giasone> seems like it's works
05:01 < giasone> not finish to compile yet
05:01 < anticw> well, better hope it fails or else you have to marry iant
05:01 < giasone> i know
05:01 < giasone> :-(
05:02 < giasone> --- cd ../test
05:02 < giasone> 1 known bugs; 0 unexpected bugs
05:02 < giasone> i have to do ...
05:03 -!- triplez [n=triplez@bb116-14-64-38.singnet.com.sg] has quit []
05:04 < giasone> it works for sure i try to compile something and works
05:04 < giasone> thank to all and apologize for the really stupid error
05:05 -!- robot12 [n=root@robot12.kgts.ru] has joined #go-nuts
05:05 < giasone> probably because here in italy are the 6 am and i need to
05:05 < giasone> in 2 hours i have to go to the office
05:05 -!- eno_ [n=eno@adsl-70-137-159-64.dsl.snfc21.sbcglobal.net] has joined
05:06 -!- triplez [n=triplez@bb116-14-64-38.singnet.com.sg] has joined #go-nuts
05:07 < giasone> thanks a lot iant
05:08 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
05:13 < goplexian> hmm so go files require a newline at end of file now, is
that somehow due to the ; change?
05:14 < anticw> it was always required but not enforced before
05:15 < goplexian> gotcha, yeah my file wouldn't compile and said `missing
newline at end of file` as the error message, was kinda ???  for a second there
05:17 -!- eno [n=eno@nslu2-linux/eno] has quit [Read error: 110 (Connection timed
05:21 -!- giasone [n=giasone@adsl-ull-132-23.49-151.net24.it] has quit []
05:28 -!- keeto [n=keeto@] has joined #go-nuts
05:30 -!- hmmmm [n=asdf@pool-72-79-133-142.sctnpa.east.verizon.net] has quit [Read
error: 104 (Connection reset by peer)]
05:30 -!- hmmmmm [n=asdf@pool-72-79-133-142.sctnpa.east.verizon.net] has joined
05:35 -!- aaront [n=aaront@unaffiliated/aaront] has quit ["And that's all he
05:36 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
05:38 -!- Fish-Work [n=Fish@] has joined #go-nuts
05:40 < skelterjohn> not sure what "required but not enforced" means
05:41 < goplexian> how would you make a multidimensional slice?  []int[]int
? I cant find any examples
05:43 < goplexian> or more like []slice :)
05:45 < goplexian> or [[]int]int
05:45 -!- iammisc [n=travfar@pool-173-51-244-73.lsanca.dsl-w.verizon.net] has
joined #go-nuts
05:46 -!- keeto [n=keeto@] has quit ["http://keetology.com/"]
05:46 <+iant> goplexian: [][]int
05:47 < iammisc> When was Go first released?
05:47 < goplexian> iant, ah, sensible, thx
05:49 < goplexian> hmm no examples of [][] in effective_go
05:49 < drhodes> @eval [2][2]int{[2]int{1,2}, [2]int{3,4}}[0:1][0][0:1]
05:49 < rndbot> [1]
05:50 <+iant> iammisc: Go was released in November
05:50 < goplexian> drhodes, thx :)
05:51 < drhodes> goplexian: there's a #go-run channel where the bot is also
available to try stuff out
05:52 < goplexian> cool
05:54 -!- decriptor [n=decripto@174-27-183-117.slkc.qwest.net] has quit [Read
error: 60 (Operation timed out)]
05:54 < goplexian> I dont quite understand [0:1][0][0:1] particularly the
05:59 -!- jA_cOp_ [n=yakobu@unaffiliated/ja-cop/x-9478493] has joined #go-nuts
06:01 -!- jA_cOp__ [n=yakobu@p7007-ipngn100106osakakita.osaka.ocn.ne.jp] has
joined #go-nuts
06:06 -!- codedread [i=180dd699@gateway/web/freenode/x-cqiejycioonklyxe] has
joined #go-nuts
06:06 -!- codedread [i=180dd699@gateway/web/freenode/x-cqiejycioonklyxe] has left
#go-nuts []
06:07 -!- slashus2_ [n=slashus2@74-137-26-8.dhcp.insightbb.com] has joined
06:07 -!- dizm [n=dizm@] has quit ["Leaving."]
06:17 -!- jA_cOp [n=yakobu@unaffiliated/ja-cop/x-9478493] has quit [Read error:
110 (Connection timed out)]
06:17 -!- kcj1993 [n=kcj1993@ip-118-90-104-120.xdsl.xnet.co.nz] has joined
06:17 < kcj1993> is go a good first language?
06:18 < anticw> not really
06:18 < iammisc> kcj1993: I would say no only because it doesn't have the
resources of other languages
06:18 < skelterjohn> not because of itself
06:18 < iammisc> Like sample code, tutorials, etc.
06:18 < kcj1993> ok
06:18 < skelterjohn> just because it is immature
06:18 < skelterjohn> it will be a good first language eventually
06:18 < anticw> no, it has concepts which beginners might be best to avoid
06:18 < kcj1993> ok
06:18 < skelterjohn> i began with C *shrug*
06:18 < anticw> for it's 'age' it has excellent documentation already
06:19 < kcj1993> back to C++
06:19 -!- jA_cOp_ [n=yakobu@unaffiliated/ja-cop/x-9478493] has quit [Connection
timed out]
06:19 < anticw> and it does have quite a bit of code and examples and some
reasonable support vs some other stuff
06:19 < iammisc> anticw: incomparable to the amount of free c, c++, java,
and python code available
06:20 < skelterjohn> C++ isn't really a good first language either, but not
because it's immature
06:20 < anticw> iammisc: sure, and how much of that is decent?
06:20 < anticw> what is the S/N ?
06:20 < iammisc> skelterjohn: I never said c++ was a good first language
06:20 < iammisc> anticw: a lot of code is quite decent
06:20 < skelterjohn> "kcj1993: back to C++"
06:21 < anticw> iammisc: and a lot isn't ...  and it's not easy for someone
w/o experience to tell the differnce
06:21 < iammisc> anticw: if you type c++ game tutorial, or python web server
tutorial, you'll find a lot more code than if you typed the equivalent for go
06:22 < anticw> iammisc: that's orthogonal to whether go is a good first
06:22 < iammisc> you asked for decent code, I'm giving you decent code
06:22 < anticw> no, you just claimed there is a lot out there
06:22 -!- scarabx_ [n=scarabx@c-24-147-239-120.hsd1.ma.comcast.net] has quit
[Remote closed the connection]
06:23 < skelterjohn> the argument over whether or not it is "decent" is
06:24 < gnuvince> Has there been a recent change in the language syntax?  I
did an hg fetch earlier tonight and now I can't compile any of my code, I get
syntax errors everywhere
06:24 < anticw> yes
06:24 < anticw> gofmt can fix for you
06:24 < skelterjohn> do "gofmt -w thecode"
06:26 < gnuvince> What changed?
06:27 < gnuvince> Oh wait
06:27 < gnuvince> I'm dumb
06:27 < gnuvince> I put parens in a for loop
06:27 < anticw> the big change is in the way semi-colons are no longer
lexically required, but you can still get away with them
06:28 -!- kcj1993 [n=kcj1993@ip-118-90-104-120.xdsl.xnet.co.nz] has left #go-nuts
06:28 < iammisc> more than go, more easily available, and a lot is
understandable.  This shouldn't be a point of argument
06:29 < anticw> iammisc: none of those make something a good first language
06:29 < iammisc> whatever, I'm not going to start an argument
06:30 -!- slashus2 [n=slashus2@74-137-26-8.dhcp.insightbb.com] has quit [Read
error: 110 (Connection timed out)]
06:38 -!- iammisc [n=travfar@pool-173-51-244-73.lsanca.dsl-w.verizon.net] has left
#go-nuts []
06:40 -!- JSharpe2 [n=jamie@5ad93950.bb.sky.com] has joined #go-nuts
06:55 -!- JSharpe [n=jamie@5ad673c3.bb.sky.com] has quit [Read error: 110
(Connection timed out)]
06:56 -!- b4|hraban [n=b4@a83-163-41-120.adsl.xs4all.nl] has joined #go-nuts
07:04 -!- Sungem [i=ss@220-136-225-121.dynamic.hinet.net] has joined #go-nuts
07:07 -!- GoNoGo_ [n=penalva@pc115.pallas.cines.fr] has joined #go-nuts
07:08 -!- Sungem [i=ss@220-136-225-121.dynamic.hinet.net] has quit [Client Quit]
07:10 < b4|hraban> Hello, I have a question regarding 5g.  My arch is
reported by uname as armv5tel but it seems that it is not entirely supported.
07:11 < b4|hraban> I pretty much always get "illegal instruction" errors
(hello world does that, for example), only a few of the tests succeed.  it's a
07:12 < b4|hraban> furthermore, I have no idea of how to properly debug
this...  gdb says that there are no debugging symbols in the binary and I do not
know how to see which instruction caused the exception
07:12 < b4|hraban> to be very honestl; I am not even sure that I built go
right..  I just executed "./all-arm.bash" in the /src/ dir, it seemed the most
logical choice, but documentation here is lacking.
07:13 <+iant> b4|hraban: kaib is the guy working on ARM, but he is not here
right now
07:13 < b4|hraban> ah, you must be the ian from the mailing lists and so
forth :)
07:13 <+iant> yes
07:13 < b4|hraban> read your posts, great work ^^ thanks.
07:13 <+iant> you may do better sending e-mail to the list about this
07:13 <+iant> thanks
07:14 < b4|hraban> are there any clues you could give me to help me compose
a more meaningful bug report / question?
07:14 < b4|hraban> like...  5g's equivalent to GCC's -g switch?
07:14 < b4|hraban> (or something similar?)
07:14 -!- General13372 [n=support@71-84-247-187.dhcp.gldl.ca.charter.com] has
joined #go-nuts
07:14 <+iant> unfortunately the gc compilers don't generate useful debug
info at the moment
07:15 < b4|hraban> fair enough
07:15 <+iant> there is an experimental debugger, ogle, but I don't know that
it has any ARM support
07:15 < b4|hraban> ouch
07:15 <+iant> you should at least be able to disassemble using objdump
07:15 < b4|hraban> I tried that, indeed, it worked nicely, but I have no
idea what the point of entry is
07:16 <+iant> you can get that from readelf -h, though I don't know if it
will help
07:16 < b4|hraban> ah, thanks
07:16 <+iant> you don't get a PC or backtrace from the crash, I guess
07:16 < b4|hraban> only an address
07:16 < b4|hraban> (in GDB)
07:16 < b4|hraban> but that address in objdump does not seem illegal at
07:17 < b4|hraban> *the instruction at that address
07:17 <+iant> it's not an instruction only supported on newer architectures
or anything like that?
07:17 <+iant> and it's correctly aligned?
07:17 < b4|hraban> there are some "invalid instruction" parts, but they seem
more like data
07:17 < b4|hraban> correctly aligned: well, it's mod 4, not sure what you
mean by correctly aligned, though..?
07:17 <+iant> yes, mod 4
07:18 <+iant> that's about all I can think of off the top of my head
07:18 < b4|hraban> not supported: iirc it was a very basic instruction, but
I will have a look once 5g is done compiling (hg pull -u)
07:18 -!- General1337 [n=support@71-84-247-187.dhcp.gldl.ca.charter.com] has quit
[Read error: 60 (Operation timed out)]
07:18 < b4|hraban> thanks for the help.  I will try the mailing list.
07:22 < exitstate> hmm
07:22 < exitstate> dir.IsRegular does not apply to files as well does it?
07:23 < exitstate> Just trying to stat a file to make sure it does not
07:34 -!- chickamade [n=chickama@] has joined #go-nuts
07:47 -!- path[l]_ [i=UPP@] has joined #go-nuts
07:52 < exitstate> This NewFile thing is a tad bit confusing
07:53 -!- path[l]__ [i=UPP@] has joined #go-nuts
07:53 -!- path[l] [n=path@] has quit [Read error: 60 (Operation timed
08:01 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has quit []
08:04 -!- AmirMohammad [n=amir@unaffiliated/gluegadget] has joined #go-nuts
08:05 -!- melba [n=blee@unaffiliated/lazz0] has joined #go-nuts
08:13 -!- path[l]_ [i=UPP@] has quit [Read error: 110 (Connection
timed out)]
08:19 -!- Meowtimer [n=meowtime@vpn-ce242015.extern.uni-duisburg-essen.de] has
joined #go-nuts
08:21 -!- iwikiwi [n=iwikiwi@] has quit ["Computer has gone to sleep"]
08:22 < b4|hraban> alrighty, I did some more digging and it seems you were
right about the unsupported instruction :s
08:22 < b4|hraban> what a shame.
08:24 -!- path[l] [i=UPP@] has quit []
08:25 -!- keeto [n=keeto@] has joined #go-nuts
08:26 -!- Associat0r [n=Associat@h163153.upc-h.chello.nl] has joined #go-nuts
08:28 -!- melba [n=blee@unaffiliated/lazz0] has quit [Read error: 54 (Connection
reset by peer)]
08:30 -!- hmmmmm [n=asdf@pool-72-79-133-142.sctnpa.east.verizon.net] has quit
08:31 -!- Meowtimer [n=meowtime@vpn-ce242015.extern.uni-duisburg-essen.de] has
quit [Remote closed the connection]
08:37 -!- Guest80446 [i=fusion@] has quit [Remote closed the
08:39 -!- Meowtimer [n=meowtime@vpn-ce242015.extern.uni-duisburg-essen.de] has
joined #go-nuts
08:39 -!- Guest80446 [i=fusion@] has joined #go-nuts
08:40 -!- Meowtimer [n=meowtime@vpn-ce242015.extern.uni-duisburg-essen.de] has
quit [Client Quit]
08:41 -!- scriptdevil [n=scriptde@] has joined #go-nuts
08:42 -!- p0g0__ [n=pogo@unaffiliated/p0g0] has quit [Read error: 60 (Operation
timed out)]
08:53 -!- p0g0__ [n=pogo@unaffiliated/p0g0] has joined #go-nuts
08:55 -!- scriptdevil [n=scriptde@] has quit ["leaving"]
08:56 -!- keeto [n=keeto@] has quit ["http://keetology.com/"]
09:10 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
09:14 -!- GeoBSD [n=geocalc@lns-bzn-59-82-252-173-194.adsl.proxad.net] has joined
09:14 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has quit []
09:14 -!- ShadowIce [i=shadowic@unaffiliated/shadowice-x841044] has joined
09:30 -!- lux` [n=lux@] has joined #go-nuts
09:30 -!- slashus2 [n=slashus2@74-137-26-8.dhcp.insightbb.com] has quit []
09:31 -!- Sungem [i=ss@118-160-174-149.dynamic.hinet.net] has joined #go-nuts
09:32 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has quit []
09:37 -!- lotrpy [n=lotrpy@] has joined #go-nuts
09:38 -!- trickie [n=trickie@] has joined #go-nuts
09:43 -!- mejja [n=user@c-49b6e555.023-82-73746f38.cust.bredbandsbolaget.se] has
joined #go-nuts
09:48 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
09:49 -!- Fish-Work [n=Fish@] has joined #go-nuts
09:49 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has joined
09:49 -!- elmar [n=elmar@dslb-188-097-000-035.pools.arcor-ip.net] has joined
09:57 -!- djm [n=djm@paludis/slacker/djm] has quit [Remote closed the connection]
09:57 -!- djm [n=djm@paludis/slacker/djm] has joined #go-nuts
09:58 -!- drhodes [n=none@209-20-72-61.slicehost.net] has quit [Remote closed the
09:58 -!- drhodes [n=none@209-20-72-61.slicehost.net] has joined #go-nuts
09:58 -!- oal [n=olav@5.79-160-122.customer.lyse.net] has joined #go-nuts
10:01 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Read
error: 54 (Connection reset by peer)]
10:02 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined
10:02 -!- mode/#go-nuts [+v iant] by ChanServ
10:03 -!- lux` [n=lux@] has quit ["Sto andando via"]
10:03 -!- lux` [n=lux@] has joined #go-nuts
10:05 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Read
error: 104 (Connection reset by peer)]
10:06 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined
10:06 -!- mode/#go-nuts [+v iant] by ChanServ
10:08 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
10:08 -!- triplez [n=triplez@bb116-14-64-38.singnet.com.sg] has quit []
10:10 -!- Fish-Work [n=Fish@] has joined #go-nuts
10:23 -!- Sungem [i=ss@118-160-174-149.dynamic.hinet.net] has quit [Client Quit]
10:24 -!- tomestla [n=tom@] has joined #go-nuts
10:28 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has quit []
10:36 -!- Sungem [i=ss@118-160-163-74.dynamic.hinet.net] has joined #go-nuts
10:37 -!- afurlan [n=afurlan@scorpion.mps.com.br] has joined #go-nuts
10:38 -!- giasone [n=giasone@adsl-ull-219-39.49-151.net24.it] has joined #go-nuts
10:38 -!- giasone [n=giasone@adsl-ull-219-39.49-151.net24.it] has left #go-nuts []
10:39 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has joined #go-nuts
10:41 -!- pvandusen [n=pdusen@crob4-55.flint.umich.edu] has joined #go-nuts
10:44 -!- chickamade [n=chickama@] has quit ["Leaving"]
10:44 -!- plainhao [n=plainhao@mail.xbiotica.com] has quit []
10:46 -!- kanru [n=kanru@61-30-10-70.static.tfn.net.tw] has quit ["WeeChat
10:48 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
10:49 -!- Fish-Work [n=Fish@] has joined #go-nuts
10:51 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
10:53 -!- tomestla1 [n=tom@] has joined #go-nuts
10:53 -!- tomestla [n=tom@] has quit ["Leaving."]
10:58 -!- pvanduse [n=pdusen@crob4-55.flint.umich.edu] has quit [Read error: 110
(Connection timed out)]
11:00 -!- mejja [n=user@c-49b6e555.023-82-73746f38.cust.bredbandsbolaget.se] has
quit [Remote closed the connection]
11:01 -!- rakd [n=rakd@] has joined #go-nuts
11:06 -!- tor5_ [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
11:06 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit [Read error: 104
(Connection reset by peer)]
11:10 -!- Raziel2p [n=Raziel2p@ti0032a380-dhcp0316.bb.online.no] has quit
11:11 -!- john6 [n=john6@] has quit ["Leaving"]
11:17 -!- iwikiwi [n=iwikiwi@] has quit ["I ascend to reality!"]
11:18 -!- chickamade [n=chickama@] has joined #go-nuts
11:24 -!- tumdum [n=tumdum@unaffiliated/tumdum] has joined #go-nuts
11:24 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
11:25 -!- Fish-Work [n=Fish@] has joined #go-nuts
11:29 -!- lotrpy [n=lotrpy@] has quit []
11:31 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has quit ["Leaving"]
11:50 -!- path[l] [n=path@] has joined #go-nuts
11:56 -!- Oejet [n=s022018@glint10.gbar.dtu.dk] has joined #go-nuts
11:57 -!- path[l] [n=path@] has quit []
11:57 -!- lux` [n=lux@] has quit [Read error: 54 (Connection reset
by peer)]
11:58 -!- lux` [n=lux@] has joined #go-nuts
11:58 -!- chickamade [n=chickama@] has quit ["Leaving"]
12:00 -!- ekidd [n=ekidd@] has joined #go-nuts
12:06 -!- murodes1 [n=James@203-206-70-192.dyn.iinet.net.au] has joined #go-nuts
12:15 -!- murodese [n=James@203-206-70-192.dyn.iinet.net.au] has quit [Read error:
60 (Operation timed out)]
12:20 -!- snearch [n=olaf@] has joined #go-nuts
12:20 -!- plexdev [n=plexdev@arthur.espians.com] has quit [Read error: 110
(Connection timed out)]
12:23 -!- path[l] [n=path@] has joined #go-nuts
12:24 -!- cmarcelo [n=cmarcelo@] has joined #go-nuts
12:30 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has joined #go-nuts
12:32 -!- Der_Kleene [n=hodel@p5B3AAD3C.dip.t-dialin.net] has joined #go-nuts
12:33 -!- Der_Kleene [n=hodel@p5B3AAD3C.dip.t-dialin.net] has quit []
12:42 -!- [thyko] [i=c4c9daea@gateway/web/freenode/x-xlmnnesfxduasrqf] has joined
12:42 < [thyko]> hello
12:43 -!- quelqun_dautre [i=unautre@server0.tonbnc.fr] has joined #go-nuts
12:43 < ekidd> Programming with goroutines and channels is quite nice.  But
there's definitely a lot of error-handling boilerplate weighing down the code.
12:43 -!- quelqun_dautre [i=unautre@server0.tonbnc.fr] has left #go-nuts []
12:44 < ekidd> Go feels like it's slightly higher-level than C, but much
lower-level than modern C++.  That's not necessarily bad, but I think it would be
a very beautiful and high-level language with some kind of systematic error
12:45 < ekidd> The interface system is really good, too.
12:48 -!- snearch [n=olaf@] has quit ["Ex-Chat"]
12:48 -!- josemoreira [n=jgm@bl9-70-73.dsl.telepac.pt] has joined #go-nuts
12:49 < [thyko]> are there plans for a release of a win32 compiler?
12:50 -!- _scavenger_ [n=info@cc922341-b.groni1.gr.home.nl] has joined #go-nuts
12:53 -!- Fish-Work [n=Fish@] has quit [Read error: 104 (Connection
reset by peer)]
12:55 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has joined #go-nuts
12:56 -!- b00m_chef [n=watr@] has joined #go-nuts
13:02 -!- kanru [n=kanru@61-228-151-201.dynamic.hinet.net] has joined #go-nuts
13:03 -!- randomiser [n=james@78-105-103-158.zone3.bethere.co.uk] has joined
13:05 -!- plainhao [n=plainhao@mail.xbiotica.com] has joined #go-nuts
13:05 -!- _scavenger_ [n=info@cc922341-b.groni1.gr.home.nl] has left #go-nuts []
13:06 -!- path[l] [n=path@] has quit []
13:08 < ekidd> Am I completely nuts for wanting the following program to be
13:08 < ekidd> https://gist.github.com/29d8394c602fba07a06f
13:09 < ekidd> Whoops, there's an error.
13:09 < ekidd> One sec.
13:09 < [thyko]> guess that's a no ...
13:10 < ekidd> OK, fixed.
13:11 < ekidd> [thyko]: If you Google around a bit, I think there's a Cygwin
port.  I don't think it's hugely high priority for the Google folks right now.
13:11 < ekidd> But they're willing to take patches.
13:12 < kleinchris> yes there is a cygwin port...
13:20 -!- Netsplit kornbluth.freenode.net <-> irc.freenode.net quits:
alexsuraci, mat_, KiNgMaR, zum, smcq, yiyus, Guest79191, jdp
13:21 -!- Netsplit over, joins: yiyus, smcq, KiNgMaR, alexsuraci, mat_, zum, jdp,
13:22 < ekidd> Hmm.  The GC doesn't seem to be able to clean up goroutines
until they shut down, even if there are no outstanding references to them.
13:23 < ekidd> This makes it pretty awkward to write something like an
Fibonacci series generator, and take the first 1000 numbers it generates, because
you need to set up a second channel to shut down the infinite loop cleanly.
13:33 -!- chickamade [n=chickama@] has joined #go-nuts
13:34 -!- b00m_chef [n=watr@] has quit [Connection timed out]
13:36 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit []
13:40 < ekidd> OK, here are three versions of an infinite goroutine:
13:40 < ekidd> https://gist.github.com/29d8394c602fba07a06f
13:42 < ekidd> It definitely looks like the GC is unable to clean up unused
goroutines.  So if you want to take only some of the results generated by a
goroutine, you need to build some sort of shutdown protocol for each goroutine.
13:44 < chickamade> or just generate upto n then quit :p
13:44 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has quit [Read error:
104 (Connection reset by peer)]
13:46 < chickamade> ekidd: what's wrong w the first version anyway
13:46 < ekidd> chickamade: Basically, it leaves a single stale goroutine
that can't be cleaned up until the program exits.
13:47 -!- Fish-Work [n=Fish@] has joined #go-nuts
13:47 -!- scm [i=justme@d019037.adsl.hansenet.de] has quit [Read error: 60
(Operation timed out)]
13:48 < ekidd> chickamade: This is no problem in a short program with one
goroutine.  But in the second case, the exact same approach ate about 2GB of core
before I killed the process.
13:48 < ekidd> chickamade: In general, an 'upto
13:49 < ekidd> 'upto' approach won't work, because I may not necessarily
know how many items I want to consume from a stream.
13:49 -!- scm [i=justme@c133223.adsl.hansenet.de] has joined #go-nuts
13:50 -!- path[l] [n=path@] has joined #go-nuts
13:54 -!- ekidd [n=ekidd@] has quit []
14:03 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
14:04 -!- GoNoGo_ [n=penalva@pc115.pallas.cines.fr] has quit [Read error: 104
(Connection reset by peer)]
14:14 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
14:18 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has joined
14:21 -!- cmarcelo [n=cmarcelo@enlightenment/developer/cmarcelo] has quit [Read
error: 60 (Operation timed out)]
14:23 -!- ShadowIce [i=shadowic@unaffiliated/shadowice-x841044] has quit
14:24 -!- [thyko] [i=c4c9daea@gateway/web/freenode/x-xlmnnesfxduasrqf] has quit
[Ping timeout: 180 seconds]
14:25 -!- ziyu4huang [n=ziyu_hua@220-133-3-82.HINET-IP.hinet.net] has joined
14:27 -!- ShadowIce [n=pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
14:27 -!- omar [n=omar@] has joined #go-nuts
14:27 -!- omar [n=omar@] has quit [SendQ exceeded]
14:28 -!- omar [n=omar@] has joined #go-nuts
14:31 -!- ekidd [n=ekidd@] has joined #go-nuts
14:35 -!- ekidd [n=ekidd@] has quit [Client Quit]
14:36 -!- omar [n=omar@] has quit ["Leaving"]
14:37 -!- gnuvince [n=vince@] has quit [Read error: 60 (Operation timed
14:37 -!- iant [n=iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Read
error: 60 (Operation timed out)]
14:38 -!- gnuvince [n=vince@] has joined #go-nuts
14:41 -!- p4p4 [n=P4p4@] has joined #go-nuts
14:43 -!- codedread [i=180dd699@gateway/web/freenode/x-ajttqmaeltshhigl] has
joined #go-nuts
14:43 -!- codedread [i=180dd699@gateway/web/freenode/x-ajttqmaeltshhigl] has left
#go-nuts []
14:47 < dho> morning.
14:53 -!- vizzord [n=exn@] has joined #go-nuts
14:54 -!- vigith [n=vigith@] has joined #go-nuts
14:57 -!- path[l] [n=path@] has quit [Read error: 54 (Connection reset
by peer)]
14:57 -!- path[l] [n=path@] has joined #go-nuts
14:58 -!- tumdum [n=tumdum@unaffiliated/tumdum] has quit [Read error: 60
(Operation timed out)]
15:02 -!- ekidd [n=ekidd@] has joined #go-nuts
15:02 -!- rakd [n=rakd@] has quit ["See you..."]
15:03 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
15:04 -!- Fish-Work [n=Fish@] has joined #go-nuts
15:06 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit []
15:07 -!- jA_cOp__ [n=yakobu@p7007-ipngn100106osakakita.osaka.ocn.ne.jp] has quit
15:07 -!- lux_ [n=lux@] has joined #go-nuts
15:07 -!- lux_ [n=lux@] has quit [Read error: 54 (Connection reset
by peer)]
15:09 -!- murodese [n=James@203-206-70-192.dyn.iinet.net.au] has joined #go-nuts
15:09 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
15:16 -!- murodes1 [n=James@203-206-70-192.dyn.iinet.net.au] has quit [Read error:
60 (Operation timed out)]
15:16 < josemoreira> (sorry for spam) any1 with some strong html/css skills
that would like to join me on a commercial project development ? mailme at
josemoreira@maybeitworks.com for details :)
15:16 < poucet> josemoreira: Wrong channel.
15:16 < josemoreira> sorry wc
15:18 -!- tumdum [n=tumdum@unaffiliated/tumdum] has joined #go-nuts
15:20 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has quit ["Leaving"]
15:22 < vegai> "Complex features won't make languages more complex, they
make them
15:22 < vegai> simpler."
15:22 < vegai> --qtvali
15:22 < vegai> hmm
15:23 < dho> i found that amusing.
15:24 -!- kanru [n=kanru@61-228-151-201.dynamic.hinet.net] has quit [Read error:
60 (Operation timed out)]
15:25 < dagle> Well, it depends on what you mean.  The code or the idea.
15:25 < ekidd> vegai: I rather doubt it, unless perhaps you're speaking of
implementation complexity behind a simple, well-chosen feature.
15:26 < dho> His posts are almost always with thoughts of the end-user
developer in mind.
15:26 < dho> complex features make it easier to do complex tasks for someone
using the language is what he means there.
15:27 < ekidd> dho: The usual problem is that complex features interact in
poorly-understood ways, and nothing composes cleanly.
15:27 < josemoreira> complex features mas you work simple, after some
complex thoughts learning them
15:27 < dho> ekidd: As a result of their complexity noless.  They become
poorly specified and are thus never well understood.
15:27 < josemoreira> ...  make ...
15:28 -!- iwikiwi [n=iwikiwi@] has quit ["I ascend to reality!"]
15:28 < ekidd> dho: Witness, for example, any advanced book on generic
programming in C++.  Every chapter starts with a simple, clever idea, but you
can't actually get it to work without 40 pages of "Yes, but what about this corner
15:29 < dho> heh.
15:29 < dho> Also, most of his argument was for `complex features' that
could be added as a result of packages written in the language.
15:29 < dho> Ignoring the fact that most of his examples can already be
implemented on top of or as a result of existing packages.
15:30 < dho> This is the difference between someone who knows how to program
and someone who knows how to program in language X.
15:30 -!- rhatta [n=rhatta@TE0039lan1.rev.em-net.ne.jp] has quit []
15:30 < ekidd> dho: Now, sometimes a conceptually simple feature can be a
real beast to implement.
15:31 < dho> The former is about understanding how problems are solved.  You
have to understand current data structures and algorithms, your problem, and make
proper pairings.  The latter is `oh, I need arraylist.  hm, there's nothing called
arraylist in go, i must need to make one'
15:31 < ekidd> A really good garbage collector, for example, is hard to
implement but simple to use.
15:31 < dho> The former would say `Hm.  Maps.  Lists.  Vectors.  Something
exists here to do this for me already.'
15:31 < dho> indeed
15:32 < ekidd> Similarly, closures are a mathematically simple idea that
make 10,000 other things simple.  But implementing them well does require a
certain amount of work...
15:33 < ekidd> A well-designed language should contain a small number of
simple, powerful tools that interact very cleanly and which compose well.
15:33 < dho> here here.
15:34 < dho> or is it Hear, hear.
15:34 * dho shrugs and decides not to care.
15:34 < ekidd> It's OK if some of them are hard to implement.  :-)
15:34 -!- p4p4 [n=P4p4@] has quit [Remote closed the
15:35 < ekidd> Go is _so_ close to being a really expressive, powerful,
high-level language with high performance and good string handling.
15:35 < chickamade> what's missing?
15:36 < dho> stability :)
15:37 < ekidd> If I could fix only three things, they would be: (a) some way
to handle errors without having to spend two lines out of every three messing with
'err' variables, (b) just enough support for generics to allow me to write
parameterized functions, and (c) garbage collection of goroutines that are blocked
on channels that nobody's listening to.
15:37 < chickamade> hmm, (c) is not really possible though
15:38 < ekidd> Grr.  (b) just enough support for generics to allow me to
write higher-order functions.  Implementing generics entirely in the type-checker
would be fine, if support for primitive types was somehow included.
15:38 < chickamade> idk, maybe
15:39 < chickamade> yeah higher-order functions are nice
15:39 < ekidd> chickamade: Why is GCing unneeded goroutines impossible?
15:39 < vegai> how do you detect they're unneeded?
15:40 < ekidd> Fixing (b) is on the roadmap.  Fixing (a) is supposedly a
goal, but I don't think anybody's actually planning to work on it soon.
15:41 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has joined
15:41 < ekidd> vegai: Well, if a goroutine is blocked writing on channels
c_1...c_n, and you can prove that no external reference to those channels exists,
then the goroutine can never wake up.
15:42 < ekidd> vegai: Or to put if differently, don't include blocked
goroutines in the root set for your garbage collector.  If the GC can't find a way
to reach the blocked goroutines, shut them down.
15:43 < ekidd> Solving (c) would make the following example much nicer:
15:43 < ekidd> https://gist.github.com/29d8394c602fba07a06f
15:44 < ekidd> The first two versions of the code are clean, but they leak
uncollectable goroutines.  The third version is much uglier, but it works.
15:45 < chickamade> don't they get shut down when main() exit?
15:45 < vegai> right
15:45 -!- Fish-Work [n=Fish@] has quit [Read error: 104 (Connection
reset by peer)]
15:45 < chickamade> main holds the reference to the channels, it has got to
exit before the GC declare the channel unreachable
15:46 < ekidd> This has real-world implications, too: Let's say you have a
goroutine A which relies on another goroutine B, and B generates a series of
complex results for A. But an error occurs in A, rendering B useless.  So A needs
to somehow shut down B, which can only be done using some kind a 'quit' channel
threaded throughout every channel operation in B.
15:46 -!- Fish-Work [n=Fish@] has joined #go-nuts
15:47 < chickamade> ekidd: I think the scheduler+GC already does what you
want, (but not when you think it would happen)
15:48 < ekidd> chickamade: In the second and third examples, I generate
about a million goroutines and then ignore them.  On each pass through the 'for'
loop in 'main', it becomes possible to collect the old value of 'series', and
hence one of the goroutines.
15:48 < ekidd> chickamade: But the runtime doesn't do this, so the second
example soon takes up >2GB of core.
15:48 < ekidd> chickamade: The third example is well-behaved.
15:49 < ekidd> chickamade: Well, it's certainly not collecting unreachable
goroutines in the second example.  If it doesn't collect them once they're
unreachable, when would it collect them?
15:50 < chickamade> ic
15:50 < ekidd> chickamade: Yeah, if only Go could collect the dead
goroutines, I could write some really awesome libraries.
15:50 < chickamade> I suppose they are improving the GC
15:50 < ekidd> It's _so_ close to letting me do some really sweet, useful
15:51 < chickamade> but the dead goroutines are shut down when main quit,
15:52 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit []
15:53 < ekidd> chickamade: Yeah, but that's useless in a longer-running
15:53 < chickamade> ekidd: perhaps this has been discussed in the
15:54 < chickamade> ekidd: say you spawn the goroutines not from main but
from another function, do the dead ones get shut down when that function exits?
15:55 < ekidd> chickamade: It would be pretty bizarre and broken if that
were the case.
15:55 < ekidd> Conceptually, there's no hierarchical connection between
15:55 -!- path[l] [n=path@] has quit []
15:59 < chickamade> yeah I don't expect that behavior
15:59 < chickamade> but that maybe why it is hard to tell whether a channel
is reachable
16:00 < chickamade> a "dead" channel is certainly reachable from the
blocking coroutine
16:00 < chickamade> maybe what they are doing right now is counting root
objects from main()
16:01 -!- omar [n=omar@] has joined #go-nuts
16:01 -!- omar [n=omar@] has quit [SendQ exceeded]
16:01 -!- omar [n=omar@] has joined #go-nuts
16:01 < ekidd> chickamade: Yeah, but the blocking coroutine isn't reachable
from anywhere but the channels it's blocked on.
16:02 < ekidd> chickamade: So theoretically speaking, it's the same as
collecting any other loop of references.
16:02 -!- iant [n=iant@nat/google/x-lefbfzomrkicxuhh] has joined #go-nuts
16:02 -!- mode/#go-nuts [+v iant] by ChanServ
16:04 < ekidd> Hmm.  I wonder how hard it would be to just patch the GC and
fix this?
16:04 < chickamade> ekidd: the problem is the GC and the scheduler are
separate entities, the GC can garbage collect channels, the scheduler can shut
down goroutine -- but can only do so if it can prove the blocking goroutine is
blocking on a non-reachable channel
16:05 < chickamade> it maybe possible for the GC to decect that
16:06 < ekidd> chickamade: That might make things slightly hairy, but it
doesn't impose _that_ substantial a barrier.  Obviously, in a language so heavily
dependent on goroutines and channels, it's going to be necessary for the GC to
know a little bit about the runtime.
16:06 < chickamade> yeah there need to be some sort of cooperation there
16:16 < ekidd> Is there some way to create goroutine-specific variables?
Sort of like thread-specific variables in most OSs?
16:16 <+iant> ekidd: not currently
16:16 -!- omar [n=omar@] has quit ["Leaving"]
16:17 < ekidd> Hrm.  With goroutine-local variables, it would be possible to
use exp.exception without threading a 'throw' function through every function I
16:18 <+iant> yes
16:18 < Ycros> ekidd: if only we had monads...
16:19 < ekidd> Ycros: Well, since the language is parseable via recursive
descent, it would be really easy to hack primitive monads into a preprocessor.
16:20 < ekidd> Ycros: I've been idly thinking about porting some of my
probability monads library in my Copious Free Time.
16:20 < ekidd>
16:20 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has joined #go-nuts
16:21 < Ycros> ekidd: 404s on the links in that post
16:21 < ekidd> Drat.  The darcs server is broken.  Once second.
16:25 < ekidd> Ycros: OK, the links should more-or-less work again.
16:26 < ekidd> I want to do some large scale text munging using a
distributed, Erlang-like model.  But Erlang isn't fast enough for serious text
16:26 < ekidd> Go would get me most of the benefits of Erlang, and it would
16:27 < ekidd> ...at least once it matures a bit.
16:27 < ekidd> And the text processing is much nicer, coming from a
Unix/Plan 9 background.
16:27 -!- scyth [n=scyth@zeljko.eunet.rs] has quit ["."]
16:28 < ekidd> Erlang text processing actually underperforms Ruby in most
benchmarks.  And although I adore Ruby, it's _slow_.
16:28 -!- deso [n=deso@77-21-80-251-dynip.superkabel.de] has joined #go-nuts
16:29 < ekidd> Haskell would give me monads and my choice of 5 flavors of
concurrency, but the last time I looked, the HTTP client was a depressing mess and
it didn't know about ByteStrings.
16:32 < ekidd> Ycros: Go is a (theoretically) efficient systems programming
language with Erlang-style concurrency.  And it's because it has channels, lambdas
and an easy-to-parse syntax, it's possible to graft on many simple monads using a
16:32 -!- clip9 [n=tj@12.81-166-62.customer.lyse.net] has quit ["leaving"]
16:32 -!- snearch [n=olaf@g225051059.adsl.alicedsl.de] has joined #go-nuts
16:33 -!- path[l] [i=UPP@] has joined #go-nuts
16:33 < Ycros> ekidd: yeah.  I think it'd be neat to do just that
16:33 < Guest26185> Is there a way to represent associative arrays (like
maps for arbitrary types, or structs with dynamic fields) in order to build
tree-like data?  Did anyone write something similar?
16:34 < ekidd> Guest26185: Associative arrays are built in.
16:34 < Guest26185> you mean maps?
16:34 < Ycros> same difference
16:37 -!- Soak [n=Soak@mst45-1-82-231-239-194.fbx.proxad.net] has joined #go-nuts
16:40 -!- Venom_X [n=pjacobs@adsl-99-3-159-249.dsl.hstntx.sbcglobal.net] has
joined #go-nuts
16:40 -!- amorpisseur [n=analogue@toulouse.jfg-networks.net] has quit []
16:42 -!- clip9 [i=tj@12.81-166-62.customer.lyse.net] has joined #go-nuts
16:46 -!- Venom_X [n=pjacobs@adsl-99-3-159-249.dsl.hstntx.sbcglobal.net] has quit
[Read error: 60 (Operation timed out)]
16:46 -!- Venom_X [n=pjacobs@] has joined #go-nuts
16:46 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has joined #go-nuts
16:50 -!- webbpa [n=chatzill@c-69-243-169-178.hsd1.in.comcast.net] has joined
16:52 < webbpa> I have two lines of go p := x + 8 * y; q := 1 << p;
where x and y are ints.  I get a compilation error: "shift count type int".
What's up?
16:53 < webbpa> invalid operation: 1 << p (shift count type int32)
16:53 < webbpa> to be exact.
16:54 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
16:54 <+iant> webbpa: the right operand of a shift operator must be be an
unsigned integer
16:54 < webbpa> ah.  thanks.
16:54 <+iant> webbpa: e.g., q := 1 << uint(p) should work
16:54 -!- triplez [n=triplez@cm52.sigma225.maxonline.com.sg] has joined #go-nuts
16:55 < webbpa> cool.  will give it a try.
16:55 -!- Fish-Work [n=Fish@] has joined #go-nuts
16:55 < webbpa> Is that the case in C? I don't recall.
16:59 -!- eno [n=eno@nslu2-linux/eno] has joined #go-nuts
17:00 -!- Oejet [n=s022018@glint10.gbar.dtu.dk] has quit ["Leaving."]
17:01 -!- tor5 [n=tor@h38n1fls305o968.telia.com] has quit []
17:03 -!- trickie [n=trickie@] has quit [Read error: 113 (No route
to host)]
17:11 -!- eno_ [n=eno@adsl-70-137-159-64.dsl.snfc21.sbcglobal.net] has quit [Read
error: 110 (Connection timed out)]
17:17 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has joined
17:18 < Soak> anyone have installed go on ubuntu please?
17:19 < Soak> for the "make all" I haven't the permission...
17:19 < webbpa> Have you tried "sudo make all"?
17:19 < webbpa> Can you log in as root on the machine?
17:19 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has quit []
17:20 < Soak> sudo make all don't run
17:20 < Soak> No how I can do that?
17:20 < Soak> I have test "root, root" for nick and pass.
17:20 < Soak> Or "root" and blank.
17:21 < Soak> That don't run.
17:21 < webbpa> Are you following the instructions at
17:21 -!- vizzord [n=exn@] has quit [Remote closed the connection]
17:22 < Soak> $ cd $GOROOT/src
17:22 < Soak> $ make all
17:22 < Soak> It's here.
17:23 < webbpa> What is $GOROOT set to?
17:23 < Soak> 2 minutes I will reboot on Linux.  =p
17:23 -!- Soak [n=Soak@mst45-1-82-231-239-194.fbx.proxad.net] has quit []
17:24 -!- webbpa [n=chatzill@c-69-243-169-178.hsd1.in.comcast.net] has quit
["ChatZilla 0.9.86 [Firefox 3.5.6/20091215231754]"]
17:26 -!- carllerche [n=carllerc@c-69-181-129-204.hsd1.ca.comcast.net] has quit []
17:27 -!- ekidd [n=ekidd@] has quit []
17:40 -!- chickamade [n=chickama@] has quit ["Leaving"]
17:41 -!- ekidd [n=ekidd@] has joined #go-nuts
17:42 -!- pvanduse [n=pdusen@crob4-55.flint.umich.edu] has joined #go-nuts
17:46 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
17:48 -!- Fish-Work [n=Fish@] has joined #go-nuts
17:48 < ekidd> Hmm.  It might actually be possible to GC permanently blocked
goroutines without too much work...
17:53 < Ycros> that would be neat
17:56 < ekidd> Ycros: It would make it possible to work with infinite
goroutines, and with nested pipelines, all without having to thread shutdown logic
17:56 < Ycros> mmm, yeah.
17:56 < ekidd> Actually, I suspect it's very hard to write correct Go
programs if goroutines blocked on unreferenced channels can't be GC'd.
17:57 < Ycros> ekidd: I'm pretty sure it's on a TODO list somewhere
17:57 < Ycros> ekidd: it's been talked about before
17:58 < ekidd> Because if you encounter an error, you need to shut down all
the goroutines that you "own", but goroutines aren't first class, and shutting
them down requires threading a 'quit' channel through every channel operation in
each of your goroutines.
17:58 < ekidd> Ycros: Off the top of your head, do you know where?
17:58 < dho> I remember seeing it as well.
17:58 < Ycros> ekidd: in here
17:58 < ekidd> I don't think the hard part is actually the GC; it's shutting
down a goroutine in Gwaiting state.
17:58 < Ycros> ekidd: but possibly also on the mailing list
17:58 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has joined #go-nuts
17:58 < dho> I'm pretty sure it was on the ml
17:58 < ekidd> Anyway, lunch time.  More later.
17:59 < dho> ekidd: why is that hard?
18:00 -!- pvandusen [n=pdusen@crob4-55.flint.umich.edu] has quit [Read error: 110
(Connection timed out)]
18:03 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has joined
18:09 -!- tav [n=tav@] has quit ["Hakuna Matata"]
18:10 -!- mfoemmel [n=mfoemmel@] has joined #go-nuts
18:11 < ekidd> dho: I don
18:12 < ekidd> I don't think that's actually all that hard, either.  But the
GC stuff looks pretty simple.
18:12 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
18:12 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has joined #go-nuts
18:13 -!- skelterjohn [n=jasmuth@nat02-nbpwireless-ext.rutgers.edu] has joined
18:14 < dho> ekidd: What part in particular did you think would be
18:15 < skelterjohn> morning
18:15 < dho> hey john
18:15 < ekidd> dho: I'm going to need to hack for an hour or so before I'm
sure this will work.
18:15 < ekidd> dho: It's always a bit hard to modify a language runtime
without a good understanding of the overall system.
18:15 < dho> ok, lemme know if you have questions
18:16 < ekidd> Will do.  Thanks.
18:17 < dho> skelterjohn: see russ's comments?
18:17 < skelterjohn> i did, yes
18:18 < skelterjohn> I feel like he wants it to be more like a general
building system rather than a utility to build go source
18:18 -!- Soak [n=root@mst45-1-82-231-239-194.fbx.proxad.net] has joined #go-nuts
18:18 < dho> Right; go isn't all written in go.
18:18 < Soak> Ok fine.
18:18 < skelterjohn> building in the ability to figure out how to compile C
code is going to be a pain
18:18 < skelterjohn> i don't think we should do it
18:18 < Soak> I am in root and Go run.  =)
18:18 < dho> skelterjohn: I don't see why
18:19 < skelterjohn> there are lots of utilities out there that do this kind
of thing well
18:19 < skelterjohn> because it's complicated
18:19 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has quit [Remote closed
the connection]
18:19 < dho> what about it is complicated?
18:19 < skelterjohn> that step makes it go from a teeny project to a
humungous project
18:20 < skelterjohn> we'd basically have to reimplement make or scons
18:20 < dho> I don't think it's that hard.
18:20 < skelterjohn> I think it's hard :)
18:21 < skelterjohn> in any case, the ability to run external commands is
something that any builder will need
18:21 < skelterjohn> so it's reasonable to, as a first iteration, not worry
about non .go files, and spin them off with an external command
18:21 < skelterjohn> and later if people really want to, add the ability to
understand C
18:22 < ekidd> dho: My proposed fix for GCing blocked goroutines: Don't add
goroutines in the Gwaiting state to the GC's root set until we mark one of the
channels they're blocked on.  For goroutines that never get added to the root set,
detach them from the channels they're waiting on and simulate a call to Goexit.
18:22 < dho> If this is the utility that we want to go into the source, it
needs that ability.
18:23 < ekidd> dho: If that seems horribly implausible to you, please let me
know before I get deep in the weeds.  :-)
18:23 < skelterjohn> ekidd: are you thinking of making a GC patch for
blocked goroutines?
18:24 < skelterjohn> this is something that i've been anxious about
18:24 < skelterjohn> I proposed a way to do it nicely, on the list
(semantically nicely - i have no idea how to modify the runtime to effect this
18:24 < ekidd> skelterjohn: If you've got a link, I'll take a look.
18:25 <+iant> ekidd: Maybe you should close the channel instead of
simulating a call to Goexit
18:25 <+iant> not sure
18:25 -!- carllerche_ [n=carllerc@enginey-9.border1.sfo002.pnap.net] has joined
18:25 < ekidd> iant: That might work for readers, but what about writers?
18:25 < skelterjohn> it's simple: you can make a graph where goroutines are
the nodes and channels that are blocked in one goroutine that have a reference in
another goroutine are edges
18:26 <+iant> ekidd: a write to a closed channel should return immediately
18:26 <+iant> if I recall correctly
18:26 < skelterjohn> if you have a strongly connected component of blocked
goroutines that don't include the main goroutine, they can never wake up and
should be GC'd
18:26 < skelterjohn> if they include the main, panic
18:27 < ekidd> iant: But won't that cause the writing goroutine to go into
an (potentially) infinite loop, supplying values to a dead channel.
18:27 <+iant> that will eventually trip the error count and crash the
18:27 < ekidd> skelterjohn: Yeah.  that's basically my approach.
18:27 < skelterjohn> ekidd: ok := ch <- val.  if ok is false, the write
failed.  is this correct?
18:27 <+iant> so maybe that is a bad idea
18:27 < dho> iant: right, but closed(c) would still be true
18:27 < skelterjohn> but then, you can't depend on the code to do that
18:28 < dho> I'd argue if you're not checking that, you're doing it wrong
18:28 < skelterjohn> (moving across campus, brb)
18:28 < ekidd> iant: That's really too bad.  I can think of a lot of nice
idioms if it were possible to have potentially infinite goroutines.
18:28 -!- skelterjohn [n=jasmuth@nat02-nbpwireless-ext.rutgers.edu] has quit []
18:28 <+iant> well, it would be nice to be able to write a generator channel
and not have to worry about crashing the program when you GC it
18:28 < ekidd> iant: Exactly.
18:28 < ekidd> Infinite generators have all sorts of good uses.
18:29 < ekidd> E.g., I can generate hypothetical parses for a sentence in
probability order, and the consuming routine can just stop listening when it no
longer cares.
18:30 < ekidd> iant: But that really only works if we silently GC channels
that can be proved to be blocked forever
18:31 <+iant> the cycle case seems hard to me, but if there is only one
reference to a channel, and a goroutine is blocked on it, then you know that
goroutine is dead
18:31 < ekidd> Plus, it's actually less of a semantic change, because GCing
a permanently-blocked goroutine doesn't change the meaning of any programs.
18:32 < ekidd> iant: I _think_ it possible to handle cycles without too much
work with a few small changes to chan.c and the GC.
18:32 <+iant> I agree that you can detect cycles but I think it's hard to
know what to do about them
18:33 <+iant> I think the safest thing may be to declare the program to be
18:33 <+iant> continuing the program seems complex--breaking part of the
cycle may let it continue
18:34 < ekidd> iant: Hmm.  My approach would leave reachable cycles alone,
and let somebody else deal with them.
18:34 <+iant> maybe read and write channels should be handled differently
18:34 <+iant> maybe if a goroutine is blocked on read, the channel should be
closed, and if it is blocked on write the goroutine should be GC'ed
18:35 <+iant> I really don't know what the best approach is
18:35 < dho> That sounds reasonable.
18:35 <+iant> that would be a way to break a cycle, perhaps--the reading
goroutines would go away and then the writing goroutines would eventually be GCed
18:35 < ekidd> But if you had an unreachable (by the GC) deadlock, it would
just collect the whole loop.  Sure, it's a deadlock, but it would never actually
be observable, because there are no live objects referring to it.
18:37 < ekidd> iant: I agree that it _might_ be worth closing channels with
no possible remaining writers.  But I'm not sure I fully understand the
implications, because maybe somebody is doing something like:
18:37 <+iant> there are no live objects referring into the goroutines but
the goroutines can refer to live objects outside them, so if you close a read
channel the goroutine might go on to do something visible
18:37 < ekidd> x: = <-c # No actual writers
18:37 -!- r2p2 [n=billy@v32671.1blu.de] has joined #go-nuts
18:37 <+iant> write, if you close c, that read will return a zero value
18:37 -!- skelterjohn [n=jasmuth@lawn-net168-in.rutgers.edu] has joined #go-nuts
18:37 < skelterjohn> what'd i miss
18:37 <+iant> s/write/right/
18:37 <+iant> channel cycles
18:37 < ekidd> c <- x # Write to the channel immediately after
18:38 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has joined #go-nuts
18:38 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has quit [Client Quit]
18:39 -!- b4|hraban [n=b4@a83-163-41-120.adsl.xs4all.nl] has quit [Read error: 60
(Operation timed out)]
18:39 < ekidd> Here, c is mysteriously closed, even though no goroutine ever
closed it, simply because there was no current writer on the channel.
18:39 <+iant> well, there is something wrong with your program there, I
think, so I'm not sure it's worth trying too hard in that case
18:40 < ekidd> iant: That may be the desirable behavior, but it seems
slightly surprising to me.  So for an initial implementation, I'm leaning towards
silently reclaiming deadlocks that the GC can't find a way to reach, on the theory
that if I didn't reclaim them, they'd just hand around forever without affecting
18:40 <+iant> I agree that that seems plausible and is worth trying
18:40 -!- josemoreira [n=jgm@bl9-70-73.dsl.telepac.pt] has quit ["Leaving"]
18:41 < ekidd> iant: Yeah, but I'm not sure that broken programs would fail
in the most pleasing way if I closed the channel in that example.  Certainly, it's
desirable to give an error when deadlocks occur.  But an error about reading from
a mysteriously closed channel might not be terribly useful.
18:42 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has quit [Read
error: 110 (Connection timed out)]
18:42 -!- b4|hraban [n=b4@a83-163-41-120.adsl.xs4all.nl] has joined #go-nuts
18:42 < ekidd> Another alternative: When a deadlock is provably isolated
from the rest of the program, and can never affect anything, it might be possible
to detect that after the mark/sweep is done.  E.g., treat deadlock detection as a
semi-separate issue.
18:42 < skelterjohn> I think closing the channel is a bad idea...  this is
really a clean-up mechanism we're talking about here.  Whether or not the cleanup
happens shouldn't affect the behavior of the code, only the memory overhead.
18:43 < ekidd> skelterjohn: Yeah, I agree deadlock detection is a good
thing, but it's probably easier for me to treat that as a separate issue for now.
18:43 < skelterjohn> ekidd: I think you're correct - deadlock detection
doesn't need to be part of mark/sweep.
18:44 < skelterjohn> ekidd: what is the main issue, for you?  I only knew
about this one :)
18:45 < ekidd> skelterjohn: I'd like to port some Haskell code that relies
on infinite (or very large) generators, and I want to be able to just take the
output I want and then forget about the goroutine.
18:45 -!- Soak [n=root@mst45-1-82-231-239-194.fbx.proxad.net] has quit [Remote
closed the connection]
18:46 < skelterjohn> ah.  yes you need deadlock detection!
18:46 < ekidd> skelterjohn: It seems like this would lead to
nicely-decoupled pipelines: Generate candidates, filter them, etc., without
worrying about who shuts down the generator after we find an answer (or encounter
an error).
18:47 < skelterjohn> also it's very efficient to detect these deadlocks
18:47 < skelterjohn> you only ever need to run the check when a goroutine
starts to block on a send/receive
18:47 -!- lux` [n=lux@] has quit [Read error: 104 (Connection reset
by peer)]
18:47 < skelterjohn> and then search out from that goroutine
18:47 < ekidd> skelterjohn: Well, it's not really so much about the
deadlocks.  It's more about goroutines blocked on channels that nobody actually
cares about any more.
18:47 < skelterjohn> to see if you can find an active thread
18:48 < skelterjohn> ekidd: I understand that the deadlock issue is one
possible solution for your issue, but not necessarily the only one
18:49 -!- [[sroracle]] [n=sroracle@c-98-215-178-14.hsd1.in.comcast.net] has joined
18:49 < ekidd> skelterjohn: Well, I think of a true deadlock as including a
18:49 < skelterjohn> ah.  ok deadlock detection was the wrong choice of
18:50 < ekidd> Whereas I don't really care about cycles (one way or the
other), but about goroutines that are blocked on channels that nobody cares about
18:50 < ekidd> Exactly.
18:50 < skelterjohn> irrevocably blocked goroutine detection
18:50 < skelterjohn> bit of a mouthful
18:51 < ekidd> skelterjohn: Yeah, I'm just thinking of it as "GCing
unreachable blocked goroutines".
18:52 < skelterjohn> how about just "dead goroutines"
18:52 < skelterjohn> rather than deadlocked
18:52 < skelterjohn> goroutines consigned to purgatory
18:56 < b4|hraban> pfew.  iant, I do not know if you remember this, but I
had a problem with 5g generating an illegal instruction yesterday.  Turns out it
was the GOARM env var that needed to be set to "5" before building 5g.  everything
works fine now :)
18:56 <+iant> oh, good
18:56 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has quit [Read error:
104 (Connection reset by peer)]
18:56 < b4|hraban> thanks for the help yesterday
18:57 < ekidd> Hmm.  That's a nice, simple GC. :-)
18:57 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has joined #go-nuts
18:57 < skelterjohn> what - static memory?
18:57 < skelterjohn> is that how ARM works?
18:58 -!- tav [n=tav@] has joined #go-nuts
19:00 -!- vigith [n=vigith@] has quit ["www.vmaurice.com"]
19:00 -!- slashus2 [n=slashus2@74-137-26-8.dhcp.insightbb.com] has joined #go-nuts
19:02 -!- mbarkhau [n=koloss@p54A7E1A2.dip.t-dialin.net] has joined #go-nuts
19:04 -!- nullpo [n=nullpo@221x252x46x83.ap221.ftth.ucom.ne.jp] has quit
[Connection timed out]
19:09 < ekidd> dho: Is there an easy way to identify the type of a heap
object from inside the GC? I'm trying to special-case 'chan' objects, and I don't
seem to see any sort of type tagging on them
19:09 -!- lux` [n=lux@] has joined #go-nuts
19:09 -!- lux` [n=lux@] has quit [Client Quit]
19:09 -!- lux` [n=lux@] has joined #go-nuts
19:10 -!- mbarkhau [n=koloss@p54A7E1A2.dip.t-dialin.net] has quit [Read error: 60
(Operation timed out)]
19:10 < ekidd> But I'm probably just being clueless here.  :-)
19:10 < ekidd> If it's impossible, I may be able to find another way to do
19:10 <+iant> ekidd: good point, currently types are not stored in the heap
19:10 -!- Associat0r [n=Associat@h163153.upc-h.chello.nl] has quit [Read error:
104 (Connection reset by peer)]
19:10 <+iant> ekidd: in the future there will likely be bitflags for heap
objects indicating whether they are a pointer
19:11 <+iant> ekidd: those bitflags will be able to encode other information
as well
19:11 < ekidd> iant: Hmm.  So I'm going have to do some extra work to find
reachable goroutines, then.
19:11 <+iant> yes, that is true
19:12 * ekidd is too used to Lisp heaps (where everything is tagged) or heaps
where types can be inferred from external data.
19:12 < ekidd> This is basically a conservative mark & sweep collector with
no type information, right?
19:13 -!- slashus2_ [n=slashus2@74-137-26-8.dhcp.insightbb.com] has joined
19:14 <+iant> that is what we have today, yes
19:14 <+iant> well, there is one bit of type information: whether the block
is known to not contain a pointer
19:14 -!- General13372 [n=support@71-84-247-187.dhcp.gldl.ca.charter.com] has
joined #go-nuts
19:14 <+iant> of course we do plan to rewrite the gc
19:15 < ekidd> Hmm.  I'm going to need to think for a bit, then.
19:16 < b4|hraban> Hmm, I am getting quite some segmentation faults from
apps in /test/ (on ARMv5).  Should I bother reporting them, or is that not really
necessary at this point?
19:16 <+iant> b4|hraban: I would recommend sending e-mail to kaib and asking
him; I don't know what would help him
19:16 < b4|hraban> alright, I will
19:19 < dho> I'd love some arm hardware to play about with freebsd/arm
19:19 < dho> unfortunately the only thing i have at hand is a slug
19:19 < dho> and that's wrong endian :(
19:19 < ekidd> iant: Hmm.  Instead of trying to identify channels and scan
them for pointers to blocked goroutines, I suppose I could just look for any
references of type RefStack anywhere in the heap.
19:19 -!- General1337 [n=support@71-84-247-187.dhcp.gldl.ca.charter.com] has quit
[Read error: 60 (Operation timed out)]
19:20 < ekidd> Assuming everybody is actually allocating stuff from the same
heap, and that the runtime doesn't keep parts of chan objects elsewhere, that
would probably have the same effect.
19:21 -!- Associat0r [n=Associat@h163153.upc-h.chello.nl] has joined #go-nuts
19:21 -!- slashus2 [n=slashus2@74-137-26-8.dhcp.insightbb.com] has quit [Read
error: 110 (Connection timed out)]
19:23 -!- stevenyvr [n=schan@76-10-184-108.dsl.teksavvy.com] has joined #go-nuts
19:25 -!- timmcd [n=Adium@97-117-100-106.slkc.qwest.net] has joined #go-nuts
19:25 < timmcd> anyone else working on wrapping the lua C API?
19:25 < dho> there is a port.
19:25 -!- XniX23 [n=XniX23@89-212-185-98.dynamic.dsl.t-2.net] has joined #go-nuts
19:25 < dho> http://code.google.com/p/go/issues/detail?id=121#c5
19:25 < dho> er
19:26 < dho> ffs.
19:26 < dho> http://code.google.com/p/golua/
19:26 < dho> most exciting is that lua.PushFunction does work.
19:28 < timmcd> pushcfunction you mean?
19:28 < dho> it is the wrapper for lua_pushcfunction, yes
19:30 < timmcd> Nice
19:30 < timmcd> Man, I was hoping I'd be the first.
19:30 < timmcd> oh well ^_^
19:30 < dho> it still has work to be done
19:30 < dho> i'm sure help would be appreciated.
19:33 -!- Xera^ [n=brit@87-194-208-246.bethere.co.uk] has joined #go-nuts
19:35 < Amaranth> golua supports callbacks into go code?
19:35 -!- exitstate [n=xorl@xorl.xen.prgmr.com] has quit ["leaving"]
19:36 < dho> Amaranth: yep
19:36 -!- exitstate [n=xorl@xorl.xen.prgmr.com] has joined #go-nuts
19:38 -!- timmcd [n=Adium@97-117-100-106.slkc.qwest.net] has left #go-nuts []
19:38 -!- smooge [n=smooge@int.smoogespace.com] has joined #go-nuts
19:38 -!- stalled_ [n=411@unaffiliated/stalled] has quit []
19:41 < ekidd> iant: OK, I have some vaguely plausible-looking marking code,
and now I'm going to work on deallocating stacks of unreachable goroutines.
19:42 -!- mbarkhau [n=koloss@p54A7C209.dip.t-dialin.net] has joined #go-nuts
19:44 -!- rhatta [n=rhatta@TE0039lan1.rev.em-net.ne.jp] has joined #go-nuts
19:44 -!- rhatta_ [n=rhatta@TE0039lan1.rev.em-net.ne.jp] has joined #go-nuts
19:44 -!- rhatta [n=rhatta@TE0039lan1.rev.em-net.ne.jp] has quit [Read error: 54
(Connection reset by peer)]
19:51 -!- raichoo [n=raichoo@i5387D984.versanet.de] has joined #go-nuts
19:56 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has quit []
19:56 < ekidd> Hrm.  This would be easier if I actually understood the
runtime.  :-/
19:57 < dho> what's unclear?
19:57 -!- Venom_X__ [n=pjacobs@] has joined #go-nuts
19:57 -!- Venom_X [n=pjacobs@] has quit [Nick collision from
19:59 < ekidd> dho: I'm trying to find a safe way to mark a stack as
Gmoribund from inside the GC.
20:00 < ekidd> My latest attempt just passed the test suites, so I suppose
that counts for something.
20:00 < dho> ekidd: probably worth it to write a test case that exhibits the
blocking issue :)
20:00 < dho> give me a moment, i'll look
20:00 -!- Fish-Work [n=Fish@194.182.65-86.rev.gaoland.net] has quit [Read error:
104 (Connection reset by peer)]
20:00 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has joined
20:01 < ekidd> dho: Well, the only really way to test this is to spawn a
zillion goroutines, and have then all block on channels that nobody cares about.
If it eats 2GB of core, the test fails.  :-)
20:01 -!- Fish-Work [n=Fish@] has joined #go-nuts
20:01 < dho> I can test that.
20:04 < ekidd> Hmm.  No luck.  Let's see what an explicit yield() does;
maybe nobody is actually calling schedule in this example.
20:05 < ekidd> Where did I see a yield command again?
20:05 * ekidd digs through docs
20:06 < dho> you want runtime.Gosched()
20:06 < dho> :q
20:09 < ekidd> dho: Thanks.  OK, it looks like I'm successfully reclaiming
_some_ of the memory associated with dead goroutines, but maybe not all of it.
20:10 < dho> are you cleaning up the goroutines before killing them?
20:10 < ekidd> - With explicit shutdown over a quit channel: Memory usage
does not grow.
20:10 < ekidd> - With no explicit shutdown, and no patch: Memory rapidly
exceeds several GB.
20:11 < ekidd> - With no explicit shutdown, and patch: Memory slowly creeps
up towards a few hundred megabytes.
20:11 < dho> make patch / test case available for review?
20:11 < ekidd> dho: I'm just changing the marks on some stacks from Gwaiting
to Gmoribund, and hoping that the scheduler notices sooner or later.
20:12 < dho> I wonder if valgrind would help
20:12 < ekidd> dho: This isn't nearly ready for a real review, but I can but
a copy online.
20:12 < dho> that would be fine; it's hard to envision exactly what you're
working with
20:13 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has quit [Read
error: 104 (Connection reset by peer)]
20:14 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has joined
20:14 -!- afurlan [n=afurlan@scorpion.mps.com.br] has quit [Remote closed the
20:17 -!- tomestla1 [n=tom@] has quit [Read error: 110 (Connection
timed out)]
20:18 < ekidd> dho: Here's the very rough patch and a test program:
20:20 < ekidd> dho: It's pretty primitive, but it should show you what I'm
trying to do.
20:20 -!- binaryjohn [n=binaryjo@cpe-24-30-132-50.san.res.rr.com] has quit []
20:21 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
20:21 < ekidd> dho: Basically, the goal is to only scan Gwaiting stacks when
we actually encounter references to them, then turn them into Gmoribund stacks.
20:22 < ekidd> At a minimum, I probably also need to find all the channels
associated with a Gwaiting stack and disconnect them cleanly
20:22 -!- Fish-Work [n=Fish@] has joined #go-nuts
20:25 < ekidd> Frankly, I'm somewhat pleased that this buggy patch reduces
memory usage by _any_ amount, and that it doesn't actually crash.  That's not so
bad for blindly mucking about with somebody else's GC.
20:25 < dho> heh
20:25 < skelterjohn> ekidd: kudos on taking initiative for something that
can be so beneficial to gp
20:25 -!- Venom_X [n=pjacobs@] has quit [Read error: 113 (No route to
20:25 < skelterjohn> go
20:26 < ekidd> dho: Hmm.  There's no way to find out what channels a G* is
blocked on, is there?
20:26 < skelterjohn> that should be somewhere...
20:26 < dho> ekidd: your patch doesn't apply to tip
20:28 < ekidd> dho: Huh.  I just updated about 30 minutes ago.  Try 'patch
-p1' to strip the leading "a/" junk?
20:28 < dho> i did -p4 in pkg/runtime.
20:29 < ekidd> dho: Huh.  I'm working against "make 6prof (sic) architecture
20:29 < dho> 257275eaa2c8 tip
20:30 < ekidd> Yeah, that.  Huh.  Maybe it got corrupted by gist or
20:31 < ekidd> Did you try a raw download from here?
20:31 < ekidd>
20:31 < ekidd> I'm sure there's some stupid problem on my end.  Let me see
if I can find it.
20:31 < dho> http://pastebin.com/m58f5954f
20:32 < dho> oh
20:32 < dho> @@ -52,8 +56,19 @@ scanblock(int32 depth, byte *b, int64 n)
20:36 < ekidd> dho: Hmm.  Does your patch dislike my diffs?  I just
successfully applied the patch using MacOS X 'patch'.
20:37 -!- ikke [n=ikke@unaffiliated/ikkebr] has joined #go-nuts
20:38 < ekidd> dho: The patch I posted is uncorrupted and applies cleanly
against 257275eaa2c8 using MacOS X patch.
20:39 -!- plainhao [n=plainhao@mail.xbiotica.com] has quit []
20:40 < dho> using freebsds patch
20:40 < exitstate> hey on flags right, with flag.String("word"....) can I
specify multiple flags.
20:40 < ekidd> dho: I can regenerate the patch using Mercurial if that would
help you.  Just give me a moment to get a Mercurial tree.
20:41 < dho> i think it wants a newline after the @@
20:42 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
20:42 -!- Fish-Work [n=Fish@] has joined #go-nuts
20:43 < ekidd> dho: Just delete everything between the @@ and the end of the
20:43 < ekidd> the second @@
20:43 < ekidd> That's just a comment, basically, telling you what routine is
20:43 -!- WalterMundt [n=waltermu@twiki/developer/EtherMage] has joined #go-nuts
20:44 < WalterMundt> Is there any builtin in go for cloning a map, or is the
idiom just to use a range loop?
20:44 < ekidd> dho: Here, I'll report one sec.
20:44 < ekidd> repost.
20:46 < ekidd> dho: OK, I've cleaned this one up by hand:
20:46 < ekidd> You can either try that, or wait until I regenerate it with
20:47 < dho> yep
20:47 < dho> that works fine.
20:49 <+iant> WalterMundt: there is nothing built in for cloning a map
20:49 < dho> your fib segfaults for me.
20:49 < dho> with patch
20:49 < ekidd> OK, my apologies for that.  I think the real problem was some
tab->space conversion on my end when I pasted it into the web form.
20:49 < dho> http://gopaste.org/view/f5W06
20:50 < WalterMundt> iant: okay, thanks for the confirmation
20:51 < ekidd> dho: Whee!  Well, that's not entirely unexpected, I suppose
(it's an evil patch).  I can run all the test suites without problem using 8c/8l
on MacOS X.
20:51 < exitstate> can I do flag.String(...) || flag.String(...);
20:51 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
20:51 < exitstate> to define a var?
20:52 < dho> this is freebsd/amd64
20:52 < exitstate> liek var blah *string = flag.String(...) ||
20:52 < dho> let me try tests.
20:52 <+iant> exitstate: no, sorry
20:52 < dho> they all fail
20:52 < ekidd> dho: What arch?
20:52 < dho> 15:54 < dho> this is freebsd/amd64
20:52 < exitstate> iant: ah, what's the proper way to define --exit or '-x'
w/out having to redfine it over twice
20:53 < dho> actually
20:53 < dho> it's only tests that make channels
20:53 <+iant> exitstate: use flag.StringVar, I think
20:53 < exitstate> ah
20:53 < ekidd> OK, so I'm probably not going to be able to fix this without
reading quite a bit more code.
20:54 < exitstate> hmm
20:54 < dho> That said, I'm not sure why it would work for you and not me
20:54 < dho> well
20:54 < dho> i guess it does make a little sense why
20:55 < ekidd> You should be able to see what I'm trying to do.  But since
there's no way to enumerate channels, I'm basically having to rely on RefStack and
hoping that I find all the live stacks.  And then I'm cleaning up goroutines with
a large stick.
20:56 < ekidd> dho: It _might_ be some sort of 6g/8g difference in the
low-level runtime bits that triggers a bug in your case and lets me slide silently
20:56 -!- Sungem [i=ss@118-160-163-74.dynamic.hinet.net] has quit [Client Quit]
20:59 < dho> stacks look really wacky in that trace.
21:01 < ekidd> dho: http://gopaste.org/view/f5W06 ? That looks like a fairly
normal stack, but it _does_ appear to have crashed while GCing during channel
21:02 -!- rhatta [n=rhatta@TE0039lan1.rev.em-net.ne.jp] has quit []
21:02 -!- michel [n=chatzill@p5499CF85.dip.t-dialin.net] has joined #go-nuts
21:03 < ekidd> Hmm.  It's allocating the memory block for an Hchan.
21:04 < ekidd> I _hate_ debugging garbage collector crashes.
21:04 < ekidd> Maybe if I upgrade to MacOS 10.5 (with 64-bit support), I can
reproduce this on my machine...
21:05 -!- Fish-Work [n=Fish@] has quit [Read error: 104 (Connection
reset by peer)]
21:05 < ekidd> Since this crashes while actually allocating the Hchan, I'm
guessing that we're probably looking at some kind of heap corruption left over
from a previous GC pass?
21:06 -!- Fish-Work [n=Fish@] has joined #go-nuts
21:06 -!- skelterjohn [n=jasmuth@lawn-net168-in.rutgers.edu] has quit []
21:10 -!- Alkavan [n=alkavan@] has joined #go-nuts
21:11 -!- [[sroracle]] [n=sroracle@unaffiliated/sroracle] has quit [Read error:
104 (Connection reset by peer)]
21:15 -!- mejja [n=user@c-49b6e555.023-82-73746f38.cust.bredbandsbolaget.se] has
joined #go-nuts
21:16 -!- [[sroracle]] [n=sroracle@c-98-215-178-14.hsd1.in.comcast.net] has joined
21:17 < ekidd> dho: If you think there's anything more I can do to debug
this, please let me know.  Otherwise, I'm going to post it to go-nuts as an
argument in favor of including something like this in the next GC.
21:19 -!- Venom_X_ [n=pjacobs@] has joined #go-nuts
21:19 < dho> i don't have time to look at it fully right now unfortunately.
21:19 -!- b4|hraban [n=b4@a83-163-41-120.adsl.xs4all.nl] has quit ["Leaving"]
21:20 < ekidd> dho: No problem!  I personally can't think of any way to
debug this short of setting up a BSD amd64 box, so I think we're done for today.
21:20 < ekidd> Thank you for all your help!
21:22 -!- iwikiwi [n=iwikiwi@] has quit [Read error: 60 (Operation
timed out)]
21:22 < dho> yeah i'd have to hop in gdb and spend a lot of time looking at
registers and breakpoints
21:22 < dho> er
21:22 < dho> and clearly my brain is fried
21:24 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
21:24 -!- michel [n=chatzill@p5499CF85.dip.t-dialin.net] has quit ["ChatZilla
0.9.86 [Firefox 3.5.6/20091201220228]"]
21:25 < ekidd> No worries.  :-)
21:32 -!- raichoo [n=raichoo@i5387D984.versanet.de] has quit
21:35 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
21:35 -!- Fish-Work [n=Fish@] has joined #go-nuts
21:36 -!- iwikiwi [n=iwikiwi@] has quit [Read error: 104 (Connection
reset by peer)]
21:39 -!- iwikiwi [n=iwikiwi@] has joined #go-nuts
21:39 -!- rillianbis [n=giles@s66-183-19-247.bc.hsia.telus.net] has joined
21:39 -!- Alkavan [n=alkavan@] has quit ["Leaving"]
21:41 < rillianbis> hi all
21:41 < rillianbis> I'm just giving go a first try
21:41 < rillianbis> I'm confused about how to handle errors
21:42 < rillianbis> I'm calling data, err := ioutil.ReadFile(name)
21:42 < rillianbis> but I can't just use err as a boolean in a conditional
expression like I would in C
21:43 < rillianbis> and if I don't do anything with it, it's an unused
variable error
21:43 < rillianbis> what's the intended pattern there?
21:43 < dho> if err != nil { ...  }
21:43 < dho> data, _ := ioutil.ReadFile(foo)
21:44 < rillianbis> aha, so err will be nil on success
21:44 < rillianbis> thanks
21:44 < dho> yes.  if you want to ignore, the second idiom is fine.
21:44 < dho> _ does not assign a new variable.
21:45 < dho> _,_ = ioutil.ReadFile(foo) // stupid, but you get the drift
21:48 < rillianbis> right _ is good to know about
21:48 < rillianbis> but for now it's entertaining to be prodded about error
checking :)
21:49 -!- BlackM [n=BMeph@] has joined #go-nuts
21:50 -!- BMeph [n=BMeph@] has quit [Nick collision from services.]
21:53 -!- snearch [n=olaf@g225051059.adsl.alicedsl.de] has quit ["Ex-Chat"]
21:55 -!- ekidd [n=ekidd@] has quit []
21:58 -!- nullpo [n=nullpo@221x252x46x83.ap221.ftth.ucom.ne.jp] has joined
21:59 -!- Intelliware [n=danielb@124-197-59-227.callplus.net.nz] has joined
22:05 -!- ephoenix [n=jellison@cpe-98-14-20-241.nyc.res.rr.com] has joined
22:05 -!- jmorrison [i=foobar@extropian.demon.co.uk] has joined #go-nuts
22:05 < jmorrison> hi all.  are maps threadsafe in Go? Or am I going to have
to hide a shared map behind a channel?
22:07 -!- adaro [n=jelmerku@ip3e83565d.speed.planet.nl] has joined #go-nuts
22:07 < WalterMundt> jmorrison: I'd guess they're not.
22:07 -!- ephoenix [n=jellison@cpe-98-14-20-241.nyc.res.rr.com] has quit [Client
22:07 -!- carllerche [n=carllerc@enginey-9.border1.sfo002.pnap.net] has quit []
22:09 < WalterMundt> jmorrison: FWIW, currently unless you call
runtime.GOMAXPROCS though, {6.8}g will multiplex all goroutines into a single OS
thread.  If you ever need to test something for thread-safety, be aware of that
22:10 < jmorrison> ugh, I'll have to have a write channel that takes a
struct pairing key and value, and read channel pairing key and response channel
22:10 < jmorrison> that is inelegant
22:10 < dho> is locking around it inelegant as well?
22:11 < WalterMundt> well, you can always wrap it in a struct with methods
for read and write, or use traditional locking
22:11 -!- jammyd [n=james@cpc7-dudl3-0-0-cust37.wolv.cable.virginmedia.com] has
joined #go-nuts
22:11 < jmorrison> still somewhat inelegant (pessimistic locking serializes
unrelated accesses) but I suppose it's the right way
22:12 < WalterMundt> One neat thing you can do in go is have an interface
that an be implemented "locally", and then wrapped by an implementation that runs
calls out to a goroutine and back over a pair of channels
22:12 -!- Intelliware [n=danielb@124-197-59-227.callplus.net.nz] has quit [Read
error: 60 (Operation timed out)]
22:12 < jmorrison> at least until I can ramp up my Go-fu and port the
Clojure STM
22:12 -!- ephoenix [n=jellison@cpe-98-14-20-241.nyc.res.rr.com] has joined
22:13 < dho> jmorrison: having operations on native types be thread safe
requires some other sort of synchronization at a lower level, which is arguably
less elegant.
22:13 * jammyd isn't having much luck compiling on MacOSX.  The first thing that's
suspicious is that make isn't in my path (and no Documents mention this as
something to fix firsthand).  Adding /Developer/usr/bin to my path solves that,
but I get header issues, claiming inttypes.h is missing.  Much googling has shed
no light on this -- any thoughts here?
22:14 -!- ephoenix [n=jellison@cpe-98-14-20-241.nyc.res.rr.com] has quit [Client
22:14 < WalterMundt> jmorrison: usually installing Xcode will do some magic
so /Developer bin paths are in your PATH by default
22:14 -!- aho [n=nya@f051020200.adsl.alicedsl.de] has joined #go-nuts
22:15 < jammyd> Curious -- I thought /Developer itself was created by the
XCode install (which I've already done).  Can't think what I'm missing here
22:15 < WalterMundt> it is
22:15 -!- lux` [n=lux@] has quit [Remote closed the connection]
22:16 < WalterMundt> I ran into issues with the path myself when I restored
my machine from a backup
22:16 < jammyd> ah-ha
22:16 < WalterMundt> had to redo the Xcode install to fix things
22:16 < jammyd> that could be it
22:16 < jmorrison> dho, it can be done via CAS reference variables and
"persistent" data structures in the Clojure style, although Go doesn't yet support
22:16 < jammyd> i restored from time machine a while back
22:16 < jammyd> WalterMundt: Thanks, I'll give that a go
22:16 < WalterMundt> good luck
22:16 -!- ephoenix [n=jellison@cpe-98-14-20-241.nyc.res.rr.com] has joined
22:17 -!- StDan [n=danielb@124-197-59-227.callplus.net.nz] has quit [Connection
timed out]
22:17 < WalterMundt> jmorrison: if it helps, one of the packages has a
read/write lock primitive
22:17 < WalterMundt> and I can't say for sure but I'd guess go's map can
handle concurrent reads
22:17 < jmorrison> WalterMundt, yes, I see it, and I'll use it
22:18 < dho> WalterMundt: I'm sure it can.  a value either exists in a map
or it does not.
22:18 < jmorrison> most anything can handle concurrent reads, but only a
snapshot approach can handle reads concurrent with writes
22:18 < dho> or any other synchronization mechanism.
22:19 < jmorrison> no those block readers during the wite
22:20 < dho> the approach is to let them get the old value or no value back?
22:20 < jmorrison> for a nonblocking approach, the old data has to hang
around, and the new data has to be derived from it
22:20 < dho> i can see the allure of that, but i can also imagine situations
where it's also less desirable.
22:21 < jmorrison> Clojure's approach is basically to create a new root and
duplicate only the changed parts of the map, and you can do things like
compare-and-swap the new version into a reference
22:21 < jmorrison> readers see a snapshot, writers can take their time
22:21 < jmorrison> Go would need to add compare-and-swap to do that at max
speed, but you could do it OK with a very short lock during the swap
22:23 < dho> there *is* cas in the runtime.
22:24 -!- deso [n=deso@77-21-80-251-dynip.superkabel.de] has quit [Read error: 104
(Connection reset by peer)]
22:24 < jmorrison> is it in the API anywhere?  I might just not have seen
it, I haven't looked in every corner yet
22:24 < dho> in short, I think it would be a small change in hashmap.c in
22:24 < dho> it's architecture dependent.
22:24 < dho> using lock; cmpxchg on 386 and amd64
22:24 < dho> and i don't know what on arm
22:25 < dho> see 386/asm.s or amd64/asm.s
22:25 < jmorrison> it could be offered in the API and emulated with a RW
lock if not supported by the arch
22:26 < jmorrison> copy Clojure and create a syntax for "atomic" references
22:27 -!- lmoura [n=lauromou@] has quit ["Leaving"]
22:27 < jmorrison> where a ref behaves like a pointer except that assignment
is atomic
22:28 < jmorrison> anyhow, just an idea
22:29 < rillianbis> hrm, I can't make my byteReader wrapper work
22:30 < rillianbis> what's the standard way to get an io.Reader on a file?
22:30 < rillianbis> os.Open()?
22:30 < dho> os.Open?
22:31 < dho> it returns *File which implements io.Reader
22:32 -!- Kibiz0r [n=kibiyama@99-48-204-31.lightspeed.brhmmi.sbcglobal.net] has
joined #go-nuts
22:34 -!- jmorrison [i=foobar@extropian.demon.co.uk] has quit ["Au revoir"]
22:35 -!- fyusy [n=fyusman@] has joined #go-nuts
22:38 -!- tav [n=tav@] has quit []
22:39 -!- nullpo [n=nullpo@221x252x46x83.ap221.ftth.ucom.ne.jp] has quit [Read
error: 60 (Operation timed out)]
22:40 < rillianbis> would be nice if there was more overview/example code in
the pkg documentation
22:40 < rillianbis> it's hard to figure out what's what
22:40 < rillianbis> especially with the packages vs interfaces distinction
22:44 -!- oal [n=olav@5.79-160-122.customer.lyse.net] has quit [Remote closed the
22:50 < randomiser> Is there any plan to implement loadable modules, so a
plugin architecture can be used?
22:57 -!- tomestla [n=tom@] has joined #go-nuts
22:58 -!- ejb [n=ejb@unaffiliated/ejb] has joined #go-nuts
23:00 -!- gasreaa [n=atwong@nat/slide/x-fxmyzarzkneoeuiy] has joined #go-nuts
23:00 -!- gasreaa [n=atwong@nat/slide/x-fxmyzarzkneoeuiy] has left #go-nuts []
23:07 -!- ShadowIce [n=pyoro@unaffiliated/shadowice-x841044] has quit
23:07 -!- Fish-Work [n=Fish@] has quit [Read error: 54 (Connection
reset by peer)]
23:08 -!- Fish-Work [n=Fish@] has joined #go-nuts
23:12 -!- nanoo [n=nano@95-89-198-45-dynip.superkabel.de] has quit ["Leaving"]
23:16 < jammyd> WalterMundt: Just finished the XCode reinstall and the build
process works fine now -- thanks again!
23:20 -!- mbarkhau [n=koloss@p54A7C209.dip.t-dialin.net] has quit [Read error: 54
(Connection reset by peer)]
23:21 -!- stalled [n=411@unaffiliated/stalled] has joined #go-nuts
23:23 -!- Ycros [n=quassel@gnaw.yi.org] has quit [Remote closed the connection]
23:23 -!- Ryan_ [n=ryan@cpe-98-27-166-221.neo.res.rr.com] has joined #go-nuts
23:24 -!- tomestla [n=tom@] has quit [Read error: 110 (Connection
timed out)]
23:24 -!- Ycros [n=quassel@gnaw.yi.org] has joined #go-nuts
23:26 < WalterMundt> jammyd: you're welcome, glad I was able to help
23:26 -!- rillianbis [n=giles@s66-183-19-247.bc.hsia.telus.net] has quit ["This
computer has gone to sleep"]
23:26 < WalterMundt> I'm sure there's some way to manually fix whatever it
is that the restore doesn't do without recopying all the files, but at least you
have a working toolchain now
23:26 -!- Venom_X [n=pjacobs@] has quit []
23:27 -!- Chaba [i=3f933e87@gateway/web/freenode/x-tmlpkdzhzmvatgbs] has joined
23:35 -!- Fish-Work [n=Fish@] has quit [Read error: 104 (Connection
reset by peer)]
23:37 -!- Fish-Work [n=Fish@] has joined #go-nuts
23:38 -!- rrr [i=rrr@gateway/gpg-tor/key-0x9230E18F] has quit []
23:44 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has joined
23:51 -!- skelterjohn [n=jasmuth@c-76-99-92-193.hsd1.nj.comcast.net] has quit []
23:52 -!- WalterMundt [n=waltermu@twiki/developer/EtherMage] has left #go-nuts []
--- Log closed Thu Dec 24 00:00:36 2009