Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Dlaczego Linuksy pisane są nadal w C, a nie w C++?

lukagrom 28 Sie 2018 15:57 15492 10
  • #1 28 Sie 2018 15:57
    lukagrom
    Poziom 16  

    Wiadomo, że ten uniksowy system składa się z części asemblerowej i kodzie w języku C. Tak mnie ciekawi, że skoro C++ "łyknie" prawie wszystko co skompiluje C, plus odda od siebie swoje główne atuty dla, których został stworzony (objektowość i inne), to dlaczego nadal każda dystrybucja podąża co prawda sprawdzoną drogą budowy pary asembler-C, a nie np teoretycznie wydajniejszej asembler-C++?

    0 10
  • #2 28 Sie 2018 18:13
    MATHIASS222
    Poziom 3  

    Bo nie chcą popsuć jak windows. :)

    Moderowany przez _lazor_:

    3.1.5-3.1.7 Nie wysyłaj treści, które powodują celowo konflikty na forum i naruszają dobre obyczaje. Nie wyzywaj drugiej strony dyskusji, nawet jak posiadasz odmienne zdanie.
    Wulgaryzm zmieniłem

    3
  • #3 28 Sie 2018 18:32
    _lazor_
    Moderator Projektowanie

    Właśnie często o te atuty chodzi, nie wszystko co ma do zaoferowania C++ nadaje się do pisania kerneli (czy to systemowych, czy jakichkolwiek).

    Pisanie w C++ w sposób bardzo dobry wymaga bardzo dużej wiedzy na temat języka programowania. Niestety C++ ma tyle "ułatwiaczy" że czasem już nie wiadomo gdzie się uruchomi funkcja API, która jest niewidoczna z poziomu pisanego kodu, a dopiero widoczna kiedy wejdzie się w mapy kodu lub zerknie w assemblera, a to może wprowadzić spore kłopoty wydajnościowe.

    C jest po prostu łatwiejszym językiem (mniej złożony) z czego wynika że łatwiej go opanować do poziomu bardzo dobrego.

    Kiedy powstawały główne kernele linuxa to kompilatory C++ były nie najlepszej jakości (jak to z językiem który ewoluuje) i Linus podjął taką a nie inną decyzję. Dodatkowo kod w C jest inny niż w C++ i przejście z jednego na drugie może przysporzyć kłopotów.

    Coś czuje że zacznie się tutaj mała wojna między c a C++, no cóż temat tutaj jednak jest praktycznie o tym.

    1
  • #4 29 Sie 2018 08:26
    JacekCz
    Poziom 36  

    _lazor_ napisał:
    ... a to może wprowadzić spore kłopoty wydajnościowe.


    Nie ma "sporych problemów wydajnościowych C++".

    Jest w tym temacie myślę inny problem. API, interfejsy między-modułowe określone na sposób C jest ekstremalnie trudno zmienić w sposób kompatybilny na obiektowe C++. Wszystkie klasyczne systemowe API są zdefiniowane na sposób "C".

    Drugie, wiele zalet C++, jak automatycznie zarządzanie wskaźnikami, czy banalne postawienie std::string do std::string, staje się bardzo delikatne lub niemożliwe gdy mowa o oddzielnych przestrzeniach adresowych procesów.

    Prawdą za to jest, że bardzo wiele tego, co się subiektywnie odbiera jako "całość Linuksa", okienka, aplikacje jest pisane w C++.

    Trzecie, pan Linus Thornvalds uchodzi za konfliktową osobę, a nie lubi C++

    2
  • #5 29 Sie 2018 08:57
    freebsd
    Poziom 34  

    JacekCz napisał:
    Trzecie, pan Linus Thornvalds uchodzi za konfliktową osobę, a nie lubi C++

    Może po prostu jest szczery?

    Linus Torvalds o C++: http://harmful.cat-v.org/software/c++/linus

    Przytoczenie z powyższego źródła:
    From: Linus Torvalds <torvalds <at> linux-foundation.org>
    Subject: Re: [RFC] Convert builin-mailinfo.c to use The Better String Library.
    Newsgroups: gmane.comp.version-control.git
    Date: 2007-09-06 17:50:28 GMT (2 years, 14 weeks, 16 hours and 36 minutes ago)

    On Wed, 5 Sep 2007, Dmitry Kakurin wrote:
    >
    > When I first looked at Git source code two things struck me as odd:
    > 1. Pure C as opposed to C++. No idea why. Please don't talk about portability,
    > it's BS.

    *YOU* are full of bullshit.

    C++ is a horrible language. It's made more horrible by the fact that a lot
    of substandard programmers use it, to the point where it's much much
    easier to generate total and utter crap with it. Quite frankly, even if
    the choice of C were to do *nothing* but keep the C++ programmers out,
    that in itself would be a huge reason to use C.

    In other words: the choice of C is the only sane choice. I know Miles
    Bader jokingly said "to piss you off", but it's actually true. I've come
    to the conclusion that any programmer that would prefer the project to be
    in C++ over C is likely a programmer that I really *would* prefer to piss
    off, so that he doesn't come and screw up any project I'm involved with.

    C++ leads to really really bad design choices. You invariably start using
    the "nice" library features of the language like STL and Boost and other
    total and utter crap, that may "help" you program, but causes:

    - infinite amounts of pain when they don't work (and anybody who tells me
    that STL and especially Boost are stable and portable is just so full
    of BS that it's not even funny)

    - inefficient abstracted programming models where two years down the road
    you notice that some abstraction wasn't very efficient, but now all
    your code depends on all the nice object models around it, and you
    cannot fix it without rewriting your app.

    In other words, the only way to do good, efficient, and system-level and
    portable C++ ends up to limit yourself to all the things that are
    basically available in C. And limiting your project to C means that people
    don't screw that up, and also means that you get a lot of programmers that
    do actually understand low-level issues and don't screw things up with any
    idiotic "object model" crap.

    So I'm sorry, but for something like git, where efficiency was a primary
    objective, the "advantages" of C++ is just a huge mistake. The fact that
    we also piss off people who cannot see that is just a big additional
    advantage.

    If you want a VCS that is written in C++, go play with Monotone. Really.
    They use a "real database". They use "nice object-oriented libraries".
    They use "nice C++ abstractions". And quite frankly, as a result of all
    these design decisions that sound so appealing to some CS people, the end
    result is a horrible and unmaintainable mess.

    But I'm sure you'd like it more than git.

    Linus
    From: Linus Torvalds
    Subject: Re: Compiling C++ kernel module + Makefile
    Date: Mon, 19 Jan 2004 22:46:23 -0800 (PST)


    On Tue, 20 Jan 2004, Robin Rosenberg wrote:
    >
    > This is the "We've always used COBOL^H^H^H^H" argument.

    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:

    - the whole C++ exception handling thing is fundamentally broken. It's
    _especially_ broken for kernels.
    - any compiler or language that likes to hide things like memory
    allocations behind your back just isn't a good choice for a kernel.
    - 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
    (a) looking for problems
    (b) a C++ bigot that can't see what he is writing is really just C anyway
    (c) was given an assignment in CS class to do so.

    Feel free to make up (d).

    Linus

    0
  • #6 30 Sie 2018 12:06
    JacekCz
    Poziom 36  

    freebsd napisał:
    JacekCz napisał:
    Trzecie, pan Linus Thornvalds uchodzi za konfliktową osobę, a nie lubi C++

    Może po prostu jest szczery?
    ...
    C++ is a horrible language.
    ...
    It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.
    ...


    C++ jest jak najdalszy od roli języka dla juniorów. Używanie go jako język w dydaktyce MSZ jest chore, tworzy fikcję "jest dla wszystkich" itd. To język dla nielicznych brodaczy w kraciastych koszulach.
    Ja to się zgadzam z krytyką C++ z kręgów Javy (nawiasem, też nie jest to ulubiony język Linusa), która utrąciła nadmiar ficzerów C++, czyniąc język w którym o wiele trudniej strzelić w stopę (10 lat pózniej przyszło C#)

    o wątpliwej kompatybilności / ograniczonej przydatności C++ do pisania kernela ja już pisałem.

    0
  • #7 30 Sie 2018 12:23
    _lazor_
    Moderator Projektowanie

    Jakiś czas temu texas instrument w końcu wsparł swój kompilator możliwościami C++14 dla układów serii c6000, o to co piszą:

    http://processors.wiki.ti.com/index.php/C%2B%2B_Support_in_TI_Compilers

    "C++ is a powerful tool. It can be powerfully applied for both good and bad. A chainsaw is a decent analogy. Used well, you get the job done quickly and efficiently. Used poorly, the results can be tragic."

    0
  • #8 03 Wrz 2018 20:52
    perfeusz
    Poziom 1  

    Cześć, przypuśćmy że chciałbym teraz zacząć programować pod Linuksem, w przyszłości może zarabiać na tym. To co teraz wybiera się z języków programowania na Linuksa? Poza maszyną JVM, chyba nie ma nic nowego, taki Swift jest tylko na Ubuntu, nie ma IDE, a takie IDE jak AppCode jest tylko do macOS.

    2
  • #9 04 Wrz 2018 00:00
    JacekCz
    Poziom 36  

    perfeusz napisał:
    Cześć, przypuśćmy że chciałbym teraz zacząć programować pod Linuksem, w przyszłości może zarabiać na tym. To co teraz wybiera się z języków programowania na Linuksa? Poza maszyną JVM, chyba nie ma nic nowego, taki Swift jest tylko na Ubuntu, nie ma IDE, a takie IDE jak AppCode jest tylko do macOS.


    Programowanie samego Linuksa (jądra i modułów) - czy aplikacji pod linuksa. Pytanie dosłownie dotyczy tylko pierwszego przypadku.

    perfeusz napisał:
    ... Poza maszyną JVM, chyba nie ma nic nowego ...


    A dlaczego musi być nowe? A stare to gorsze?

    1