Home >Java >javaTutorial >The possibility of Java replacing C language

The possibility of Java replacing C language

黄舟
黄舟Original
2017-02-06 13:25:211318browse

CSDN once published an article "C Language is Dead", which caused some controversy. In fact, that article was reprinted from Ed Burnette's blog. The original title was "Die, C, die!", which should be literally translated as "Die, C, die!" ” expresses a curse rather than a judgment. The translation said "C language is dead", which is obviously a misunderstanding that fanned the flames. CSDN netizens have criticized his views, but frankly speaking, since these criticisms are based on a distorted translated text, not only is there nothing new, but it also fails to capture the focus of the original author.


The actual situation is this. Recently, there has been a trend in foreign technical communities. Many people are discussing Java as an alternative to C language. or become the most mainstream basic software programming language. Judging from the opinions expressed by most people, there is still support for the trend of Java replacing C.


Basic software refers to a type of software whose main task is to fully unleash the potential of the computer and provide an efficient and reliable function set for upper-layer application software. These software will be called intensively, and a little lag in performance will be magnified hundreds or thousands of times in practice. So for basic software, performance is at least as important as reliability. In the source code of some basic software, we often see some ugly designs and some perverted hacking techniques. In other fields, this is not encouraged, but in basic software, this is reasonable. acceptable.


#The C language is still strong in some areas. In terms of operating system, virtual machine and device driver development, it may be the eternal king. But in other basic software fields, such as databases, network servers, graphics and image processing, etc., there are actually only two reasons why C language continues to dominate. One is that it is fast, and the other is that there are many people who are familiar with it and have rich experience.

But both of these points are now being challenged.


The first is speed. The execution speed of Java reached such a level in JDK1.4 that for an average developer, the C++ program he wrote no longer runs faster than the equivalent Java program. The subsequent JDK 5.0 and 6.0 further improved the execution performance. Multiple evaluation results conducted by different organizations showed that the overall execution efficiency gap between Java and C language is less than double. In other words, JDK is known for its speed and for the sake of speed. The C language, which has given up a lot of things, is now less than twice as fast as the fully equipped Java. Not to mention, if the new computing environment is taken into account, the speed advantage of C language may be just an illusion. Because there are only a few people in the world who have the ability to write fast and correct large programs in C language on multi-CPU computing platforms, and among these people, there are only a very few people who have the ability to write large programs in C language. A large-scale parallel program that can fully utilize the computing power of each node in a large-scale, heterogeneous network environment. In other words, you may be able to double the program performance, thereby fully utilizing the computing potential of a PC worth 6,000 yuan and saving customers 1,000 yuan. But if it is in a large heterogeneous network parallel computing environment composed of 1,000 machines, the performance of the C program you write will probably be far lower than the corresponding Java program, not to mention the huge later maintenance costs. The loss may be 10 million or more.


The second thing is experience. Many people claim to have great C skills, but in fact, even true C masters have to spend a considerable amount of time finding and debugging errors, especially memory errors. Most large-scale software written in C has some memory errors, which requires a lot of energy and time to stabilize the product. This does not take into account security flaws. Most developers now have very weak knowledge in code security. Security vulnerabilities are quite common in code, and in the C language, this shortcoming is particularly obvious. Perhaps the biggest challenge is concurrency. Concurrency is a very complex problem that needs to be solved at a very high level of abstraction. The abstraction mechanism of the C language is too simple and cannot provide high-level abstraction. Therefore, developers can only Starting from some "concurrency primitives" to construct a concurrent program is no different from using a pencil sharpener to saw a big tree. To put it bluntly, most C programmers are simply incapable of writing efficient and bug-free concurrent programs.


So the cruel fact is that when a person says how good he is at C language and how rich his experience is, it is very likely that he is saying that he is using C language. It is very experienced in writing applications that are single-machine and single-threaded and will not be attacked by the outside world. There is no pressure on the time budget, and users can endure a long product stability period. Unfortunately, the market environment and computing environment have completely changed. Facing a more complex computing environment, writing high-quality large-scale software in C language is a task that only a team of real experts can complete. If you've ever struggled to track down and debug a memory leak or threading error for days on end, you'll know that you're probably not such an expert.


