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

Pzz>Уровень сложности не соответствует уровню документированности, плюс слишком много "исторических наслоений".


А что использовать вместо libxml2 в качестве парсера HTML?
Re[7]: C vs. C++
От: OZ1 Россия  
Дата: 12.09.12 14:49
Оценка: -1 :)))
Здравствуйте, A13x, Вы писали:

A>Здравствуйте, MasterZiv, Вы писали:



>>> С++ прост как палка.


A>По сравнению с чем?

A>По сравнению с С или Java это очень сильно не так, говорю исходя из собственного опыта, особенно вспоминая мой давний опыт windows программирования когда приходилось использовать COM компоненты в MFC приложении.

Вот как раз COM — это лучшее и самое чистое, что когда либо сделали из C++. Если посмотреть, что там осталось от C++, то какбы наводит на некоторые мысли. Вместе с тем, что тот же COM сервер можно и на C сделать.
Re[5]: C vs. C++
От: Piko  
Дата: 12.09.12 16:30
Оценка:
Здравствуйте, Pzz, Вы писали:

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
Pzz>Страуструп никогда не умел изъясняться внятно

хм, может дело не в Страуструпе?
например я его понимаю — всё достаточно внятно

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

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

а вот как раз не внятно, можешь пояснить?
1. ты думаешь легко переделать всё ядро на C++ ?
2. Почему только для ядра? Если есть какое-либо другое дерьмо мамонта написанное на C, исправно выполняющее свои функции, то нахрена его переделывать на C++?
3. Гномий десктоп? да и хрен с ним — пусть живёт себе

В чём проблема-то?
Re[8]: C vs. C++
От: Piko  
Дата: 12.09.12 16:34
Оценка:
Здравствуйте, Радужный Пряник, Вы писали:

OZ1>Вот как раз COM — это лучшее и самое чистое, что когда либо сделали из C++. Если посмотреть, что там осталось от C++, то какбы наводит на некоторые мысли. Вместе с тем, что тот же COM сервер можно и на C сделать.


ты вообще о чём?

http://en.wikipedia.org/wiki/Component_Object_Model

Component Object Model (COM) is a binary-interface standard for software componentry introduced by Microsoft in 1993. It is used to enable interprocess communication and dynamic object creation in a large range of programming languages.

Re[5]: C vs. C++
От: Трололоша  
Дата: 12.09.12 17:45
Оценка:
Здравствуйте, Pzz, Вы писали:

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

Pzz>Страуструп никогда не умел изъясняться внятно
Что именно тебе непонятно в этой фразе?
... << RSDN@Home >>
Да, йа зелёный тролль!
Re[7]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 12.09.12 17:50
Оценка:
MTD>1. Не понятно, что с ошибками. Обычно в C функции возвращают код ошибки, здесь мне не понятно, что будет если например вместо file передам 0.

Я обычно выбрасываю исключение. Это сильно упрощает обработку ошибок. В случае 0 должно быть исключение, но пока может и не быть, библиотека пока в стадии разработки и не все кейсы реализованы.

MTD>2. Создали arr типа YO_ARRAY, где потом arr используется? Не понятно.


Наверное там, откуда вызвали функцию.

MTD>3. Что такое Pchars? Я еще пойму просто char или там utf32, но это


В любой более менее сложной библиотеке есть свой словарь и свои концепции. Это один из элементов. В данном случае это массив с владением строками. То что строками, означает что он умеет корректно их удалять при разрушении, а также выполнять дополнительные операции, например сортировку или упорядоченную вставку.

MTD>3. Oj_Read_Line, как я понял вернет нулевой указатель когда будет достигнут конец файла. Как определить, что это не конец, а ошибка файла?


В случае ошибки будет выброшено исключение.

MTD>4. Куда помещает строку Array_Push? Из кода не понятно.


Это опечатка. Я собирал ребёнка в садик когда писал этот пример, так что проморгал. Array_Push(arr,S)

MTD>5. Для чего нужно __Retain?


Oj_Read_Line, как и большинство функций yoyo, возвращает строку жизненный цикл которой управляется авторелизпулом. __Retain снимает обьект с пула, по причине того что все контейнеры владеющие своим содержимым получают не только объект но и право владения над ним.

MTD>6. Почему местами YO, а местами Oj? Разные библиотеки?


