4 ms·
Maybe "manual memory management" is the better thing to zoom in on -- the large difference (and justification of the cost) between something like C/C++ and Java
by hardwaresofton 8y ago
Maybe "manual memory management" is the better thing to zoom in on -- the large difference (and justification of the cost) between something like C/C++ and Java is the inclusion of the JVM and the weight of the runtime the Java brings with it.
C++ is safer but heavier than C, and Java is safer but heavier than C++. If C/C++ are systems programming languages but Java is not, then I posit that Go is also not a systems programming language. If use in resource constrained environments (where C/C++ can happily go) isn't a huge factor, then lots of things are systems languages that I wasn't considering
Wiki says:
> System programming (or systems programming) is the activity of programming[1] computer system software. The primary distinguishing characteristic of systems programming when compared to application programming is that application programming aims to produce software which provides services to the user directly (e.g. word processor), whereas systems programming aims to produce software and software platforms which provide services to other software, are performance constrained, or both (e.g. operating systems, computational science applications, game engines, industrial automation, and software as a service applications).[1]
> System programming requires a great degree of hardware awareness. Its goal is to achieve efficient use of available resources, either because the software itself is performance critical or because even small efficiency improvements directly transform into significant monetary savings for the service provider (cloud based word processors).
Last sentence of the first paragraph seems to kind of two cases I kind of mentioned -- providing services to other software, being performance constrained, or both. Assembly/C/C++ are obviously often the only choice for the "performance constrained" use case, but not necessarily the best choice for the simple use case of "providing services to other software".
- pjmlp 8y agoJava is also a systems programming language when it runs using the bare metal deployment variant from: https://www.aicas.com/cms/en/JamaicaVM https://www.aicas.com/cms/en/JamaicaVM https://www.ptc.com/en/products/developer-tools/perc https://www.ptc.com/en/products/developer-tools/perc And a tracing GC isn't a deciding factor for being a systems programming language or not. Besides the examples shown above, http://www.astrobe.com/default.htm http://www.astrobe.com/default.htm And the now long gone Lisp Machines, Mesa/Cedar, SpinOS, Singularity, Midori,...
- hardwaresofton 8y agoAgreed -- I think I can change my internal definition of "systems programming" to the "providing services to other service". "Resource constrained" doesn't even mean the same thing anymore either...
- Retra 8y agoI would add that systems languages usually need to be consistent and predictable in their resource usage. Often this will mean manual resource allocation. Even if resources aren't constrained, you will still need the ability to write software which manages them with precision, and that's what systems languages are needed for.