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

天行健 君子當自強而不息

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 閱讀(875) 評論(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>
            你懂的国产精品| 夜夜爽夜夜爽精品视频| 午夜亚洲一区| 午夜精品在线视频| 在线看片成人| 亚洲国产天堂久久综合| 欧美精品v日韩精品v韩国精品v | 欧美午夜精品久久久| 亚洲午夜激情在线| 午夜亚洲福利| 亚洲黄页一区| 亚洲永久精品国产| 在线播放日韩专区| 欧美午夜不卡影院在线观看完整版免费 | 亚洲精品一区二区在线| 欧美三级精品| 久久久久久夜| 欧美绝品在线观看成人午夜影视| 这里只有视频精品| 欧美一区二区三区免费看 | 欧美二区不卡| 欧美在线综合视频| 欧美高清在线观看| 久久精品国产99国产精品澳门 | 日韩午夜激情| 国精产品99永久一区一区| 亚洲国产成人精品久久| 国产精品久久综合| 亚洲成人在线视频播放| 欧美日产在线观看| 久久综合九色九九| 国产精品电影在线观看| 另类天堂av| 国产精品久久网| 亚洲国产另类久久精品| 国产日韩精品入口| 亚洲精品专区| 91久久精品日日躁夜夜躁欧美| 狠狠色狠狠色综合系列| 亚洲视频一区| 日韩午夜激情电影| 久久这里有精品15一区二区三区| 亚洲在线视频观看| 欧美另类高清视频在线| 麻豆久久婷婷| 黑人巨大精品欧美黑白配亚洲| 一区二区三区**美女毛片| 亚洲国产91| 欧美一级二级三级蜜桃| 亚洲免费在线观看视频| 欧美国产日韩在线观看| 欧美mv日韩mv国产网站| 国产亚洲成av人在线观看导航 | 亚洲毛片在线看| 最新成人av网站| 麻豆精品在线视频| 久热精品视频| 国产主播在线一区| 欧美中文字幕久久| 久久精品首页| 亚洲国产精品视频| 91久久亚洲| 欧美激情一区二区三区在线视频观看 | 国内精品久久久久久| 亚洲欧美高清| 欧美亚洲综合另类| 国产日韩欧美电影在线观看| 亚洲欧美日韩天堂| 久久精品在线| 国内精品亚洲| 久久久天天操| 欧美激情bt| 亚洲美女中出| 欧美无砖砖区免费| 午夜精品一区二区三区在线视 | 欧美成人精品一区二区| 在线免费观看欧美| 欧美夫妇交换俱乐部在线观看| 亚洲国产va精品久久久不卡综合| 亚洲精品美女久久7777777| 欧美成年人网站| 99一区二区| 欧美一区=区| 伊人精品久久久久7777| 蜜月aⅴ免费一区二区三区 | 蜜桃av噜噜一区| 日韩视频免费| 国产精品视频免费| 久久一区二区三区四区| 亚洲欧洲日韩综合二区| 亚洲欧美日韩一区二区三区在线| 国产一区二区三区精品久久久| 久久精品视频在线播放| 亚洲国产小视频| 亚洲在线视频观看| 一区在线播放视频| 欧美日韩精品欧美日韩精品一 | 亚洲精品久久久久| 久久精品国产免费| 亚洲日韩成人| 国产欧美一区二区色老头| 久久这里只精品最新地址| 亚洲最黄网站| 免费国产一区二区| 亚洲午夜高清视频| 在线综合亚洲欧美在线视频| 久久综合一区二区三区| 亚洲视频在线观看| 原创国产精品91| 国产精品夜色7777狼人| 欧美成人国产一区二区| 欧美一区二区三区在线| 亚洲理伦在线| 欧美国产一区二区三区激情无套| 午夜久久久久久久久久一区二区| 亚洲国产精品一区| 国产一区二区三区av电影| 欧美日韩精品一区二区| 久久国产精品电影| 亚洲永久在线观看| 亚洲伦理一区| 亚洲国产精品毛片| 欧美肥婆bbw| 久久中文久久字幕| 欧美亚洲色图校园春色| 一本色道久久综合狠狠躁篇怎么玩| 一区二区三区自拍| 国产视频观看一区| 国产精品在线看| 国产精品久久久久久久久婷婷| 欧美国产激情| 欧美激情第1页| 免费成人在线视频网站| 久久久www成人免费精品| 欧美亚洲一区二区在线观看| 亚洲午夜av电影| 亚洲一区二区三区精品在线| av成人动漫| 一区二区三区日韩欧美| 亚洲精品在线三区| 亚洲精品一区二区三区樱花 | 亚洲一区欧美二区| 亚洲午夜精品久久久久久app| aaa亚洲精品一二三区| 亚洲精品色婷婷福利天堂| 亚洲国产视频a| 亚洲精品一区二区三区99| 91久久午夜| 99精品99| 亚洲综合视频网| 性欧美大战久久久久久久久| 亚洲在线播放电影| 欧美与黑人午夜性猛交久久久| 亚洲欧美视频在线观看| 欧美一区1区三区3区公司| 久久精品国产99国产精品澳门| 久久久久久91香蕉国产| 米奇777在线欧美播放| 亚洲国产精品综合| 一区二区三区蜜桃网| 午夜精品久久99蜜桃的功能介绍| 午夜一级久久| 狂野欧美激情性xxxx欧美| 欧美激情亚洲国产| 国产精品视频免费| 亚洲大片精品永久免费| 亚洲每日在线| 欧美一区高清| 欧美成人精品在线观看| 99v久久综合狠狠综合久久| 亚洲免费影视第一页| 久久亚洲精品中文字幕冲田杏梨| 欧美国产三级| 国产日韩欧美在线一区| 亚洲欧洲精品一区| 午夜精品影院| 亚洲第一精品影视| 亚洲欧美一区二区视频| 免费黄网站欧美| 国产精品卡一卡二卡三| 亚洲第一级黄色片| 西瓜成人精品人成网站| 欧美高清视频在线| 亚洲在线成人| 欧美激情影院| 在线成人h网| 亚洲欧美日韩一区二区三区在线| 欧美成人免费在线观看| 亚洲一级免费视频| 欧美激情一区二区久久久| 国内外成人免费激情在线视频网站| 亚洲免费网址| 欧美日韩亚洲一区二区三区四区 | 亚洲高清网站| 欧美一区二区女人| 亚洲人在线视频| 久久青草欧美一区二区三区| 国产精品a级| 亚洲最快最全在线视频| 免费在线一区二区|