11 ms·
Golang is the new JavaScript: everything that can be rewritten with it will be :)
by xiaq 11y ago
Golang is the new JavaScript: everything that can be rewritten with it will be :)
- thebouv 11y agoNot sure I see that as a bad thing. When learning a new language for a real problem, I'll go back to things I've written before and rewrite them in the new language. The core logic is already figured out, so the exercise helps me match up constructs and try to apply the new language idiomatically. Then I can go back to my original problem with more ideas about how to use the new language effectively. Plus, it's fun.
- donatj 11y agoGo's lexical scoping and first class function/method's owe a lot to JS for leading the way IMHO. That said, it's "object" system is almost the complete reverse. JS is methods with data, Go is data with methods. It's an interesting contrast.
- xdc55 11y agoJavascript leading the way? What are you talking about? First class functions is a concept from mathematics and many programming languages had this feature way before javascript existed, and I simply don't understand exactly what concept of Go's lexical scoping resembles anything exclusive of javascript. I don't understand the last paragraphs about methods with data and data with methods, but Go's structs resembles C's structs, binding methods to a struct is an thing I've only seen in Go, but maybe some other programming language had this before.
- jerf 11y agoIIRC, the only difference in C++ between a struct and a class is the default visibility, and maybe some other bizarre quirky corner case or two. Despite it technically not being in the Go lingo (the word "object" only appears once in the entire Go spec, and that's referring to composing arrays/slices together to get multi-dimensional arrays/slices), I generally don't kick myself too hard for referring to things in Go as "objects". They are. Sure, officially they're "structs with methods" (method is the official term), but given the diversity of other things the term "object" is applied to that's plenty close enough for me.
- danieldk 11y agoGo's structs resembles C's structs, binding methods to a struct is an thing I've only seen in Go, but maybe some other programming language had this before. Oberon, probably others: http://www.excelsior-usa.com/doc/xds/o2rep.html http://www.excelsior-usa.com/doc/xds/o2rep.html
- hellofunk 11y agoFirst class functions and lexical scoping have been actively used in programming languages since 4 decades prior to the invention of JS.
- woah 11y agoMysteriously they gained popularity at the same time that JS did.
- hellofunk 11y agoThat is certainly not true, and therefore, not mysterious. In fact this website, ycombinator, is the result of a nice pay day that Paul Graham enjoyed for selling web service he built in the 1990s using functional programming techniques... and it was not JS.
- jerf 11y agoRemember that Javascript was literally bashed together in just over a week. That's not a slur, that's a description of reality. Javascript is a minor miracle on its own, but even in that minor miracle, Brendon Eich did not have time to also prototype something brand new. Everything in Javascript was decades old when it was created. The prototype system was probably the craziest thing that went in, but even that was old, if not popular.
- pcwalton 11y ago> Go's lexical scoping and first class function/method's owe a lot to JS for leading the way IMHO. I don't think this comment deserves the downvotes. JS deserves a lot of credit for doing scoping right in 1995, at a time when most popular languages (i.e. not Lisp or ML) were doing it wrong. (A notable exception was Perl 5, which did scoping right in 1994.) Thanks to JS, a lot of working programmers who would never be exposed to Lisp learned lexical scope. Remember that Emacs Lisp famously chose dynamic scope over lexical scope (a serious blunder) due to RMS's belief that lexical scope couldn't possibly be implemented in a performant way!
- muflax 11y agoWhat languages without lexical scope are you thinking of? Aside from literally only (pre-Common and Emacs) Lisp, I can't think of any language without lexical scope (outside some constructs etc). [edit:] Or are you thinking of "only a single global namespace"? Even that exists only in otherwise highly restricted scripting languages, I think? ("Everything global" is technically lexical, but I see why you wouldn't want to call it that.)
- pcwalton 11y agoTcl, PHP, any language without closures.
- muflax 11y agoHow does PHP have dynamic scope? It's been ages since I touched it, but if I remember right... Global is just a flat namespace. Functions have their own, separate flat namespace each. I tried the following in a REPL: function two() { echo $a; } function one() { $a = 1; two(); } one(); as the standard dynamic scope example, and I get an "undefined variable" error. Did that use to be dynamic? (I wouldn't be surprised, though, especially given PHP's implementation history...) There is an explicit "static" modifier that looks dynamic, but I couldn't get it to run that way. It seems to just retain state in recursive calls of the same function, or something? [edit:] (And PHP doesn't predate Javascript, but regardless, "no first-class functions" isn't "no lexical scope".)
- ninjakeyboard 11y ago>> first class function/method's owe a lot to JS for leading the way Javascript's lambdas were inspired by Scheme which has been around since the 70s. "Remember, I was recruited to 'do Scheme', which felt like bait and switch in light of the Java deal brewing by the time I joined Netscape. My interest in languages such as Self informed a subversive agenda re: the dumbed down mission to make 'Java's kid brother', to have objects without classes. Likewise with first-class functions, which were inspired by Scheme but quite different in JS, especially JS 1.0." - Eich (on HN)
- insertnickname 11y agoThis happens with every language, it's not particular to Go or JavaScript.
- melling 11y agoYes, it's a sign of maturity to many developers, many of whom won't touch a language until there are hundreds of libraries, etc for everything. Marco Arment was ranting on his podcast that's it's better to use PHP over Go, for example, because there's so much more support. https://www.relay.fm/radar/14 https://www.relay.fm/radar/14
- JBReefer 11y agoA language isn't useful, to me, unless there's an Excel format reader/writer and a popular web framework with SO answers. Novel is not useful when you work in Enterprise software.
- brudgers 11y agoGolang is the new Java. Google designed it for legions of corporate systems coders. It is ultimately destined to be seen as the enterprise language that it is [twenty years ago all the cool kids loved Java]. Google policy is no map function for you, it's just more palatable to bake it into the language than an HR document...it's still pure policy steeped in pointy haired logic. Don't get me wrong, it's better than it could be: at least it doesn't have something equivalent to UML diagrams. But it's still a corporate policy. It just feels refreshing because...wait for it...it brings garbage collection to C++ programmers. And where have we heard that before?
- xiaq 11y agoGolang is no more a Google language than Unix is an AT&T OS. And why are "corporate languages" necessarily bad?
- brudgers 11y agoOn the one hand, I was responding to the Atwood's law reference. On the other hand, I have become interested in the way corporations use open-source as a strategy and implement that strategy tactically via sort of "basic fighter maneuvers" energy management discipline. [1] Incipient potential competitors who adopt Go draw a dependency on Google because for all practical purposes, Google will determine the direction of Go: it's core team works there. And incipient potential competitors have radically different needs. We can differ in opinion upon whether Unix was seen an ATT operating system. For me the legal and licensing histories suggests that it was in a strong sense and the "Open" and "Free" and "Li___" are the heritage. YMMV. [1]: https://en.wikipedia.org/wiki/Basic_fighter_maneuvers https://en.wikipedia.org/wiki/Basic_fighter_maneuvers
- EvanPlaice 11y agoGo is an incremental improvement over the C++ ecosystem without all the legacy baggage. By controling the platform, Google can leverage the ecosystem to attract and cherry-pick early adopters to the language. Once the language becomes populat enough that the Enterprise starts to adopt it, Google will already be onto their next 'ground breaking' technology. Once people settle on a perception they tend to hold on to it for life. One day soon people won't want to use Java. It'll be seen as "our Dad's language". Steve Yegge (ie now a Googler) said as much during his OSCON 2007 talk. The value isn't in the language/platform, it's the people who adopt/build/use it. Microsoft knows this, developers are what kept them afloat during a decade of stagnation in product development. Oracle thought they could buy their way in by acquiring Sun; except, while they were busy suing Google, Amazon sprinted ahead of the pack with their cloud services platform. This is how the biggest players make long-term investments. Guarantee an abundant stream of top tier talent and success will follow.
- masklinn 11y agoThat kinda sorta makes sense given the feeling that "cgo is not go" (http://dave.cheney.net/2016/01/18/cgo-is-not-go http://dave.cheney.net/2016/01/18/cgo-is-not-go). Without cgo no FFI, without FFI you have to reimplement whatever you need in the host language.