[
https://issues.apache.org/jira/browse/THRIFT-3170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14566088#comment-14566088
]
Paul Magrath commented on THRIFT-3170:
--------------------------------------
Hi Adam
I'll have to disagree with you regarding having the flag turning on the
initialism substitution rather than turning it off:- I think the default
behaviour should be our best effort at producing best quality Go code.
Regarding 'id' in Thrift becoming 'Id' rather than 'ID' in Go, I agree this is
a bug, I've opened a separate issue to track it
(https://issues.apache.org/jira/browse/THRIFT-3174) and have prepared a patch.
Regarding 'my_ID' in Thrift becoming 'My_ID' rather than 'MyID', I think this
is more complicated. Arguably, 'my_ID' is mixing two naming schemes, the
convention in underscore naming schemes would be to call this 'my_id'. Handling
it isn't worth the additional complexity IMHO.
Regarding the initialism test cases:- we have a separate file with the tests
for these, what additional ones are you thinking would be good?
> Initialism code in the Go compiler causes chaos
> -----------------------------------------------
>
> Key: THRIFT-3170
> URL: https://issues.apache.org/jira/browse/THRIFT-3170
> Project: Thrift
> Issue Type: Bug
> Components: Go - Compiler
> Affects Versions: 0.9.2
> Environment: Go/C++/Java
> Reporter: Adam Beberg
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> The code introduced in THRIFT-3027 (now closed) created issues.
> 1. It's inconsistent. Compare thrift name and Go names:
> {code}
> type Foo struct {
> Id int32 `thrift:"id,1" json:"id"`
> MyID int32 `thrift:"my_id,2" json:"my_id"`
> NumCPU int32 `thrift:"num_cpu,3" json:"num_cpu"`
> NumGpu int32 `thrift:"num_gpu,4" json:"num_gpu"`
> My_ID int32 `thrift:"my_ID,5" json:"my_ID"`
> }
> {code}
> CPU vs Gpu, Id vs ID, ...
> 2. It's one-way. This is a serious problem. Go code dealing with databases
> and other things assumes convertibility between snake_case and CamelCase in
> both directions for things like SQL column names. This breaks that.
> 3. Generated code is explicitly NOT subject to this in the Go initialism
> guideline, for good reasons.
> "Code generated by the protocol buffer compiler is exempt from this rule.
> Human-written code is held to a higher standard than machine-written code."
> 4. Working across Go/C++/Java, these inconsistencies are really messing with
> engineers that aren't as familiar with Thrift internals, which will
> inevitably lead to mistakes, so it's a usability issue.
> My recommendation: Strongly suggest removing the initialism rewriting code,
> those wanting initials in caps can still specify them in the thrift
> definitions without any problems in Go (but then Java has problems). If not
> make it a command line option usable by those working only in Go without
> other dependencies, but that still leaves problems 1 & 3.
> I can quickly prepare a patch to remove or flag-ify, but would like
> discussion.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)