青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

Why don't we rewrite the Linux kernel in C++?


    * (ADB) Again, this has to do with practical and theoretical reasons. On the practical side, when Linux got started gcc didn't have an efficient C++ implementation, and some people would argue that even today it doesn't. Also there are many more C programmers than C++ programmers around. On theoretical grounds, examples of OS's implemented in Object Oriented languages are rare (Java-OS and Oberon System 3 come to mind), and the advantages of this approach are not quite clear cut (for OS design, that is; for GUI implementation KDE is a good example that C++ beats plain C any day).

    * (REW) In the dark old days, in the time that most of you hadn't even heard of the word "Linux", the kernel was once modified to be compiled under g++. That lasted for a few revisions. People complained about the performance drop. It turned out that compiling a piece of C code with g++ would give you worse code. It shouldn't have made a difference, but it did. Been there, done that.

    * (REG) Today (Nov-2000), people claim that compiler technology has improved so that g++ is not longer a worse compiler than gcc, and so feel this issue should be revisited. In fact, there are five issues. These are:

          o Should the kernel use object-oriented programming techniques? Actually, it already does. The VFS (Virtual Filesystem Switch) is a prime example of object-oriented programming techniques. There are objects with public and private data, methods and inheritance. This just happens to be written in C. Another example of object-oriented
