Re[8]: C vs. C++
От: igna Россия  
Дата: 12.09.12 05:53
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Ну как. errno — это int, можно любое значение в пределах int присваивать.


Любое точно нельзя. Вопрос в том, как выбрать значение, которое гарантировано не будет использовано в будущим стандарте.
Re: C vs. C++
От: okman Беларусь https://searchinform.ru/
Дата: 12.09.12 08:10
Оценка: +8
Здравствуйте, igna, Вы писали:

I>Есть тут кто-нибудь, кто предпочитает C вместо C++ хотя бы и для отдельных проектов?


Интересно вот что.
Есть ли такие, кто, владея на хорошем практическом уровне обоими языками, отказался от C++ в
пользу C в силу каких-то адекватных причин, о которых может внятно рассказать ?
Послушать таких людей было бы крайне интересно.

А то ведь принято ругать С++ за усложнизм, за всякие там SFINAE/CRTP/множественное виртуальное
наследование внучатого племянника шаблонного параметра-шаблона, а как послушаешь — оказывается,
что эти люди вообще на плюсах особо не писали и знают о нем только понаслышке.

I>Использую libxml2, это библиотека на C, и решил из интереса попробовать и свой модуль, непосредственно использующий libxml2, написать на C. Сначала оно было как бы неплохо, потом хуже. Возможно с непривычки, а есть здесь те, кто предпочитает C?


Я пишу на C преимущественно код для kernel-mode. Ну еще иногда использую его для переносимых
программных интерфейсов, когда есть вероятность, что их будут вызывать из всяких там Delphi/.NET, а
использовать COM слишком дорого. Но вообще, программировать на C считаю неудобным.
В основном из-за отсутствия RAII. Тот, кто не знает, что такое RAII — не знает C++ и объяснять
ему плюсы бесполезно. В отсутствие RAII приходится постоянно следить за тем, кто зовет add_ref, а
кто release, кто инкрементировал счетчик на входе, а кто декрементировал на выходе, кто
занял дескриптор, а кто освободил, и так далее. Добавляешь новую ветку кода — будь добр, проследи,
чтобы и в ней была правильная очистка ресурсов. Удаляешь ветку — тоже проследи. Проследи, чтобы
не было двойного освобождения ресурсов. И так далее, до бесконечности. В C это очень утомляет, а
существующие решения на всяких там лонгджампах выглядят костыльно (и, по сути, костылями и являются).
Во время переработки кода очень легко внести ошибку. Правильно приготовленный C++ избавляет от
подобных проблем — всем заведует RAII и все счастливы, а накладных расходов нет. И код чище.

Я C++ бы выучил только за то,
что в нем присутствует RAII.
Re[9]: C vs. C++
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.09.12 09:40
Оценка:
Здравствуйте, igna, Вы писали:

I>Любое точно нельзя. Вопрос в том, как выбрать значение, которое гарантировано не будет использовано в будущим стандарте.


Поэтому я и говорю, что технически можно, но делать так не надо.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[10]: C vs. C++
От: igna Россия  
Дата: 12.09.12 10:40
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Поэтому я и говорю, что технически можно, но делать так не надо.


Во! То есть errno не для переносимых программ.
Re[6]: C vs. C++
От: MTD https://github.com/mtrempoltsev
Дата: 12.09.12 11:22
Оценка: +1
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>Покажи чистый. Буду знать как надо писать правильно.



YO_ARRAY *Oj_Get_Lines(void *file) {
  YO_ARRAY *arr = Array_Pchars();
  char *S;
  while ((  S = Oj_Read_Line(file) )) Array_Push(__Retain(S));
  return arr;
}


1. Не понятно, что с ошибками. Обычно в C функции возвращают код ошибки, здесь мне не понятно, что будет если например вместо file передам 0.
2. Создали arr типа YO_ARRAY, где потом arr используется? Не понятно.
3. Что такое Pchars? Я еще пойму просто char или там utf32, но это
3. Oj_Read_Line, как я понял вернет нулевой указатель когда будет достигнут конец файла. Как определить, что это не конец, а ошибка файла?
4. Куда помещает строку Array_Push? Из кода не понятно.
5. Для чего нужно __Retain?
6. Почему местами YO, а местами Oj? Разные библиотеки?
7. Почему локальная переменная arr, но локальная переменная S?
Re: C vs. C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.09.12 11:29
Оценка:
Здравствуйте, igna, Вы писали:

I>Есть тут кто-нибудь, кто предпочитает C вместо C++ хотя бы и для отдельных проектов?


Ну я, например.

I>Использую libxml2, это библиотека на C, и решил из интереса попробовать и свой модуль, непосредственно использующий libxml2, написать на C. Сначала оно было как бы неплохо, потом хуже. Возможно с непривычки, а есть здесь те, кто предпочитает C?


libxml2 — это адъ и ужос!
Re[11]: C vs. C++
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.09.12 11:31
Оценка:
Здравствуйте, igna, Вы писали:

I>Во! То есть errno не для переносимых программ.


Что имеется ввиду под "переносимыми программами"? В большинстве случаев достаточно errno со стандартными POSIX'овскими значениями ошибок. Если недостаточно, можно объявить аналогичную глобальную thread-safe переменную, или дополнительное поле в структуре контекста, и использовать по своему усмотрению.
Также можно возвращать код ошибки непосредственно из функции, если очень уж хочется (как сделано в pthreads).
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: C vs. C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.09.12 11:31
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Я бы только один проект писал на С -- ядро линукса. Остальные -- только на

MZ>плюсах. С так ужо убого выглядит, что просто морально нельзя его терпеть.

