Turning to the father of Linux: C ++: Bad programmer's spam Language

Source: Internet
Author: User
Tags andrew morton version control system

It is expected that this article has aroused much attention. After all, C, C ++, and Linux are the most familiar things. However, it is not very interesting for many people to focus on the debate on pure language advantages and disadvantages. One of the protagonists of this debate, Microsoft's Dmitry kakurin, was very correct: "This is a matter of faith. Therefore, any preaching and argument will be endless and meaningless ......"

I think the correct attitude should be to take nutrition from the arguments of experts, improve and deepen their understanding of the relevant language, and combine their actual environment to think about how to learn, how to use it. Meng Yan, Yun Feng, and pongba all have "nutritious" text in this regard. You can check it out.

Each language has its own limitations and has its own best application. Today, software projects are more and more inclined to adopt multi-language development, so it is better to learn more languages than to spend more energy on the competition. Write 《ProgramMaster Andy hunt and David Thomas from the path to practice have long taught us to "learn a new language each year" to be an undefeated place in software development ".

Linux father Linus Torvalds dedicated Version Control Software git for Linux kernel development has aroused widespread attention in the industry. Yesterday, a Dmitry kakurin dude was checkingSource codeLater, I found that I was using pure C instead of C ++, indicating that I could not understand it. He bluntly said, "Don't talk about portability. This is a fart (BS, bullshit ). "(In addition, He also criticized git for its direct brute force operations.CompositionThis is both cool and error-prone, and it is difficult to keep up with the topCodeLogic .)


This BS caused a strong reaction from Torvalds. He used"* You *Are full of bullshit. "(you are full of BITs) as your own counterargument. Next, he first turned to the rare fireproofing of C ++:

"C ++ is a bad (horrible) language. In addition, the use of a large number of low-standard programmers makes the situation worse, so that it is easy to generate total and utter crap ). To be honest, C is chosen to kick the C ++ programmer out ....... I have come to the conclusion that any programmer who prefers to use C ++ instead of C development projects may be the ones I want to kick out, so that they won't mess up my projects. C ++ can lead to very bad design choices. Your C ++ programmers always use the 'beautiful' library features of the language as soon as they come up, such as STL, boost, and other complete garbage, this may be helpful to your program, but it may cause:

"-- Endless suffering when the library cannot work (don't tell me anything about STL, especially boost, which is stable and portable. It's not funny at all)

"-- Inefficient abstract programming models. Maybe two years later, you will notice that some of the abstract effects are not very good, but all the code is dependent on the 'beautiful' object model designed around it, if the application is not overwritten, it cannot be corrected.

[Turing Book recommendation] The best C language books in the past 10 years, Harvard and MIT textbooks: K. n. king C programming: modern methods " coming soon !!
tips for C language cradle Bell lab training C language confusing Hot selling

That is to say, the only way to use excellent, efficient, system-level, and portable C ++ is to use all the features of C. Project restrictions only use C, which means that the participants will not be confused, but also will get a lot of programmers who really understand the underlying problems and will not toss those idiots 'object model' junk.

"So I'm sorry, but the so-called advantage of C ++ is a huge error for the software with GIT efficiency as the main target. We will not be able to see this, but it has become a huge additional advantage.

"If you want to use a version control system written in C ++, go to monotone. They actually use 'real-size database', 'pretty object-oriented database', and 'pretty C ++ abstractions '. But to be honest, the final result of all these attractive design decisions for some computer professionals is a pile of terrible, hard-to-maintain spam. "

[Updated 070907] the debate between Torvalds and Dmitry kakurin continues.
Dmitry's counterattack against Torvalds: "As dinosaurs who only use C Programming gradually become extinct, you will soon find that only one of you is holding your own opinions. The number of git contributors does not indicate the problem.Obviously, C ++ developers can also contribute C code. But they thought they liked this method, and that would be wrong.

"I use assembly programming when there is no C. Then, before C ++ was born, I switched to C. Now I am using C ++ and C #, and I will not go back. Poor programmers cannot write programs in any language. However, it is a nonsense to punish outstanding developers for rejecting poor contributors for such an unsung reason ."