YO_ очевидно почему, Oj_ префикс абстрактного протокола. Если объект не поддерживает протокол, будет выброшено исключение.

MTD>7. Почему локальная переменная arr, но локальная переменная S?


Элемент стиля кодирования. S — строчный объект. То есть последовательность чего бы то ни было.
Re[5]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 12.09.12 17:59
Оценка:
U>Что, это кроме тебя кто-нибудь использует? Буду очень удивлен. В коде нет комментариев. Не просто очень мало, а вообще нет. Нуль полный. Что этот код делает? Кроме создателя никто не знает. И не дай бог узнает! Коммиты тоже не блещут выразительностью. "updated", "updated", "updated", опять "updated". Что трудно для себя хотя бы написать, что ты там изменил?

Без понятия. Но скорее всего нет, я пока про эту либу кроме как на КЫВТ нигде не писал. Во-первых ещё несколько сыровато, во-вторых слишком сильно ещё всё меняется, в-третьих — я это для себя пишу, а не для кого-то.

Коммиты синхра с fossil репозиторием, другими они не будут. Да и смысла особого в стадии активного развития писать портянки о том что именно изменилось? К тому же для самого себя. Чисто для истории разве что. Слишком много чего меняется.

Кстати, про пожелания — спасибо. Надеюсь что люди не умеющие читать код, никогда этой либой пользоваться не будут. ) Потому комментарием и доки в духе доксигена там в жизни не будет.
Re[7]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 12.09.12 18:06
Оценка: :))
AS>>простота использования ставит C++ в какое-то непонятное положение
MTD>Заметно. И это мы еще до обработки ошибок не дошли (ее тут нет), когда окажется, что твой код сыпется как карточный домик.

MTD>
MTD>typedef std::vector<std::string> string_list;
MTD>void read_lines(std::istream& from, string_list& to)
MTD>    while (std::getline(from, buf))
MTD>


И что здесь она есть? Особенно при условии что я как-то не вижу включения обработки исключений для плюсовых потоков. Какое кстати состояние контейнера to в случае если исключения таки включены, и где-то по ходу произошла ошибка чтения? Можно ещё поинтересоваться — STL даёт возможность прочитать строчки с сети или с выхлопа чайлд-процесса? Или надо к нему ещё небольшого такого монстрика на выручку позвать?

MTD>
MTD>YO_ARRAY *Oj_Get_Lines(void *file) {
MTD>  while ((  S = Oj_Read_Line(file) )) Array_Push(__Retain(S));
MTD>  return arr;
MTD>


Ошибки здесь превосходно обрабатываются. Код автоматически устойчив к исключениям.
Re[6]: C vs. C++
От: Piko  
Дата: 12.09.12 18:25
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>Кстати, про пожелания — спасибо. Надеюсь что люди не умеющие читать код, никогда этой либой пользоваться не будут. ) Потому комментарием и доки в духе доксигена там в жизни не будет.


надо придумать некую карательную процедуру за использование комментариев типа:
/*
   Does some shit.
   Return value type - int.
   first arguments name - arg1, type double
   second arguments name - arg2, type char
*/
int do_some_shit(double arg1,char arg2){...}

у меня в уме не укладывается, как люди с более чем 10ю годами опыта могут рожать такое гуанно. а главное, как они удерживаются на своих стульях?
Re[7]: C vs. C++
От: night beast СССР  
Дата: 12.09.12 19:13
Оценка:
Здравствуйте, Piko, Вы писали:


AS>>Кстати, про пожелания — спасибо. Надеюсь что люди не умеющие читать код, никогда этой либой пользоваться не будут. ) Потому комментарием и доки в духе доксигена там в жизни не будет.


P>надо придумать некую карательную процедуру за использование комментариев типа:

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

только вот не надо на доксиген гнать.
капитанские комментарии и без него пишут.
Re[8]: C vs. C++
От: Трололоша  
Дата: 12.09.12 19:36
Оценка: +1
Здравствуйте, night beast, Вы писали:

NB>только вот не надо на доксиген гнать.

NB>капитанские комментарии и без него пишут.

