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

天行健 君子當自強而不息

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) 評論(0)  編輯 收藏 引用 所屬分類: ▲ C++ Program

公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美影院成人| 欧美电影免费观看高清完整版| 欧美天天在线| 羞羞答答国产精品www一本| 亚洲神马久久| 国产欧美三级| 久久综合色播五月| 欧美大片在线影院| 亚洲性感激情| 欧美尤物巨大精品爽| 激情婷婷久久| 亚洲精品在线免费| 国产欧美69| 免费成人黄色| 欧美日韩在线三区| 久久国产66| 欧美成人黄色小视频| 亚洲一级黄色| 久久久免费av| 亚洲一区二区三区四区五区黄| 亚洲制服丝袜在线| 在线观看亚洲a| 一道本一区二区| 精品成人久久| 一区二区三区四区精品| 国内精品久久久久伊人av| 亚洲激情国产| 国产视频精品va久久久久久| 模特精品在线| 国产日韩精品一区| 91久久国产综合久久| 国产精品午夜av在线| 亚洲高清色综合| 国产自产在线视频一区| 亚洲啪啪91| 狠狠干狠狠久久| 亚洲天堂av图片| 亚洲欧洲视频| 久久久噜久噜久久综合| 亚洲欧美日韩国产成人精品影院| 久久久免费av| 久久精品女人| 国产精品久久久久久妇女6080| 欧美国产精品劲爆| 国产一区二区高清不卡| 亚洲午夜久久久久久尤物 | 免费看精品久久片| 久久成人在线| 国产精品久久久久久影视| 亚洲国产二区| 亚洲国产老妈| 久久综合九色综合欧美就去吻| 欧美一区视频在线| 国产精品久久久免费| 亚洲国产影院| 亚洲精品国产视频| 欧美.日韩.国产.一区.二区| 久久久午夜精品| 国产一区二区三区免费观看| 亚洲综合导航| 午夜老司机精品| 国产精品第十页| 99热免费精品在线观看| 一区二区三区精品| 欧美日韩国产成人在线91| 亚洲欧洲在线视频| 一个人看的www久久| 欧美日本乱大交xxxxx| 亚洲人体1000| 制服诱惑一区二区| 欧美午夜美女看片| 亚洲天堂成人| 久久精品人人爽| 伊人春色精品| 欧美高清在线一区| 亚洲欧洲一区二区三区| 制服丝袜激情欧洲亚洲| 欧美午夜在线| 小辣椒精品导航| 麻豆免费精品视频| 亚洲黄色精品| 欧美私人网站| 午夜亚洲激情| 欧美国产第一页| 亚洲色在线视频| 国产免费成人| 老司机精品导航| 亚洲美女av网站| 欧美一区二区三区四区视频| 黄色资源网久久资源365| 美女爽到呻吟久久久久| 日韩一级片网址| 久久精品视频播放| 亚洲美女啪啪| 国产欧美日韩一区| 免费久久99精品国产自| 洋洋av久久久久久久一区| 久久久久久电影| 日韩视频在线一区| 国产日韩在线一区| 欧美激情一区二区三级高清视频| 亚洲性夜色噜噜噜7777| 两个人的视频www国产精品| 99精品国产在热久久婷婷| 国产日韩视频一区二区三区| 美乳少妇欧美精品| 亚洲欧美日韩国产成人| 欧美激情视频一区二区三区不卡| 亚洲在线1234| 亚洲欧洲日韩女同| 国产一区在线看| 欧美日韩视频第一区| 久久久久久久网| 亚洲天堂偷拍| 最新国产成人在线观看| 久久乐国产精品| 亚洲中无吗在线| 日韩亚洲欧美中文三级| 精品福利免费观看| 国产精品综合久久久| 欧美日韩高清区| 久久综合给合久久狠狠狠97色69| 亚洲一区二区视频| 亚洲精品乱码久久久久久黑人| 久久综合五月天婷婷伊人| 亚洲欧美日本国产有色| 一区二区三区精品| 亚洲精品视频在线| 亚洲国产第一| 亚洲大片av| 韩国成人理伦片免费播放| 国产嫩草影院久久久久| 欧美午夜三级| 欧美色另类天堂2015| 欧美日本一区二区三区| 美女视频一区免费观看| 久久一区二区三区四区| 久久久夜精品| 久久久精品久久久久| 久久精品国产亚洲aⅴ| 欧美一区二区三区四区视频| 欧美一级午夜免费电影| 午夜精品久久久久| 欧美伊人久久久久久久久影院 | 久久亚洲精品欧美| 久久精品系列| 久久在线免费观看| 狂野欧美激情性xxxx| 久久久最新网址| 蜜桃久久精品乱码一区二区| 另类人畜视频在线| 欧美激情亚洲激情| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲第一网站| 99视频精品在线| 亚洲综合色丁香婷婷六月图片| 亚洲女性裸体视频| 久久精品视频在线看| 久久婷婷国产综合尤物精品 | 一个色综合av| 亚洲永久免费av| 久久国产精品黑丝| 裸体歌舞表演一区二区| 欧美日本一区二区视频在线观看 | 久久成人免费电影| 久久久亚洲国产美女国产盗摄| 老司机午夜精品视频在线观看| 欧美福利专区| 国产精品男女猛烈高潮激情| 国内视频精品| 一区二区三区欧美激情| 亚洲男人的天堂在线观看 | 夜夜嗨av一区二区三区网站四季av| 99精品久久久| 久久久久久久999| 亚洲国产精品高清久久久| 日韩手机在线导航| 久久成人18免费网站| 欧美激情区在线播放| 国产精品羞羞答答xxdd| 亚洲国产日韩欧美| 午夜精品久久久久99热蜜桃导演| 美女啪啪无遮挡免费久久网站| 亚洲精品乱码久久久久久日本蜜臀| 亚洲综合色激情五月| 欧美va亚洲va国产综合| 国产欧美精品日韩区二区麻豆天美| 亚洲盗摄视频| 欧美一区二区三区免费观看视频| 嫩草成人www欧美| 亚洲免费中文| 欧美日韩综合视频| 亚洲国产精品综合| 久久99伊人| 一本色道久久综合狠狠躁篇的优点 | 久久精品一区四区| av成人手机在线| 欧美99在线视频观看| 国产一区二区三区四区在线观看 | 亚洲国产精品一区二区www在线|