5 ms·
> As someone who is interested in systems programming, and has experience working with Go I wonder how Go got it's reputation as a systems language. Imo, it oc
by torginus 4y ago
> As someone who is interested in systems programming, and has experience working with Go
I wonder how Go got it's reputation as a systems language. Imo, it occupies the same abstraction level as Java or C#.
- noisy_boy 4y agoMaybe Go compiling to native binary with excellent performance and being somewhat "simple" (say, compared to Java 8 streams conveniences etc), has given rise to that impression. Though I wasn't under that impression myself (I think Go having a GC compared to usually more manual memory management by systems languages is a pretty significant difference).
- copx 4y agoAFAIK Go was and is primarily used to write back-end server software and this is commonly called "systems programming" (as opposed to application programming) too. It is kinda confusing that the term is used for that and for low-level embedded/firmware/kernel programming, despite both areas having little in common with each other.
- doliveira 4y ago> and this is commonly called "systems programming" Is it, though? My impression it only started with Go calling it that way
- undecidabot 4y agoSystem programming languages also used to refer to non-scripting languages. See this paper by John Ousterhout (creator of Tcl) written in 1997: https://users.ece.utexas.edu/~adnan/top/ousterhout-scripting.pdf https://users.ece.utexas.edu/~adnan/top/ousterhout-scripting...
- ObscureScience 4y agoI don't think so. I think it's just the way Rob et al. used the term from their previous experience. It's not meant to mean operating systems language, nor embedded systems language. Rather for writing parts of a systems, such as servers. I would say that the definition is not that far away for Java or C#, but the expectation is simply that it would be "lower level" components of a system, including unix like utilities.
- wizofaus 4y agoNot unreasonable to argue that something like Docker or k8s is more "system software" than an application.
- agumonkey 4y agoI always interpreted go "system" as networked async systems and not electronic chip systems.
- rgoulter 4y agoI think this makes sense considering that most of the cloud-native software is written with Go. (Docker / Podman, Kubernetes, Helm, Istio, Terraform, etc.)
- agumonkey 4y agoI don't know if I'm crazy but it matches the definition of a system. Coupling different parts together. These are just high level systems, and unsurprisingly when people see 'system programming language' they want to see high level assembly like C; but it's misplaced reflex in this case.
- hsn915 4y agoWhen Go was first announced ~2009, Rob Pike explicitly framed it as a systems language https://www.youtube.com/watch?v=rKnDgT73v8s https://www.youtube.com/watch?v=rKnDgT73v8s I would not say it's the same as Java or C#. The crucial difference is that it compiles to a native executable binary file, not something that needs a virtual machine.
- deleted 4y ago[deleted]
- bhedgeoser 4y agoC programs are executed inside the C virtual machine.
- wizofaus 4y agoCan't tell if serious...
- never_inline 4y agoEither a reference to Abstract Machine from the standards, or something suggesting the processor is a C virtual machine.
- PopGreene 4y agoInteresting article: "C Is Not a Low-level Language" (https://queue.acm.org/detail.cfm?id=3212479 https://queue.acm.org/detail.cfm?id=3212479)
- never_inline 4y agoI have read that. While I feel that article is being too harsh on C, it would be interesting to have cache intrinsics just like we have SIMD intrinsics. I would imagine that would be more complex to implement, however.
- 4y ago
- Shorel 4y agoI agree with the others. Go is its own abstraction level. Not powerful enough to be compared to Java. Probably closer to Node.js, that's to say, it is like JavaScript in the server. Judging by the developers who use it. Except it is compiled.
- pjmlp 4y agoBecause languages like Oberon exist, used to write graphical workstations operating systems, and Go has the same set of features as Oberon. Unless one doesn't consider writing compilers, linkers, GPU debuggers, container management, syscall emulators, unikernels systems programming.
- coldtea 4y ago>Unless one doesn't consider writing compilers, linkers, GPU debuggers, container management, syscall emulators, unikernels [to be] systems programming. Since you can write the above with any language, perhaps even Python or Lua if you wanted to, it's not exactly the ability to write the above or the fact of having written the above in a language, that makes a language to be considered a "systems programming language". In some way, what is called a systems languge it's not a technical capacity thing ("can do X, Y and Z, so it's a systems language"). It's a term applied deliberately, that also includes other aspects.
- pjmlp 4y agoSure one can play word games all day long if that is your point.
- coldtea 4y agoCivilization is all about word games, is my larger point, and those games are important business and what drive characterization - they're not something incosequential that we can "set aside and get to the real work". Doubly so if what we're concerned about is labelling itself, like "what is and what isn't considered a systems language". Then we're in the word domain, not in the measurement domain.
- pjmlp 4y agoActions matter more than words, and in that field Go has already proven itself, regardless of what the priests of the holy church of system programming might preach at the pulpit. In fact their holy C can only be used for the daily activities, when going outside the ISO C Bible, tainting itself with unholy compiler extensions.
- kevinmgranger 4y agoI think the definition of "systems" changed over time. It used to mean building the foundations of operating systems, e.g. kernel and basic userland utilities. Now it means building higher-level userland tools and internet oriented tools. I think the implicit consensus is the lower level stuff is a "solved problem".
- randomdata 4y agoThe simple answer is that it was announced as one. The more complicated answer is that, traditionally, systems programming languages were those which are not scripting or assembler languages. If you listen to Pike for more than a few seconds you'll soon notice that he's a bit of a language purist, so whatever modern interpretation you might have for a term is unlikely to match what he is communicating. More specifically, it was announced as a systems programming language designed for things like web servers and systems of that nature, with more control than Java in some areas. Even with conflicting definitions of systems, there should have been no illusions about it being designed to be in roughly the same space as Java with that context. It was very much suggested from the onset that it was meant to compete with Java. But, ultimately the game of telephone truncated the context that would have helped with finding the right definition of systems and, I expect exacerbate things, there was Rust coming onto the scene juicing the situation with its fans often claiming that "Go isn't a systems language, Rust is!" leaving some revisionism about people believing that Go was a systems language (in the modern sense).