Sit firmly in the dominant position in the development field and uncover several irreplaceable reasons for the C language!


In the past 50 years, C language has gradually developed into an extremely important software development language. This article will deeply analyze how it competes with C + +, Java, c#, go, rust and Python and maintains certain advantages.


For computer programming languages, no technology can be used for half a century unless it is easier to use than others. C language was introduced in the early 1970s. Now it still maintains the status of the mainstream language of underlying basic development in the software world.

Sometimes, a technology can be used for a long time because people have not found a better alternative. Over the past few decades, a large number of languages have emerged – even new languages designed specifically to challenge the dominance of C.

C is really hard to replace.The investigation of programming language and software development examples have confirmed that development can be done in a much better way than using C language. But C’s position remains unchanged, because behind it is decades of accumulation and progress. Few languages can beat it in performance, logic, or universality.


C vs C++

Naturally, people will compare C with C + +. As the name suggests, C + + is developed from C. The difference between the two is scalability, or ease of use.

In terms of syntax and method, C + + is close to C language, but C + + provides many useful features that native C does not have: namespace, template, exception and memory management. If the project is sensitive to performance, such as database and machine learning, it is usually written in C + +, which will be more helpful to improve the performance of the system.

In addition, C + + is easier to extend than C. C + + 20 even brings more new features, including modules, coroutines, synchronization libraries and other concepts, which make the template easier to use. The latest revision of standard C has few new features, but pays more attention to maintaining backward compatibility.

In fact, all the advantages of C + + are also its disadvantages. The more C + + features are used, the more complex they are, and the more difficult the results are to control. Therefore, developers who limit themselves to a subset of C + + can avoid many serious problems. Some organizations want to avoid the complexity of C + + and insist on using C. For example, the Linux kernel development team will avoid C + +.

For early developers and code maintainers, choosing C is a way to avoid disputes over the excessive use of C + +. However, C + + also has a series of rich advanced functions, which should be used. However, if it is concise and more suitable for the overall development of current or future projects, C will have more advantages.


C vs Java

After the birth of Java for decades, it is still the main language for general enterprise software development. Most excellent enterprise software development projects are written in Java, including most Apache foundation projects. When developing enterprise projects, Java is a more feasible language.

Java’s syntax draws heavily on C and C + +. However, unlike C, Java does not compile into machine language by default. Conversely, the Java runtime environment JVM compiles java code into the target environment on the fly. Under good conditions, real-time compiled Java can achieve even super C performance.

Java pursues the idea of “write once, run anywhere”. Java programs can run in different environments with only small adjustments. In contrast, although C has been ported to many architectures, any given C program may still need to be customized to run properly on windows and Linux.

The combination of portability and powerful performance, as well as the huge ecosystem of software libraries and frameworks, make java a member of enterprise project language.

**However, Java lags behind C in that Java has never competed in areas that are close to the bottom or directly operate the hardware. C code is converted into machine code and executed directly by the process. Java is compiled into bytecode and converted into intermediate code of machine code by JVM interpreter** In addition, although Java’s automatic memory management is a good thing in most cases, C is more suitable for programs with limited memory resources.

In some cases, the performance of Java can be close to that of C. The JIT engine of the JVM can optimize the program according to the behavior of the program at run time, and can carry out many kinds of optimization. This is not feasible for the pre edited C language. For example, Apache spark uses custom memory management code to bypass the JVM for a certain degree of in memory processing optimization.


C vs c# and. Net

Nearly 20 years after its launch, C and. Net frameworks are still the main parts of the enterprise software world. Some people say that C # and. Net are Microsoft’s response to Java (managed code compilation system and common runtime), so many comparisons between C and Java also apply to C and C # /. Net.

Like Java (and parts of Python),. Net provides portability across multiple platforms and a broad ecosystem of integrated software. Considering some enterprise oriented development in the. Net world, these are great advantages. When developing programs in C or any other. Net language, you can take advantage of various tools and libraries written for the. Net runtime.

Another advantage of. Net similar to Java is JIT optimization. C and. Net programs can be compiled in advance like C. net runtime can be compiled immediately and can be optimized using runtime information. JIT compilation allows various optimizations of running. Net programs, which cannot be done in C.

Like C, C and. Net provide various mechanisms for direct access to memory. Heap, stack, and unmanaged system memory are all accessible through. Net APIs and objects. Developers can use the unsafe pattern in. Net to achieve higher performance.