Когда принудительно внедряют doxy, особенно если стоит при коммите автопроверка и коммит не проходит если нету комментария — вот тогда комменты от Кэпа валят сотнями.
... << RSDN@Home >>
Да, йа зелёный тролль!
Re[9]: C vs. C++
От: night beast СССР  
Дата: 13.09.12 03:56
Оценка:
Здравствуйте, Трололоша, Вы писали:

NB>>только вот не надо на доксиген гнать.

NB>>капитанские комментарии и без него пишут.

Т>Когда принудительно внедряют doxy, особенно если стоит при коммите автопроверка и коммит не проходит если нету комментария — вот тогда комменты от Кэпа валят сотнями.


это не проблема доксигена.
при желании и молотком можно голову разбить.
Re[10]: C vs. C++
От: Трололоша  
Дата: 13.09.12 12:07
Оценка:
Здравствуйте, night beast, Вы писали:

Т>>Когда принудительно внедряют doxy, особенно если стоит при коммите автопроверка и коммит не проходит если нету комментария — вот тогда комменты от Кэпа валят сотнями.

NB>это не проблема доксигена.

Отчасти да, но Doxy тут срабатывает как катализатор.
... << RSDN@Home >>
Да, йа зелёный тролль!
Re[8]: C vs. C++
От: MTD https://github.com/mtrempoltsev
Дата: 13.09.12 16:18
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>>>простота использования ставит C++ в какое-то непонятное положение

MTD>>Заметно. И это мы еще до обработки ошибок не дошли (ее тут нет), когда окажется, что твой код сыпется как карточный домик.

AS>И что здесь она есть?


Да.

AS>Особенно при условии что я как-то не вижу включения обработки исключений для плюсовых потоков.


Если хочешь об этом поговорить — напиши свой код с обработкой ошибок, потом напишу я.

AS>Какое кстати состояние контейнера to в случае если исключения таки включены, и где-то по ходу произошла ошибка чтения?


Консистентное.

AS>Можно ещё поинтересоваться — STL даёт возможность прочитать строчки с сети или с выхлопа чайлд-процесса? Или надо к нему ещё небольшого такого монстрика на выручку позвать?


А С дает?

AS>Ошибки здесь превосходно обрабатываются. Код автоматически устойчив к исключениям.


А если я 0 в функцию передам? А что будет если при чтении из файла будет ошибка?
Re[8]: C vs. C++
От: MTD https://github.com/mtrempoltsev
Дата: 13.09.12 16:21
Оценка: 1 (1)
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>В любой более менее сложной библиотеке есть свой словарь и свои концепции.


Хорошей библиотекой легко пользоваться правильно и тяжело неправильно. В твоем коде боюсь только ты разбираешься, да и то сомнительно — вон сколько сам ошибок понаделал
Re[9]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 13.09.12 17:00
Оценка:
AS>>И что здесь она есть?
MTD>Да.

Да что ты говоришь!? Ну ладно, допустим что это даже будет работать. (в том смысле что исключения для IOstreams включены).

AS>>Особенно при условии что я как-то не вижу включения обработки исключений для плюсовых потоков.

MTD>Если хочешь об этом поговорить — напиши свой код с обработкой ошибок, потом напишу я.

Обработка ошибок зависит не от этого кода, а от того где и как он используется. Её вообще может и не быть как таковой.

AS>>Какое кстати состояние контейнера to в случае если исключения таки включены, и где-то по ходу произошла ошибка чтения?

MTD>Консистентное.

Консистентное с точки зрения контейнера, языка или контекста его использования?

AS>>Можно ещё поинтересоваться — STL даёт возможность прочитать строчки с сети или с выхлопа чайлд-процесса? Или надо к нему ещё небольшого такого монстрика на выручку позвать?

MTD>А С дает?

Хм, С как и С++ ни кому не даёт, а только берёт ))) Но, однако, моя игрушечная библиотека позволяет это сделать элементарно.

AS>>Ошибки здесь превосходно обрабатываются. Код автоматически устойчив к исключениям.

MTD>А если я 0 в функцию передам? А что будет если при чтении из файла будет ошибка?

Исключение вылетит. Причём исключения будут разные при разных ошибках. А там уж как тебе по контексту нужно ошибки обрабатывать, то и делаешь. И да, память и системные ресурсы не утекут, а корректно освободятся при броске исключения. Ужас да?
Re[9]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 13.09.12 17:01
Оценка:
AS>>В любой более менее сложной библиотеке есть свой словарь и свои концепции.
MTD>Хорошей библиотекой легко пользоваться правильно и тяжело неправильно. В твоем коде боюсь только ты разбираешься, да и то сомнительно — вон сколько сам ошибок понаделал