After 10 minutes, Torvalds will reply.: "What is different from you is that I actually gave reasons for not liking C ++ and pointed out some examples of problems it may cause. But you didn't give a decent reason to use C ++. In fact, git is better than other software configuration management software, and taste and C are one of the reasons.

 In the last sentence, Torvalds then added the following:
"More specific:
"-- Simple and clear core data structure, Very Lean and ambitious code manages them, and "Simplicity is better than fancy"
This method has been used to its utmost.
"-- Consciously not abstract the data structure andAlgorithmBecause they are exactly the core of Git All elements (Whole point ).

"If you want to use a more fancy language, C ++ is definitely the worst choice. If you want real advanced features, choose garbage collection or
Better system integration, rather than the lack of C's simplicity (sparseness) and the lack of C's directAndHigh-level bindings to important concepts.

"In a word, C ++ is in a dilemma. It cannot help prototyping or simple GUI programming to simplify and make it available, rather than actively encouraging you to use lean systems constructed in simple and direct languagesProgramming Language.

(Another person inserted the following sentence: it is not mentioned that it is difficult to find two C ++ compilers that support the same features .)

 

"This has nothing to do with dinosaurs. Good taste will never expire. Comparing C with the assembly language just shows that you lack a minimum concept of your questions (don't have a friggin idea ). "

[Turing Book recommendation] C ++ BibleC ++ primer Chinese editionAndExercise set
Brings together the wisdom of C ++ industry expertsC ++ programming specifications

[070908 continue update]
The debate continues. Dmitry replies after half an hour:
"As I said, this is a matter of faith. Therefore, any preaching and debate will be endless and meaningless, just like any other religious issue. "

"Let's talk about the reasons why C ++ should be used for git Development (rather than the general reasons why C ++ is better for any project, which is also meaningless ):

"1. A good string class can greatly improve the readability of the Code (and the code will be significantly reduced)
"2. Good buffer class-Same reason as above
3. Smart pointers and smart handles for managing memory and file/socket/lock handles
"For now, it is difficult to see high-level logic through this tedious macro management string and memory.

Then his tone became relaxed, and he even used a smiling face:
"In my opinion, git has a very beautiful high-level design (Object Database, simple and easy-to-access storage using hash, data, and metadata .) I like you!

"But the specific implementation method-the combination of C and shell scripts, the command line interface developed from the bottom up is very general.

"I did not compare C with assembly language. I just want to point out that I used programming in many different languages and witnessed bad programmers writing bad code in any language. Therefore, this is actually irrelevant to the language.

Torvalds is still angry. He refuted Dmitry's Criticism of using macros to manage strings and memory in git.:
"It's totally an asshole. String/memory management does not matter at all. Check the source code (I bet you haven't read it ). This is not an important part and is not complicated. The only really important part isDesign. Some parts are written in a prototype language just because they are not the core and will be slowly replaced by C. C ++No wayReplace the shell script or Perl code. In addition, C ++ cannot make the real core part better.

"Obviously, you have gone through the 'assembly-> C ++/C # 'transformation process in your life. You have always insisted on comparing C to a 'dinosaur ', it seems that this is an inevitable evolution to a better/more modern language. This is unfounded because C is far better than C ++ (better than C #) in many aspects, including portability, as well as Interface and Low-layer support.

"Of course you can write bad code in any language. However, some languages, especially thoseMental)The language itself is very bad. A newbie like you came to point out somethingAbsolutely irrelevantPatch features ([Liu jiangpress] here should refer to C ++'s enhancement features for C), using them as an excellent argument for a language (these things were not liked by the original authors ), this fact means that you are confused and should be aware of it.

"True for git core codeImportantFor example: write your own object allocation code so that the memory usage is as small as possible, so as to efficiently record the mark of millions of objects. This is actually a very optimized analysis program for multiple objects in the tree relationship.NoAny abstraction. This is definitely at the source memory byte level.

"Can these tasks be written in languages other than C? Of course. However, those who think that the advanced features such as C ++ string processing are very important cannot write.

