Could we perhaps get a code snippet example that non java programmers can
follow.

PS

When I previously referred to java programmers as real software developers,
I didn't add some much needed context.

Sometimes in this java dominated world I personally don't feel like a real
software developer.

On Wed, 31 Jan 2018, 21:44 liujisi via golang-nuts, <
golang-nuts@googlegroups.com> wrote:

>
>
> On Wednesday, January 31, 2018 at 11:20:31 AM UTC-8, Walter Schulze wrote:
>
>> Hi JT please see my inline replies.
>>
>> On Wed, 31 Jan 2018 at 19:05 <thebroke...@gmail.com> wrote:
>>
>>> Thank you, Walter, for your support.
>>>
>>> > gogo/protobuf is disappointed that golang/protobuf still thinks that
>>> runtime reflection is an efficient way of serializing structures.
>>>
>>> The table-driven implementation avoids reflect in the fast and common
>>> path. Instead, are you referring to the fact that we don't perform
>>> full-code generation of Marshal/Unmarshal like what gogo/protobuf does? We
>>> are aware that full-code generation will often out-perform the table-driven
>>> approach we took. However, full code-generation drastically bloats the
>>> binary size when you have many proto messages linked in. Keeping the binary
>>> size smaller was an important design decision for us and seemed to be a
>>> better default.
>>>
>>
>> Yes, I was referring to the speed of code generation over runtime
>> reflection.
>> What I struggle to understand is why the optimize_for file option that is
>> part of proto 2 and 3 is not considered by golang/protobuf as a way to
>> specify when code generation should be used over runtime reflection.
>> This seems to work for most other languages, including Java, which I
>> heard is quite popular among real software developers.
>>
>
> Note that the code-generation approach used by other languages (mostly
> C++/Java) has its own problem. Mostly because of the tight coupling among
> generated code, runtime and embedded sub messages (generated by a different
> party using a different version of protoc). These problem don't exist
> inside of google as we use a single repo build system, but it cause
> significant issues in opensource. For instance, Hadoop is still shipping
> protobuf v2.5 generated code which is incompatible with later version of
> protobufs. All the projects using Hadoop are then version locked to v2.5,
> as an upgrade in any project (including Hadoop itself) will break the
> build. Version upgrade can only happen when all the transitive dependency
> closure upgrade together atomically.
>
> We solve this problem in protobuf-java v3.0+ by introducing ABI
> backward/forward compatibility guarantees on generated code and runtime.
> However, this introduced lots of overhead on code maintenance, reduced
> development velocity and limited the change we could do.  We are now
> solving the issue by introduce table driven to Java. The recent benchmark
> result showed performance on par for android platforms, and hopefully we
> can release the new implementation in a few months.
>
> For Go, if we are going to introduce full generated code, I'd strongly
> recommend considering those complications. Major version bump is also
> expensive for protobufs as all the dependency libraries would have to bump
> their major version too.
>
>
>>
>>
>>>
>>> We are open to considering an option that allows user to specify
>>> full-code generation for select messages.
>>>
>>
>> This is exactly what gogo/protobuf allows users to do.
>> Using protobuf extensions gogo/protobuf allows the user to specify per
>> message or file whether they want to generate marshalers, unmarshalers, etc.
>> A user can also create a vanity binary to generate these methods if you
>> do not wish to use extensions and want to enforce a specific style across
>> and organization.
>>
>>
>>>
>>> > gogo/protobuf is still open to being merged back into golang/protobuf
>>> and has been since its inception 5 years ago.
>>>
>>> That is good to hear. I have not yet gone through all of gogo/protobuf
>>> to determine what it would to merge, or what should be merged. This will be
>>> future work.
>>>
>>
>> gogo/protobuf is also be open to only being partly merged.
>>
>> One other major advantage of gogo/protobuf is generating the structures
>> you want to use, by allowing you to modify the generated structure using
>> protobuf extensions like customtype.
>> This way you can avoid copying between the protobuf generated structure
>> and a user defined go structure that you actually want to use.
>> This is a huge speed and safety gain and probably the most important
>> feature of gogo/protobuf.
>> proto3 has addressed the biggest concern by allowing the generation of
>> fields without pointers, but there are other cases as well, including
>> casttype, customname for generating more lintable code and even not
>> generating the structure at all, for ultimate customization.
>> I would hope that merging some of these ideas will also be on the table.
>>
>> Looking forward to working together for a change
>> Please let me know how I can help
>>
>> Skeptically hopeful about a new era for protobufs in Go
>> Walter Schulze
>>
>>
>
>>> JT
>>>
>>> On Wednesday, January 31, 2018 at 7:13:38 AM UTC-8, Walter Schulze wrote:
>>>>
>>>> gogo/protobuf is happy to be acknowledged by Google as an entity in the
>>>> golang protobuf space.
>>>> gogo/protobuf welcomes golang/protobuf to the community and is
>>>> extremely happy to see this kind of transparency.
>>>>
>>>> gogo/protobuf will also merge these changes and as usual try to stay as
>>>> close as possible to golang/protobuf,
>>>> including also following the same version tagging.
>>>>
>>>> gogo/protobuf is disappointed that golang/protobuf still thinks that
>>>> runtime reflection is an efficient way of serializing structures.
>>>>
>>>> go Green go GoGoProtobuf
>>>>
>>>> PS
>>>>
>>>> gogo/protobuf is still open to being merged back into golang/protobuf
>>>> and has been since its inception 5 years ago.
>>>> gogo/protobuf feels for its users, especially those that are not
>>>> acknowledged by grpc-gateway and grpc-go,
>>>> and forced to employ work arounds, to preserve their missions of safety
>>>> and efficiency.
>>>> It knows that its existence is not something that anyone prefers, and
>>>> it welcomes death,
>>>> but only if it can preserve its legacy of fast serailization and
>>>> generating the structures you want to use.
>>>>
>>>>
>>>> On Tuesday, 30 January 2018 23:44:37 UTC+1, joe...@google.com wrote:
>>>>>
>>>>> Done. I tagged v1.0.0. When we perform the merge in the future, it
>>>>> will be tagged as v1.1.0.
>>>>>
>>>>> On Tuesday, January 30, 2018 at 9:37:23 AM UTC-8, Alexey Palazhchenko
>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Can you please add tags to the repository before that? SemVer or even
>>>>>> tags with _any_ semantic would greatly help to rollback to the latest
>>>>>> working version when things break.
>>>>>>
>>>>>> –-–
>>>>>> Alexey «AlekSi» Palazhchenko
>>>>>>
>>>>>> --
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "golang-nuts" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/golang-nuts/F5xFHTfwRnY/unsubscribe.
>>>
>> To unsubscribe from this group and all its topics, 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 a topic in the
> Google Groups "golang-nuts" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/golang-nuts/F5xFHTfwRnY/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> golang-nuts+unsubscr...@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.

Reply via email to