Re:Go as an alternative to Node.js for Very Fast Servers
by crypto5 on Friday February 22, 2013 @03:07PM
(#5266441)
But go ecosystem still doesn't have anything even close to refactoring abilities of Java/C# IDEs. Say, move Java class which is in use in 100s places from one package to another is just few mouse clicks in Eclipse and a lot of pain in case of Go.
Re:Go as an alternative to Node.js for Very Fast Servers
by 4ad on Friday February 22, 2013 @03:21PM
(#5266527)
Not really. Go comes with code rewriting tools, unsurprisingly since they were used to update the standard library and 3rd party code when the language changed before Go 1.
I don't want to use a language that doesn't come with a parser in the standard library anymore.
Re:Go as an alternative to Node.js for Very Fast Servers
by crypto5 on Friday February 22, 2013 @03:27PM
(#5266561)
So, is it possible to move/rename class/method/field smoothly using those tools? Extract code block to new method?
Re:Go as an alternative to Node.js for Very Fast Servers
by zemo on Friday February 22, 2013 @04:57PM
(#5267150)
the gofmt tool has a replacement feature:
`gofmt -r 'InitialName -> FinalName'`
Re:Go as an alternative to Node.js for Very Fast Servers
by crypto5 on Friday February 22, 2013 @06:09PM
(#5267540)
Documentation looks quite incomplete(http://golang.org/cmd/gofmt/). Will it change all imports and usages of class/method/field? Will it resolve all signature polymorphic calls?
Secondarily, gofmt makes code very standardized and easy to skim. It takes Python's 'only one (obvious) way to do it' one or two steps further, by forcing everyone to to write their code the same way. This makes refactoring a lot easier because you don't need to read as much code each time in order to understand what's going on (or at least, you can mentally parse it much faster).
Finally, the context-free grammar combined with a strong, static type system means that migrating code from an old (incompatible) version of Go to the most recent one can be done painlessly with the 'go fix' tool. This isn't your py2to3 tool - this accepts valid (old) Go code as input and reliably produces valid (up-to-date) Go code as the output.
That last bit isn't actually used in refactoring manually, but I make note of it because very few languages give you anything close to this level of reliability with code modification, which speaks volumes about the design of the language's grammar.