"In fact, thisExactlyWhat C is good. Not only the language itself, but also a requiredMentality(Mentality ). One of the biggest advantages of C is that it won't make you think of a program as a high-level thing. It is the latter mentality that will clearly make you look at other languages, but in fact, from the GIT perspective, the so-called "Higher Level" is just wrong. "

Dmitry reply:
I not only read the source code, but also did a lot of debugging work. Most of the problems I found are related to processing the path (that is, string processing) on Windows.

He said that he would not be entangled in the discussion of "C and C ++ advantages and disadvantages", but introduced his own starting point:

My goal is to use git. When some functions cannot be used, I want to make corrections and contribute code in the shortest time and effort possible. For me, this is just a pastime of my main work.

The fact that git is written in C is no good for this purpose. We recommend that you use C ++ as the only way out for the existing C code. Therefore, although C ++ may not be the best choice in academic terms, it is the only practical choice.

"Democracy is the worst form of government, except for the ones that have already been tried ."
-- Winston Churchill

Now, I realize that I am only an inactive contributor, but I want my voice to be heard. Those responsible for developing and maintaining git should also make their own voices.

Since then, Torvalds has not spoken again, probably because it thinks that he has achieved a big victory. Some other git contributors continue to refute Dmitry. We can see that Torvalds's views are not his private opinions.Theodore Tso:

"I think string processing is one of the major problems C ++ will find. A bad Programmer (originally idiot) writes the code like this:

 
A = B +"/Share/"+ C + serial_num;

"You certainly cannot figure out how much memory is allocated, because there are type forced conversion and overload operators (thanks to God, You can reload the comma operator in C ++ !), When such a thing appears in an internal loop, the result will be a catastrophic performance, andCauseNot Obvious yet!

In addition, some people say that many c ++ programmers contribute code, but they need to spend more time modifying and deleting the core C programmers.

 

[Liu jiangpress] The following is my opinion on the outside, used as a brick.

Dmitry is definitely correct. The competition for language is more similar to religious beliefs, so it is difficult to have a result and it does not have much practical significance. Because such arguments come from masters, many important information is exposed. For example:

1. For systems with high performance requirements, C ++ is not necessarily better than C. In fact, many such projects Choose C as the main language. The vitality of C is beyond doubt. For more information, see here.

