Cougar introduction - maciekgajewski/cougar GitHub Wiki

Introduction

“Within C++ is a smaller, simpler, safer language struggling to get out.” – Bjarne Stroustrup

(Source: https://isocpp.github.io/CppCoreGuidelines/ )

I love C++. I've been programming in C++ my entire life. There is no other language like it: expressive, universal, compiling to bare metal, giving you the feel of power and control over CPU and memory.

At the same time I hate C++ - it is ugly, unparseable, slow to compile, burdened with legacy features, full of warts an crutches.

Over the years, many languages tried to supersede C++, and largely failed.

This here is yet another attempt.

Why new programming language

We need new programming language. The industry needs new programming language; a spiritual successor to C++, a "C++ 2.0".

C++ has been largely replaced by other languages in many domains, but in the area where raw machine speed is required, it is irreplaceable. And even thou the domain is shrinking, the demand is still growing: we put code in more places than before, and we need more coders.

C++ is hard; training C++ programmers is hard. Hiring C++ programmers is an industry of it's own.

A new, modern programming language that offers the same level of control, the same raw performance, but better tooling, better mental model, cleaner syntax could, in theory, fill the niche that C++ is filling, at the same time removing the impediments cause by difficulty and obsolete design.

Who is Cougar for

First of all, Cougar is for whoever is using C++ currently: HFT, game development, HPC, embedded.

Secondly, Cougar could re-gain the ground lost by C++: backend development. Even thou companies are paying dearly for each CPU cycle in The Cloud, c++ is rarely used for backend development, mostly because it doesn't offer clean ways of writing things like HTTP servers.

Main goals of Cougar

  1. The number one goal of Cougar is that if an experienced C++ programmer looks at the language, it would say: "Oh, good". An then: "Can I use it for my next project?". And then: "Oh, I can use it in my current project!"

  2. The language should allow for expressing high-level ideas and compile to optimal machine code. The language should not stand between the programmer and the machine, but rather should make it easier to exploit the machine's power.

  3. The language should offer a clean syntax, easy to read by both humans and machines. It should come with/allow for creation of the full suite of tools. Not only compiler, but also language server, syntax highlighter, code formatters, static analysis tools, document generators etc etc.

  4. The language should integrate easily with existing ecosystems, at all levels. This starts from ABI and the ability ot link with C and C++ code, and extends trough bindings to languages like Python, to on-the-wire integration with HTTP services, databases etc.