On Saturday, March 4, 2017 at 12:47:10 AM UTC+8, T L wrote: > > > > On Friday, March 3, 2017 at 10:32:25 PM UTC+8, Ian Lance Taylor wrote: >> >> On Fri, Mar 3, 2017 at 5:31 AM, T L <tapi...@gmail.com> wrote: >> > >> > On Friday, March 3, 2017 at 7:52:42 PM UTC+8, Ian Davis wrote: >> >> >> >> Perhaps you can help the discussion by explaining the advantages you >> see >> >> in that change? >> > >> > >> > The advantage is to save a few bytes memory and make faster copying. >> >> I don't see how the suggestion saves memory. Currently, we can >> represent a string or slice with a single allocation. Your suggestion >> would require us to use two allocations: one for the bytes, and one >> for the structure pointing to the bytes. In some cases escape >> analysis would eliminate that second allocation, but not in all. >> >> Ian >> >> > Yes, the suggestion needs more allocations in creating new string and > slice values. > But it makes copying string and slice values a little faster and a little > less memory consuming. > > And yes, avoid one more memory allocation is a good reason to reject the suggestion. :)
> > >> >> >> On Fri, 3 Mar 2017, at 11:44 AM, T L wrote: >> >> >> >> >> >> >> >> On Friday, March 3, 2017 at 4:27:02 PM UTC+8, Konstantin Khomoutov >> wrote: >> >> >> >> On Thu, 2 Mar 2017 23:49:52 -0800 (PST) >> >> T L <tapi...@gmail.com> wrote: >> >> >> >> > After all, the len and cap fields of any value of string and slice >> >> > values are immutable. >> >> >> >> Could you elaborate? >> >> >> >> Are you suggesting to replace >> >> >> >> var s []string >> >> >> >> if len(s) ... >> >> if cap(s) ... >> >> >> >> with >> >> >> >> if s.len ... >> >> if s.cap ... >> >> >> >> ? >> >> >> >> If yes, then what would be the prospective benefits? >> >> >> >> >> >> >> >> No, I mean why not define string and slice as >> >> >> >> type string struct { >> >> underlyingString *struct { >> >> data *byte >> >> len int >> >> } >> >> } >> >> >> >> type slice struct { >> >> underlyingSlice *struct { >> >> underlyingElements unsafe.Pointer >> >> len int >> >> cap int >> >> } >> >> } >> >> instead of the current: >> >> >> >> type string struct { >> >> data *byte >> >> len int >> >> } >> >> >> >> type slice struct { >> >> underlyingElements unsafe.Pointer >> >> len int >> >> cap int >> >> } >> >> >> >> >> >> >> >> >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> Groups >> >> "golang-nuts" group. >> >> To unsubscribe from this group and stop receiving emails from it, send >> an >> >> email to golang-nuts...@googlegroups.com. >> >> For more options, visit https://groups.google.com/d/optout. >> >> >> >> >> > -- >> > You received this message because you are subscribed to the Google >> Groups >> > "golang-nuts" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an >> > email to golang-nuts...@googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.