If the whole OS stack can be implemented in the language, ignoring the Assembly help that even C requires, it is a systems language regardless if it has a GC for heap management or not.
It is also a descendant of Oberon, which was used very much successfully at ETHZ during the 90's.
Every time I have this argument I wish some PhD student bothers to rewrite Native Oberon in Go.
Also you should educate yourself, a small list of GC enabled systems programming language is:
Lisp, Algol-68RS, Mesa/Cedar, Modula-2+, Modula-3, Oberon, Oberon-2, Active Oberon, Component Pascal, Sing#, SystemC#, D.
There are plenty of ACM, SIGPLAN, digital archive papers from the OS written in those languages.
Far as Go, it's designed to recreate the Oberon-2 experience of Pike. It's basically a modified Oberon. If Oberon can do OS's, then Go can do OS's with some modifications to runtime or something.
https://github.com/jjyr/bootgo
http://wiki.osdev.org/Go_Bare_Bones
Although the Wiki author doesn't seem to understand how to use the unsafe.Pointer type, and makes use of external Assembly instead, but the bootgo does it properly.
I just sent the Github author an email suggesting it as his next project. Plus a little praise for giving us the needed ammo. :)
One could also interpret is as "Rust is quickly becoming my favorite language for all systems work [...], and has __also__ largely replaced both Go, Python, and C/C++ in my day-to-day."
Python doesn't offer much against languages that compile to native code, have type inference (if strong typed) and REPL.
The only reason for me, would be if I am required to make use of a framework or library that requires me to use Python.
Rapidly? Where?
Other examples of companies using Go for network services: Dropbox (most backend), CloudFlare (Railgun and other things), Uber (geofencing), Bitly (messaging with NSQ), Disqus (realtime commenting), DigitalOcean, Heroku, SoundCloud, Dailymotion.
Even Microsoft is now contributing to the eco-system due to their collaboration with Docker. Also Joe Duffy (from MSR Midori) tweets about his Go experiences.
Personally I prefer other languages, but I am surely happy to see more Go and less unsafe languages being used.
> The decision to use Go was deliberate, because we needed something that had lower latency than Java (where garbage collection pauses are an issue) and is more productive for developers than C, while also handling tens of thousands of client connections. Go fits this space well.
Source: http://techblog.netflix.com/2016/05/application-data-caching...
Discussion: https://www.reddit.com/r/golang/comments/4l0fv2/the_netflix_...
In this context, for example, I don't see a reason for a world government to impose one definition of "systems programming" worldwide by military force (this is what it would take!). Just like in almost everything in human language, you get it from the context. You should try to teach a computer to recognize human speech including the meaning, then you'll realize that almost all of it relies on context and pre-existing knowledge. "Precision" comes from the interpretation - human language communication is the nightmare of people who love functional programming, it's full of hidden state and context and active interpretation.
Which is why it's so easy for this to happen: http://dilbert.com/strip/2015-06-07 If someone wants to argue, there is no way to provide a water-tight human-language text that "Dick from the Internet" can't attack. There always is a way to mis-interpret human language.
http://people.inf.ethz.ch/wirth/ProjectOberon/index.html
All the way from the hardware Verilog to the GUI.
This is the 2013 re-edition of the initial project. Later versions of the operating system with its 3D Gadgets framework were quite nice to use.
It doesn't get more systems programming than that.
http://vbn.aau.dk/ws/files/58355126/main.pdf
So, one can do Oberon all thd way down until we need custom cells. ;)
Another popular, reasonable definition for "systems language" is "something one could write an OS in".
Perhaps it could be amended "Primarily used for writing programs without a GUI."
>>Unfortunately, higher-level languages are often not a great fit for systems code. Systems code is often performance critical (e.g., kernels, databases), so the developer wants predictable performance, and tight control over memory allocation/de-allocation and data layout. This can be hard to achieve in higher-level languages or when using a garbage collector.
I apologize for how glib my remark above was, it didn't add much to the conversation, and was more a knee jerk response to the notion that "Systems Language" is now, or ever has been, well defined.
I brought up the handling of signals, because process management is, in practice, a pretty big deal in what I would consider systems programming. But I don't think it's important to all systems programming. Much like I don't think avoiding garbage collection is necessary for all systems programming, though it's clearly an issue for some applications.
What I do find odd is the notion that it is necessary to not have garbage collection, but not having a solid story behind handling signals from the OS receives a pass.
Rust can handle signals, but its implementation is very platform specific (even the currently recommended crate lacks Windows support), and ultimately calls out the FFI. So it seems that saying Rust has support for signals is like saying Go supports manual memory management because you can call C.malloc and C.free...
Off the top of my head, Time and SIMD are the only two first-party efforts that are missing from there.
Things which will, at this rate, probably never be added -- either because there isn't a "standard" solution to these problems or because it doesn't seem worth it:
* async io
* web framework/http
* numerical hierarchies and bignums
* linear algebra / stats
* GUIs
* "human" time / calendars
Bignums in general are a bit too open-ended, but I could see bigints at least being added someday.
And as for async io, I think it's the same story as with HTTP: imaginably included contingent on implementation maturity and user demand.
In a strict ANSI C compliant compiler, signal handling is implemented in Assembly.
A systems programming language is one one can be used to write a full OS stack, regardless how heap management is done and how much Assembly help is needed.