Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ajde neko da mi razbije mit o c++

[es] :: Kernel i OS programiranje :: ajde neko da mi razbije mit o c++

[ Pregleda: 5238 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon ajde neko da mi razbije mit o c++23.02.2007. u 17:24 - pre 161 meseci
pricao sam sa profesorom koji predaje operativne sisteme i razglabali smo nesto o jezicima on naravno zna da je c dobar programski jezik za pisanje OS-a, ali nije znao bas da mi objasni zasto pa me je gadjao teskom terminologijom, na sta sam ja pitao, a c++, njegov odgovor bio je ne moze se napisati OS u c++..moze al bi bilo zaj***, naravno nije cuo za BEOS ali ja bi hteo da polozim taj predmet :). Mene zanima razvoj samo jednog programa na racunarima, "operativnog sistema" odnedavno me je data tema zainteresovala, ali nigde ne mogu da nadjem adekvatan odgovor:
Zasto je c bolji za pisanje operativnih sistema od c++?
Da li mozda smeta to sto je c++ objektni jezik?
Da li bi OS bio sporiji...da preformulisem, da li bi linux bio sporiji recimo da je pisan u c++?
Procitao sam negde da razvoj os-a zavisi samo od toga koliko programer poznaje dobro taj programski jezik. Ovo pitanje sam postavio da bih se resio nedoumice da li da ucim c++ ili c.

tnx
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.de.ibm.com.

ICQ: 162962030


Profil

icon Re: ajde neko da mi razbije mit o c++23.02.2007. u 17:31 - pre 161 meseci
Mozda lupam ali zar nije Windows pisan u C++-u?
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: ajde neko da mi razbije mit o c++23.02.2007. u 17:49 - pre 161 meseci
Citat:
Kernel , tj. HAL je u c-u i asm-u , a sve ostalo sto se kernela tice je samo-u c-u ( zbog portabilnosti ka drugim platformama) barem tako microsoft preporucuje.... dakle kernel nije u c++ -u ali koristi objekte kao neku vrstu apstrakcija.... drajveri su dakle u c-u ( po mogutstvu bez asm-a ) koji rade u kernel-modu , a drajveri u user-modu su samo u c-u ( znaci bez asm-a).... ostatak koji je u user mod-u je c/c++....

kada kazem asm mislim na privilegovane asm intrukcije tipa in/out i sl...

ovo mi je genuine odgovorio u ovoj temi http://www.elitesecurity.org/t...ramskom-jeziku-napisam-windows
 
Odgovor na temu

caiser

Član broj: 4677
Poruke: 2462
*.karneval.cz.

ICQ: 162962030


Profil

icon Re: ajde neko da mi razbije mit o c++23.02.2007. u 19:17 - pre 161 meseci
Eto ziveo sam u zabludi do danas. :)
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: ajde neko da mi razbije mit o c++23.02.2007. u 20:44 - pre 161 meseci
Ukratko, mnoge "više apstrakcije" C++a nisu pogodne za programiranje u tako niskom nivou, ali se C++ može sasvim lepo koristiti kao "bolji C", bez OOP-a.
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: ajde neko da mi razbije mit o c++23.02.2007. u 21:03 - pre 161 meseci
Citat:
Dragi Tata: ali se C++ može sasvim lepo koristiti kao "bolji C", bez OOP-a.
Upravo to.
 
Odgovor na temu

cynique
Ivan Štambuk
[email protected]

Član broj: 93690
Poruke: 155
193.198.17.*

ICQ: 106979934
Sajt: istambuk.blogspot.com


Profil

icon Re: ajde neko da mi razbije mit o c++24.02.2007. u 12:48 - pre 161 meseci
Nijedan današnji mainstream OS (NT/linux/*BSD/XNU etc.) nema kernel napisan u C++. Štoviše, većina ih ima u kernelu podršku tek za onaj jadni podskup C++ kao "boljeg C-a" (bez iznimki, STL-a, new/delete etc.), poput XNU-a (IOKit) i NT-a (recimo dio kernel-mode komponente grafičkog podsustava windowsa). Iako postoje neki linux projektići koji pružaju punu runtime podršku za većinu važnijih C++ featurea, tako nešto nije (i neće) zaživjeti poglavito zbog toga što Linus gaji izuzetan animozitet prema tom nakaradnom proširenju portabilnog makroasemblera zvanog C.

Inače, C vs C++ u kernel-mode je jedan od "svetih ratova" na newsgrupama :)
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.co.yu.



+2 Profil

icon Re: ajde neko da mi razbije mit o c++24.02.2007. u 13:17 - pre 161 meseci
Drzacu se c-a ma koliko me to kostalo :)

is C++ a good programming language for writing an OS?

I will qualify what I say by informing you that I don't have a lot of hands
on experience with C++.

My answer. Yes. But then I have to go a step further and ask what do you
mean by OS? The only parts of a computing environment that really
constitute the OS are the kernel and the device drivers. Since C++ has all
the low level capabilities of C, then it is clear that you can write and OS
in C++. But now let me share what Linux Torvalds said in 1998 (in terms of
computer technology that's a lifetime ago):

http://www.linuxgazette.com/issue32/rubini.html

Alessandro: "Many people ask why the kernel is written in C instead of C++.
What is your point against using C++ in the kernel? What is the language
you like best, excluding C?"

Linus: "C++ would have allowed us to use certain compiler features that
I would have liked, and it was in fact used for a very short timeperiod
just before releasing Linux-1.0. It turned out to not be very useful, and I
don't think we'll ever end up trying that again, for a few reasons.

"One reason is that C++ simply is a lot more complicated, and the
compiler often does things behind the back of the programmer that aren't at
all obvious when looking at the code locally. Yes, you can avoid features
like virtual classes and avoid these things, but the point is that C++
simply allows a lot that C doesn't allow, and that can make finding the
problems later harder.

"Another reason was related to the above, namely compiler speed and
stability. Because C++ is a more complex language, it also has a propensity
for a lot more compiler bugs and compiles are usually slower. This can be
considered a compiler implementation issue, but the basic complexity of C++
certainly is something that can be objectively considered to be harmful for
kernel development."



You can google up more of Linus's arguments if you like. I'll just say
this. If you are going to write a kernel in C++, you *_must_* know how all
the features you are using are implemented at the hardware level. I've read
enough of the C++ Standard to know you /can/ have very tight control over
things such as memory allocation. My guess is Linus simply hasn't taken the
time to master C++.

If you don't already know C++, you probably need to put off starting your OS
for about 6 months to 2 years while you learn the details under the hood of
C++. BeOS may be worth taking a look at. I don't know how much of their
code is available to the public. I'm also not sure what the balance between
C and C++ is. I'm pretty sure they use both.

Windows NT was originally written in C using Microsoft inhouse extensions to
support OOP. You should find Helen Custer's, now ancient, _Inside Windows
NT_ to be informative reading. I really don't know what MS use for the
kernel of NT these days.

If I were to take on your task, I would probably take an approach similar to
the NT model, but also do thing very differently in a lot of ways. For one,
I would use a Unix model for the file system hierarchy. I would tell you
what I really think of the file system support in NT/XP except my ISP would
probably yank my service.

At the bottom, way down deep, I would have an object with a function in a
running a continuous loop called an event loop. I would represent the
hardware system as an object, and try to find the best way to abstract
services such as file systems, network access, etc. In that respect, I
would probably look to Linux for examples.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: ajde neko da mi razbije mit o c++24.02.2007. u 17:51 - pre 161 meseci
Znam za Linusovu izjavu, ali obrati pažnju na dve stvari:

1) On je isprobao samo g++ kompajler, koji je u to vreme bio vrlo loš (danas je daleko bolji).
2) Njegovo poznavanje C++a je bilo (i ostalo :) ) na početničkom nivou.

Kao što rekoh, ako bih danas pisao OS kernel (što mi ne pada na pamet :) ) koristio bih C++ kompajler ali bih pisao C-style kod.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: ajde neko da mi razbije mit o c++24.02.2007. u 17:55 - pre 161 meseci
Citat:
cynique: Štoviše, većina ih ima u kernelu podršku tek za onaj jadni podskup C++ kao "boljeg C-a" (bez iznimki, STL-a, new/delete etc


Te mogućnosti po prirodi stvari ne možeš da koristiš u kernel modu. Npr, new i delete služe za rezervisanje memorije sa heapa, a toga u kernel modu jednostavno nema. Prednosti C++a su pre svega u striktnijem sistemu tipova, mogućnosti korišćenja šablona umesto makroa, upotreba referenci umesto pointera u pojedinim slučajevima itd.
 
Odgovor na temu

cynique
Ivan Štambuk
[email protected]

Član broj: 93690
Poruke: 155
193.198.17.*

ICQ: 106979934
Sajt: istambuk.blogspot.com


Profil

icon Re: ajde neko da mi razbije mit o c++24.02.2007. u 19:38 - pre 161 meseci
Možeš većinu ovoga koristiti u kernel-mode, npr.

http://netlab.ru.is/exception/LinuxCXX.shtml

Stvar je samo što C++ model jako odudara od modela apstraktnog C stroja, koji je tek iznad von Neumannovog modela, pa ga low-lovel koderi baš i ne vole :)

Inače, imaš i kernel-mode heapove (poolove) :)

Code:

void* operator new(size_t size) 

  return ExAllocatePool(PagedPool/NonPagedPool, size); 


void operator delete(void* object) 

  ExFreePool(object); 
}


Što se tiče BeOS-a - BeOS kernel je čisti C. C++ je userland crap, baš kao i kod Windowsa (COM).

Templatei su compile-time facility za generiranje koda i ne zahtijevaju baš nikakvu runtime podršku, pa su i mogući u kernelu. Slično kao i reference.

Inače, Windows DDK dokumentacija na dosta mjesta preporuča korištenje C++ načina prevođenja, baš zbog striktnije provjere tipova!
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: ajde neko da mi razbije mit o c++25.02.2007. u 03:26 - pre 161 meseci
Evo još jednog linka na tu temu:

http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8325
*.sr.gov.yu.



+2705 Profil

icon Re: ajde neko da mi razbije mit o c++09.05.2007. u 15:25 - pre 159 meseci
Menin je jasno zašto u kernel modu ne mogu da se koriste standardni new i delete. Ipak se i ti operatori mogu redefinisati i onda koristiti, pa bi onda trebao da proradi i STL. Jasno mi je zašto ne mogu da se koriste cin, cout, cerr, zatim objekti tipa ifstream, ofstream. Međutim, nije mi jasno zašto se ne mogu koristiti izuzeci.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: Kernel i OS programiranje :: ajde neko da mi razbije mit o c++

[ Pregleda: 5238 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.