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

--- Log opened Wed May 12 00:00:03 2010
--- Day changed Wed May 12 2010
00:00 <+iant> a type assertion is not addressable
00:00 < Soultaker> fair enough.
00:01 < Ginto8> what you could do however is this:
00:01 < Ginto8> c := b.(MyType)
00:01 < Ginto8> c.x = 123
00:01 < Ginto8> b = c
00:01 < Ginto8> though it is more verbose
00:03 < sladegen> that's quite an understatement.
00:04 -!- aho [~nya@f051089083.adsl.alicedsl.de] has quit [Ping timeout: 240
00:04 -!- ________ [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has quit
[Quit: Leaving]
00:04 -!- Discoloda [~vincent@adsl-75-37-71-165.dsl.frs2ca.sbcglobal.net] has quit
[Remote host closed the connection]
00:04 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has joined
00:10 < Soultaker> also that does not change the value stored for b
00:11 < kmeyer> so make your own clone of Vector
00:11 < kmeyer> that's allowed
00:11 < Soultaker> or wait, maybe it does
00:11 < Soultaker> no, I don't want any of that.  I'm just trying things out
to get a better understanding of how these concepts work in Go
00:12 < Soultaker> Vector is fine the way it is as far as I'm concerned =)
00:12 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
00:12 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
00:12 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has left
#go-nuts ["Leaving"]
00:18 < kmeyer> Soultaker: gofmt -r "interface{} -> YourType"
00:18 < kmeyer> wouldn't require all the typecasting, etc :P
00:22 -!- Venom_X [~pjacobs@] has joined #go-nuts
00:23 -!- itrekkie [~itrekkie@ip68-228-245-244.ph.ph.cox.net] has joined #go-nuts
00:23 < Soultaker> yes, of course.  ;)
00:30 -!- braddunbar [~brad@rrcs-24-172-225-206.midsouth.biz.rr.com] has joined
00:37 < allengeorge> So...if I'm reading stack traces and something crashes
in a method, the first value is the reciever's addr, right?
00:39 < allengeorge> Also, is there a way to inspect the value of a variable
(no debugger AFAIK, right?)
00:42 -!- Venom_X [~pjacobs@] has quit [Quit: Venom_X]
00:51 -!- iant [~iant@] has quit [Ping timeout: 252 seconds]
00:51 -!- jdp [~gu@] has quit []
00:52 -!- kota1111 [~kota1111@gw2.kbmj.jp] has joined #go-nuts
01:00 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has quit [Quit:
01:04 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has joined #go-nuts
01:14 -!- rv2733 [~rv2733@c-98-242-168-49.hsd1.fl.comcast.net] has quit [Quit:
01:16 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has joined #go-nuts
01:20 -!- zyichi [~zyichi@] has joined #go-nuts
01:20 -!- Chinainvent [~yunkai@] has joined #go-nuts
01:36 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has quit [Quit:
01:39 -!- crakrjak [~merc@rrcs-70-62-156-154.central.biz.rr.com] has quit [Ping
timeout: 240 seconds]
02:00 -!- slashus2 [~slashus2@74-141-108-109.dhcp.insightbb.com] has joined
02:01 -!- b00m_chef [~watr@d64-180-45-230.bchsia.telus.net] has joined #go-nuts
02:05 -!- b00m_chef [~watr@d64-180-45-230.bchsia.telus.net] has quit [Ping
timeout: 240 seconds]
02:19 -!- bmizerany [~bmizerany@dsl081-064-072.sfo1.dsl.speakeasy.net] has quit
[Remote host closed the connection]
02:27 -!- tibshoot [~tibshoot@191.176.103-84.rev.gaoland.net] has quit [Ping
timeout: 245 seconds]
02:34 -!- kingfishr [~kingfishr@c-98-201-60-173.hsd1.tx.comcast.net] has joined
02:35 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has joined #go-nuts
02:35 -!- mode/#go-nuts [+v iant] by ChanServ
02:35 -!- kingfishr [~kingfishr@c-98-201-60-173.hsd1.tx.comcast.net] has quit
[Remote host closed the connection]
02:36 -!- kingfishr [~kingfishr@c-98-201-60-173.hsd1.tx.comcast.net] has joined
02:42 -!- gospch_ [~gospch@unaffiliated/gospch] has joined #go-nuts
02:46 -!- gospch [~gospch@unaffiliated/gospch] has quit [Ping timeout: 245
02:49 -!- Nexoro [~nexo@c-71-192-75-183.hsd1.ma.comcast.net] has left #go-nuts []
02:53 -!- ikkebr [~ikke@unaffiliated/ikkebr] has quit [Ping timeout: 260 seconds]
02:57 -!- bmizerany [~bmizerany@c-24-6-37-113.hsd1.ca.comcast.net] has joined
02:59 < exch> allengeorge: bit late, but you can print variable values with
fmt.Printf("%v\n", myvar)
02:59 < exch> use %+v or %#v for more output
02:59 < exch> %T prints the variable's type
03:00 -!- divoxx [~divoxx@] has quit [Quit: divoxx]
03:20 -!- slashus2 [~slashus2@74-141-108-109.dhcp.insightbb.com] has quit [Ping
timeout: 245 seconds]
03:20 -!- Eridius [~kevin@unaffiliated/eridius] has quit [Ping timeout: 260
03:41 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has joined #go-nuts
03:47 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has quit [Quit:
03:56 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has joined
03:58 -!- Inominate [~sirrobin@cpe-076-182-074-143.nc.res.rr.com] has left
#go-nuts []
03:59 -!- tazjin [~tazjin@p5DC82572.dip.t-dialin.net] has joined #go-nuts
04:02 -!- gospch [~gospch@unaffiliated/gospch] has quit [Remote host closed the
04:03 -!- Innominate [~sirrobin@cpe-076-182-074-143.nc.res.rr.com] has joined
04:05 -!- gospch [~gospch@unaffiliated/gospch] has joined #go-nuts
04:07 -!- gospch [~gospch@unaffiliated/gospch] has quit [Read error: Connection
reset by peer]
04:07 -!- itrekkie [~itrekkie@ip68-228-245-244.ph.ph.cox.net] has quit [Quit:
04:07 -!- gospch [~gospch@unaffiliated/gospch] has joined #go-nuts
04:16 -!- gisikw [~gisikw@] has joined #go-nuts
04:17 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has quit [Quit:
This computer has gone to sleep]
04:19 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has quit [Read error:
Connection reset by peer]
04:21 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has joined #go-nuts
04:21 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has quit [Read error:
Connection reset by peer]
04:21 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has joined #go-nuts
04:25 -!- apphacker [~apphacker@c-24-5-192-234.hsd1.ca.comcast.net] has joined
04:30 -!- braddunbar [~brad@rrcs-24-172-225-206.midsouth.biz.rr.com] has quit
[Quit: leaving]
04:35 -!- jA_cOp [~yakobu@unaffiliated/ja-cop/x-9478493] has quit [Quit: Leaving]
04:39 -!- crakrjak [~merc@rrcs-70-62-156-154.central.biz.rr.com] has joined
04:46 -!- [vertex] [~Alexandre@] has quit [Ping timeout: 258
04:59 -!- jingzuo [~brandon@h159.123.255.206.cable.thlq.cablelynx.com] has joined
05:02 -!- scm [justme@d136048.adsl.hansenet.de] has quit [Ping timeout: 258
05:06 -!- tazjin [~tazjin@p5DC82572.dip.t-dialin.net] has quit [Ping timeout: 246
05:06 -!- jeek [~jeek@pedobear.jeek.net] has quit [Read error: Operation timed
05:06 -!- samitheberber [~saada@melkinpaasi.cs.helsinki.fi] has quit [Ping
timeout: 240 seconds]
05:06 -!- scm [justme@d134010.adsl.hansenet.de] has joined #go-nuts
05:06 -!- mortens [moocow@gateway/shell/xzibition.com/x-eekvepptksiwydfb] has quit
[Ping timeout: 276 seconds]
05:06 -!- mortens [moocow@gateway/shell/xzibition.com/x-vdmfajumprropuaw] has
joined #go-nuts
05:06 -!- samitheberber [~saada@melkinpaasi.cs.helsinki.fi] has joined #go-nuts
05:06 -!- uriel [~uriel@li43-28.members.linode.com] has quit [Ping timeout: 258
05:06 -!- uriel [~uriel@li43-28.members.linode.com] has joined #go-nuts
05:06 -!- jeek [~jeek@pedobear.jeek.net] has joined #go-nuts
05:15 -!- slashus2 [~slashus2@74-141-108-109.dhcp.insightbb.com] has joined
05:19 -!- eikenberry [~jae@mail.zhar.net] has quit [Ping timeout: 276 seconds]
05:21 -!- samferry [~sam@atheme/member/samferry] has quit [Write error: Broken
05:21 -!- segy [~segfault@pdpc/supporter/active/segy] has quit [Read error:
Operation timed out]
05:21 -!- segy [~segfault@pdpc/supporter/active/segy] has joined #go-nuts
05:22 -!- tsykoduk [~tsykoduk@2001:470:1f04:671:20d:93ff:fe77:1dc4] has quit [Read
error: Operation timed out]
05:23 -!- tsykoduk [~tsykoduk@2001:470:1f04:671:20d:93ff:fe77:1dc4] has joined
05:29 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has quit [Quit: WeeChat
05:29 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has joined #go-nuts
05:33 -!- Archwyrm [~archwyrm@] has quit [Remote host closed the
05:36 -!- wrtp [~rog@] has quit [Ping timeout: 245 seconds]
05:38 -!- Kashia [~Kashia@port-92-200-245-118.dynamic.qsc.de] has joined #go-nuts
05:42 -!- wrtp [~rog@] has joined #go-nuts
05:42 -!- apphacker [~apphacker@c-24-5-192-234.hsd1.ca.comcast.net] has quit [Ping
timeout: 240 seconds]
05:46 -!- samferry [sam@atheme/member/samferry] has joined #go-nuts
05:50 -!- samferry [sam@atheme/member/samferry] has quit [Read error: Operation
timed out]
05:52 -!- samferry [~sam@atheme/member/samferry] has joined #go-nuts
06:01 < MacCoaster> http://pastebin.com/z2UjEFvM am i doing it wrong?  for
line 5 it complains nested func not allowed :\
06:02 -!- path[l] [UPP@] has joined #go-nuts
06:08 < dave_r5> is there any magic I can do to make cgo accept something
like this: C.fflush(C.NULL)
06:15 < jesusaurus> drevell: maybe you need to cast C.NULL to an unsafe
06:17 -!- slashus2 [~slashus2@74-141-108-109.dhcp.insightbb.com] has quit [Ping
timeout: 268 seconds]
06:17 -!- ChangeOfHeart [~trent@60-240-56-87.tpgi.com.au] has joined #go-nuts
06:22 < jessta> MacCoaster: I don't think you can do that in const
06:23 < jessta> MacCoaster: you can't use complex data structures in const
06:28 < drevell> jesusaurus: tried your suggestion, "cannot use
unsafe.Pointer(*_C_NULL) (type unsafe.Pointer) as type *_C_FILE in function
06:28 < drevell> i'm not sad about it, and it's not blocking me, i'm just
hoping to learn something.  so no biggie if it's impossible
06:29 < drevell> thanks for the suggestion
06:33 -!- Kashia [~Kashia@port-92-200-245-118.dynamic.qsc.de] has quit [Ping
timeout: 240 seconds]
06:36 -!- Kashia [~Kashia@port-92-200-245-118.dynamic.qsc.de] has joined #go-nuts
06:37 -!- Archwyrm [~archwyrm@] has joined #go-nuts
06:37 -!- ShadowIce [pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
06:44 -!- nsf [~nsf@jiss.convex.ru] has joined #go-nuts
06:44 -!- jingzuo [~brandon@h159.123.255.206.cable.thlq.cablelynx.com] has left
#go-nuts []
06:48 < jessta> drevell: what is the problem with C.fflush(C.NULL)?
06:49 -!- bortzmeyer [~bortzmeye@batilda.nic.fr] has joined #go-nuts
06:50 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
06:50 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has joined #go-nuts
06:52 < drevell> jessta: it gives "cannot use *_C_NULL (type unsafe.Pointer)
as type *_C_FILE in function argument"
06:53 < drevell> though a good workaround seems to be "var nullPtr *C.FILE;
06:53 < drevell> it compiles, at least
06:54 -!- cch [~cch@2001:da8:8001:240:222:68ff:fe14:6de] has joined #go-nuts
06:56 -!- cch [~cch@2001:da8:8001:240:222:68ff:fe14:6de] has quit [Client Quit]
06:56 < wrtp> devell: have you tried C.fflush(nil) ?
06:59 -!- jacob_ [~jacob@d171-159-tercero-infillb.ucdavis.edu] has joined #go-nuts
07:00 -!- cch [~cch@2001:da8:8001:240:222:68ff:fe14:6de] has joined #go-nuts
07:02 < drevell> wrtp: you win!
07:05 < wrtp> cool.  i like winning :-)
07:05 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has joined #go-nuts
07:06 < nsf> has anyone tried to write a linear algebra library (with
vectors, matrices and stuff) to do 3d in Go for example?  I'm a bit confused how
should I do this..  cause it requires a lot of prototyping and i can't imagine a
good syntax for that
07:08 -!- rlab [~Miranda@] has joined #go-nuts
07:10 -!- General1337 [~support@71-84-50-230.dhcp.mtpk.ca.charter.com] has joined
07:13 -!- General13372 [~support@71-84-50-230.dhcp.mtpk.ca.charter.com] has quit
[Ping timeout: 268 seconds]
07:14 -!- zozoR [~zozoR@0x5da69cf2.cpe.ge-0-1-0-1105.hsnqu1.customer.tele.dk] has
joined #go-nuts
07:14 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
07:25 < nsf> or maybe it's a mistake to try to do that?
07:26 -!- Fish-Work [~Fish@] has joined #go-nuts
07:27 < jessta> nsf: prototyping?
07:28 < nsf> I mean a lot of fast typing of things and try outs (requires
nice syntax)
07:29 < jessta> Go has nice syntax
07:29 < nsf> not for a math library as far as i understand
07:30 < nsf> by math library i mean matrices, vectors, quaternions and other
much higher concepts than "number"
07:30 < wrtp> jessta: i just read this amusing (and ill informed) rant which
begs to disagree...  http://monoc.mo.funpic.de/go-rant/
07:31 < nsf> wrtp: oh..  critics are interesting always, thanks for a link
07:32 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
07:32 < wrtp> he's not a very good critic - half of his accusations are
unfounded and most of the rest are irrelevant.
07:33 < wrtp> he's obviously not actually used the language much
07:33 < nsf> Go's syntax is nice (especially from the point of a compiler
writer, I tried to write a C declarations parser, I know what it's like)
07:33 < taruti> meh
07:33 < taruti> there are good criticisms for Go
07:33 < wrtp> nsf: i agree.  i think go's syntax is really nice
07:33 < taruti> but that is not one of them
07:33 -!- bmizerany [~bmizerany@c-24-6-37-113.hsd1.ca.comcast.net] has quit [Quit:
07:33 < wrtp> taruti: what's your best criticism?
07:34 < nsf> taruti: every criticism is good, even the most clueless and
stupid one
07:34 < taruti> wrtp: the type system seems quite ad hoc and oversimplified
07:34 -!- nocturnal [~nocturnal@] has joined #go-nuts
07:35 < taruti> wrtp: coming from an FP background many combinators are not
possible to express
07:35 < wrtp> taruti: those two things are usually opposites...
07:35 < wrtp> taruti: well, no generics
07:35 < nocturnal> i can't figure out how to quote regexp patterns in golang
code.  whatever i've tried has yielded errors regarding the escape characters i
use \s for example and \!
07:35 < taruti> for the syntax ones I think that irregular type parameter
syntax is not nice
07:35 < wrtp> nocturnal: use backquotes
07:35 < nocturnal> `?
07:35 < taruti> nocturnal: they are strings so "\\s"
07:36 < nocturnal> yeah but i don't want to double escape in regexp
07:36 < taruti> or with backquotes
07:36 < nocturnal> makes it cluttered
07:36 < nocturnal> are ` backquotes?
07:36 < wrtp> nocturnal: `\s'
07:36 < wrtp> oops
07:36 < nocturnal> thank you wrtp
07:36 < wrtp> `\s`
07:36 < nocturnal> =)
07:36 < nocturnal> ``
07:37 < wrtp> taruti: the ...  syntax?
07:37 < nsf> hehe, my main problem with Go has a spirit of that kind: "GC
solves all resource managing problems", I think Go's "defer" keyword does more
work than the GC itself in that area )
07:37 < taruti> []foo, map[foo]bar, chan foo, all different
07:38 < jessta> nsf: that rant is is out of date
07:38 < wrtp> taruti: not really - they all start with a type specifier ([],
map, chan) followed by the type parameters.
07:39 < wrtp> it's true, this isn't haskell, but that's maybe not a bad
07:39 < wrtp> the syntax follows the usage.
07:41 < wrtp> personally, i miss first class tuples the most.  followed by
07:41 -!- ShadowIce [pyoro@unaffiliated/shadowice-x841044] has quit [Ping timeout:
246 seconds]
07:41 < taruti> wrtp: just having "type p1 ...  pN" would be better without
the map wart
07:41 < nsf> jessta: why is that?  i think it's a very actual problem
07:41 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
07:41 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
07:42 < wrtp> nsf: how would you manage resources, by preference?
07:42 < nsf> but how GC helps me with that?  I have textures, shaders, gpu
buffers, file handles, network sockets, etc.
07:43 < nsf> it helps managing memory and that's all, but it is 20% of the
resources I need to manage
07:43 < wrtp> well, you can use finalisers
07:43 < wrtp> and defer
07:44 < jessta> nsf: Go has exception-like features and generics are a hard
problem soon to be fixed
07:44 < jessta> coming from a C background Go's syntax is obvious and nice
07:44 -!- ChangeOfHeart [~trent@60-240-56-87.tpgi.com.au] has quit [Remote host
closed the connection]
07:44 < nsf> exceptions aren't helping much either
07:45 < nsf> defer is good, and I'm actually wondering why C++ hasn't one
07:45 < jessta> this person ranting seems to be coming from functional
programming lanuages and hasn't spent enough time with Go to get a good idea of
the syntax
07:45 < taruti> defer is <3
07:46 < jessta> nsf: C++ has destructors
07:46 < nsf> destructors are worse
07:46 < wrtp> jessta: yes.  in fact when i first encountered go, i found the
syntax a little difficult to read.  now i find it very natural
07:46 < taruti> the only nasty thing is that it has some quirks that should
be faqs
07:46 < jessta> nsf: c++ is worse
07:46 < jessta> so it makes sense
07:47 < wrtp> taruti: what quirks?
07:47 < taruti> func foo(...) { ...  ; for { open(); defer close(); ...  }
...  } is idiomatic but wrong
07:47 < nsf> C++ as a whole language isn't that good, but it has a lot of
good and bad features, and the lanaguage itself is a good example of features
composition (bad example obviously, but we need to have one in computing history)
07:47 < wrtp> true
07:48 < taruti> that has bitten me several times and is a faq in my head
07:48 < nsf> but regarding to destructors, I think the whole object thing is
wrong in C++ :)
07:48 < jessta> taruti: what's the problem with that?
07:49 < nsf> but even 'defer' has problems
07:49 < taruti> jessta: that closes when the *function* exits, not when the
*block* exits.
07:49 < wrtp> jessta: the defer only executes when the function exits
07:49 -!- ShadowIce [pyoro@unaffiliated/shadowice-x841044] has joined #go-nuts
07:49 < taruti> which is very counterintuitive
07:49 < wrtp> but it's good too, because you can do: if foo != nil {defer
07:50 < nsf> for example in the simple initialization scenario: init 1, 2,
3, 4 and return them if success, otherwise cleanup already initialized things
07:50 < taruti> "now I inline this function into loop body, why does it stop
07:50 < nsf> you can't cancel defer statement :(
07:50 < wrtp> any other solution would lead to more nesting
07:51 < wrtp> nsf: you can - just use a variable.
07:51 < nsf> well the solution to that problem doesn't require a variable,
just proper description and code generation
07:52 < wrtp> nsf: e.g.  func foo() {cancelled := false; defer func(){if
!cancelled {do_something()}}}
07:52 < wrtp> nsf: how would you cancel a defer?
07:52 < wrtp> nsf: i mean, how would you want to?
07:52 < bortzmeyer> wrtp: panic/recover would avoid you to have the
cancelled variable, no?  And would solve the "defer cancellation problem"
07:53 < nsf> well you can tag defer statement and then add another statement
let's say: cancel_defer "1", "2", "3"
07:53 < nsf> which says
07:53 < nsf> do not add previously deferred statements after that statement
07:53 < nsf> :)
07:53 < wrtp> i don't really see the pointy
07:53 < wrtp> s/y//
07:54 < wrtp> i've never wanted to cancel a defer...
07:54 < nsf> um..  let me show you, one sec..
07:55 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has quit [Ping
timeout: 276 seconds]
07:55 -!- ikaros [~ikaros@f051128085.adsl.alicedsl.de] has joined #go-nuts
07:58 < nsf> wrtp: http://www.everfall.com/paste/id.php?pxn9ywlcy0ix
07:58 < nsf> it's pseudo code
07:58 < nsf> simple complex object initialization scenario :)
07:58 < wrtp> "resolving host"...
07:58 < nsf> when you want to cleanup on failure and return everything on
07:58 < nsf> :(
07:59 < nsf> http://pastebin.com/RwCcWZbP
07:59 < wrtp> got it
08:01 < nsf> well, D has something like that ("scope" operator), but their
system tied to exceptions mechanism
08:01 < wrtp> nsf: i'm not sure that's a good argument for defer cancelling
08:02 < nsf> I think it is..  there are different reasons of quitting
functions: failure, success
08:02 < wrtp> nsf: you could make o's finalize method call its components'
finalize methods
08:02 < nsf> and sometimes it requires different code
08:02 -!- samferry [~sam@atheme/member/samferry] has quit [Read error: Operation
timed out]
08:02 < wrtp> then all you'd need would be a single call to o's finalize
08:02 < nsf> wrtp: well, it is doing that, but on the initialization stage
not everything is initialized
08:03 < nsf> you can't finalize uninitialized component
08:03 < nsf> it would require adding "if"s
08:03 < wrtp> not necessarily
08:03 < wrtp> a method call on a nil object is not necessarily a problem
08:03 < wrtp> unless it's an interface
08:04 < nsf> the point is, that kind of system allows you to eliminate
unnecessary calls and checks and keep code maintainability (unlike C's gotos)
08:05 < nsf> there are of course dozen of different things how can you solve
that problem
08:05 < nsf> ways*
08:05 < wrtp> nsf: i think cancel_defer brings on more problems than it
08:05 < nsf> but i personally thing that one is the most beautiful :)
08:05 < nsf> wrtp: nope
08:06 < wrtp> for instance, there's a 1-many relationship between labels and
08:07 < nsf> what you mean by that?
08:07 < wrtp> and it's not easy to see how it could be made efficient (are
the labels constant)?
08:07 < nsf> do*
08:07 < nsf> the labels are just a syntax element
08:07 -!- tibshoot [~tibshoot@gw-puteaux.linagora.com] has joined #go-nuts
08:07 < wrtp> this for instance: for _, e := range somearray { defer
e.Close() }
08:08 < wrtp> oops
08:08 < wrtp> for _, e := range somearray { defer "1" e.Close() }
08:08 < wrtp> cancel_defer "1"
08:08 < wrtp> does that cancel all the defers with that label?
08:08 < nsf> that means that you group defers under the same label
08:08 < nsf> yep
08:09 < wrtp> so there's a hash table kind of thing going on?
08:09 < nsf> but I don't think that using defers in loops is a good idea
08:09 -!- kanru [~kanru@61-30-10-70.static.tfn.net.tw] has quit [Ping timeout: 260
08:09 < wrtp> can i do: x := "1"; cancel_defer x ?
08:09 < jlouis> defer is just a language encoded unwind-protect
08:09 < wrtp> jlouis: it's a little different from that
08:10 < wrtp> jlouis: because it's only at function scope
08:10 < jlouis> wrtp: in that case it is subtle
08:10 < nsf> well, yep you are pointing at runtime issues with defer
08:10 < nsf> I didn't dig into details of that
08:10 < wrtp> nsf: it's important that it be able to be implemented
08:11 < nsf> yes
08:11 < nsf> for example in my example defer can be (theoretically) resolved
statically and turned into a goto-based code
08:11 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
08:12 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
08:12 < nsf> but I'm not really sure about complex examples
08:12 < nsf> defer should simplify things, not otherwise :)
08:13 < chaos95> so defer evaluates the arguments but not the function call?
08:13 < wrtp> chaos95: yup
08:13 < chaos95> that's pretty nifty
08:14 < wrtp> nsf: i'm trying to think of a nice way to phrase your example
08:15 < nsf> sequential initialization/cleanup?  :))
08:16 < nsf> well, there is difference in what I'm thinking about and what
go has
08:16 < nsf> my defer is like D's scope
08:16 < wrtp> i don't know D at all
08:17 < nsf> I have no intensions to make it work on a function basis, but
on a scope basis
08:17 < wrtp> got a link for D's scope?
08:17 < nsf> sec..
08:17 < nsf>
08:18 < nsf> http://www.digitalmars.com/d/2.0/exception-safe.html
08:18 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has quit [Remote host closed the
08:18 < nsf> on the second page there are few examples too
08:18 < nsf> but as I said it's exceptions-based
08:19 < uriel> exceptions are an idea as wonderful as COMEFROM
08:19 < nsf> scope basis is important because it allows you to predict a
total number of defer statements in the code
08:19 < nsf> which is good I guess
08:20 < wrtp> i don't know if that's important
08:20 < uriel> exceptions are an idea as wonderful as COMEFROM
08:20 < wrtp> it is nice being able to do something like: if p.trace {
08:20 < wrtp> defer un(trace(p, "ExpressionList"))
08:20 < wrtp> }
08:20 < wrtp> uriel: we're not talking about exceptions
08:20 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
08:20 < nsf> wrtp: maybe
08:21 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
08:21 < nsf> but regarding cancelling, with that kind of defer that Go has,
it's easy to do loops..  because you can only add things to the defer statements
08:21 -!- Kashia [~Kashia@port-92-200-245-118.dynamic.qsc.de] has quit [Quit: This
computer has gone to sleep]
08:21 < nsf> with cancelling thing it will become kind of hard
08:22 < nsf> anyway, just an idea..  I have no language to implement it, so
probably it's not worth it to think about implementation details :)
08:23 < jlouis> uriel: hahaha
08:24 < wrtp> it is true that there are very few places that use defer not
at the top level of a function
08:24 < nsf> wrtp: I guess with D's scope at each return or scope exit you
can tell exactly what you need to execute and that's why it easy to implement
08:24 < nsf> it doens't require any kind of dynamic book keeping
08:25 < nsf> but as you said (trace example), sometimes it can be neat to
have Go's defer
08:25 < wrtp> nsf: in go the compiler can statically tell whether dynamic
book keeping is necessary
08:25 < jlouis> I like that the go inventors did not simply shovel a drivel
of features in the language from the beginning
08:25 -!- path[l] [UPP@] has quit [Quit: path[l]]
08:26 < jlouis> adding a new feature is so easy
08:26 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has joined #go-nuts
08:26 < nsf> jlouis: I think they understand that feature composition is
important as a language property
08:26 < jlouis> nsf: indeed!
08:26 < nsf> but it doesn't mean that Go has no wrong features :)
08:27 < nsf> on the other hand C++ and D are totally screwed with feature
08:27 < nsf> and it's sad
08:28 < wrtp> i think it's a pity that defer incurs an allocation
08:28 < wrtp> i 'm not sure that's inevitable though
08:28 < nsf> wrtp: scope-based defer doesn't require any kind of dynamic
stuff, it serves as a code generation hint
08:29 < nsf> but function-based does
08:29 < wrtp> nsf: something's got to catch the exception
08:30 < nsf> we're not talking about exceptions here
08:30 < wrtp> in this case, defer has to be called if something panics
08:30 < wrtp> that's what i meant
08:31 < nsf> hm..
08:32 < nsf> ok, I'm not very familiar with Go, I talk more about an
abstract langauge with that feature :)
08:32 < jlouis> My first Go hack for real was an ident (RFC1413) client
http://github.com/jlouis/go-ident patches are welcome
08:32 < jlouis> comments likewise
08:35 < nsf> hehe, line 77, why not just: for i := int(len(p)); i > 0;
i-- {?
08:35 < wrtp> jlouis: one little point: string(113) gives the unicode code
point at 113, not the decimal representation "113"
08:35 < nsf> http://github.com/jlouis/go-ident/blob/master/ident.go#L77
08:36 < jlouis> wrtp: ahyes
08:36 < jlouis> wrtp: the correct conversion would be?
08:36 < wrtp> use strconv.Itoa
08:37 < jlouis> that makes sense
08:37 < jlouis> nsf: yup
08:39 -!- samferry [~sam@atheme/member/samferry] has joined #go-nuts
08:39 < wrtp> i don't think readLineBytes can work at all actually
08:40 < wrtp> line 72: the line must end with \n, not \r
08:40 < wrtp> and given that, the loop at line 77 is unnecessary
08:40 < wrtp> you just need:
08:41 < wrtp> (from line 75)
08:41 < wrtp> p = p[0 : len(p) - 1]
08:41 < wrtp> if len(p) > 0 && p[len(p) - 1] == '\r' {p = p[0 : len(p) -
08:41 < wrtp> return p
08:42 < wrtp> or something like that
08:42 -!- vaxholm [~vaxholm@cocoplum.spotify.net] has joined #go-nuts
08:43 < jlouis> wrtp: perhaps I should just check that the next to last is a
\r and then slice it down to just before.  That would actually be most correct
according to the RFC
08:43 < vaxholm> Hi! I'm just curious here...  What was the intended usage
for the ASN.1 parser in Go?
08:43 < wrtp> yup, that's what my code did
08:43 < jlouis> vaxholm: it screams SNMP
08:43 < wrtp> vaxholm: tls
08:44 < vaxholm> tls seems more reasonable than snmp.  now i found the x509
package too.  thanks.
08:44 < jlouis> wrtp, nsf: thanks!
08:45 < nsf> :D
08:47 < wrtp> if c <
08:47 < wrtp> 0
08:47 < wrtp> oops
08:47 < wrtp> if c < '
08:47 < wrtp> bad day
08:47 -!- Macpunk [~macpunk@cpe-72-177-26-221.austin.res.rr.com] has joined
08:49 < wrtp> jlouis: line 106: instead of the "continue", i'd just reverse
the condition and just do: if if c != ' ' && c != '\t' && (c < '0' || c >
'9') { return ...  }
08:50 < jlouis> wrtp: mm
08:50 < jlouis> Heh, I like that royger/wgo use my process model
08:51 < jlouis> a bittorrent client in go is an excellent tester for the
08:52 < wrtp> jlouis: line 150 - probably better to do switch s :=
strings.TrimSpace(string(ai)); s {case "INVALID_PORT", "NO_USER", ...: return s;
default: if s[0] == 'X' {...}else{return error}}
08:52 < jlouis> wrtp: not valid according to spec.
08:52 < wrtp> also the return at the end could just return the error, then
you would save a return
08:53 < jlouis> X must be the first thing.  It can't be a white space
08:53 < wrtp> oops no, scratch the last
08:53 < wrtp> oh, well, s/s\[0]/ai[0]/ then
08:53 < wrtp> same code structure
08:53 < jlouis> yes, and move that condition to the default
08:53 < jlouis> good idea
08:54 < jlouis> likewise with the condition inversion above
08:55 -!- Surma [~bzfsurma@gooseberry.zib.de] has joined #go-nuts
08:56 < wrtp> line 202: switch should just be: if cs != "US-ASCII" {return
08:57 < wrtp> unless you're gonna add more charsets, i guess
08:57 < jlouis> wrtp: ah, historic.  I originally envisioned to have
multiple charsets, but then..
08:57 -!- tcoppi
[~nuclear@57c3ed63-1294-45bd-a8e8-cdcc07cfa16f.static.grokthis.net] has quit [Read
error: Operation timed out]
08:58 < jlouis> I decided against it for the time being
08:58 < wrtp> you could at least support utf8 :-0
08:58 -!- tcoppi
[~nuclear@57c3ed63-1294-45bd-a8e8-cdcc07cfa16f.static.grokthis.net] has joined
08:59 < mpl> what I did when I coded my .torrent parser is if there's an
utf8 version for one of the field I write it over the non utf-8 one.
08:59 -!- gisikw [~gisikw@] has quit [Read error: Operation timed
08:59 -!- anticw [~anticw@cwedgwood.broker.freenet6.net] has quit [Ping timeout:
240 seconds]
09:01 < wrtp> jlouis: line 317, i'd tend to think that (30 * 1e9) would be
more readable, given that we're talking nanoseconds
09:01 -!- path[l] [~path@] has joined #go-nuts
09:02 -!- cch [~cch@2001:da8:8001:240:222:68ff:fe14:6de] has quit [Remote host
closed the connection]
09:03 < jlouis> wrtp: those are all good suggestions
09:03 -!- Macpunk [~macpunk@cpe-72-177-26-221.austin.res.rr.com] has quit [Quit:
09:03 < wrtp> line 344: i'd say that the Query function is unnecessary.  if
the user wants asynchronicity, they can do the goroutine themselves
09:04 < wrtp> (which also gives them the freedom to do something different
with the error message)
09:04 < jlouis> mmm
09:04 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
09:04 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
09:05 < jlouis> I definitely see the point.  Perhaps libraries should not
have channels in their APIs
09:05 < jlouis> or at least try to cut them down
09:05 < wrtp> sometimes, a channel is useful, because it's part of how the
code works.  in this case, though, it's just a trivial wrapper.
09:07 -!- path[l] [~path@] has quit [Ping timeout: 240 seconds]
09:21 < wrtp> jlouis: thinking about it, i think maybe you should just call
the Identify function "Query".  then a call looks like ident.Query() which looks
09:22 < wrtp> also, i think you could simplify the IdentResponse struct
quite a bit.  really, i think you only need UserID and OperatingSystem in it
09:22 -!- vaxholm [~vaxholm@cocoplum.spotify.net] has left #go-nuts ["Lämnar"]
09:23 < wrtp> (both of which should be strings)
09:23 < wrtp> everything else is either known to the called (ClientPort and
ServerPort), redundant (ResponseTy, Error, Valid) or unnecessary (Charset)
09:32 -!- anticw [~anticw@cwedgwood.broker.freenet6.net] has joined #go-nuts
09:33 -!- t5vaha01 [t5vaha01@rhea.oamk.fi] has quit [Quit: leaving]
09:35 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Ping
timeout: 246 seconds]
09:44 -!- rv2733 [~rv2733@c-98-242-168-49.hsd1.fl.comcast.net] has joined #go-nuts
09:47 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
09:55 -!- path[l] [~path@] has joined #go-nuts
09:57 -!- Xera^ [~brit@87-194-208-246.bethere.co.uk] has joined #go-nuts
10:11 -!- mertimor [~mertimor@p4FE7584A.dip.t-dialin.net] has joined #go-nuts
10:12 -!- nsf [~nsf@jiss.convex.ru] has quit [Quit: WeeChat 0.3.2]
10:42 -!- Xera^ [~brit@87-194-208-246.bethere.co.uk] has quit [Read error:
Connection reset by peer]
10:45 -!- SRabbelier [~SRabbelie@ip138-114-211-87.adsl2.static.versatel.nl] has
quit [Read error: Connection reset by peer]
10:51 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
10:51 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
10:58 -!- Ideal [~Ideal@ideal-1-pt.tunnel.tserv6.fra1.ipv6.he.net] has joined
11:04 -!- ikke [~ikkibr@] has joined
11:04 -!- ikke [~ikkibr@] has quit [Changing
11:04 -!- ikke [~ikkibr@unaffiliated/ikkebr] has joined #go-nuts
11:05 -!- SRabbelier [~SRabbelie@ip138-114-211-87.adsl2.static.versatel.nl] has
joined #go-nuts
11:06 -!- gisikw [~gisikw@] has joined #go-nuts
11:10 -!- sladegen [~nemo@unaffiliated/sladegen] has quit [Read error: Operation
timed out]
11:17 < wrtp> anyone know how force all garbage to be collected and
finalizers run (just for an experiment, not for a real program) ?
11:17 < wrtp> s/how/how to/
11:34 -!- eikenberry [~jae@mail.zhar.net] has joined #go-nuts
11:41 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has joined #go-nuts
11:45 -!- megaboz [~none@unaffiliated/megaboz] has joined #go-nuts
11:50 -!- SugarBear [~stephen.s@] has joined #go-nuts
11:51 -!- pda- [pda@antifail.com] has left #go-nuts []
11:52 -!- Netsplit *.net <-> *.split quits: jlouis, zerd
11:54 -!- rlab [~Miranda@] has quit [Quit: Miranda IM! Smaller,
Faster, Easier.  http://miranda-im.org]
11:55 -!- path[l] [~path@] has quit [Quit: path[l]]
11:55 -!- Netsplit over, joins: jlouis
11:56 -!- lmoura_ [~lmoura@] has joined #go-nuts
11:56 -!- Svarthandske [~nn@dsl-tkubrasgw1-fe3cdc00-28.dhcp.inet.fi] has joined
11:57 -!- divoxx [~divoxx@] has joined #go-nuts
11:59 -!- zerd [~quassel@2a01:608:ccc:1000:2e0:4dff:fe83:76ed] has joined #go-nuts
12:01 -!- path[l] [~path@] has joined #go-nuts
12:06 < jessta> wrtp: runtime.GC()
12:07 < jessta> wrtp: but it doesn't release memory back to the OS
12:07 < wrtp> jessta: yeah, but it wasn't running the finalizers.
12:07 < wrtp> jessta: eventually, i worked out that GC(); Gosched(); GC()
12:08 < wrtp> i was just trying to work out, empirically, how conservative
the GC is
12:13 -!- SugarBear [~stephen.s@] has quit []
12:16 < wrtp> there's definitely some odd behaviour going on
12:18 -!- kel_ [~kel@cpc2-leat2-0-0-cust98.hers.cable.ntl.com] has joined #go-nuts
12:19 < jessta> wrtp: ood?
12:19 < jessta> odd?
12:20 < wrtp> odd
12:20 < wrtp> unusual
12:20 < wrtp> not easily explainable
12:21 < wrtp> just moving a declaration can affect whether something gets
finalized or not
12:23 < wrtp> for instance, this: http://pastebin.org/225197
12:23 < wrtp> moving line 30 to just before line 29 causes the code not to
run the finalizer
12:23 < wrtp> at least, on my platform
12:24 < wrtp> (ignore the redundant code)
12:25 < taruti> finalizers are iirc not guaranteeded to run
12:25 < taruti> they may run
12:25 < taruti> or they may not run
12:25 < wrtp> i realise that
12:25 < wrtp> but why does the placement of some irrelevant code make a
difference here?
12:26 < jessta> scheduling?
12:27 < jessta> main may finish before the finalizer gets to run
12:28 < wrtp> but i'm doing a Gosched() before exiting
12:28 < jessta> Goshed() isn't required to switch goroutines
12:28 < wrtp> and why should the scheduling behave differently depending on
where a declaration is?
12:29 < jessta> it shouldn't
12:29 < taruti> scheduling is not deterministic
12:29 < wrtp> jessta: it is required if you're about to exit main
12:29 < wrtp> jessta: alternatively you could sleep for a bit
12:29 < jessta> wrtp: you could block on a channel
12:30 < wrtp> jessta: that too.  but i want my program to exit.  so i'd have
to create another goroutine to send on the channel.
12:30 < jessta> wrtp: I mean, calling GoShed() doesn't gurantee that the
thread will switch goroutines
12:31 < wrtp> jessta: i think it does if there's another runnable goroutine
12:31 < wrtp> jessta: the implementation just puts the current goroutine at
the tail of the run queue
12:32 < jessta> relying on it is a bad idea
12:32 < wrtp> i'm not relying on it - i just want to explore the properties
of the garbage collector
12:33 < wrtp> in particular, i'm wondering if i have a large buffer full of
random data, some of which happens to look like a pointer, whether that pointer
will be GC'd or not
12:33 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has quit [Ping
timeout: 240 seconds]
12:34 < wrtp> there's a possibility for a DoS attack there
12:34 < wrtp> well, maybe
12:35 < taruti> wrtp: not really
12:36 < wrtp> if you know some data is going to be read into a buffer in the
program, then you have the potential to cause a memory leak
12:37 < taruti> wrtp: that allows at maximum O(buffers_size) to be retained
as long as the buffer is retained.
12:37 < wrtp> not if you have a pointer to the head of a list
12:37 < wrtp> it's possible that the code carries on allocating at the end
of the list, relying on the GC to pick up the head
12:38 < wrtp> but if your buffer points to the head, then none of the list
will ever be deallocated
12:38 < taruti> mmh
12:38 < taruti> point
12:38 < wrtp> ok, it's a bit far fetched, but possible
12:38 < taruti> btw the garbage collector will be rewritten shortly
12:38 < wrtp> sure
12:39 < wrtp> if it's conservative now, i wonder if it's possible to rewrite
it to be non-conservative and still keep some of the nice properties of the go
12:41 < wrtp> for instance, the fact that you can point into the middle of
an array and the GC knows it needs to walk the whole array (and can find its
header just from the original pointer value)
12:41 -!- divoxx [~divoxx@] has quit [Quit: divoxx]
12:41 < wrtp> that's fairly fundamental to go.
12:42 < wrtp> if it's non-conservative, then it has to maintain pointer maps
all over the place, which i don't think it does currently.  so performance might
go down...
12:45 < taruti> wrtp: just making the non-pointer containing things
allocated from a separate heap will be mostly enough
12:46 < wrtp> taruti: but what about mixed mode objects e.g.  struct {p
*int, i int}
12:46 < taruti> e.g.  []byte, string etc
12:46 -!- kota1111 [~kota1111@gw2.kbmj.jp] has quit [Quit: Leaving...]
12:46 < taruti> wrtp: those can be handled on a per-type pointer-map but for
those being conservative is not a large issue
12:46 < wrtp> struct {data [1024] byte, p *int}
12:47 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has joined #go-nuts
12:47 < taruti> that one is stupid from a cache pov
12:47 < wrtp> oh?
12:48 < taruti> probably want to have the byte array separate from the
word-sized things
12:48 < wrtp> the byte array is word aligned
12:48 < taruti> anyways pointer-maps are quite standard in most languages
12:49 < wrtp> perhaps.  but it does have a runtime impact
12:50 < taruti> yes, maybe even good GC performance will be a result
12:50 < taruti> as compared to the current slow one
12:50 < wrtp> it's what happens when you're not in the GC that i'm concerned
12:51 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
12:51 < wrtp> for instance, allocating stack frames
12:51 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
12:51 < wrtp> it's probably not too much of a problem.
12:52 < wrtp> BTW, i've determined that currently the GC is definitely
12:53 < taruti> the implementation is very simple
12:53 < taruti> getting e.g.  a concurrent one would be a very nice
13:03 -!- alehorst [~alehorst@] has joined #go-nuts
13:06 -!- tazjin [~tazjin@p5DC82572.dip.t-dialin.net] has joined #go-nuts
13:06 -!- zyichi [~zyichi@] has left #go-nuts []
13:09 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has quit [Ping
timeout: 248 seconds]
13:13 -!- Ideal [~Ideal@ideal-1-pt.tunnel.tserv6.fra1.ipv6.he.net] has quit
[Remote host closed the connection]
13:18 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has joined #go-nuts
13:21 -!- Gracenotes [~person@wikipedia/Gracenotes] has quit [Ping timeout: 258
13:24 -!- [vertex] [~Alexandre@] has joined #go-nuts
13:25 -!- mertimor [~mertimor@p4FE7584A.dip.t-dialin.net] has quit [Quit:
13:29 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has joined
13:32 -!- iant [~iant@adsl-71-133-8-30.dsl.pltn13.pacbell.net] has quit [Ping
timeout: 245 seconds]
13:33 < wrtp> taruti: do you mean parallel?  (as in executing on several
processors at once) or concurrent?  (running concurrently with the code, rather
than stopping all goroutines to GC)
13:33 < taruti> concurrent
13:33 < taruti> avoiding "stop everything while we GC" would be nice
13:33 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has quit [Ping
timeout: 276 seconds]
13:35 -!- sladegen [~nemo@unaffiliated/sladegen] has joined #go-nuts
13:36 < taruti> and yes I know that it is tricky to get right and fast.
13:36 < wrtp> yeah
13:37 -!- Gracenotes [~person@wikipedia/Gracenotes] has joined #go-nuts
13:37 < wrtp> have you encountered problems with the current GC performance?
13:37 -!- scarabx [~scarabx@c-76-19-43-200.hsd1.ma.comcast.net] has quit [Quit:
This computer has gone to sleep]
13:37 -!- lux` [lux`@] has joined #go-nuts
13:38 < taruti> wrtp: yes.
13:38 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has joined #go-nuts
13:38 < Surma> hey guys, is there an elegant way to convert a []uint32 to
[]uint8 (making 4 uint8 outta each uint32)?
13:38 < taruti> wrtp: try measuring response times for a fuse filesystem
written in Go and having 2gb of cached data in RAM :)
13:39 < taruti> Surma: unsafe.*
13:39 < Surma> hm..  not really elegant, but it works, thanks ;)
13:40 < taruti> I should probably push out the fuse code some day.  But
getting comments on Go code seems hard.
13:41 < wrtp> Surma: why do you want to do that?  in general, it's
13:42 < wrtp> taruti: i think i big improvement would come from having the
GC type-aware - at the moment it will be scanning every byte of those buffers
(which presumably aren't full of pointers?)
13:42 < taruti> yes
13:43 < Surma> wrtp: I'm just doing a quick hack, no need for portability or
anything ;)
13:43 < taruti> http://codereview.appspot.com/1157044/show <- was this
submitted somehow in the wrong way?
13:44 < wrtp> Surma: if it's just a quick hack, use encoding/binary
13:45 < wrtp> taruti: did you do hg mail?
13:45 < taruti> wrtp: yes
13:46 < taruti> I can retry it from an another machine.
13:46 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has quit [Ping
timeout: 248 seconds]
13:46 -!- cmarcelo [~cmarcelo@enlightenment/developer/cmarcelo] has joined
13:46 < wrtp> taruti: 'cos i don't see that issue in golang-dev
13:47 -!- tokuhirom [~tokuhirom@s230.GtokyoFL21.vectant.ne.jp] has joined #go-nuts
13:48 < taruti> wrtp: retried it.
13:51 < richardr> After compiling a little Go library wrapper I found on
github, and trying to run it I get a lot of amd64, exports, exec.go, package..
"command not found".  My environment variables are set and everything :/
13:51 < richardr> Any ideas?
13:51 < wrtp> richardr: have you got a transcript of what you're doing and
the resulting errors?
13:52 < richardr> wrtp: I'll write one up now
13:54 < wrtp> taruti: i'm wondering if some posts are being dropped, because
golang and golang-dev have been extremely quiet the last few days
13:54 < taruti> not sure
13:55 * taruti thinks of waiting a few hours to see whether something goes through
13:55 < wrtp> try mailing golang-dev direct with a test, perhaps?
13:55 < richardr> wrtp: http://dpaste.com/193696/ along those lines
13:56 < wrtp> richardr: you're trying to execute the intermediate object
13:57 < richardr> wrtP: ah i see
13:57 < richardr> wrtp: what should I be executing?  fcgi.go?
13:57 < taruti> .6 = "gcc .o on amd64"
13:58 < wrtp> i'd help more, but my git clone fails
13:58 < richardr> wrtp: http://github.com/jldailey/fcgigo.git sorry
13:58 < jessta> richardr: it's a library, yeah?
13:58 -!- tibshoot [~tibshoot@gw-puteaux.linagora.com] has quit [Ping timeout: 246
13:58 -!- nocturnal [~nocturnal@] has left #go-nuts []
13:59 < jessta> so it doesn't have a main()?
13:59 < richardr> jessta: yeah, fast-cgi for Go - ya in fcgi.go
13:59 < taruti> richardr: just "make install" and use that in your own
13:59 < taruti> richardr: that is a library not an program
14:00 < wrtp> better, do goinstall github.com/jldailey/fcgigo
14:00 < wrtp> then you can do import "github.com/jldailey/fcgigo" in your go
14:00 < jessta> richardr: that main() is commented out
14:00 < jessta> richardr: it's an example of how to use the library
14:01 < richardr> wrtp: oh cheers...  i get no $GOROOT, but if i "echo
$GOROOT" on the command line it gives me the go root.
14:01 < wrtp> and use fgci as the package identifier
14:01 < wrtp> richardr: is it exported (what does sh -c 'echo $GOROOT'
14:02 < wrtp> oops no, that's not necessarily a good indicator!
14:02 < wrtp> try "export GOROOT" and try again
14:02 < richardr> wrtp: /usr/lib/go , i sourced the .bashrc file where i
defined it
14:02 < richardr> wrtp: same thing
14:03 < wrtp> that's weird
14:04 < richardr> wrtp: ya :/ but I understand the whole package thing now
so cheers
14:06 < wrtp> richardr: what does python -c 'import os; print
os.environ.get("GOROOT")' print?
14:06 < ShadowIce> richardr: if you are using sudo, use "sudo -E"
14:06 < richardr> wrtp: /usr/lib/go
14:07 < richardr> ShadowIce: nope, just my regular user
14:07 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
joined #go-nuts
14:07 < wrtp> richardr: could you post a transcript of you trying it,
14:07 -!- iant [~iant@] has joined #go-nuts
14:08 -!- mode/#go-nuts [+v iant] by ChanServ
14:08 < richardr> wrtp: http://dpaste.com/193699/
14:08 < wrtp> no, sorry, i meant the goinstall
14:10 < richardr> wrtp: got it to work, if i sudo -i
14:11 < richardr> wrtp: oh sudo -E works too.  i didnt know about that
14:11 < richardr> wrtp: thanks for your time
14:12 < wrtp> i thought you weren't using sudo
14:13 < richardr> wrtp: err, no idea how i missed that, my mistake...
14:16 < wrtp> sudo doesn't have a -E option on this machine
14:16 < wrtp> i'm a bit surprised it's not the default
14:16 < richardr> wrtp: i didnt test it with -E , just sudo'd i presumed
14:17 < richardr> sudo'd -i sorry
14:17 < richardr> wrtp: default definately doesnt work - i get that error
14:17 < wrtp> yup, it wouldn't here either - but i don't run any go stuff as
any other user
14:19 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
quit [Quit: E se abbasso questa leva che succ...]
14:23 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
joined #go-nuts
14:24 -!- nighty^ [~nighty@x122091.ppp.asahi-net.or.jp] has joined #go-nuts
14:25 -!- megaboz [~none@unaffiliated/megaboz] has quit [Quit: Lost terminal]
14:28 < richardr> ShadowIce: what does the -E argument do?  Because your
right, just tried a sudo make install only worked with -E
14:29 < richardr> ShadowIce: it's not even in my sudo man pages
14:29 -!- barismetin [~barismeti@kde/developer/baris] has joined #go-nuts
14:31 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has joined #go-nuts
14:35 -!- tumdum [~tumdum@unaffiliated/tumdum] has joined #go-nuts
14:37 -!- cco3 [~conley@c-69-181-138-209.hsd1.ca.comcast.net] has quit [Ping
timeout: 248 seconds]
14:38 < kimelto> morning!
14:39 -!- thiago__ [~thiago@] has joined #go-nuts
14:41 < ShadowIce> richardr: "The -E (preserve environment) option will
override the env_reset option in sudoers(5)).  It is only available when either
the matching command has the SETENV tag or the setenv option is set in
14:45 -!- lmoura_ [~lmoura@] has quit [Ping timeout: 265 seconds]
14:46 -!- rlab [~Miranda@] has joined #go-nuts
14:46 -!- tazjin [~tazjin@p5DC82572.dip.t-dialin.net] has quit [Ping timeout: 260
14:49 -!- apphacker [~apphacker@c-24-5-192-234.hsd1.ca.comcast.net] has joined
14:49 -!- b00m_chef [~watr@d64-180-45-230.bchsia.telus.net] has joined #go-nuts
14:50 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Ping
timeout: 252 seconds]
14:50 -!- ikke [~ikkibr@unaffiliated/ikkebr] has quit []
14:55 -!- b00m_chef [~watr@d64-180-45-230.bchsia.telus.net] has quit [Ping
timeout: 246 seconds]
14:57 -!- kel_ [~kel@cpc2-leat2-0-0-cust98.hers.cable.ntl.com] has quit [Ping
timeout: 240 seconds]
14:57 < wrtp> under mac os, there's no -E option
15:00 -!- alehorst [~alehorst@] has quit [Remote host closed the
15:01 < ni|> :)
15:02 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
15:04 -!- iant [~iant@] has quit [Ping timeout: 252 seconds]
15:06 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has quit [Quit:
15:09 -!- alehorst [~alehorst@] has joined #go-nuts
15:10 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has joined #go-nuts
15:20 -!- anticw [~anticw@cwedgwood.broker.freenet6.net] has quit [Ping timeout:
248 seconds]
15:20 -!- bortzmeyer [~bortzmeye@batilda.nic.fr] has quit [Quit: Leaving.]
15:21 -!- Venom_X [~pjacobs@] has joined #go-nuts
15:29 -!- richardr [~richard@124-148-225-92.dyn.iinet.net.au] has left #go-nuts []
15:30 -!- apphacker [~apphacker@c-24-5-192-234.hsd1.ca.comcast.net] has quit [Ping
timeout: 268 seconds]
15:31 -!- b00m_chef [~watr@] has joined #go-nuts
15:33 -!- zozoR [~zozoR@0x5da69cf2.cpe.ge-0-1-0-1105.hsnqu1.customer.tele.dk] has
quit [Ping timeout: 276 seconds]
15:33 -!- Surma [~bzfsurma@gooseberry.zib.de] has quit [Quit: Leaving.]
15:34 -!- iant [~iant@nat/google/x-anjsqhdmtffvjhxp] has joined #go-nuts
15:34 -!- mode/#go-nuts [+v iant] by ChanServ
15:36 -!- b00m_chef [~watr@] has quit [Ping timeout: 240 seconds]
15:44 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
quit [Ping timeout: 240 seconds]
15:46 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
joined #go-nuts
15:46 -!- thiago__ [~thiago@] has quit [Remote host closed the
15:52 -!- anticw [~anticw@cwedgwood.broker.freenet6.net] has joined #go-nuts
15:58 -!- terrex [~terrex@] has joined #go-nuts
16:00 -!- divoxx [~divoxx@] has joined #go-nuts
16:03 -!- tibshoot [~tibshoot@gw-puteaux.linagora.com] has joined #go-nuts
16:04 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Ping timeout: 246
16:16 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has quit [Read error: Operation
timed out]
16:18 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has joined #go-nuts
16:18 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has joined #go-nuts
16:20 -!- path[l] [~path@] has quit [Quit: path[l]]
16:20 -!- Chinainvent [~yunkai@] has quit [Ping timeout: 240 seconds]
16:20 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
16:20 -!- path[l] [~path@] has joined #go-nuts
16:21 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has quit [Read error: Operation
timed out]
16:22 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Max SendQ exceeded]
16:22 -!- jhawk28 [~jhawk28@] has joined #go-nuts
16:23 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
16:23 -!- tvw [~tv@e176003032.adsl.alicedsl.de] has joined #go-nuts
16:24 < taruti> meh
16:24 < taruti> mail not visible on golang-dev
16:25 -!- araujo [~araujo@gentoo/developer/araujo] has quit [Max SendQ exceeded]
16:26 -!- araujo [~araujo@gentoo/developer/araujo] has joined #go-nuts
16:28 < wrtp> taruti: did you try mailing direct?
16:28 -!- Venom_X [~pjacobs@] has quit [Quit: Venom_X]
16:29 < taruti> wrtp: I can try sending a message manually from my mail
16:29 * taruti fears that she is doing something wrong
16:32 < wrtp> it should have come.  BTW, it's usually good to name an actual
reviewer rather than just golang-dev - find someone from the go team who's worked
on the same package, or just choose russ cox - he'll forward it if necessary
16:33 < wrtp> but try mailing golang-dev direct too - mention that hg mail
isn't getting through
16:33 -!- mertimor [~mertimor@p4FE7584A.dip.t-dialin.net] has joined #go-nuts
16:34 < taruti> ok
16:38 -!- megaboz [~none@unaffiliated/megaboz] has joined #go-nuts
16:39 < wrtp> taruti: BTW, i'd like to see your fuse filesystem - why don't
you put it on github or code.google.com or something?
16:39 < wrtp> what does it do?
16:40 < taruti> wrtp: distribution+encryption, will publish it when it is
more ready but the fuse library is much more ready to publish
16:41 < wrtp> that's be cool too
16:41 < wrtp> s/'s/'d
16:42 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
16:42 < taruti> wrtp: you can see some of the crypto code on
16:43 < taruti> but I am unsure what is the current best practise of
generating API-docs for Go code
16:43 < wrtp> follow the godoc style
16:43 < wrtp> it's not well documented, but trial and error and looking at
the pkg documentation should show you the way
16:45 < wrtp> i just goinstalled your pbkdf2 package
16:46 -!- jhawk28 [~jhawk28@] has quit [Remote host closed the
16:47 < wrtp> about documentation: it's worth following the existing go
style of documentation - make the comments before the functions full sentences.
e.g.  HashPassword returns the Pbjdf2 hash of password, using reasonable defaults
(9999 iterations + SHA1 + 64 bytes output).
16:48 < taruti> noted.
16:50 < taruti> sent a manual mail to golang-dev.
16:51 < wrtp> i'll keep a look out for it
16:51 -!- path[l] [~path@] has quit [Quit: path[l]]
16:52 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
16:53 -!- ikke [~ikkibr@] has joined
16:53 -!- ikke [~ikkibr@] has quit [Changing
16:53 -!- ikke [~ikkibr@unaffiliated/ikkebr] has joined #go-nuts
16:55 -!- Xera^ [~brit@87-194-208-246.bethere.co.uk] has joined #go-nuts
16:57 < wrtp> taruti: another thing: if you want your stuff to work with
goinstall, it's worth changing the import paths to use
"bitbucket.org/taruti/pbkdf2" rather than "crypto/pbkdf2"
16:58 < taruti> wrtp: but that won't work for people not using goinstall?
16:58 < taruti> (I'm not using it actively at the moment since some of my
machines are not on the net)
16:58 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has quit [Quit:
16:58 < wrtp> true.  but goinstall should be the standard way of installing
go packages now.  and they can always change the paths the other way if they want
16:59 -!- alehorst [~alehorst@] has quit [Quit: Leaving.]
16:59 -!- terrex [~terrex@] has quit [Ping
timeout: 260 seconds]
16:59 < wrtp> you could always have the makefile install into that path
17:00 -!- alehorst [~alehorst@] has joined #go-nuts
17:00 < taruti> mmh
17:02 < wrtp> if you do things that way, then goinstalling any package that
uses yours will automatically pull yours and compile it
17:04 < wrtp> also, if you do that, then your package gets listed in the
stats, so people will know about it
17:04 < taruti> any example of how to make the Makefile install into a path
that makes goinstall imports work?  just TARG=bitbucket.org/foo/bar ?
17:04 < wrtp> something like that
17:04 < wrtp> try it...
17:05 * taruti tries it
17:06 < wrtp> if you do things this way, you can have shorter names for your
packages too - e.g.  bitbucket.org/taruti/pbkdf2
17:07 -!- path[l] [~path@] has joined #go-nuts
17:07 < wrtp> it's nice when the last component of the path is also the
package identifier
17:07 -!- smw [~stephen@pool-96-232-88-231.nycmny.fios.verizon.net] has quit
[Quit: Konversation terminated!]
17:07 -!- smw [~stephen@pool-96-232-88-231.nycmny.fios.verizon.net] has joined
17:09 < taruti> hmm.  that is going to be confusing
17:10 < taruti> if I have e.g.  SRP code in both Go and Haskell and call the
go one simply "srp" that will confuse things.
17:10 < taruti> but I can see it being convenient from a goinstall
17:11 -!- path[l] [~path@] has quit [Client Quit]
17:12 < wrtp> well, then maybe have a separate go subdirectory, e.g.
17:13 -!- jA_cOp [~yakobu@unaffiliated/ja-cop/x-9478493] has joined #go-nuts
17:13 -!- Gracenotes [~person@wikipedia/Gracenotes] has quit [Ping timeout: 260
17:14 < taruti> wrtp: looking at dashboard most packages seem to be
17:14 -!- terrex [~terrex@] has joined #go-nuts
17:15 -!- kjk [~Adium@] has joined #go-nuts
17:17 < wrtp> taruti: some are, some aren't.  i guess it's just personal
preference, but i think it works well in a go subdirectory.
17:17 < wrtp> BTW, i just sent a mail to golang-dev, and it seems to have
come through
17:18 < wrtp> at least, i can see it here:
17:18 < taruti> hmm.  I can mail go-nuts fine (did yesterday)
17:18 < wrtp> iant: do you know if there are any current issues with the
mailing lists?
17:19 <+iant> wrtp: not that I know of
17:20 <+iant> actually there are a couple of messages in the spam queue,
I'll push them through
17:20 < wrtp> iant: just seems very quiet.  and taruti's issue
(http://codereview.appspot.com/1157044/show) doesn't seem to be appearing
17:20 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has quit [Quit:
17:21 <+iant> should appear soon
17:21 < wrtp> got 'em
17:21 < taruti> thanks
17:21 < wrtp> i wonder why they triggered the spam filter
17:22 <+iant> groups spam filtering is pretty good these days but sometimes
it gets a bit aggressive
17:22 <+iant> I have no idea what the algorithms are
17:22 <+iant> I think they get input from gmail or something
17:23 < wrtp> that's when it gets dangerous...  my gmail spam inbox has 485
messages, and i never scan them all properly.  i wonder how many real messages
have got lost.
17:23 < wrtp> mind you i'm not complaining!
17:27 -!- preflex [~preflex@unaffiliated/mauke/bot/preflex] has joined #go-nuts
17:28 -!- Venom_X [~pjacobs@] has joined #go-nuts
17:31 < wrtp> taruti: looks like TARG=bitbucket.org/taruti/go/xxx should
work fine.  see http://code.google.com/p/goprotobuf/source/browse/proto/Makefile
for an example
17:35 < taruti> ok :)
17:41 -!- divoxx [~divoxx@] has quit [Ping timeout: 240 seconds]
17:45 -!- path[l] [UPP@] has joined #go-nuts
17:50 -!- Venom_X [~pjacobs@] has quit [Ping timeout: 260 seconds]
17:52 -!- deso [~deso@x0561a.wh30.tu-dresden.de] has joined #go-nuts
17:59 -!- mertimor [~mertimor@p4FE7584A.dip.t-dialin.net] has quit [Quit:
18:16 -!- Venom_X [~pjacobs@] has joined #go-nuts
18:20 -!- cmarcelo [~cmarcelo@enlightenment/developer/cmarcelo] has quit [Ping
timeout: 276 seconds]
18:30 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has joined
18:34 < uriel> iant: why don't you enable moderation for new posters?  I use
it in a few groups and it works quite well
18:34 <+iant> uriel: we had it enabled for a while, and then we decided to
just trust the spam filter
18:36 < uriel> iant: in my experience the filter doesn't work very well :(
(and quite a few bits of spam have got into golang-nuts, not much, but not good
for such a huge list)
18:36 <+iant> the filter has gotten much better in the last couple of months
18:36 <+iant> it's true that some spam has slipped through, and we should
reconsider if that doesn't improve
18:37 < uriel> ok, maybe you are right =)
18:37 <+iant> a lot of spam is getting blocked
18:37 < uriel> oh, I certainly believe that :)
18:42 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Ping
timeout: 260 seconds]
18:44 -!- Venom_X [~pjacobs@] has quit [Ping timeout: 276 seconds]
18:46 -!- gisikw_ [~gisikw@] has joined #go-nuts
18:47 -!- gisikw [~gisikw@] has left #go-nuts []
18:51 -!- warthurton [~warthurto@pdpc/supporter/active/warthurton] has quit [Quit:
ZNC - http://znc.sourceforge.net]
18:53 -!- gisikw_ [~gisikw@] has left #go-nuts []
18:53 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has joined #go-nuts
18:54 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has quit [Read error:
Connection reset by peer]
18:56 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
18:57 -!- idea_squirrel [~ct2rips@77-21-16-192-dynip.superkabel.de] has joined
18:58 -!- warthurton [~warthurto@pdpc/supporter/active/warthurton] has joined
18:59 -!- cmarcelo [~cmarcelo@enlightenment/developer/cmarcelo] has joined
19:00 -!- [vertex] [~Alexandre@] has quit [Ping timeout: 240
19:01 -!- Eridius [~kevin@unaffiliated/eridius] has joined #go-nuts
19:02 -!- kabie [kabie@] has joined #go-nuts
19:03 -!- alehorst [~alehorst@] has quit [Quit: Leaving.]
19:09 -!- General13372 [~support@71-84-50-230.dhcp.mtpk.ca.charter.com] has joined
19:10 -!- kel_ [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has joined #go-nuts
19:12 -!- [vertex] [~Alexandre@] has joined #go-nuts
19:12 -!- General1337 [~support@71-84-50-230.dhcp.mtpk.ca.charter.com] has quit
[Ping timeout: 260 seconds]
19:15 -!- b00m_chef [~watr@] has joined #go-nuts
19:18 -!- thiago__ [~thiago@] has joined #go-nuts
19:22 -!- Svarthandske [~nn@dsl-tkubrasgw1-fe3cdc00-28.dhcp.inet.fi] has quit
[Quit: Svarthandske]
19:24 -!- zuser1 [~nonet@c-76-126-152-253.hsd1.ca.comcast.net] has joined #go-nuts
19:24 -!- zuser1 [~nonet@c-76-126-152-253.hsd1.ca.comcast.net] has left #go-nuts
19:33 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has quit
[Read error: Connection reset by peer]
19:33 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has joined
19:37 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has joined #go-nuts
19:41 -!- Venom_X [~pjacobs@] has joined #go-nuts
19:47 -!- fenicks [~christian@log77-4-82-246-228-78.fbx.proxad.net] has joined
19:47 < fenicks> hello
19:48 < Ginto8> hi
19:50 -!- cmarcelo [~cmarcelo@enlightenment/developer/cmarcelo] has quit [Ping
timeout: 258 seconds]
19:59 -!- megaboz [~none@unaffiliated/megaboz] has quit [Quit: Lost terminal]
20:00 -!- samferry [~sam@atheme/member/samferry] has quit [Read error: Operation
timed out]
20:00 -!- samferry [sam@atheme/member/samferry] has joined #go-nuts
20:03 -!- Nexoro [~nexo@c-71-192-75-183.hsd1.ma.comcast.net] has joined #go-nuts
20:03 -!- ampleyfly [~ampleyfly@h-148-139.A163.priv.bahnhof.se] has joined
20:03 -!- lilpenguina [~penguina@] has joined
20:04 -!- mertimor [~mertimor@p4FE7584A.dip.t-dialin.net] has joined #go-nuts
20:07 -!- kabie [kabie@] has quit [Quit: Leaving]
20:08 -!- marsu [~marsu@ANancy-154-1-37-119.w83-196.abo.wanadoo.fr] has joined
20:11 -!- b00m_chef [~watr@] has quit [Ping timeout: 276 seconds]
20:17 -!- ampleyfly [~ampleyfly@h-148-139.A163.priv.bahnhof.se] has quit [Ping
timeout: 248 seconds]
20:28 -!- ampleyfly [~ampleyfly@h-148-139.A163.priv.bahnhof.se] has joined
20:31 -!- Kashia [~Kashia@port-92-200-40-80.dynamic.qsc.de] has joined #go-nuts
20:32 -!- tumdum [~tumdum@unaffiliated/tumdum] has quit [Quit: tumdum]
20:37 -!- g0bl1n [~anonymous@a213-22-210-28.cpe.netcabo.pt] has quit [Quit:
20:40 -!- kashia_ [~Kashia@port-92-200-53-157.dynamic.qsc.de] has joined #go-nuts
20:41 -!- fenicks [~christian@log77-4-82-246-228-78.fbx.proxad.net] has quit
[Quit: Leaving.]
20:41 -!- Kashia [~Kashia@port-92-200-40-80.dynamic.qsc.de] has quit [Ping
timeout: 240 seconds]
20:42 -!- tumdum [~tumdum@unaffiliated/tumdum] has joined #go-nuts
20:48 -!- Amaranth [~travis@ubuntu/member/Amaranth] has quit [Ping timeout: 245
21:02 -!- Amaranth [~travis@ubuntu/member/Amaranth] has joined #go-nuts
21:03 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
21:03 -!- Venom_X [~pjacobs@] has quit [Ping timeout: 265 seconds]
21:04 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
21:05 -!- tumdum [~tumdum@unaffiliated/tumdum] has quit [Quit: tumdum]
21:11 -!- braddunbar [~dunbarb2@rrcs-96-10-96-162.se.biz.rr.com] has joined
21:16 -!- Venom_X [~pjacobs@] has joined #go-nuts
21:19 -!- deso [~deso@x0561a.wh30.tu-dresden.de] has quit [Ping timeout: 240
21:20 -!- deso [~deso@x0561a.wh30.tu-dresden.de] has joined #go-nuts
21:21 -!- Svarthandske [~nn@dsl-tkubrasgw1-fe3cdc00-28.dhcp.inet.fi] has joined
21:27 -!- wrtp [~rog@] has quit [Quit: wrtp]
21:27 -!- ikke [~ikkibr@unaffiliated/ikkebr] has quit []
21:29 -!- Altercation [~Altercati@pdpc/supporter/active/altercation] has quit
[Excess Flood]
21:29 -!- Altercation [~Altercati@pdpc/supporter/active/altercation] has joined
21:32 < braddunbar> hi all!  is there a standard idiomatic way to do general
set manimpulations in go?  (sum, product, min, max, etc)
21:43 < MizardX> You could use a map[T]bool or map[*T]bool for storage.
Otherwise there is no built-in support for sets.
21:47 < MizardX>
21:50 < braddunbar> ah, I should've said sequence manipulations - like
summing a channel of some numeric type
21:50 < braddunbar> sorry
21:50 < Ginto8> for i,x := range v {} is what I'd think
21:50 < Ginto8> you can do it with a channel
21:50 < braddunbar> i find that I need a different function for each type,
like func Max(ch chan uint64) { } and func Max(ch chan uint32){} etc...
21:51 < Ginto8> uhm just use an interface
21:51 < Ginto8> oh with channels...
21:51 < Ginto8> channels complicate things
21:51 < braddunbar> Ginto8: How would I go about using an interface?
21:51 < braddunbar> Ginto8: it doesn't have to be channels necessarily
21:52 < braddunbar> Ginto8: I'm a total newb, so I haven't a clue which way
would be best
21:52 < Ginto8> uhm I believe there's a tutorial on the website
21:52 < Ginto8> either in tutorials or effective go
21:52 < Ginto8> if not you could look at the language spec
21:53 < Ginto8> If you still can't figure it out, then I'll help =P
21:54 < braddunbar> Ginto8: thanks =)
21:55 < Ginto8> np =D
21:55 -!- Chryson [~Chryson@pool-71-162-35-104.altnpa.east.verizon.net] has joined
21:56 -!- barismetin [~barismeti@kde/developer/baris] has quit [Remote host closed
the connection]
21:57 -!- MizardX [~MizardX@unaffiliated/mizardx] has quit [Ping timeout: 276
21:58 -!- rlab [~Miranda@] has quit [Read error: Connection reset by
21:59 -!- b00m_chef [~watr@209-52-232-163.vlan452.dsl.ucc-net.ca] has joined
22:00 -!- terrex [~terrex@] has quit [Quit:
22:04 -!- Project_2501 [~Marvin@dynamic-adsl-94-36-159-141.clienti.tiscali.it] has
quit [Quit: E se abbasso questa leva che succ...]
22:05 -!- Adys [~Adys@unaffiliated/adys] has quit [Ping timeout: 260 seconds]
22:08 -!- b00m_chef [~watr@209-52-232-163.vlan452.dsl.ucc-net.ca] has quit [Remote
host closed the connection]
22:09 -!- ShadowIce [pyoro@unaffiliated/shadowice-x841044] has quit [Quit:
22:12 -!- deso [~deso@x0561a.wh30.tu-dresden.de] has quit [Remote host closed the
22:12 -!- braddunbar [~dunbarb2@rrcs-96-10-96-162.se.biz.rr.com] has left #go-nuts
22:13 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Quit:
22:17 -!- Adys [~Adys@unaffiliated/adys] has joined #go-nuts
22:19 -!- lilpenguina [~penguina@] has quit
[Quit: Leaving.]
22:20 -!- meatmanek_ [~meatmanek@c-76-21-205-249.hsd1.va.comcast.net] has quit
[Quit: Leaving]
22:24 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has joined
22:30 -!- Kirill [~user@CPEf81edff80afa-CM0016924f5bee.cpe.net.cable.rogers.com]
has joined #go-nuts
22:30 -!- kel_ [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has quit [Remote host
closed the connection]
22:31 < Kirill> hi!  when I compile several .go files, it looks like I have
to list them by order of dependency.  is there a tool that takes care of this?
22:31 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has joined #go-nuts
22:32 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has quit [Client Quit]
22:33 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has joined #go-nuts
22:34 < Ginto8> Kirill, are they for the same package, or not?
22:34 -!- marsu [~marsu@ANancy-154-1-37-119.w83-196.abo.wanadoo.fr] has quit
[Quit: Leaving]
22:34 < Ginto8> because if they are for the same package you don't need to
22:34 < Kirill> Ginto8: I see.  Thanks =)
22:34 < Ginto8> all files in the same package are compiled at once
22:35 < Kirill> Ginto8: well, if my program is split into multiple files, I
don't have to make each file be a different package, right?  they would all be
members of the "my-program" package.  correct?
22:35 < Ginto8> you have to go by package order of dependency, not file
22:35 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has quit [Client Quit]
22:35 < Ginto8> yes, but then you have to have a package main with a
function main.main() I believe
22:35 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has joined #go-nuts
22:35 < Ginto8> or can you have main() in any package?
22:36 < Kirill> Ginto8: I don't know.
22:36 < Ginto8> you might want to check the language spec
22:36 < Ginto8> I've gotta go, hope find the issue =)
22:36 <+iant> you can have main() in any package, but the program always
starts at main() in the package main
22:36 < Kirill> iant: so if there's no main() inside package main, that's an
22:37 <+iant> yes
22:37 < Kirill> So I _must_ have a package called "main" somewhere in my
22:37 <+iant> yes
22:37 <+iant> it can be quite small, of course
22:37 < Kirill> I guess my main file would be part of package "main", and
everything else part of "my-program" or whatever.
22:37 < Ginto8> yes
22:37 < Ginto8> but you'd have to import "my-program" to access stuff from
that package
22:37 < Ginto8> anyway bye
22:39 -!- Chryson [~Chryson@pool-71-162-35-104.altnpa.east.verizon.net] has quit
[Quit: Leaving]
22:39 -!- slashus2 [~slashus2@74-137-24-74.dhcp.insightbb.com] has joined #go-nuts
22:40 -!- hcatlin [~hcatlin@pdpc/supporter/professional/hcatlin] has quit [Quit:
22:42 -!- Ginto8 [~Ginto8@pool-72-82-235-34.cmdnnj.fios.verizon.net] has quit
[Ping timeout: 265 seconds]
22:44 -!- rv2733 [~rv2733@c-98-242-168-49.hsd1.fl.comcast.net] has quit [Quit:
22:47 < Kirill> how do I copy a map?
22:49 -!- kel [~kel@82-68-84-3.dsl.in-addr.zen.co.uk] has quit [Ping timeout: 246
22:50 < Kirill> ...?
22:50 <+iant> make a new map and use range over the old map
22:50 < Kirill> iant: you mean, copy it manually using a loop?  =)
22:50 <+iant> you can do a generic version using the reflect package but it
won't be any faster
22:50 <+iant> yes
22:51 <+iant> there is no other way at present
22:51 < Kirill> that's balls.
22:51 < Kirill> serious balls.
22:51 < Kirill> iant: why do maps have reference semantics?
22:52 <+iant> because otherwise they would be copied when passed to a
function, and that is rarely what you want
22:52 < Kirill> what about arrays?
22:52 <+iant> think of the map type as a pointer
22:52 < Kirill> I know what a reference type is.
22:52 < Kirill> I'm saying...  copying an array as an argument to a function
is also seldom what I want
22:52 < Kirill> yet arrays are value types
22:52 < Kirill> why?
22:52 <+iant> the language gives both options for arrays, via arrays and
22:52 < Kirill> ...  then why doesn't it give the option for maps?
22:53 < Kirill> certainly slices can be generalized to maps?
22:53 <+iant> the other reason that arrays are values is that that gives you
a clear understanding of the storage requirements of arrays
22:53 <+iant> there is no reason for maps, which always use an internal data
22:54 < Kirill> but I'd like to be able to copy it in a generic way, just
like I copy anything else
22:54 < Kirill> I mean, it's nice that the implementation of maps is what it
is, but you'll agree it's sheer idiocy to write the same loop every time I want to
copy a map.
22:54 < Kirill> perhaps a language-provided "copy" is in order.
22:54 <+iant> yes, it's a place where the language suffers from the lack of
generic support
22:54 <+iant> we've avoided adding such copy functions until we know what
the answer is going to be for generics
22:55 < Kirill> you guys are hoping the answer isn't what C++'s answer is,
eh =)
22:55 <+iant> C++'s answer isn't bad, but it hurts compilation time, which
would hurt one of the goals of Go
22:56 <+iant> well, the C++ syntax gets pretty awful
22:56 < Kirill> so you expect to find a solution to compile-time generics
without impacting compile times..?
22:56 -!- ikaros [~ikaros@f051128085.adsl.alicedsl.de] has quit [Quit: Leave the
magic to Houdini]
22:56 <+iant> well, you added "compile-time" in front of "generics"
22:56 <+iant> that could be the answer
22:56 <+iant> but there are, as always, various tradeoffs
22:57 <+iant> the question is what the best tradeoff is for generics in Go
22:57 <+iant> it's possible that the language will never have generics
22:57 <+iant> that gives you one negative tradeoff, which is that you can't
write a map copy function (except via the reflect package)
22:57 <+iant> I don't know what the answer will be
22:58 < Kirill> no generics at all?  that won't be very good =)
22:58 <+iant> I agree
22:58 < Kirill> that is to say, the language won't be very good
22:58 <+iant> everything is on the table, though
22:58 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has quit [Read
error: Connection reset by peer]
22:59 < Kirill> We went all the way from 1968, now we're trying to create
"the next C" (sort of), and it still doesn't have generics...  *facepalm
22:59 -!- vsayer [~vivek@c-76-103-244-154.hsd1.ca.comcast.net] has joined #go-nuts
22:59 < Kirill> iant: are you on the "standards committe" (or equivalent)?
22:59 <+iant> it is a lack, and yet clearly people are able to do useful
work anyhow
22:59 <+iant> I wouldn't call it a standards committee, or any sort of
committee, but I'm in the discussions, yes
23:00 < Kirill> iant: so the fear with introducing generics is that they
will hurt compile time, but will be too slow at runtime?
23:00 < Kirill> I mean, you must have had _some_ discussions about it
23:00 <+iant> that is one of the tradeoffs, yes
23:00 < Kirill> also, is the code in the standard library "final"?  that is
to say, some of the built in packages are somewhat sketchy, both code quality
wise, and otherwise
23:01 <+iant> no, nothing is final
23:01 <+iant> everything is in the process of being changed and improved
23:01 <+iant> we very much welcome patches, and we've gotten great
contributions to the library
23:01 -!- rhelmer [~rhelmer@adsl-69-107-94-119.dsl.pltn13.pacbell.net] has joined
23:02 < Kirill> I wrote a straightforward audio streamer in Go (to learn the
language).  it's gone pretty smoothly, but there are a few hiccups that I find
quite annoying
23:03 < Kirill> for instance, the inability to add methods to external types
is annoying.  at the moment, say, "string" doesn't have an "isEmpty" method.  I
could write len(s) != 0, but that's not direct.  I can't add an "IsEmpty" method
to string because of the above, but doing something like "type Mystring string" is
even more annoying.
23:04 <+iant> adding methods to external types makes dynamic satisfaction of
interfaces very complex
23:04 <+iant> not to mention potentially highly confusing
23:04 < Kirill> and writing "type MyString string" and using that instead is
less confusing?  =)
23:05 <+iant> yes, because then everything about the type is in a single
23:05 < KirkMcDonald> To put it another way: What is this, Ruby?
23:05 < Kirill> what is the restriction on key types for maps?
23:05 < KirkMcDonald> Or just say: func IsEmpty(s string) bool
23:05 < Kirill> KirkMcDonald: already did.  Annoying because IsEmpty doesn't
communicate the fact that it's a string.  if I want to write another IsEmpty for
(say) an array, I can't.
23:06 <+iant> the key types on maps are those types that can be compared for
23:06 < KirkMcDonald> Kirill: IsStringEmpty, IsArrayEmpty, etc...
23:06 < Kirill> KirkMcDonald: even more annoying.
23:06 < KirkMcDonald> Kirill: Stupid solution: IsEmpty(x interface{}), use
reflection.  :-)
23:06 <+iant> we could define equality on struct types but it hasn't really
gotten to the top of the list
23:07 < Kirill> iant: it's not defined currently?  it isn't possible to have
struct types as keys for maps/
23:07 < Kirill> ?
23:07 <+iant> right
23:07 < Kirill> maybe I'm not being clear enough.  the idea is -- yes, I can
figure out a way around Go's problems.  but that's not good enough, because
instead I can just use C, where the majority of time is spent "working around"
things that C doesn't have.
23:08 < Kirill> I'm not trying to troll or anything.  I'm geniuinely trying
to understand the point of writing a new language that (among other things) has
fast compile times at the expense of not having fairly common features...  like
copying objects.
23:10 < KirkMcDonald> "Copy" is such a vague word.  :-)
23:11 < Kirill> KirkMcDonald: not in C++, for example =)
23:11 < KirkMcDonald> Well, in C++ you've got both copy assignment and copy
23:12 -!- idea_squirrel [~ct2rips@77-21-16-192-dynip.superkabel.de] has quit
[Quit: Verlassend]
23:13 < Kirill> iant: also, what about making external type method
"extensions" visible only in the package where they are defined?
23:13 < Kirill> iant: that is, my "IsEmpty" for string would only be visible
in the package where I wrote it
23:14 < Kirill> iant: also, are the "committe" discussions publicly
accessible somewhere?
23:15 < Kirill> iant: still there?
23:18 <+iant> Making the extensions only visible in the package doesn't work
if they get assigned to an empty interface value and then passed to a different
package which uses a type assertion to convert to another interface value
23:19 <+iant> at that point you have to know which methods the type has
23:19 <+iant> discussions are not publically available and are generally not
written down in any case
23:19 <+iant> we will eventually come up with a generics proposal
23:19 <+iant> thought right now everybody is trying to get through Google
I/O next week
23:19 <+iant> the proposal will be sent out for comments
23:20 < KirkMcDonald> Just generics?  Or full-bore template metaprogramming?
23:20 <+iant> that is another one of the tradeoffs
23:20 <+iant> By the way, the valid types for a map key are listed in the
23:20 < Kirill> another way would be to introduce hygienic macros into the
23:21 < Kirill> this way I could implement my "IsEmpty" as a macro and be
done with it.
23:22 < Kirill> but in this context I guess they would be equivalent to
turing-complete "generics", so you're still stuck with either doing it (slowly,
potentially) at compile time, or even slower at runtime
23:22 <+iant> yeah, you get into area like LISP macros
23:29 -!- iant [~iant@nat/google/x-anjsqhdmtffvjhxp] has quit [Ping timeout: 260
23:29 -!- wuehlmaus [~wuehlmaus@p4FCC79E1.dip.t-dialin.net] has quit [Ping
timeout: 252 seconds]
23:30 -!- wuehlmaus [~wuehlmaus@p4FCC78D1.dip.t-dialin.net] has joined #go-nuts
23:34 -!- thiago__ [~thiago@] has quit [Quit: bye]
23:35 < jlouis> Heh, so the commit slowdown is due to Google I/O ?
23:36 -!- carllerche [~carllerch@] has joined #go-nuts
23:38 -!- Kirill [~user@CPEf81edff80afa-CM0016924f5bee.cpe.net.cable.rogers.com]
has left #go-nuts ["ERC Version 5.3 (IRC client for Emacs)"]
23:43 -!- lux` [lux`@] has quit [Remote host closed the connection]
23:57 -!- path[l] [UPP@] has quit [Ping timeout: 258 seconds]
--- Log closed Thu May 13 00:00:30 2010