| ▲ | 9rx 3 days ago |
| > Go just isn’t the tool we thought for some jobs Go made it explicitly clear when it was released that it was designed to be a language that felt dynamically-typed, but with performance closer to statically-typed languages, for only the particular niche of developing network servers. Which job that needs to be a network server, where a dynamically-typed language is a appropriate, does Go fall short on? One thing that has changed in the meantime is that many actually dynamically-typed languages have also figured out how to perform more like a statically-typed language. That might prompt you to just use one of those dynamically-typed languages instead, but I'm not sure that gives any reason to see Go as being less than it was before. It still fulfills the expectation of having performance more like a statically-typed language. |
|
| ▲ | dontlaugh 2 days ago | parent | next [-] |
| I don’t know about that, it was called a systems language when it came out. By any common usage of the term, it’s definitely not that. |
| |
| ▲ | 9rx a day ago | parent [-] | | By the common usage of the term, it is most definitely a systems language. Systems are the "opposite" of scripts. Scripts are programs that perform a one-off task and then exit. Systems are programs that run indefinitely to respond to events. We have scripting languages and we have systems languages. While all languages can ultimately be used for both workloads, different feature-sets gear a language towards one or the other. Go is does not exhibit the traits you'd expect of a scripting language. This idea that Go isn't a systems language seems to stem from "Rustacians" living in the same different world which confused sum types with enums, where they somehow dreamed up that systems are low-level programs such as kernels. To be fair, kernels are definitely systems. They run indefinitely too. But a user land server program that runs continuously to serve requests is also a system as the term has been normally used. | | |
| ▲ | dontlaugh a day ago | parent [-] | | Long before Rust or Go existed, “systems languages” were commonly the ones you can write a whole system in to run on hardware, like C, Pascal or C++. I’m not opposed to that definition changing, but it certainly hadn’t when Go came out. I agree that Rust enums should have been called unions, though. | | |
| ▲ | 9rx a day ago | parent [-] | | While that does not match my memory, it works too. An assembly language is part of Go, so it fits among the languages you mention. The only constraint it imposes is your imagination (and what the hardware is capable of). However, it remains that "systems language" was caveated as being for network servers specifically. But no matter how you slice it, I think we can agree that Go isn't a scripting language, so it must be a systems language. Rust does use enums under the hood in order to implement sum types, so the name as it is used within the language is perfectly valid. It's just not clear how that turned into nonsense like Go not having enums (which it does). |
|
|
|
|
| ▲ | sheepscreek 2 days ago | parent | prev | next [-] |
| > Which job that needs to be a network server, where a dynamically-typed language is a appropriate, does Go fall short on? A job where nanosecond routing decisions need to be made. |
| |
| ▲ | 9rx 2 days ago | parent [-] | | Which dynamically-typed language would you select for that? |
|
|
| ▲ | jshen 2 days ago | parent | prev [-] |
| Which dynamically typed languages perform like a statically typed language? |
| |
| ▲ | 9rx 2 days ago | parent [-] | | It says "more like", not "like". Javascript now performs more like a statically-typed language, as one example. That wasn't always the case. It used to be painfully slow — and was so when Go was created. The chasm between them has shrunk dramatically. A fast dynamically-typed language was a novel curiosity when Go was conceived. Which is why Go ended up with a limited type system instead of being truly dynamically-typed. |
|