programming is Xt (the X Intrinsics Toolkit), also written in C. What's important about object-oriented programming is the techniques, not the languages used.

          o Should the kernel be rewritten in C++? This is likely to be a very bad idea. It would require a very large amount of work to rewrite the kernel (it's a large piece of code). There is no point in just compiling the kernel with g++ and writing the odd function in C++, this would just result in a confusing mix of C and C++ code. Either the kernel is left in C, or it's all moved to C++.

            To justify the enormous effort in rewriting the kernel in C++, significant gains would need to be demonstrated. The onus is clearly on whoever wants to push the rewrite to C++ to show such gains.

          o Is it a good idea to write a new driver in C++? The short answer is no, because there isn't any support for C++ drivers in the kernel.

          o Why not add a C++ interface layer to the kernel to support C++ drivers? The short answer is why bother, since there aren't any C++ drivers for Linux. However, if you are bold enough to consider writing a driver in C++ and a support layer, be aware that this is unlikely to be well received in the community. Most of the kernel developers
are unconvinced of the merits of C++ in general, and consider C++ to generate bloated code. Also, it would result in a confusing mix of C and C++ code in the kernel. Any C++ code in the kernel would be a second-class citizen, as it would be ignored by most kernel developers when changes to internal interfaces are made. A C++ support layer would be frequently be broken by such changes (as whoever is making the changes would probably not bother fixing the C++ code to match), and thus would require a strong commitment from someone to regularly maintain it.

          o Can we make the kernel headers C++-friendly? This is the first step required for supporting C++ drivers, and on the face seems quite reasonable (it is not a C++ support layer). This has the problem that C++ reserves keywords which are valid variable or field names in C (such as private and new). Thus, C++ is not 100% backwards compatible with C. In effect, the C++ standards bodies would be dictating what variable names we're allowed to have. From past behaviour, the C++ standards people have not shown a commitment to 100% backwards compatibility. The fear is that C++ will continue to expand its claim on the namespace. This would generate an ongoing maintenance burden on the kernel developers.

            Note that someone once submitted a patch which performed this "cleaning up". It was ~250 kB in size, and was quite invasive. The patch did not generate much enthusiasm.

            Apparently, someone has had the temerity to label the above paragraph as "a bit fuddy". So Erik Mouw did a short back-of-the-envelope calculation to show that searching the kernel sources for possible C++ keywords is a nightmare. Here is his calculation and comments (dates April, 2002):

            % find /usr/src/linux-2.4.19-pre3-rmap12h -name "*.[chS]" |\
                xargs cat | wc -l
              4078662

            So there's over 4 million lines of kernel source. Let's assume 10% is
            comments, so there's about 3.6 million lines left. Each of those lines
            has to be checked for C++ keywords. Assume that you can do about 5
            seconds per line (very optimistic), work 24 hours per day, and 7 days
            a week:

                              5 s          1 hour     1 day          1 week
            3600000 lines * ------ * -------- * ---------- * -------- = 29.8 weeks
                             line     3600 s     24 hours     7 days

            Sounds like a nightmare to me. You can automate large parts of this,
            but you'll need to write a *very* intelligent search-and-replace tool
            for that. Better use that time in a more efficient way by learning C.

            Note that this is the time required to do a proper manual audit of the code. You could cheat and forgo the auditing process, and instead just compile with C++ and fix all compiler errors, figuring that the compiler can do most of the work. This would still be a major effort, and has the problem that there may be uses of some C++ keywords which don't generate a compiler error, but do generate unintended code. In other words, introduced bugs. That is not a risk the kernel development community is prepared to take.

      My personal view is that C++ has its merits, and makes object-oriented programming easier. However, it is a more complex language and is less mature than C. The greatest danger with C++ is in fact its power. It seduces the programmer, making it much easier to write bloatware. The kernel is a critical piece of code, and must be lean and fast. We cannot afford bloat. I think it is fair to say that it takes more skill to write efficient C++ code than C code. Not every contributer to the linux kernel is an uber-guru, and thus will not know the various tricks and traps for producing efficient C++ code.

    * (REG) Finally, while Linus maintains the development kernel, he is the one who makes the final call. In case there are any doubts on what his opinion is, here is what he said in 2004:

      In fact, in Linux we did try C++ once already, back in 1992.

      It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.

      The fact is, C++ compilers are not trustworthy. They were even worse in 1992, but some fundamental facts haven't changed:

          o the whole C++ exception handling thing is fundamentally broken. It's _especially_ broken for kernels.
          o any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel.
          o you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++.

      In general, I'd say that anybody who designs his kernel modules for C++ is either

          o (a) looking for problems
          o (b) a C++ bigot that can't see what he is writing is really just C anyway
          o (c) was given an assignment in CS class to do so.

      Feel free to make up (d).

posted on 2007-10-30 15:20 lovedday 閱讀(886) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ▲ C++ Program

公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲区国产区| 欧美日韩在线播放| 国产精品一区二区三区乱码| 亚洲欧洲在线免费| 亚洲欧美久久久| 欧美日韩在线高清| 欧美国产日韩亚洲一区| 性欧美18~19sex高清播放| 国产日产精品一区二区三区四区的观看方式 | 久久亚洲欧美| 久久亚洲视频| 国产在线精品自拍| 欧美成年人网站| 免费久久99精品国产自在现线| 韩国av一区二区三区在线观看| 久久亚洲影院| 国产日韩在线视频| 欧美大片在线看| 欧美人与禽猛交乱配视频| 一本一本久久| 一区二区三区欧美在线观看| 国产精品激情偷乱一区二区∴| 亚洲一区免费视频| 欧美一区二区三区电影在线观看| 国产字幕视频一区二区| 欧美亚洲一区在线| 久久动漫亚洲| 卡通动漫国产精品| 亚洲欧美日韩综合| 亚洲精品国产精品国自产观看| 欧美大胆人体视频| 亚洲国产精品女人久久久| 亚洲区第一页| 一区二区av在线| 欧美性视频网站| 免费久久精品视频| 国产精品久久久爽爽爽麻豆色哟哟 | 久久精品国产第一区二区三区最新章节 | 欧美黄在线观看| 亚洲欧美综合| 国产色视频一区| 久久久久久久一区二区三区| 亚洲网友自拍| 久久久久国产精品一区三寸| 裸体女人亚洲精品一区| 国产精品美女久久久| 亚洲欧美清纯在线制服| 久久天堂av综合合色| 91久久极品少妇xxxxⅹ软件| 欧美日韩三级视频| 亚洲欧美制服另类日韩| 亚洲天堂av在线免费观看| 黄色精品免费| 欧美精品久久久久久久免费观看| 久久久精品国产一区二区三区| 欧美日韩一区二区国产| 亚洲免费在线视频| 蜜臀va亚洲va欧美va天堂| 99re国产精品| 欧美日本国产一区| 亚洲综合不卡| 亚洲国产经典视频| 国内久久精品| 欧美精品在线一区二区| 亚洲欧美日韩成人| 欧美成人精品三级在线观看| 国产精品99久久久久久久vr | 国产亚洲制服色| 午夜在线观看免费一区| 欧美韩日一区二区三区| 午夜精品免费| 日韩一级网站| 激情久久久久久久| 久久久91精品国产| 久久在线观看视频| 亚洲性视频网站| 欧美日韩亚洲高清| 久久久蜜臀国产一区二区| 一区二区三区视频在线| 欧美国产精品中文字幕| 久久aⅴ国产欧美74aaa| 一区二区三区.www| 欧美日韩综合视频| 亚洲一区在线播放| 欧美在线首页| 亚洲性感美女99在线| 最新国产精品拍自在线播放| 国产亚洲福利| 国产精品国产三级国产aⅴ9色| 久热成人在线视频| 欧美一区二区私人影院日本 | 一本色道久久99精品综合| 一区精品久久| 国产一区二区欧美日韩| 欧美肉体xxxx裸体137大胆| 欧美国产精品v| 毛片av中文字幕一区二区| 亚洲日本黄色| 亚洲国产99精品国自产| 女人香蕉久久**毛片精品| 久久本道综合色狠狠五月| 亚洲女女女同性video| 中日韩美女免费视频网站在线观看| 亚洲激情小视频| 国产精品第一区| 欧美深夜影院| 欧美视频一二三区| 欧美日韩亚洲综合一区| 欧美视频中文字幕| 欧美视频在线观看 亚洲欧| 欧美日韩久久不卡| 欧美在线一区二区三区| 亚洲人线精品午夜| 亚洲国产精品综合| 久久gogo国模啪啪人体图| 亚洲欧美日本另类| 小处雏高清一区二区三区| 1000部精品久久久久久久久| 欧美日韩在线综合| 欧美午夜精品久久久久久孕妇| 欧美色偷偷大香| 国产精品久久久久一区二区| 国产精品欧美日韩| 欧美成人国产一区二区| 亚洲欧美精品在线| 久久精品一级爱片| 看欧美日韩国产| 欧美日韩国内自拍| 国产农村妇女精品一二区| 国产一区二区成人| 亚洲黄网站在线观看| 日韩视频―中文字幕| 亚洲一二三区在线| 久久精品人人爽| 欧美成人午夜剧场免费观看| 亚洲人成网站在线观看播放| 一区二区三区回区在观看免费视频| 午夜精品三级视频福利| 久久婷婷影院| 欧美日韩在线播放一区二区| 国产婷婷色一区二区三区| 1024成人网色www| 中文在线一区| 久久久久国产精品麻豆ai换脸| 亚洲大片av| 亚洲欧美成人一区二区三区| 可以看av的网站久久看| 国产精品久久久久久久午夜 | 亚洲尤物在线| 免费成人激情视频| 国产精品日韩精品欧美在线| 国自产拍偷拍福利精品免费一| 日韩一区二区免费看| 欧美亚洲日本国产| 亚洲国产91色在线| 欧美一区午夜精品| 欧美精品自拍| 亚洲第一精品久久忘忧草社区| 亚洲天堂av电影| 欧美国产免费| 欧美一区二区三区精品电影| 欧美日韩国产在线看| 激情成人综合网| 亚洲女爱视频在线| 亚洲欧洲视频| 日韩视频在线你懂得| 最新国产成人在线观看| 久久精品亚洲一区二区| 国产精品初高中精品久久| 91久久国产精品91久久性色| 欧美一区二区在线| 久久久精彩视频| 在线亚洲电影| 欧美在线观看视频一区二区| 欧美日韩在线精品一区二区三区| 在线欧美福利| 久久久免费精品视频| 玖玖玖国产精品| 午夜精品久久久久久久久久久久久| 欧美激情1区2区3区| 在线精品国产欧美| 久久久久久久久久久一区 | 国产综合色在线| 欧美一区二区精品| 一区二区三区日韩| 欧美视频专区一二在线观看| 一区二区av在线| 亚洲精品乱码久久久久久| 欧美成人精品| 亚洲精美视频| 亚洲国产三级| 欧美精品一区二区三区久久久竹菊 | 亚洲另类视频| 亚洲欧美偷拍卡通变态| 一区二区三区欧美亚洲| 欧美体内she精视频在线观看| 一区二区高清视频| 在线综合亚洲欧美在线视频| 欧美性猛交xxxx乱大交退制版 | 亚洲黄色av|