It seems like we still resort to C or C++ when we are going to do "serious" systems programming. We have some small languages which try to come up with new stuff inside systems programming such as Go and D (I have had a little experience with D and I like it a lot so far), but those aren't very widely used (Go is from 2009, so it shouldn't be that surprising but D is from 2001). There are non-language-technical reasons why these aren't so popular, such as there aren't many jobs, frameworks etc., but exclude such things and instead focus on what features should the next generation systems programming language come with?

What do you, as a systems developer, lack in the "traditional systems programming languages" (that is C, C++ etc.)? Why do these things matter now in today's world (concurrency etc. would matter, I guess)?

  • My dream language is one that's close to C but has some keyword which prevents functions from causing side effects outside their scope (not even being able to define or access static variables). For every function called, there's an implicit thread* pointer passed which allows any function to cheaply get access to thread-local storage, lock-free memory allocation/freeing, etc. And finally something like scope guards... not destructors because we don't want destructors in C (would change the whole type system so that it's no longer safe to do things like memcpy), but scope guards... – user204677 Dec 10 '17 at 22:48
  • ... local to a function would dramatically simplify clean-up, especially in the context of error handling, for cases where it makes sense. Those three humble things would actually make many of my dreams come true. I have much more ambitious wishlists but these are the most practical -- so practical that I want to try to add them myself one day on top of C and could already feasibly see a lot of the implementation required to do it. The thread ptr passed implicitly to every function does take up a register all the time to pass along, but I think it's a worthwhile trade-off. – user204677 Dec 10 '17 at 22:49

The next proposed systems language should feature wide adoption.

Seriously, you haven't demonstrated anything that Go lacks besides users. Most languages are chosen not because of the language itself, but because of the libraries, tools, and support available. There needs to be an ecosystem for a language to have a chance at adoption.

I've also stated before that any new language can only succeed if it capitalizes on an emerging frontier in computing. I doubt systems programming is an emerging frontier, which may explain why D never experienced the success it may have had a few decades earlier.

I hate to be a pessimist when it comes to new programming languages, but I'm afraid that no new systems language will ever be successful.

  • 4
    Agreed! The only reason really that C and C++ would be replaced would be if they somehow weren't doing their job any more. Even if another language were to come along that did the work better most places wouldn't want to make the switch it would take to retrain, redevelop, and essentially start from scratch on almost everything. – Kenneth Mar 24 '11 at 19:36
  • 1
    @Kenneth C++ took off because, at the time, it was "C with classes"; ie, it was already C (and it came from C creator AT&T), but with the added benefit of object-oriented programming, which was an emerging frontier at the time. In contrast, Objective-C is rising only now because of the iPhone, which is an emerging frontier in its own right. – chrisaycock Mar 24 '11 at 19:43
  • 2
    @chrisaycock: so now all we need is "C++ with $something_cool". What should $something_cool be? ;) – FrustratedWithFormsDesigner Mar 24 '11 at 19:46
  • @Frustrated That would be C++0x. I got the impression the OP isn't asking about gradual additions to an existing language, but about a whole new language (hence citing D and Go). C++0x will probably gain traction once the compiler vendors push it. Go and D will never gain traction because no one's current pain is great enough. (Ie, the OP was proposing a hose for someone who isn't on fire.) – chrisaycock Mar 24 '11 at 19:54
  • @chrisaycock As I said I agree completely – Kenneth Mar 24 '11 at 20:00

The problem encountered when creating a new systems programming language is that computer architecture has not changed that much since the early fifties. Granted, processors have gotten a lot faster and main memory sizes have grown to levels that industry pioneers could have only dreamed about sixty years ago, but modern computers are still based on an architecture that was first introduced in the 1945 by John von Neumann.

  • Well, C took off because it was the language of Unix. There were tons of other languages around long before C: PL/I, Fortran, Cobol, Lisp, APL, etc. The only reason anyone ever bothered with C in the first place was to use Unix. – chrisaycock Mar 24 '11 at 20:22
  • The primary difference between the languages that you mentioned and C is that C was designed specifically for system-level software development. Before C, most system-level software was developed in assembly language. Furthermore, UNIX may have introduced the world to C, but Ron Cain, CP/M, and MS-DOS made it famous. C was one of the first compiled languages to have acceptable performance on 8-bit and 16-bit processors. – bit-twiddler Mar 24 '11 at 20:48
  • When C was first taking off, there were other system implementation languages (SILs). A friend of mine was working in Cybol for Control Data's Cyber series of computers. It would be interesting for somebody to look at the old SILs and try to figure out why C won so big. – David Thornley Mar 24 '11 at 21:57
  • @David: I think you meant to say CYBIL. CYBIL did not hit the market until the eighties. I know for a fact that CDC's NOS operating system was written in primarily in COMPASS assembly language because I spent time with a pair of CDC 7600s and a pair of Cyber 170/750s. DEC also had BLISS, but RSX-11 and VMS were both written primarily in assembly language. TRIPOS was written in BCPL. However, C was the first compiled language to gain serious traction in the world of systems software development because it had the right mix of high-level and low-level language constructs. – bit-twiddler Mar 24 '11 at 22:40
  • (cont) Ron Cain is the person who should be credited with making C ubiquitous. His Small-C compiler is what kick-started the use of C on microcomputers. The Small-C compiler was written in the Small-C dialect; therefore, the compiler could compile itself. – bit-twiddler Mar 24 '11 at 22:41

Not the answer you're looking for? Browse other questions tagged or ask your own question.