In comparison, Java is like a Maxim machine gun versus a bow and arrow in terms of abstraction mechanisms, infrastructure, security, and concurrency compared with the C language. For example, regarding concurrency, the java.util.concurrent package added to Java 5.0 may be the most powerful support library for concurrency issues in mainstream languages. Java's memory management and security mechanisms have also been proven to be able to effectively reduce program defects. This was the intention of the original text of the damning article.


So, my attitude is clear. I think Java replacing C is a progressive idea. However, there are many progressive ideas in the world, but few of them can make dreams come true. . Can Java really be a strong substitute for C language in the field of basic software? I don’t think it can be done at least in the short term. The reasons are as follows:

1. People’s problem. Although there are not many people who can write excellent basic software in C language, there are probably even fewer people who can write it in Java. Java has millions of developers, but what are they doing? Most of them are engaged in enterprise-level development and web development. How many people really understand Java's memory model? How many people are proficient in using the tools provided in the concurrent package? Many people who have used Java for many years have never written a socket program, do not understand the overhead of Java multi-threading, and do not know how to perform performance diagnosis and tuning. These are essential skills when writing basic software. Most Java programmers turn to Web development after just learning Java, and spend their main energy mastering one after another large, complex frameworks with thick abstraction layers and gorgeous structures. Not only do they have no understanding of the real computer architecture, It's clear, but I don't know about the computing environment virtualized by Java. Therefore, it is not only very difficult to transform Java community programming into a vanguard that can take on the next generation of basic software development work, but also requires enough time.


#2. Java’s memory consumption is too large. For system-level programs, high memory consumption means that the cache hit rate is reduced and the possibility of exchanging data with the disk is increased, which has a serious impact on performance. Nowadays, many people still think that Java is slow. The main reason is not that Java runs slowly, but the overall performance decline caused by excessive memory consumption. If this problem is not solved, Java can only be used to make some higher-level basic software. Maybe with the development of computer hardware, this problem will gradually be solved?


3. The issue of style. I think this problem is the most serious. Basic software development advocates freedom, directness, transparency, simplicity, and efficiency. It should be as sharp as a dagger, as brave as a warrior, and as simple as a farmer. It should be opposed to cumbersome and gorgeous designs, layers of abstraction, and complexity. structure and unnecessary flexibility. The design style formed by the Java community over the years is incompatible with this, and can even be said to be opposite. Java is ideologically oriented to the development of enterprise application software, so it places special emphasis on architecture, design patterns, standards, rules, high profile, and a luxurious palace temperament. In C, when you eat, you just eat. You hold up the bowl to drink, put down the chopsticks to curse, throw off your arms to grab meat, and roll up your sleeves to apply oil. In Java, in order to do something, you often new an object first, and then use this object as a parameter to new another object. Repeat this n times to get the object you really need, and finally call the object of that object. One method is like burning incense, washing your face, gargling your mouth and hands while eating, being cautious and respectful. In C, when you encounter problems, you should be like an outlaw, like the gangster version of Cheng Yaojin. He doesn't care about you, but he rushes forward with three axes, and he is afraid that he will not be able to kill you. In Java, when you encounter problems, you must be like Song Xianggong, you must make a statement, you must be honest, you must be a country of etiquette, you must open up your airs, and you must be careful. Java's slogan is, whether you die or not, you must first impress your kid. This set of cumbersome things is both unnecessary and difficult to get used to for basic software development. It should be noted that this is not a problem with the Java language. In fact, Java itself does not have to be so complicated and baroque. From the perspective of the language itself, Java can be brisk and direct, or hearty. It’s just that almost no one has used it in this way for more than ten years, so everyone no longer knows: How to write a program in Java if you don’t do it one step at a time?


It is precisely because of the above reasons (which may not be comprehensive) that until recently, most of the first-class basic software was written in C language, or at least its core Part of it is still based on C. And I don't think this situation will change significantly in the short term. Of course, if the Java community can overcome the above problems, give full play to the advantages of Java itself, and develop a large number of first-class supporting software in basic fields, then the situation can be changed, and this change is also progressive and worthy of welcome of.

The above is the content about the possibility of Java replacing C language. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn