akwes |
» 2012-01-15 23:26:34 No niestety ale systemy są jednak pisane w C :P
Odstępstwa to system w Javie, który się nie sprawdził. Słyszałem o próbie przepisania kernela lx na C++ ale ponoć szybko pomysł upadł.
W C jest napisana MASA aplikacji, systemów itd czyli bibliotek pewnie też. (Wiem że istnieje coś takiego jak "extern "c"")
Może ująć to inaczej. Gdy powstawały systemy, których teraz się używa nie było C++. Pisali je ludzie, którzy znają C. I teraz Ci sami ludzie dalej je piszą, aby pisać system w C++ trzeba by albo a) przeszkolić cały zespół z c do c++ b) przepisać stary system na C++
lub a) zatrudnić zespół programistów C++ b) przeszkolić z zakresu systemów (nie moją doświadczenia, bo skąd, jak systemy są w C)
Przynajmniej tak ja to widzę. |
|
jsc |
» 2012-01-15 23:49:31 Odstępstwa to system w Javie, który się nie sprawdził.
|
Nie sprawdził się bo jest ekstremalny, aby coś takie odpalić trzeba, by władować maszynę wirtualną Javy, chyba do BIOSu (a jak mi się wydaje na takie ceregiele za mały), a jeśli nawet to zarządzanie pamięcią to katastrofa. |
|
akwes |
» 2012-01-16 00:06:04 JNodePomysł był zacny. System mały, który odpala każdą aplikację z Javie, jeśli można to tak nazwać - natywnie. System od razu zyskuje dużo aplikacji. Tutaj pomysł samego Sun JavaOS No ale cóż... C dalej niepokonany :) |
|
bingo009 |
» 2012-01-16 17:26:49 Co do twojego problemu, dziwię się jak ty piszesz ten system bez takiej wiedzy jak obsługa strumienia cout i cin. Rozłóż se IOStreams, może tam znajdziesz odpowiedź.
@UP: C nie pokonany, bo C dalej jest świetnym językiem. Wprawdzie C++ jest obiektowy, ale to nie znaczy, że C jest gorszy. |
|
akwes |
» 2012-01-16 18:12:19 @bingo009,
owszem, ale piękno C++ polega na tym że wcale z obiektowości korzystać nie trzeba :)
W sumie ciekawe jakie efekty by dało skompilowanie kernela linuksa kompilatorem C++...:) Ponoć obiektowość ma swoją cenę i widać to w kodzie asamblera jaki generuje się dla obiektowych programów. System powinien być wydajny w każdym detalu. No cóż :P |
|
pekfos |
» 2012-01-16 18:32:44 He he, wychodzi na to, że mój błąd. Wydawało mi się że jest więcej OSów w C++ :P |
|
jsc |
» 2012-01-16 20:33:03 Ponoć obiektowość ma swoją cenę i widać to w kodzie asamblera jaki generuje się dla obiektowych programów. |
Ponoć to dobre określenie, bo na czym miałyby polegać narzutowe aspekty obiektowego asemblera to nie wiem, ale się zastanówmy: Klasa implementuje metody i definiuje pola. Dla asembler traktuje pola klasy jak pola struktury (stara znajoma z C), a metody uruchamia poprzez skok pod jej adres (czyli tak jak do zwykłej procedury w C). Czyli jak wyjaśniłem statyczne i dynamiczne cechy obiektów są tak jak w analogicznych elementów w C. |
|
akwes |
» 2012-01-16 20:51:45 Ponoć to dobre określenie, bo na czym miałyby polegać narzutowe aspekty obiektowego asemblera to nie wiem, ale się zastanówmy: Klasa implementuje metody i definiuje pola.
Dla asembler traktuje pola klasy jak pola struktury (stara znajoma z C), a metody uruchamia poprzez skok pod jej adres (czyli tak jak do zwykłej procedury w C). Czyli jak wyjaśniłem statyczne i dynamiczne cechy obiektów są tak jak w analogicznych elementów w C.
|
Nigdy nad tym nie myślałem... Plik struct Osoba { char * imie; char * nazwisko; int wiek; };
int main() { return 0; }
CPP -> ASM by g++ .file "w_cpp.cpp" .text .globl main .type main, @function main: .LFB0: .cfi_startproc .cfi_personality 0x0,__gxx_personality_v0 pushl %ebp .cfi_def_cfa_offset 8 movl %esp, %ebp .cfi_offset 5, -8 .cfi_def_cfa_register 5 movl $0, %eax popl %ebp ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" .section .note.GNU-stack,"",@progbits
C -> ASM by gcc .file "w_c.c" .text .globl main .type main, @function main: pushl %ebp movl %esp, %ebp movl $0, %eax popl %ebp ret .size main, .-main .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" .section .note.GNU-stack,"",@progbits
edit: Teraz pisząc dużo małych ale niezbędnych programów mamy po 4 operacje więcej na każdym. W sumie to szukam bardziej racjonalnego porównania... Tylko jak to zrobić? Żeby pokazać różnice musiałbym napisać coś używając dziedziczenia. Jak zrobię w C++ klasę Osoba -> Student oraz Osoba -> Pracownik, to w C w ogóle bym nie robił klasy Osoba... |
|
1 « 2 » 3 4 5 |