However, it is worth noting that managed objects and unsafe objects cannot be exchanged at will, and the encapsulation transfer between them needs to be at the cost of reducing performance. Therefore, reducing the transmission between the two can maximize the performance of. Net programs.

When you can’t afford the cost of managed memory versus unmanaged memory, or when the. Net runtime is a bad option for the target environment (such as kernel space) or is not available at all, the C language may solve the problem. Unlike C and. Net, C turns on direct memory access by default.


C vs Go

Go syntax is very similar to C, with braces as delimiters and semicolon terminated statements. Developers who are proficient in C can usually move directly to go without much difficulty, even taking into account the new features of go, such as namespace and package management.

Code readability is one of the guiding design goals of go. Developers can easily keep up with the speed of any go project and master the code base in a short time. C code bases are difficult to explore because they can easily become a nest of macros and project or team specific. Go’s syntax, as well as its built-in code format and project management tools, are designed to avoid these mechanism problems.

Go also provides additional functions, such as goroutines and channels, language level tools for dealing with concurrency and message passing between components. In C language, we can only implement it by ourselves or use third-party libraries, but go provides these features out of the box, which makes it extremely convenient for us to develop software that needs similar functions.

In terms of memory management, go is quite different from C. By default, go objects are automatically managed and recycled. This is very convenient for most programming work. But this also means that any program that needs special processing of memory will be more difficult.

Go does contain an unsafe package to avoid the security problems of some types of go processing, such as reading and writing arbitrary memory using pointer type. But unsafe is accompanied by a warning that programs written with it “may not be portable and are not protected by go1 compatibility guidelines”.

Go is ideal for building programs such as command-line programs and network services because they rarely require such fine-grained operations. However, low-level device drivers, kernel space operating system components and other tasks requiring strict control over memory layout and management are best created in C.


C vs Rust

In some ways, rust is a new solution to the memory management problems caused by C and C + +, and it is also a new solution to many other shortcomings of these languages. Rust is compiled as native code, so it is equivalent to C in performance. However, by default, memory security is rust’s main selling point.

Rust’s syntax and Compilation Rules can help developers avoid common memory management errors. If a program has memory management problems that cross the rust syntax, it will not compile. Novices who use the language, especially those who turn from a language like C that provides a lot of space for such errors, learn how to appease the compiler in the first stage of rust. But rust supporters believe that this short-term pain will have a long-term return: safer code that does not sacrifice speed.

Rust can also use its tools to improve C. By default, project and component management is part of the tool chain provided by rust, the same as go. There is a default and recommended way to manage packages, organize project folders, and handle many other things. This is at most a temporary measure. Each project and team handles them differently.

Still, for C developers, what is touted as rust’s advantage may not look like that. The compile time security feature of rust cannot be disabled, so even a small rust program must comply with the memory security limit of rust. By default, C may not be safe, but it is more flexible and tolerant when necessary.

Another possible drawback is the volume of the rust language. Even considering the standard library, there are relatively few new features in C. The rust feature set is creeping and growing. Compared with C + +, a larger rust feature set means more power, but it is also more complex. C is a smaller language, but easier to model, so it may be more suitable for projects that look a little bloated.


C vs Python

Now, when talking about software development, python always seems to be mentioned. After all, this is “the second language for everything”. There is no doubt that it is one of the most common languages, with thousands of third-party libraries.

Python emphasizes development speed rather than execution speed, which is the biggest difference between Python and C. It may take an hour to assemble a program in C, but only a few minutes in Python. On the other hand, the program may take only a few seconds to execute in C language and a minute to run in Python. But for modern hardware, Python is fast enough, which is the key to its success.

Another major difference is memory management. Python programs are completely managed by the python runtime, so developers don’t have to worry about the difficulty of allocating and freeing memory. However, it is necessary to make it clear that the ease of developers is at the expense of runtime performance. It is necessary to pay careful attention to memory management when writing C programs.

In fact, there is a deep connection between Python and C: the reference Python runtime is written in C. This allows Python programs to package libraries written in C and C + +. Some important third-party libraries in Python ecosystem, such as machine learning, whose core is C code.

If development speed is more important than execution speed, and the execution part of the program can be isolated into independent components rather than scattered in the whole code, pure Python or the mixture of Python and C libraries is better than using C alone. Otherwise, C is still the overlord.


Finally, whether you are changing careers, beginners or advanced, if you want to learn programming~

——[noteworthy]myC / C + + programming learning exchange club!——

involve:C language, C + +, windows programming, network programming, QT graphical interface development, Linux programming, game programming, data structure and calculation, and database