He also said something like his team only used Java.
So, yeah, Go didn't convert his team's big codebase over to Go overnight. That's probably good.
For new code, Go is great.
He also said something like his team only used Java.
So, yeah, Go didn't convert his team's big codebase over to Go overnight. That's probably good.
On Sun, Jun 3, 2012 at 3:41 PM, Brad Fitzpatrick <brad...@golang.org> wrote:He also said something like his team only used Java.
So, yeah, Go didn't convert his team's big codebase over to Go overnight. That's probably good.
And to contrast with that guy's experience, I work on a team with a C++/Java codebase, and we've given serious consideration to rewriting most of our code in Go, because Go's concurrency model would be a true breath of fresh air. To us, Go is solving a very real, very significant problem. We're pushing the languages we currently use to breaking point, where Go would take it all in its stride. The concurrency model in particular is a life-saver for us, but the more subtle benefits of interfaces and a blazingly fast compiler would also be wonderful.
When I wrote "significant", I figured this would be interpreted as "significant in PL theory/research", since that's what I'm always going on about.
And that's exactly how I meant it: I'm sure the Go team wasn't just spinning their wheels -- they had real problems to solve; but if Google isn't innovating in PL theory, who is?
On Jun 4, 7:30 am, ⚛ <0xe2.0x9a.0...@gmail.com> wrote:
>
> What new language feature would you rate as "significant"?
IMO, it isn't about what is included; it's about what is left out.
Scheme, for example, doesn't define OO, yet for many purposes it's
still very useful. I feel like Go included a lot of stuff that didn't
need to be there -- like Java, it contains a lot of higher-level
features that could be implemented in fewer lower-level ones.
For example, what happens if the module system is made first-class?
Does this make it possible to write a library that does hot code
replacement?
I also want to point out that my argument is, to a large extent,
preposterous. I have yet to write a programming language that has
succeeded by any means, so who am I to say Google is wrong? The extent
of my criticism is that I think Go is too boring to be a creation of
the field's greatest minds.
I'm don't see how someone who was at Google for only 6 months would be in a position to judge the success or failure of anything.
On Monday, June 4, 2012 4:19:18 AM UTC+2, Andrew Gerrand wrote:I'm don't see how someone who was at Google for only 6 months would be in a position to judge the success or failure of anything.When Google was 6 months old (in 1996 or 1997), all its employees were in position to judge success or failure - despite the fact that they were at Google for only 6 months.
... in my opinion, it would be better to investigate why the author of http://www.spencertipping.com/posts/2012.0530.why-i-left-google.html thinks that "Go and Dart failed to solve any significant problem", instead of pointing out the length of employment. If the author's supporting arguments are incorrect, the incorrectness of arguments will slowly show off during the discussion.
His latest update to this:"Google has the intellectual firepower to be going where no programmer has gone before, yet languages like Go remain solidly in well-understood and, for the most part, commonly-implemented territory. I have no doubt that this is a good strategic move on Google's part, and that Go solves a number of important problems that Google faces, but I was disappointed that Google hadn't taken a more experimental and research-focused approach."I basically read this as: "Go isn't a nerdy enough language." As a C++ programmer by day I'm not even remotely interested in a language that favours an "experimental" approach rather than a "well-understood" and practical one.IMO it sounds as though he'd be better suited to academia. And for the record I am not a Google employee and have only recently discovered Go, so please don't accuse me of fanboyism.
> Spencer has responded calmly and constructively several times,
In a constructive conversation, by definition, one attempts to
construct something. This isn't achieved by disregarding someone
else's work because "you think it's boring" or because you think it's
a "disaster of academic arrogance".
However it is still not clear to me whether you *really* tried Go.
What languages do you use for your projects?
Many people just flip through the pages and code samples and say "alright I get it" and then either forget about it or start trolling right away. I am personally having a hard time having certain people try Go for real. I might do something wrong or maybe it just depends on the people.
Anyways I wish you could try Go and see how radically different kind of programming it brings compared to the Java-esque languages.
I haven't really used Go yet. The experience I'm referring to is using Clojure, which does a great job with concurrent programming and is perhaps the most fun language I've ever used. At first I had written Clojure off as a compromised (due to reader support for maps and vectors) Lisp, but now that I'm using it on a regular basis I'm really impressed with it. And Clojure is similar to Go in that its value isn't primarily conceptual, but rather from how well it suits its purpose in practice. (Though I should add that Clojure does bring some conceptual innovation to the table as well, at least within the space of Lisps.)Regarding motivating people to use Go, it occurs to me that Google might not be very good at selling languages. I could be overgeneralizing on that point, but as a Javascript developer the Dart synonym page looked fairly uninspiring: http://synonym.dartlang.org/ (and in some cases the page is incomplete or misleading; e.g. "const" in newer versions of Javascript). The reason it's uninspiring to me is that, coming at it from the perspective of Javascript, I see the introduction of a type system (which I'm not really a fan of, being a JS developer), some kind of worrying browser compatibility stuff, and a bunch of other stuff that in many cases can be solved with libraries. I also have to learn a whole new set of semantics and idioms; for instance, suppose I'm interfacing with JS code that gives me undefined ... how do I check for that case? I do get some nice features for it, like string interpolation, but I can get rid of most of the negative adoption costs by going with a thinner abstraction layer like CoffeeScript instead.Another point is that Java has been the status quo for some time; people who enjoy adopting new languages have had lots of time to explore alternatives, and many of those alternatives aren't very Java-like (Ruby, Scala, Clojure, Haskell, etc). So using C/Java-style syntax in the Go language might work against its adoption, since early adopters who are used to non-Java stuff may assume that the syntactic similarity implies a conceptual similarity, or they may just not like C-style syntax. (Both apply in my case, and that's part of the reason it took me so long to see why Go might be useful. The other part is that I was just being closed-minded.)I'm mostly thinking out loud here in response to your point about Go adoption, but I think it's really interesting question. You may have just given me an idea for another blog post.
--
I haven't really used Go yet. The experience I'm referring to is using Clojure, which does a great job with concurrent programming and is perhaps the most fun language I've ever used. At first I had written Clojure off as a compromised (due to reader support for maps and vectors) Lisp, but now that I'm using it on a regular basis I'm really impressed with it. And Clojure is similar to Go in that its value isn't primarily conceptual, but rather from how well it suits its purpose in practice. (Though I should add that Clojure does bring some conceptual innovation to the table as well, at least within the space of Lisps.)Regarding motivating people to use Go, it occurs to me that Google might not be very good at selling languages. I could be overgeneralizing on that point, but as a Javascript developer the Dart synonym page looked fairly uninspiring: http://synonym.dartlang.org/ (and in some cases the page is incomplete or misleading; e.g. "const" in newer versions of Javascript). The reason it's uninspiring to me is that, coming at it from the perspective of Javascript, I see the introduction of a type system (which I'm not really a fan of, being a JS developer), some kind of worrying browser compatibility stuff, and a bunch of other stuff that in many cases can be solved with libraries. I also have to learn a whole new set of semantics and idioms; for instance, suppose I'm interfacing with JS code that gives me undefined ... how do I check for that case? I do get some nice features for it, like string interpolation, but I can get rid of most of the negative adoption costs by going with a thinner abstraction layer like CoffeeScript instead.Another point is that Java has been the status quo for some time; people who enjoy adopting new languages have had lots of time to explore alternatives, and many of those alternatives aren't very Java-like (Ruby, Scala, Clojure, Haskell, etc). So using C/Java-style syntax in the Go language might work against its adoption, since early adopters who are used to non-Java stuff may assume that the syntactic similarity implies a conceptual similarity, or they may just not like C-style syntax. (Both apply in my case, and that's part of the reason it took me so long to see why Go might be useful. The other part is that I was just being closed-minded.)I'm mostly thinking out loud here in response to your point about Go adoption, but I think it's really interesting question. You may have just given me an idea for another blog post.
On Thursday, November 29, 2012 11:25:14 AM UTC-6, Tibor wrote:
--
That's a fair point, but why? (And I'm not trying to be a troll or anything; it's an honest question)
Clojure gives me a number of things that I really like, among which are syntax macros, dynamic typing, immutable data structures and excellent destructuring binds, transparent JVM interop, REPL-oriented development, non-OO multimethods, and a nice hybrid of familiar semantics from Lisp and Java. Now it also comes with some disadvantages, but since I already knew Java and Lisp the adoption cost was very low for me and Clojure is decisively better than either one for what I'm doing.My honest question is, from my point of view (i.e. relative to Clojure) what does Go bring to the table? If I were writing a large application and collaborating with other developers, it would bring API stability (due to types), performance, and a unified way of doing inter-process communication. And if I were coming from Java only, it would be a clear win, since it makes a lot of things easier than they are in Java. But you're already assuming that I'm willing to adopt Go over Java, which would mean I'm a member of the demographic that is willing to learn a new language to solve a problem. Once that's the case, Go isn't competing with Java anymore; it's competing with Java, Ruby, Lisp, Scheme, OCaml, Haskell, Scala, Clojure, F#, D, CoffeeScript, Factor, Erlang, etc. Go has a natural advantage in that because it was developed by Google it probably has a lot of internal consistency and is likely to be well-engineered, but since it's a new language without a well-known killer library (e.g. Rails for Ruby, jQuery for Javascript, Cascalog for Clojure), people could be justifiably hesitant to absorb the cost of learning it.By the way, I'm not saying this to put Go down. I didn't apologize about criticizing it just to go and repeat my mistake :) I really want to better understand where it fits in the space of languages and what its killer use case is. But I also want to be realistic in comparing it to alternatives. If I use Go, I want it to be because it's the shortest path from one of my problems to a good solution.
--
My honest question is, from my point of view (i.e. relative to Clojure) what does Go bring to the table?
Go isn't competing with Java anymore; it's competing with Java, Ruby, Lisp, Scheme, OCaml, Haskell, Scala, Clojure, F#, D, CoffeeScript, Factor, Erlang, etc.
since it's a new language without a well-known killer library (e.g. Rails for Ruby, jQuery for Javascript, Cascalog for Clojure), people could be justifiably hesitant to absorb the cost of learning it.
El sábado, 1 de diciembre de 2012 17:11:17 UTC, spencer...@gmail.com escribióMy honest question is, from my point of view (i.e. relative to Clojure) what does Go bring to the table?The code that I write is compiled and it works in main architectures and operating systems with a balance between speed and usage of memory, and the addition of easy handling of concurrency.Go isn't competing with Java anymore; it's competing with Java, Ruby, Lisp, Scheme, OCaml, Haskell, Scala, Clojure, F#, D, CoffeeScript, Factor, Erlang, etc.Go has very few competitors:
+ Against dynamic languages, mainly, Go performs in memory and ease of debugging (static typing is a great help)
+ Against functional languages, Go has a clear sintaxis
+ Against Java, Go performs and memory, speed of execution, and lower vervosity.
+ Against JavaScript, performs in memory, in addition of be well designed. There are many problems known in the design of JS like the usage of floats to handle all numbers.
--
--
> For the applications areas where C (or C++) would have been the best choice, Go changes nothing. I have a few firmware projects for embedded microprocessors - they are going to remain in C.Almost all applications that are written in C and available in e.g. the Debian package repositories could have been written in Go with good results. There is a very large number of C and C++ programs that don't run on embedded devices, need manual memory managemenet, etc.
I agree, but those programs had a wide range of possible languages to begin with. And, as I said, they probably should not have been written in C in the first place. For those applications that really need to be in C, for those applications where C really is the best choice, Go is not a feasible alternative. That is why I believe that saying Go is a better C is misleading.
--
The arguments that Go is not suitable for such things would, if correct, also prove that Lisp is not. But Lisp has quite productively been used for such things. Only two possibilities could account for this. First, it could be that there's a hidden premise for the argument, which explains the unsuitability of Go for these cases where Lisp works fine. Or, it could be that the argument isn't valid for either.
But when the argument is so disconnected from facts as this, I suspect a third possibility. The speaker may simply know so little about, for example garbage collection, that they can't detect true from false. This is especially true when they repeat things which were disproven decades ago.
Thomas
--
Given that Go has a well known memory problem on 32-bit systems, it would be interesting to see how it handles my 16-bit MCUs. Still, if you can provide a tool chain for dsPICs, please let me know.
--
--
The Go runtime is pretty small.Frankly, I think that the idea that languages are suited to particular tasks to be itself quite incorrect. It's a natural way of thinking ("different tools are good for different things"), but it's generally lazy thinking, and it isn't even a good principle. We would never accept the idea that different typewriters are suited for writing different kinds of fiction.
--
Rui Maciel
--
Rui Maciel
--
> Systems programming is essentially the only place (hyperbole!) C is used nowadaysThis statement is false. You criticize me for not providing any evidence; show me yours.
A quick test just showed me that a simple hello world using println was over 200kB on Linux. That is pretty lightweight for a desktop, but still way too much for most embedded systems.
I find the idea that all languages are equally suited for all tasks lazy thinking. You've created a false analogy. You might as well say, all types of hammers are equally suited for driving nails - something that is plainly false.
You're still talking about one implementation, not the language, afaict.
Can you say exactly what about Go (the language, not one implementation or one set of standard libraries) makes it unsuitable for embedded systems? Be sure to distinguish from other languages used in such systems that share the same features.
--
--
That's a nice example. Scheme avoids this by having very light numeric requirements, but go's type system doesn't really allow for that.
But...
Suppose you use int16 and byte for your own variables. The compiler is not required to use 32 bits to hold the return value of len if it has enough information to avoid it. So then it's annoying to use because you have to cast everything to smaller types all the time.
But now notice that nothing actually requires 4 bytes to hold an int. As long as the arithmetic does the right thing, it can use a smaller cell. So I think a clever compiler could make it convenient. But I agree that it's a stretch.
--
Can you say exactly what about Go (the language, not one implementation or one set of standard libraries) makes it unsuitable for embedded systems? Be sure to distinguish from other languages used in such systems that share the same features.
Go is an excellent language, but positioning matters. On my first approach at using Go, I walked away in disgust because it was such an inappropriate choice for my projects written using C. I've since come back Go, and it has been an excellent choice for some other projects. But, for my two cents, if someone finds Go killer for applications that they were writing in C, they probably should not have been using C in the first place.