Also Rob Pike. If there's a guy with the king midas touch of shit, it's Pike.
Also Rob Pike. If there's a guy with the king midas touch of shit, it's Pike.
Such personal attacks are a bannable offense on Hacker News. Please don't ever post anything like this again.
Generic programming language flamewar comments are a kind of trolling and also not wanted here.
1) Reasonably fast (better than Node at CPU bound tasks, faster than Ruby/Python) 2) Statically compiled 3) Great tooling (except package management, but it's getting better)
If you want a reasonably fast statically compiled language, what would you use?
Java? Lots of JEE/App server issues to consider TypeScript? I'm a fan, but it's compile time type checking and not runtime type checking. TypeClojure? Too obscure.
> Java? Lots of JEE/App server issues to consider
Why? Why not just package as an assembly, scp it up to a server, fire up Netty in a main-class and call it a day (this is basically all Play Framework does)?
It's going to be faster/simpler in every way than any Ruby/Nginx stack you can imagine. No need to fight with matching cores to processes per deployment, no unnecessary proxies or additional services to watch/manage.
Sure you can go crazy. Or maybe even need to for some use case, but even in that scenario you can bet your business on the fact that it'll still be a far simpler solution than the comparable dynamic stack.
Not that I'm advocating Java exactly. I just feel like if deployment/server-issues are an issue, compared to a dynamic stack with similar throughput, then you've done something horribly horribly nightmarishly wrong. ;-)
Certainly, there are other simple ways to use the Java stack with things like Play. DropWizard, etc.
But there is certainly a lot more complexity around tooling and deployments and such in the Java ecosystem than either Go or Node.js (although I can't say I'm a Java expert, so it could just be I'm just wrong).
This is a full HelloWorld web-server in Spray: http://scastie.org/14680
Play can get you to Hello World even easier:
$ brew install typesafe-activator
$ activator new my-first-app play-scala
$ activator run
That's going from an off-the-shelf Mac with only homebrew installed to running your first Play app. To deploy it just run the `dist` task instead, and copy the generated .zip file to a server. Unzip it and run `./bin/my-first-app`. The only dependency you have on that system is Java.Stick a load-balancer in front and you're good to go.
It's light-years beyond anything I've ever experienced on any other platform on the *nix side of things. Especially since it's also so much faster than any other platform I've worked with (decade old c# doesn't count).
I'd go for rust.
- Algebraic datatypes and pattern matching: extremely nice for compiler work where you need to manipulate symbol data.
- Result + try! macro: a bit more verbose than a language that can let an exception bubble up, but definitely nicer than the boiler-plate that people in Go must use.
- Module system: easy to expose only what you want.
- Cargo: one of the best, maybe the best, language package manager that I've used. Super easy to add dependencies to your project.
I will say this however: I'm moving more slowly than I would in a language like OCaml. I still haven't assimilated all of the borrow checker rules in my programming sub-conciousness, so I still make errors and it can take a little while to figure out what's happening and how best to address the problem.
* C/C++ like familiar syntax. * as fast as C++ (faster in some, slower in others) * type inference (auto keyword) * Garbage collected language by default. * Multiple compiler implementation (DMD, GDC, LDC) * Debugging symbol support * Package management with versioning and pkg repo * IDE/Editor support - Visual studio/xamarin/emacs * Very easy C FFI * compile type function evaluation * meta programming * The concurrency story is more "mainstream" than Go's (no "goroutine" and other fancy stuff). * Multiple new books on the topic
D has a lot going for it, except for breathless fans :) (not knocking breathless fans here. D can use some)
Anything that is C ABI compatible. I'm sympathetic to Go's philosphy, but Go is not that.
In general, I'd be on the lookout for Swift on the server in the next few years. It has the backing of Apple, is compiled, and the possibility of removing yet-another-language from your stack. Since many shops want or need an iOS frontend, running Swift on the server makes sense.
Nim. More similar to Go than most languages are to each other, but Nim has (a) more modern features, (b) better compatibility/integration with C libraries, and (c) an amazing macro system. The only thing in Go's favor is the size of its community/ecosystem, which seems to be an accident of timing and most definitely not about inherent quality.
This alone makes Go really unfit for developing system libraries.
If I want something compiled, the killer for Go for me has always been C ABI incompatibility. It's its own island. I'm not saying I wouldn't consider using Go for some things, but that has been a big redflag vs other choices.
"The only thing in Go's favor ..."
The selectivity of a true ideologue.
I've defended Go against detractors who say it's worthless because it has mandatory GC or doesn't have generics (which I do consider a weakness but not a fatal one). There's nothing particularly wrong with Go, but there's not all that much special about it either and it does have flaws. Can you name some other feature that (a) distinguishes Go from Every Other Language and (b) matters? Something that might sway a CEO, as we were discussing? "Goroutines" perhaps? Riiight. That CEO will be really impressed. Don't project your bias onto others.
I feel that open source developers mean something entirely different with the phrase "great tooling" than developers used to Visual Studio would mean. :)
Why should we even bother with Go, if we have C#, F#, JIT, AOT compilation to dynamic binaries (NGEN), AOT compilation to static binaries (.NET Native), NuGET already available?
And yes, I do know Go and even tried some early contributions before the 1.0 release.
For me it is only a step forward for C developers.
Still a very important one, as we need more widespread use of safer compiled languages.
Ignoring your broadside of insults, I keep asking myself the same thing after working with it: What is so compelling about Go? It's better than C, but we already have good choices in that area. I feel like there's a bandwagon effect around the language.
But if you weren't using Python or Ruby for your web development, YMMV.
I am surprised that people want to use Go for web apps though.
For whatever reason, Dart seems unpopular with the HN crowd, which is shame because it is a super productive language. It has a fast VM, great tooling, a sane package management system, and a lot of deployment options. Server side libraries are still lacking, but the situation is improving.
This. I'd put it under consideration for where I'd pick Java (an increasingly limited space now for myself), but I really do not think it competes directly with Python/Ruby or C-ABI compatible compiled languages like Rust. It's on an island like Java. As a result, you're going all-in with Go, but netting a much smaller ecosystem than Java's. I prefer to not go all-in with either.
If I were to reach for Go for webapps, I'd be just as if not more inclined to look at Swift as it matures.
I don't like Go type system, but it handles concurrency quite nicely. It's fairly easy to learn and to use so I can see why managers chose it. And it's backed by Google so it can give a sense of safety and it can be used as an argument to sell the language. So it's a bit unfair to say it's unnecessary. It can help when performance is a concern and one doesn't want to go down to C or C++ for some reasons.
> but it handles concurrency quite nicely
So does Erlang/Elixir, Haskell, Clojure.
> And it's backed by Google so it can give a sense of safety
How is Dart doing in this department?
It has not replaced Javascript (that was never going to happen) but it has seen a slow but steady growth in adoption.
There are some amazing things happening with Dart on mobile (flutter.io), Dart on embedded (fletch), and improved JS interop with things like the Dart Dev Compiler (DDC).
Angular 2 is still in Beta, but has first class support for Dart.
Perhaps it did not live up to it's initial hype - but Dart is a pretty "safe" bet
aside: Your history is riddled with inflammatory comments... I like outside-the-box discussion. I gave you an upvote and I really like Python.