[ 
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)

Reply via email to