Home Java javaTutorial The possibility of Java replacing C language

The possibility of Java replacing C language

Feb 06, 2017 pm 01:25 PM

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 of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

C language data structure: data representation and operation of trees and graphs C language data structure: data representation and operation of trees and graphs Apr 04, 2025 am 11:18 AM

C language data structure: The data representation of the tree and graph is a hierarchical data structure consisting of nodes. Each node contains a data element and a pointer to its child nodes. The binary tree is a special type of tree. Each node has at most two child nodes. The data represents structTreeNode{intdata;structTreeNode*left;structTreeNode*right;}; Operation creates a tree traversal tree (predecision, in-order, and later order) search tree insertion node deletes node graph is a collection of data structures, where elements are vertices, and they can be connected together through edges with right or unrighted data representing neighbors.

The truth behind the C language file operation problem The truth behind the C language file operation problem Apr 04, 2025 am 11:24 AM

The truth about file operation problems: file opening failed: insufficient permissions, wrong paths, and file occupied. Data writing failed: the buffer is full, the file is not writable, and the disk space is insufficient. Other FAQs: slow file traversal, incorrect text file encoding, and binary file reading errors.

C language multithreaded programming: a beginner's guide and troubleshooting C language multithreaded programming: a beginner's guide and troubleshooting Apr 04, 2025 am 10:15 AM

C language multithreading programming guide: Creating threads: Use the pthread_create() function to specify thread ID, properties, and thread functions. Thread synchronization: Prevent data competition through mutexes, semaphores, and conditional variables. Practical case: Use multi-threading to calculate the Fibonacci number, assign tasks to multiple threads and synchronize the results. Troubleshooting: Solve problems such as program crashes, thread stop responses, and performance bottlenecks.

CS-Week 3 CS-Week 3 Apr 04, 2025 am 06:06 AM

Algorithms are the set of instructions to solve problems, and their execution speed and memory usage vary. In programming, many algorithms are based on data search and sorting. This article will introduce several data retrieval and sorting algorithms. Linear search assumes that there is an array [20,500,10,5,100,1,50] and needs to find the number 50. The linear search algorithm checks each element in the array one by one until the target value is found or the complete array is traversed. The algorithm flowchart is as follows: The pseudo-code for linear search is as follows: Check each element: If the target value is found: Return true Return false C language implementation: #include#includeintmain(void){i

How to output a countdown in C language How to output a countdown in C language Apr 04, 2025 am 08:54 AM

How to output a countdown in C? Answer: Use loop statements. Steps: 1. Define the variable n and store the countdown number to output; 2. Use the while loop to continuously print n until n is less than 1; 3. In the loop body, print out the value of n; 4. At the end of the loop, subtract n by 1 to output the next smaller reciprocal.

C language data structure: the key role of data structures in artificial intelligence C language data structure: the key role of data structures in artificial intelligence Apr 04, 2025 am 10:45 AM

C Language Data Structure: Overview of the Key Role of Data Structure in Artificial Intelligence In the field of artificial intelligence, data structures are crucial to processing large amounts of data. Data structures provide an effective way to organize and manage data, optimize algorithms and improve program efficiency. Common data structures Commonly used data structures in C language include: arrays: a set of consecutively stored data items with the same type. Structure: A data type that organizes different types of data together and gives them a name. Linked List: A linear data structure in which data items are connected together by pointers. Stack: Data structure that follows the last-in first-out (LIFO) principle. Queue: Data structure that follows the first-in first-out (FIFO) principle. Practical case: Adjacent table in graph theory is artificial intelligence

The concept of c language functions and their definition format The concept of c language functions and their definition format Apr 03, 2025 pm 11:33 PM

C language functions are reusable code blocks, receive parameters for processing, and return results. It is similar to the Swiss Army Knife, powerful and requires careful use. Functions include elements such as defining formats, parameters, return values, and function bodies. Advanced usage includes function pointers, recursive functions, and callback functions. Common errors are type mismatch and forgetting to declare prototypes. Debugging skills include printing variables and using a debugger. Performance optimization uses inline functions. Function design should follow the principle of single responsibility. Proficiency in C language functions can significantly improve programming efficiency and code quality.

Troubleshooting tips for processing files in C language Troubleshooting tips for processing files in C language Apr 04, 2025 am 11:15 AM

Troubleshooting Tips for C language processing files When processing files in C language, you may encounter various problems. The following are common problems and corresponding solutions: Problem 1: Cannot open the file code: FILE*fp=fopen("myfile.txt","r");if(fp==NULL){//File opening failed} Reason: File path error File does not exist without file read permission Solution: Check the file path to ensure that the file has check file permission problem 2: File reading failed code: charbuffer[100];size_tread_bytes=fread(buffer,1,siz

See all articles