О! Каких если не секрет?!
Re[10]: C vs. C++
От: MTD https://github.com/mtrempoltsev
Дата: 14.09.12 04:34
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>Да что ты говоришь!? Ну ладно, допустим что это даже будет работать. (в том смысле что исключения для IOstreams включены).


Это будет работать, а вот будет ли работать твой код для меня вопрос.

AS>Обработка ошибок зависит не от этого кода, а от того где и как он используется. Её вообще может и не быть как таковой.


Напиши код который открывает файл, читает и корректно его закрывает с учетом возникновения ошибок, тогда и поговорим.

AS>Консистентное с точки зрения контейнера, языка или контекста его использования?


С любой точки зрения.

AS>Хм, С как и С++ ни кому не даёт, а только берёт ))) Но, однако, моя игрушечная библиотека позволяет это сделать элементарно.


Моя тоже, при этом я не смогу в данный код сунуть непонятно что — он типизирован. В твоем коде работать компилятором — проверять допустимость типов, должен пользователь.

AS>Исключение вылетит. Причём исключения будут разные при разных ошибках. А там уж как тебе по контексту нужно ошибки обрабатывать, то и делаешь. И да, память и системные ресурсы не утекут, а корректно освободятся при броске исключения. Ужас да?


Напиши код который открывает файл, читает и корректно его закрывает с учетом возникновения ошибок, тогда и поговорим.
Re[10]: C vs. C++
От: Piko  
Дата: 14.09.12 10:27
Оценка:
P>>во-первых, какие-либо тесты будут? или только "экспоненциальный" трёп? а то ведь это место скользкое — push/pop, frame stuff и т.п. может стоит больше по размеру чем инлайн малюсенькой функции.
P>>во-вторых, мы вроде про оптимизацию говорим, и видимо по скорости, не? Ну а если нужна оптимизация по размеру — то и она получится лучше и безопасней на C++
SN>>Если тебе не очевидно, что при использовании шаблонов для эмуляции полиморфизма они будут развернуты с дублированием кода, то тут нечего добавить.

http://www.stroustrup.com/abstraction-and-machine.pdf

The performance of this code depends on inlining of function calls. It has correctly been observed that inlining can lead to code bloat when a large function is inlined many times (either for many different calls or for a few calls but with different template arguments).
However, that argument does not apply to small functions (such as, the += and + defined for complex) where the actual operation is smaller and faster than the function preamble and value return. In such cases, inlining provides improvements in both time and space compared with ordinary functions and ordinary function calls. In fact, a popular use of class objects and inline function is to implement parameterization where the parameter can be a single machine instruction, such as <



P>если тебе не очевидно, что дублирование может оптимизироваться до суммарных размеров меньших чем с void*, а то и вообще до нулевых, то я

P>например, напиши void* аналог std::max
Re[11]: C vs. C++
От: Alexéy Sudachén Чили  
Дата: 14.09.12 12:11
Оценка: -2 :)
AS>>Обработка ошибок зависит не от этого кода, а от того где и как он используется. Её вообще может и не быть как таковой.
MTD>Напиши код который открывает файл, читает и корректно его закрывает с учетом возникновения ошибок, тогда и поговорим.

На этом форуме уже писал и не раз, лично тебе чего-то доказывать смысла не вижу (как и кому бы то ни было вообще). Мне вот честно глубоко пофигу чего ты там считаешь относительно моего кода. Моё дело показать что можно и так, а уж нужно ли это ещё кому-то — мне глубоко фиолетово.

AS>>Консистентное с точки зрения контейнера, языка или контекста его использования?

MTD>С любой точки зрения.

Ошибаешься.

MTD>Напиши код который открывает файл, читает и корректно его закрывает с учетом возникновения ошибок, тогда и поговорим.


Вот только я не вижу смысла с тобой говорить. Кто ты такой — архитектор всия вселенной?! На твои вопросы по делу я ответил, играть же в игру 'а докажи' — мне не интересно. Более того, как бы очевидно как это работает, если тебе не, то может стоит немного поуменьшить ЧСВ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.