2. c ++ is currently in a situation that has been attacked. On the one hand, in enterprise-level system development (data intensive, complex and changing business rules, c ++ has basically been eliminated by Java and C #. On the other hand, it has been attacked by C in areas closer to hardware such as system programming and embedded.

3. OO technology is not one-size-fits-all.
...... (You can add)

It must be noted that the limitations of C language, as an old language, are also obvious. For example, it has become a security issue that causes buffer overflow. C's standard library also has various problems. There is no object-oriented mechanism for many projects closer to the real world, which obviously affects development efficiency. (For the source code Layer Analysis of the C standard library, Turing will publish the book C standard library by the famous C/C ++ expert plauger .) In addition, even the performance advantages that C programmers are proud of are currently at risk (see the comparison in stroustrup, the father of C ++ ).

C ++'s current dilemma is largely due to the fact that previous books and literature were once prefixed to being brilliant, and were intoxicated by the in-depth exploration of various language details, with the trend of being gorgeous and complicated, Language designers have painstakingly designed a variety of features and multi-model programming styles, but it has become a burden for learners and users, in addition, Microsoft and other development tools use sugar clothing such as MFC. As a result, a large number of C ++ programmers with poor foundation and a few buckets of water are created, and they think they have mastered the most difficult language in the world, it is often arrogant. The code quality developed in this way can be imagined. Various misunderstandings and bad habits of C ++ can be said to be flying over the sky. In this case, C ++ gradually becomes a "expert language" in the eyes of ordinary people, and cannot attract new programmers. There are a lot of problems with the elderly, new people are not connected, C ++CommunityIt is indeed facing a crisis.

Over the past few years, core figures in the C ++ field, including Bjarne stroustrup, Herb Suter, Stan Lippman, Andrei Alexandrescu, Andrew Koenig, and Stephen Dewhurst, have reflected on this situation a lot, after a hard time, I wroteLearning C ++ as a new language(Chinese translation) c ++ primer version 4, C ++ programming specifications, accelerated C ++, and C ++ must know, and so on.ArticleAnd books. The core change is the emphasis on the standard library (STL and boost in Torvalds tone, I do not know why, please tell me), standardization, domain concepts and design, weaken the details of the underlying language, or emphasize the more standard choice of language features.

Compare the fourth and third editions of the same author's c ++ primer, C ++ programming specifications, modern c ++ design, and exceptional C ++ series, you can see this clearly.

For example, the third edition of primer highlights the various programming styles of C ++ (procedural programming, Object-based programming, object-oriented programming, and generic programming) and serves as the main line for layout analysis, it is easy for beginners to faint. In the fourth edition, more efforts are made to lay a solid foundation and introduce the useful and effective programming technologies used in actual development, c ++ has become the backbone of the book, including the selection of facilities, issues to be paid attention to, and outstanding programming practices and mistakes that the industry has summarized. This makes this book the most appropriate encyclopedia for C ++ to learn and use.

C ++ programming specifications, of course, should be used to demonstrate the correct usage and Application of C ++ language facilities in the form of clauses. When you are learning C ++, you can combine the relevant terms to understand the correct usage of the features you have learned. Of course, it is the most ideal. C ++ must know and discuss the important knowledge points of C ++ programmers.

For C ++ Book recommendations, see:C ++ Court (I)

In the end, Dmitry kakurin is a Microsoft engineer (refer to thanks to) and is dedicated to the development of Git on Windows. -- But do not associate with them.

[070909 update] It seems to be in line with Linus Torvalds. The results of the latest issue of the Tianyi programming language index show that C ++ has dropped by two, behind (visual) Basic and PHP, it became the fifth day. C is the second.

Position
Sep 2007
Position
Sep 2006
Delta in position Programming Language Ratings
Sep 2007
Delta
Sep 2006
Status
1 1 Java 21.701% + 0.17% A
2 2 C 14.908% -3.15% A
3 4 (Visual) Basic 10.748% + 0.12% A
4 5 PHP 10.204% + 1.08% A
5 3 C ++ 9.938% -0.82% A
6 6 Perl 5.416% -0.01% A
7 8 C # 3.583% + 0.59% A
8 7 Python 3.025% -0.12% A
9 9 Javascript 2.722% + 0.28% A
10 13 Ruby 2.065% + 1.13% A

 

[Updated in 070910]
As I saw just now, two senior students wrote related discussion articles. In Jiang Wen's words, they are good words that are "nutritious". You can go and have a look:
Meng Yan:The father of Linux is not rough
Cloud wind: Regression of C

[Update on the 070910 night]
Today, I happened to go to The Book "Unix programming art", where Eric Raymond wrote in The compactness section in Chapter 4th:

"In general programming languages,C and Python are semi-compactPerl, Java, emacs lisp, and shell are not (especially the real shell programming requires you to know other tools such as semi-dozen SED and awk ).C ++ is compact-the language designer acknowledges that he does not expect any programmer to fully understand the language."

[Updated in 070911]
Just now I saw a family photo taken at the Linux kernel developer summit, which has historical value. Let's share it with you. There are Torvalds (roughly in the middle), Andrew Morton (currently the main Maintainer of the kernel, second to the right), and Alan Cox (one of the most contributed hackers in Linux, he is the leader of "Linux Program Design", with a long beard between two pillars) and Jonathan Corbet (author of the book "Linux Device Driver", ranking first on the left) and writing partner Greg kroah-Harman (middle pillarLeft), The above-mentioned TSO (on the right side of the middle column, reading the resume is also a big bull, IBM), OLAF Kirch (author of the Linux Network Administrator Guide), and so on. There is Yang Li, a Chinese character, and feisikar. Herbert Xu is from Australia, and the Chinese lady Mingming Cao sitting on the ground is from ibm usa.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.