MaKcNMkA ([info]makcnmka) wrote,
@ 2007-08-25 14:34:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:c/c++, programming, system

C vs. C++
У меня вопрос к системным программистам.
Почему операционные системы пишут на C, а не на C++. Ведь C++ на много удобнее C, и семантика его богаче. Можно провернуть такие вещи, которые C-программистам и не снились, прилагая минимум усилий, в то же время программы на C++ реже выкидывают приколы. С++ позволяет сделать код защищённым. Короче C++ надёжнее, но почему же всё таки C? Он работает быстрее? Возможности C++ просто не нужны для написания ОС?




(13 comments) - (Post a new comment)


[info]7ocb
2007-08-25 10:21 am UTC (link)
Все несколько в другой области.
Дело в том, что сишный код более менее можно предсказать.

То есть ты, например, можешь предсказать, какой код сгенерирует компилятор, разворачивая шаблон?

Плюс проблемы с линковкой - си код линкуется со всем, си++ только с си++, да и то, это зависит от компилятора, линкера и фазы луны.

Си++ больше подходит для написания прикладных программ, для системного программирования он не подходит именно в силу своей навороченности. И код на с++ получается, как правило, несколько медленнее (это, правда, во многом зависит от дизайна кода) и более объемным в плане машинных инструкций.

(Reply to this) (Thread)


[info]makcnmka
2007-08-25 04:45 pm UTC (link)
Ну а вот например, если писать структуры на C++, то в них можно включить методы (то есть это, практически классы получаются), а в структуры на Си можно включить лишь указатели на функции - это не очень красиво, согласись. Например, если писать код си на си++ (то есть из ооп использовать только структуры, а всю мощь С++ не использовать) это существенно исказит конечный продукт - бинарник?

(Reply to this) (Parent)(Thread)


[info]7ocb
2007-08-26 03:15 pm UTC (link)
Не знаю, насколько это исказит конечный бинарник, но....

Вот тебе простая задача:
Написать ассемблерный код, который будет вызывать метод класса с++.
Если ты это сделаешь, напиши то же для ф-ции на с.

Поймешь разницу. (:

Если использовать только методы, без перегрузки, без виртуальных ф-ций, и без шаблонов - то ты не получишь особого плюса в написании.

(Reply to this) (Parent)(Thread)


[info]makcnmka
2007-08-27 03:23 am UTC (link)
А как на счёт `extern "C"' ?

(Reply to this) (Parent)(Thread)


[info]7ocb
2007-08-27 08:31 am UTC (link)
хмхм. ну попробуй импортировать таким образом метод. (:
или еще веселее - конструктор.

(Reply to this) (Parent)(Thread)


[info]makcnmka
2007-08-27 11:05 am UTC (link)
Хм... Обязательно попробую =)

(Reply to this) (Parent)


(Anonymous)
2007-08-27 09:42 am UTC (link)
А вроде умный человек, учится на программиста...

(Reply to this)


[info]magres
2007-08-27 09:42 am UTC (link)
А вроде умный человек, учится на программиста...

(Reply to this) (Thread)


[info]makcnmka
2007-08-27 11:06 am UTC (link)
Что конкретно тебя смутило?

(Reply to this) (Parent)


[info]dark_barker
2007-08-27 10:25 am UTC (link)
В постановке вопроса (в сравнении Ц и ЦПП) уже скрыто немало ошибок.
Да и языки разные совсем.
И зачем при написании низкоуровневой прослойки ООП и прочие приблуды?

(Reply to this) (Thread)


[info]makcnmka
2007-08-27 11:09 am UTC (link)
Какие конкретно ошибки?
----
C++ построен на основе C - добавлением ООП и некоторых особенностей
----
Для того чтобы защитить код (например, создать класс ядро и использовать для него синглтон)

(Reply to this) (Parent)(Thread)


[info]dark_barker
2007-08-27 11:22 am UTC (link)
Конкретно: "си++ выкидывает меньше ошибок", "си++ надёжнее" итд итп...

Скорее просто похожий синтаксис, чем "добавление ООП и особенностей". Как бОльшая часть языка, так и построение / транслирования в корне другие.

Ну неудобно это жэ, неужели неясно. Ядро и прочее околоядерное - это то что нужно максимально делать прозрачно. Си потому и идеален для таких целей, что совмещает прктически полную низкоуровневость в инструментарии языка (до уровня асм) и высокоуровневую логику, структурность итд.

з.ы. Впрочем, уверяю, есть и ООП-основанные разработки, чего то я встречал такое, когда увлекался написанием всякого такого.

(Reply to this) (Parent)(Thread)


[info]makcnmka
2007-08-27 12:12 pm UTC (link)
Понял. Начинаю мотать на ус.

(Reply to this) (Parent)


(13 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…