Непонятно как-то. Если C++ так хорош, то чем же он для ведра линуха не подходит? А если он не так уж хорош, то может есть и какие-то другие проекты, которым он не подходит?
Re[2]: C vs. C++
От: igna Россия  
Дата: 12.09.12 11:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>libxml2 — это адъ и ужос!


А что так?
Re[3]: C vs. C++
От: Piko  
Дата: 12.09.12 12:31
Оценка:
Здравствуйте, Pzz, Вы писали:

MZ>>Я бы только один проект писал на С -- ядро линукса. Остальные -- только на

MZ>>плюсах. С так ужо убого выглядит, что просто морально нельзя его терпеть.
Pzz>Непонятно как-то. Если C++ так хорош, то чем же он для ведра линуха не подходит? А если он не так уж хорош, то может есть и какие-то другие проекты, которым он не подходит?

если использовать C++ для ядра Linux — то
1. желательно многое переделать -> это уже будет не Linux
2. часть сообщества самовыпилится из-за не знания или отрицания C++, включая Линуса, новые члены заполнят вакуум не сразу.
3. такие потрясения нафиг никому не нужны

Что же касается использования C++ для ядер в общем, то процитирую Страуструпа, так как полностью согласен с ним:
http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Interactive-Panel-The-Importance-of-Being-Native
"Of course C++ is much better for kernel than C. I mean, who be stupid enough to say otherwise" 1:02:50
Re[4]: C vs. C++
От: igna Россия  
Дата: 12.09.12 12:41
Оценка:
Здравствуйте, Piko, Вы писали:

P>http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Interactive-Panel-The-Importance-of-Being-Native

P>"Of course C++ is much better for kernel than C. I mean, who be stupid enough to say otherwise" 1:02:50

В текстовом виде этого нет?
Re[5]: C vs. C++
От: Piko  
Дата: 12.09.12 12:45
Оценка:
Здравствуйте, igna, Вы писали:

P>>http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Interactive-Panel-The-Importance-of-Being-Native

P>>"Of course C++ is much better for kernel than C. I mean, who be stupid enough to say otherwise" 1:02:50
I>В текстовом виде этого нет?

не видел. там же есть html5 версия видео.
Re[6]: C vs. C++
От: igna Россия  
Дата: 12.09.12 12:51
Оценка:
Здравствуйте, Piko, Вы писали:

P>не видел. там же есть html5 версия видео.


Не понял.
Re[7]: C vs. C++
От: Piko  
Дата: 12.09.12 12:53
Оценка:
Здравствуйте, igna, Вы писали:

I>Не понял.


зачем текстовая версия, в чём проблема посмотреть видео?
Re[8]: C vs. C++
От: igna Россия  
Дата: 12.09.12 13:02
Оценка: +1
Здравствуйте, Piko, Вы писали:

P>зачем текстовая версия, в чём проблема посмотреть видео?


Я скорее всего не все пойму.
Долго.
Нельзя использовать поиск.
Надо одевать наушники.

Заколебали своими видеопрезентациями.
Re[9]: C vs. C++
От: Piko  
Дата: 12.09.12 13:07
Оценка:
Здравствуйте, igna, Вы писали:

P>>зачем текстовая версия, в чём проблема посмотреть видео?

I>Долго.

я время указал — там 10минут всего

I>Нельзя использовать поиск.


зачем? там разговор про ядро минут 10

I>Надо одевать наушники.


беда

I>Заколебали своими видеопрезентациями.


это просто пруфлинк — ты можешь не проверять
Re[10]: C vs. C++
От: igna Россия  
Дата: 12.09.12 13:27
Оценка:
Здравствуйте, Piko, Вы писали:

P>зачем? там разговор про ядро минут 10


Ну поиском я мог бы поискать что-нибудь еще.

P>это просто пруфлинк — ты можешь не проверять


Проверять и не собирался, просто народ собрался интересный, хотел узнать, что они там еще говорят. Но нет, так нет.
Re[11]: C vs. C++
От: Piko  
Дата: 12.09.12 13:36
Оценка: +1
Здравствуйте, igna, Вы писали:

P>>это просто пруфлинк — ты можешь не проверять

I>Проверять и не собирался, просто народ собрался интересный, хотел узнать, что они там еще говорят. Но нет, так нет.

там много чего ещё есть, например http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Interactive-Panel-Ask-Us-Anything- ,
http://channel9.msdn.com/Events/GoingNative/GoingNative-2012 , http://channel9.msdn.com/Events/Speakers/Herb-Sutter
ну и т.п.
язык там очень простой, школьного уровня должно хватить
Re[4]: C vs. C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.09.12 14:07
Оценка:
Здравствуйте, Piko, Вы писали:

P>если использовать C++ для ядра Linux — то

P>1. желательно многое переделать -> это уже будет не Linux
P>2. часть сообщества самовыпилится из-за не знания или отрицания C++, включая Линуса, новые члены заполнят вакуум не сразу.
P>3. такие потрясения нафиг никому не нужны

Ээээ. Ну, если вы считаете, что ядро имеет смысл продолжать развивать на Си просто потому, что так исторически сложилось, непонятно, почему этот подход применяется только для ядра. Есть еще большие и ценные куски софтвария, исторически написанные на Си — те же иксы, гномий дектоп и т.п.

P>Что же касается использования C++ для ядер в общем, то процитирую Страуструпа, так как полностью согласен с ним:

P>http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Interactive-Panel-The-Importance-of-Being-Native
P>"Of course C++ is much better for kernel than C. I mean, who be stupid enough to say otherwise" 1:02:50

Страуструп никогда не умел изъясняться внятно
Re[3]: C vs. C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.09.12 14:07
Оценка:
Здравствуйте, igna, Вы писали:

Pzz>>libxml2 — это адъ и ужос!


I>А что так?


Уровень сложности не соответствует уровню документированности, плюс слишком много "исторических наслоений".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.