Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C && C++ 
:(
    Опции темы
Letchik
Дата 1.8.2010, 20:29 (ссылка)    | (голосов:8) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



Доброго времени суток!
Как вы уже догадались, топик посвящается языкам С и С++. Однако, я не буду задавать вопрос "какой язык лучше?". Нет. Не буду кота за я"ца тянуть. Оба языка мне нравятся.
Процедурное программирование, т.е. чистый С хорош во многом. Особенно он мне понравился в разработке Windows приложений. Код получается весьма обширным, легко запутаться, но программа получается очень быстрой и маленькой по объёму. Нет ничего лишнего, только то, что мне надо. Реализовать такую простоту средствами ООП у меня не получилось. Может руки не с того места растут? Может быть... У меня мало опыта. Но зачем мне огромная куча объектов типа (к примеру) СButton? Каждая кнопка выполняет определённое действие, значит надо создавать множество классов наследников с виртуальными процедурами обработки. То же самое касается других элементов интерфейса. Согласитесь, это лишнее.
Однако, есть области программирования, где без ООП не обойтись. В таких случаях писать код на чистом С будет очень затратно и логических ошибок не избежать. 
Так как же? Совмещать оба языка? К примеру писать интерфейс программы на С, а суть программы писать, по необходимости, на С++. Приемлемо ли это? Или нужно выбрать конкретный язык?
Вопрос странный, понимаю, но тем не менее, помогите, пожалуйста, разобраться в этом очень нелёгком вопросе.

P.S. я большой противник всяких там MFC, VCL, Qt и тому подобное. Мне кажется, они лишают нас всего кайфа программирования.
PM MAIL Skype   Вверх
VictorTsaregorodtsev
Дата 1.8.2010, 20:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 28.7.2006

Репутация: 1
Всего: 8



Цитата(Letchik @  1.8.2010,  20:29 Найти цитируемый пост)
Каждая кнопка выполняет определённое действие, значит надо создавать множество классов наследников с виртуальными процедурами обработки. 

Нафига делать кучу наследников? В классе "Кнопка" для каждого возможного там действия заводится поле-указатель на функцию, а потом для каждого экземпляра класса пишутся функции с нужной функциональностью (сорри за тавтологию) и полям-указателям присваиваются адреса нужных функций.
Т.е. класс - один, экземпляров класса в программе может быть несколько, и у этих экземпляров могут быть инициализированы разные указатели (отвечающие за разные действия).
PM MAIL WWW   Вверх
kemiisto
Дата 1.8.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
У меня мало опыта.

Оно и понятно. Не в обиду.

Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
Код получается весьма обширным, легко запутаться, но программа получается очень быстрой и маленькой по объёму.

Первое, о чём стоит заботиться - простой и ясный как день код. Программа не должна быть очень быстрой, она должна быть достаточно быстрой. Достаточно, чтоб не вызывать дискомфорта у конечного пользователя.

Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
Но зачем мне огромная куча объектов типа (к примеру) СButton? Каждая кнопка выполняет определённое действие, значит надо создавать множество классов наследников с виртуальными процедурами обработки.

Множеста классов не надо создавать. Объект = данные + код. Все кнопки - экземпляры одного класса СButton, а код обработчика какого-либо события у них может быть разным.

Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
Так как же? Совмещать оба языка? К примеру писать интерфейс программы на С, а суть программы писать, по необходимости, на С++. Приемлемо ли это? Или нужно выбрать конкретный язык?

Писать интерфейс на С/С++ - почти всегда использование не по назначению.


Это сообщение отредактировал(а) kemiisto - 1.8.2010, 20:42


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Abyx
Дата 1.8.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
К примеру писать интерфейс программы на С, а суть программы писать, по необходимости, на С++. Приемлемо ли это?

только в случае если интерфейс будет вызывать код на другом языке
PM MAIL   Вверх
cutwater
Дата 1.8.2010, 22:09 (ссылка) |    (голосов:11) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Цитата(Letchik @  1.8.2010,  19:29 Найти цитируемый пост)

P.S. я большой противник всяких там MFC, VCL, Qt и тому подобное. Мне кажется, они лишают нас всего кайфа программирования. 


А что же Вы предлагаете? Я конечно понимаю юношеский максимализм, но когда/если дорастете до проектов крупных и за которые платят деньги, поймете что основная цель - решить поставленную задачу в приемлимые сроки. За кайф от программирования заказчики не платят.
Но даже если смотреть на этот вопрос не с точки зрения затрат времени. Я не думаю что разработчику, которому нужно нарисовать интервейс будет в кайф реализовывать мегатонны велосипедов, архитектурный дизайн и прочие возможности, которые предоставляют фреймворки уровня Qt. Поверье есть задачи намного более сложные, чем натыкивание кнопочек на форму, которые решают и на уровне выше графической библиотеки, то есть различные извращения с интерфейсом, оптимизация под конкретные задачи и прочее. Сложный интерфейс сделать ведь тоже не легко. А так же задачи, решаемые на уровне ниже графического интерфейса, в ядре приложения. А переписывать каждый раз избитые велосипеды снова и снова это не кайф, а ненужная трата времени. Плюс тонны ошибок в этих велосипедах, которые так же нужно покрывать и отлаживать.
Думаю/надеюсь с опытом это пройдет.

Это сообщение отредактировал(а) cutwater - 1.8.2010, 22:09


--------------------
user posted image
PM MAIL   Вверх
bsa
Дата 1.8.2010, 22:28 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Letchik @  1.8.2010,  21:29 Найти цитируемый пост)
Мне кажется, они лишают нас всего кайфа программирования.
Ты заблуждаешься. Кайф программирования заключается в том, что ты делаешь что-то новое и полезное, познаешь что-то новое. Клепать "окошки" и расставлять кнопочки это вообще работа дизайнера.
PM   Вверх
Letchik
Дата 1.8.2010, 22:48 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 5.1.2010
Где: UGTB

Репутация: нет
Всего: нет



cutwater, согласен, в программировании интерфейса мало чего интересного. Там мало интересных инженерных решений. Это просто рутинная работа, которую, если честно, я всегда не любил. Всегда было желание ускорить этот процесс и перейти к части, где нужно подумать и найти интересное решение проблемы. Пожалуй, я неправильно выразился и проблема с написанием интерфейса заключается в другом. Я провёл небольшой опыт. Написал две абсолютно идентичныео по функциональности программы: обе тупо создают пустое белое окно. Первая программа была написана с помощью MFC, другая на чистом С. Разница меня не порадовала. Окно написанное на MFC занимало в оперативной памяти на 1мб больше чем окно, написанное на С. И это всего лишь одно простое окошко. Что говорить о серьёзном приложении?
Но судя по вашим отзывам, вы за то, чтобы программировать только на С++. Я правильно понимаю?
PM MAIL Skype   Вверх
kemiisto
Дата 1.8.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(Letchik @  1.8.2010,  23:48 Найти цитируемый пост)
Первая программа была написана с помощью MFC, другая на чистом С. Разница меня не порадовала. Окно написанное на MFC занимало в оперативной памяти на 1мб больше чем окно, написанное на С. И это всего лишь одно простое окошко. Что говорить о серьёзном приложении?
  • Серьёзное приложение с графическим интерфейсом на чистом С можно не дописать и до конца света. smile 
  • Не надо сравнивать пустые окна. Нужно сравнивать готовые приложения. И не только размер в оперативной памяти, но и трудозатраты.

Цитата(Letchik @  1.8.2010,  23:48 Найти цитируемый пост)
 судя по вашим отзывам, вы за то, чтобы программировать только на С++. Я правильно понимаю?

Боже, нет! Ну не надо С++! 2010 год на дворе, всё, хватит...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
bsa
Дата 1.8.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(kemiisto @  1.8.2010,  23:55 Найти цитируемый пост)
Боже, нет! Ну не надо С++! 2010 год на дворе, всё, хватит... 
Предлагай людям альтернативные языки менее эмоционально. Все-таки, мы в разделе С++.  smile 

Letchik, как ты думаешь, почему тот же Qt цветет и пахнет? А я тебе скажу, что 1 мегабайт роли не играет. Так как это константная плата за удобство. При большем расширении функционала объем занимаемой памяти будет не так сильно расти.
PM   Вверх
Modul
Дата 1.8.2010, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



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

Цитата

Ну не надо С++! 2010 год на дворе, всё, хватит...


Особого смысла не вижу, если только клиент не требует. Везде работать надо.
Желание клиента - закон ! Он платит.

Интересен Ваш выбор ?
С#, Java или ???

Это сообщение отредактировал(а) Modul - 1.8.2010, 23:32
--------------------
I'll be back !
PM MAIL   Вверх
kemiisto
Дата 2.8.2010, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(Modul @  2.8.2010,  00:29 Найти цитируемый пост)
ООП-языки придуманы из-за увеличиваюшихся размеров и сложности программ, а потом и их расширения.

Не совсем так. Изначально ООП появилось как средство симуляции в Simula-I. В этом языке были activity (классы) и process (объекты). В Simula-67 уже повилось слово class. Ole-Johan Dahl и Kristen Nygaard опирались среди прочего и на работу C. A. R. Hoare    
Record Handling.

Потом был Alan Kay со товарищи и Smalltalk. ООП - как средство построения графического интерфейса. Но в итоге опыт обобщили до любых сложных задач.

В итоге посыла было два:
Цитата
Though OOP came from many motivations, two were central. The large scale one was to find a better module scheme for complex systems involving hiding of details, and the small scale one was to find a more flexible version of assignment, and then to try to eliminate it altogether.

Alan Kay, The Early History of Smalltalk

Цитата(Modul @  2.8.2010,  00:29 Найти цитируемый пост)
Интересен Ваш выбор ?
С#, Java или ???

C# - можно, вместо Java лучше Scala. Ещё можно попробовать динамические ЯП. Тот же Python. Есть наблюдение, что любителям C нравится Python. Smalltalk тоже можно. Да много языков... smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
mrbrooks
Дата 2.8.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(kemiisto @  2.8.2010,  09:37 Найти цитируемый пост)
C# - можно, вместо Java лучше Scala. Ещё можно попробовать динамические ЯП. Тот же Python. Есть наблюдение, что любителям C нравится Python. Smalltalk тоже можно. Да много языков... 

ооо. прогресс. раньше помнится был только Оберон  smile 
PM MAIL   Вверх
azesmcar
Дата 2.8.2010, 08:43 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Letchik @  1.8.2010,  20:29 Найти цитируемый пост)
P.S. я большой противник всяких там MFC, VCL, Qt и тому подобное. Мне кажется, они лишают нас всего кайфа программирования. 

Знаешь в чем кайф программирования? Написал программу, сдал, получил деньги и кайфуешь smile 
А сидеть пару месяцев над простейшей программой, только потому, что тебе "не в кайф" учить Qt или .NET, а хочется поработать на WinAPI и сотворить пару сотен велосипедов - это уже патология. 
PM   Вверх
Earnest
Дата 2.8.2010, 11:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(azesmcar @  2.8.2010,  09:43 Найти цитируемый пост)
 это уже патология.  

Ну, не надо так категорично. Для новичка это нормально и даже полезно. И кайф есть - сделать самому всякие красивости, и заодно понять как оно работает. 
Но через некоторое время должно надоесть, или просто станет жаль время тратить (а на кнопочки его много уходит, если приходится нестандартный велосипед изобретать). 
Если, конечно, не работаешь в команде, которая на таких библиотеках специализируется.


--------------------
...
PM   Вверх
GrayCardinal
Дата 2.8.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Ха. Если программу можно написать на чистом Си - лучше так и сделать. Если придет понимание того, что без классов не обойтись - дописываем нужные классы. То же с ассемблером. Ежели очень хочется - то можно. И почему некоторые пишут на чистом Си++ (всё есть классы) лично я не догоняю.


--------------------
PM MAIL WWW   Вверх
HellStranger
Дата 2.8.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(GrayCardinal @  2.8.2010,  11:29 Найти цитируемый пост)
Ха. Если программу можно написать на чистом Си - лучше так и сделать. Если придет понимание того, что без классов не обойтись - дописываем нужные классы. То же с ассемблером. Ежели очень хочется - то можно. И почему некоторые пишут на чистом Си++ (всё есть классы) лично я не догоняю.


Абсолютно согласен! Я уже приводил минимум 5 проектов, написанных на чистейшем C (в некоторых применяется ООП, но реализация всех классов на том же старом добром C), широко и не очень применяемых под разными осями. То есть, люди хорошо знающие C, прекрасно обходятся без всех довольно спорных прелестей C++, а главное в практически такие же сроки, как, если бы задача решалась на cpp. Плюс, многие здесь говорят, что программа не должна быть очень быстрой, а должна быть довольно быстрой... Знаете, товарищи, воообще-то для серверного ПО скорость очень критична, как и затраты ресурсов. И здесь cpp до C как до Киева в одной позе... Приведу простой пример: компания контент-провайдер, в которой я работаю, разработала и использует 2 плоатформы: 3G_Video_IVR (работал в Германии) и платформа для sms. Первая- вся начинка сишная, вторая- cpp. Так вот 3G_Video_IVR  держал 10 видео абонентов на Pentium 4 3.4 GHz с гигом оперативки под XP и грузил проц на 25-30% максимум, вторая по 5 раз на дню вылетает при более-менее нормальной нагрузке: 100-1000 sms. Я думаю, не нужно здесь доказывать, что обработка online-видео c перекодированием на лету и работа со строками длиной до 150 символов- разной сложности задачи.
Возьмём ту же асму. Если человек хорошо знает архитектуру процессора, систему команд и операционку, под которую пишет, то серверное приложение будет разработано в те же сроки, что и приложение на cpp (всё-равно использовать API системы и там и там). Только вот кому будет нужен cppшный сервак, когда есть асмовский... 
А мораль сей басни такова: нужно быть профессионалом в том, чем ты занимаешься, и тогда границы между asm, C, C++, C# и т.д. и т.п. становятся очень размытыми... В идеале, современный программист должен знать всё, и выбирать язык и технологии в зависимости от задачи. А меряться: писька у cpp длиннее всех, а C и asm- прошлый век, это очень не умно. 
PM MAIL   Вверх
Modul
Дата 2.8.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата

Но в итоге опыт обобщили до любых сложных задач.


Вот. И теперь мы решаем сложные и еще более сложные задачи.

Мы же говорим про настоящий момент и немного на перспективу ! smile 

Кроме того есть теоретики и практики.

Есть и определенные критерии (показатели) оценки эффективности.
Например скорость разработки, спрос, зарплата.

А смысл изучать что-то хорошее, но мало востребованное.
Нонсенс !

Да еще важна специализация работника - к чему он тяготеет.

Цитата

Но через некоторое время должно надоесть велосипед изобретать

Все хорошее уже изобретено.
...и человек займется наконец своей работой !  smile 

Цитата

И почему некоторые пишут на чистом Си++ (всё есть классы) лично я не догоняю.

Тоже верно.
Смысл писать 1 функцию и для нее класс, потом еще создать объект и его удалить.
Написал DLL, загрузил сишным методом и дело сделано.
Отсюда вывод:
Зачем из пушки по воробьям стрелять. Незачем !

Другое дело - большой класс, например парсер с 10 функциями.
Здесь без ООП просто не обойтись.

Можно здание строить из кирпичиков и из глины, долго месить и построить через 3 года.
А можно из блоков (классов-объектов) или из панелей (готовые классы).
Результат - полгода.
Зарплата та же.

p.s. Философия ООП
--------------------
I'll be back !
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(GrayCardinal @  2.8.2010,  12:29 Найти цитируемый пост)
И почему некоторые пишут на чистом Си++ (всё есть классы) лично я не догоняю. 

потому что код должен быть повторно используемым, масштабируемым, удобным для рефакторинга, etc
PM MAIL   Вверх
Modul
Дата 2.8.2010, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата

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


и потом еще можно свое творение (класс) снабдить описанием и толкнуть на рынке.

Чем не повторное использование, только на рынке.  smile 

Еще на этой основе встречаются библиотеки - довел до ума - покупай !
--------------------
I'll be back !
PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(Abyx @  2.8.2010,  12:26 Найти цитируемый пост)
потому что код должен быть повторно используемым, масштабируемым, удобным для рефакторинга, etc


Загнал в тупик... Как тогда тысячи программеров с FFMPEG разбираются?.. Как новые программеры сего проекта продолжают его дальнейшую разработку?.. У меня на освоение принципов работы с FFMPEG ушла неделя наряду с текущей загруженностью. Ещё через месяц у меня уже был готов простенький видео-редактор, абсолютно с нуля. Live555 меня поверг в уныние через 10 минут просмотра исходного кода... Так что, как говорил Альберт наш Эйнштейн, всё относительно. smile
PM MAIL   Вверх
kemiisto
Дата 2.8.2010, 12:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(HellStranger @  2.8.2010,  13:10 Найти цитируемый пост)
То есть, люди хорошо знающие C, прекрасно обходятся без всех довольно спорных прелестей C++, а главное в практически такие же сроки, как, если бы задача решалась на cpp.

Это доказывает лишь то, что С++ - плохой язык программирования. Плохой во всех смыслах.

Цитата(HellStranger @  2.8.2010,  13:10 Найти цитируемый пост)
Знаете, товарищи, воообще-то для серверного ПО скорость очень критична, как и затраты ресурсов. И здесь cpp до C как до Киева в одной позе...

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

Цитата(HellStranger @  2.8.2010,  13:10 Найти цитируемый пост)
Приведу простой пример

Я что-то ничего из этого примера не подчерпнул. Часть про asm совсем не к месту. Поток сознания. 




--------------------
PM MAIL WWW GTalk Jabber   Вверх
Abyx
Дата 2.8.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(HellStranger @  2.8.2010,  13:10 Найти цитируемый пост)
Возьмём ту же асму. Если человек хорошо знает архитектуру процессора, систему команд и операционку, под которую пишет, то серверное приложение будет разработано в те же сроки, что и приложение на cpp (всё-равно использовать API системы и там и там). Только вот кому будет нужен cppшный сервак, когда есть асмовский... 

чушь это.
если надо только вызывать апи, то код асма  1в1 совпадает с Си. это факт.
если нужна арифметика, в т.ч. обычная арифметика указателей, то асм сливает. количество строк кода отличается на порядки.

но было асм vs Си. теперь асм vs C++.
на асме вы пишете набор функций.
на С++ вы пишете шаблоны функций. т.е. не одну функцию, а сразу семейство функций. используя шаблоны можно настраивать программу, меняя код только в необходимых местах, а не весь сразу.


алсо да. и на С++ и на асме надо еще уметь программировать.

PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 14:48 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(kemiisto @  2.8.2010,  12:53 Найти цитируемый пост)
Ты очень остроумный. Но, тут разговор о десктопе. Так что уж слишком толсто получилось. Незачёт.


Что-то я в названии темы не увидел, что речь идёт ИСКЛЮЧИТЕЛЬНО о desctop, примеры были приведены десктопные, имхо, только потому что автор пока ими и занимался. Так что расписываться в моей зачётке не надо, без вас профессура уже давным-давно справилась. 

Цитата(kemiisto @  2.8.2010,  12:53 Найти цитируемый пост)
Я что-то ничего из этого примера не подчерпнул. Часть про asm совсем не к месту. Поток сознания. 


А у меня нет самоцели, чтобы лично вы что-то поняли. Между делом, в теме упоминались ещё и C#, и Java и ещё много других языков... Тоже не в тему, а в качестве примеров.

Добавлено через 4 минуты и 16 секунд
Цитата(Abyx @  2.8.2010,  13:07 Найти цитируемый пост)
чушь это.если надо только вызывать апи, то код асма  1в1 совпадает с Си. это факт.если нужна арифметика, в т.ч. обычная арифметика указателей, то асм сливает. количество строк кода отличается на порядки.


Знаете, в кривых руках и машинный код чистому C сливает. Я не говорю сейчас о горе-хаккерах, которые изучили систему команд x86 на уровне младших курсов МФТИ и мнят себя мегамозгами в asm. Их код может и cpp слить, что дальше?.. cpp всех круче?.. smile
PM MAIL   Вверх
ncr
Дата 2.8.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Цитата(Letchik @ 1.8.2010,  20:29)
Код получается весьма обширным, легко запутаться, но программа получается очень быстрой и маленькой по объёму.

У вас в корне неправильный подход.

Код должен быть максимально понятным, прозрачным и компактным. Вам же с ним ещё работать, и все эти "легко запутаться" в итоге выльются в бессоные ночи, нервные срывы, красноглазие и прочие страшные слова.

А какого размера получится скомпилированный модуль - 10 Кб или 3 Мб, сколько он памяти будет потреблять - 1 Мб или 50 Мб, и за сколько он у вас выполнит требуемое действие - за 10 микросекунд или за тысячу - НИКОГО не волнует. 


Цитата(Letchik @ 1.8.2010,  20:29)
P.S. я большой противник всяких там MFC, VCL, Qt и тому подобное. Мне кажется, они лишают нас всего кайфа программирования.


Все такими были когда-то smile

Со временем приходит понимание, что настоящий кайф программирования - это свободное от программирования время, которое можно посвятить куда более приятным вещам.
А готовые общепринятые решения весьма ускоряют разработку и, что важно, позволяют сконцентрироваться непосредственно на сути программы, а не тратить время на стопицотое изобретение одних и тех же вспомогательных велосипедов.
PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 14:57 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(Abyx @  2.8.2010,  13:07 Найти цитируемый пост)
на С++ вы пишете шаблоны функций. т.е. не одну функцию, а сразу семейство функций. используя шаблоны можно настраивать программу, меняя код только в необходимых местах, а не весь сразу.


Правда компилятор превращает ваше семейство в такой же набор функций. smile Я сейчас не говорю об удобстве, по-моему уже стопятьсот раз упоминалось, что нужно миллион шаблонов и классов на все случаи жизни- .NET Framework уже есть, смысла изобретать велосипед не вижу...

Добавлено через 3 минуты и 30 секунд
Цитата(ncr @  2.8.2010,  14:56 Найти цитируемый пост)
А какого размера получится скомпилированный модуль - 10 Кб или 3 Мб, сколько он памяти будет потреблять - 1 Мб или 50 Мб, и за сколько он у вас выполнит требуемое действие - за 10 микросекунд или за тысячу - НИКОГО не волнует. 


Специально для вас был создан .NET Framework. Сколько клиентов за эти 10 микросекунд: 10 или 10000 сможет обслужить сервер тоже никого не волнует?.. Вы перегрелись на солнышке, уважаемый... smile
PM MAIL   Вверх
mes
Дата 2.8.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(HellStranger @  2.8.2010,  13:57 Найти цитируемый пост)
 что нужно миллион шаблонов и классов на все случаи жизни- .NET Framework уже есть

и сколько можно эту гадость пиарить ? к тому же еще только виндоус ориентированную.. 
 smile 


HellStranger, приведите обоснование тому факту, который Вы не раз озвучивали, о том, что С++ сливает Си..


--------------------
PM MAIL WWW   Вверх
ncr
Дата 2.8.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



Цитата(HellStranger @ 2.8.2010,  14:57)
Сколько клиентов за эти 10 микросекунд: 10 или 10000 сможет обслужить сервер тоже никого не волнует?.. Вы перегрелись на солнышке, уважаемый... smile


Объясню для непонятливых.

Топикстартер хочет писать интерфейс на "чистом С". Написанное мной следует понимать в этом контексте.

"Интерфейс" не обслуживает 10000 клиентов за 10 микросекунд.
Поэтому за сколько именно микросекунд обновится, например, надпись на кнопке - никого не волнует.


То, что при циклических интенсивных операциях скорость важна - и коню понятно.

PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 15:39 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(mes @  2.8.2010,  15:16 Найти цитируемый пост)
и сколько можно эту гадость пиарить ? к тому же еще только виндоус ориентированную..   


А кто её пиарит-то?.. По-моему, вы определённо перегрелись... )))))))))))) Я вовсе никого не склоняю к её использованию, а просто привожу пример хрени, в которой есть всё на все случаи жизни: для построение клиентских приложений да ещё и для тех, кого производительность ни в каком виде не трогает- просто находка! smile

Цитата(mes @  2.8.2010,  15:16 Найти цитируемый пост)
HellStranger, приведите обоснование тому факту, который Вы не раз озвучивали, о том, что С++ сливает Си..


На эту тему можно нагуглить тонны статей как в пользу C, так и в обратную... Сторонников cpp не убедит ничего из доводов сишников, как и наоборот. А переливать из пустого в порожнее мне уже порядком надоело... Вам станет намного легче, если я выложу пару тройку ссылок на статьи, где говорится как и в чём cpp сливает?.. Уверен на стопятьсот процентов, что подтянутся местные воротилы cpp, и продолжится война C-cpp. Данахононадо. 

PM MAIL   Вверх
bsa
Дата 2.8.2010, 15:53 (ссылка) |    (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(HellStranger @  2.8.2010,  13:10 Найти цитируемый пост)
То есть, люди хорошо знающие C, прекрасно обходятся без всех довольно спорных прелестей C++, а главное в практически такие же сроки, как, если бы задача решалась на cpp.

Я прекрасно знаю Си (очень на это надеюсь). Но при этом я не готов утверждать, что на Си напишу программу сложнее hello world за время, незначительно уступающее оному на  C++. Все-таки, есть вещи, которые удобней и, я уверен, быстрей работают на С++, чем на Си. Например, строки. когда тебе надо сравнить две строки, strcmp будет перебирать все символы, пока не встретятся различия, а std::string может (при желании его разработчиков, конечно) для начала просто сравнить размеры строк - это операция с константной сложностью, в отличие, от strlen. Сортировка с помощью std::sort работает быстрей, чем через qsort. Думаю, список можно продолжать. Конечно, это все достигается за счет увеличения размера программы. Но кому надо, тот добавит ключик -O1 компилятору...
И вообще, ты хоть сам С++ знаешь? Или критикуешь его по типу: "не читал, но осуждаю"?
PM   Вверх
mes
Дата 2.8.2010, 15:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(HellStranger @  2.8.2010,  14:39 Найти цитируемый пост)
) Я вовсе никого не склоняю к её использованию, а просто привожу пример хрени, в которой есть всё на все случаи жизни: для построение клиентских приложений да ещё и для тех, кого производительность ни в каком виде не трогает- просто находка! 

Почему приводить то крайности ? тем более что требует она  специфических языков..  почему бы не привести пример хорошей библиотеки ? хотя бы той самой Qt..

Цитата(HellStranger @  2.8.2010,  14:39 Найти цитируемый пост)
. А переливать из пустого в порожнее мне уже порядком надоело..

тогда и не надо постоянно употреблять, что С++ сливает С.. 
и объективный факт, в общем случае, машина оптимизирует средне-лучше чем человек.. 
Т.е. если даже на паре десятков строчек программист и выйграет, то при увеличении объема сливает..







--------------------
PM MAIL WWW   Вверх
HellStranger
Дата 2.8.2010, 17:21 (ссылка)    | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(bsa @  2.8.2010,  15:53 Найти цитируемый пост)
Например, строки. когда тебе надо сравнить две строки, strcmp будет перебирать все символы, пока не встретятся различия, а std::string может (при желании его разработчиков, конечно) для начала просто сравнить размеры строк - это операция с константной сложностью, в отличие, от strlen. Сортировка с помощью std::sort работает быстрей, чем через qsort.


Вообще-то при сравнении строк сравнивать первым делом их длину как-то не очень умно, "abcdefghij" < "cdefghij", причём длина?.. Да и немного настораживает уверенность по поводу реализации различных алгоритмов в стандартных бибилиотеках разных производителей... Попахивает ОБС (Одна Баба Сказала). Что касается сравнения строк, тоя  уже писал, что strcmp убивает string::compare в десятки раз... qsort- сильно зависит от того, что сортируем, все возмножные варианты не перебрать, но специалдьно для тебя проведу пару тестов и отпишусь. smile

Добавлено @ 17:25
Цитата(bsa @  2.8.2010,  15:53 Найти цитируемый пост)
Я прекрасно знаю Си (очень на это надеюсь).


Ясно... Человек, который знает всё- глупец, не спорь с ним... 

Извиняюсь, что пронёс полную ахинею по поводу C... Ты во всём абсолютно прав! Я беру трубку и идут курить в корридоре...  smile

Добавлено @ 17:26
Цитата(bsa @  2.8.2010,  15:53 Найти цитируемый пост)
И вообще, ты хоть сам С++ знаешь? Или критикуешь его по типу: "не читал, но осуждаю"?


О чём здесь говорил, знаю и использовал неоднократно! "Прекрасно" C++ не знаю и никогда не узнаю. Во-первых, это невозможно, во-вторых, у меня другие интересы в программировании.

Добавлено через 9 минут и 19 секунд
Цитата(mes @  2.8.2010,  15:55 Найти цитируемый пост)
почему бы не привести пример хорошей библиотеки ? хотя бы той самой Qt..


Хотя бы просто потому, что "хорошая библиотека Qt"- это очень спорный вопрос. Кому-то нравится, кому-то совсем наоборот. Можно привести и wx, но и здесь всё очень спорно. А по поводу .NET я ни слова не сказал, что это "хорошая" технология!

Это сообщение отредактировал(а) HellStranger - 2.8.2010, 17:27
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



HellStranger, давайте соревнование замутим? реализуем какой-нить простенький алгоритмик типа вычисления множества мандельброта, вы на Сях или чем хотите, и я на С++ или чем захочу?)
потом сравним производительность и LOC (объем кода)
PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 18:26 (ссылка)   | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(Abyx @  2.8.2010,  18:12 Найти цитируемый пост)
HellStranger, давайте соревнование замутим? реализуем какой-нить простенький алгоритмик типа вычисления множества мандельброта, вы на Сях или чем хотите, и я на С++ или чем захочу?)потом сравним производительность и LOC (объем кода)


Хоть я и обещал не отвечать на ваши посты, но так уж и быть...

Только в свободное от проектов время, а это будет не раньше сентября. Так как за соревнования заказчик, к сожалению, не платит. А работа дороже...
Так как неоднократно поднимался вопрос о стандартной библиотеке C и stl. Предлагаю на этом и сконцентрировавть внимание. Всевозможные сравнения строк, поиски подстрок и т.д. и т.п. Сортировки наборов различных структур данных, ну и что ещё в голову взбредёт. 
Реализовывать рекурсивные алгоритмы, да, если ещё с отрисовкой- это больше смахивает на "у меня длиннее", а не на сравнение языков.
Продолжая тему, могу вам предложить реализовать простенький видеоредактор с базовым функционалом: я буду использовать сишный FFMPEG, а вы- что найдёте из cpp. 

Так что: базовые алгоритмы CRT и аналоги из STL. На паре-тройке компиляторов. Смогу начать уже сказал когда. До этого момента я даже сортировку пузырьком писать не буду...

Это сообщение отредактировал(а) HellStranger - 2.8.2010, 18:38
PM MAIL   Вверх
mes
Дата 2.8.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(HellStranger @  2.8.2010,  16:21 Найти цитируемый пост)
. А по поводу .NET я ни слова не сказал

Цитата(HellStranger @  2.8.2010,  14:39 Найти цитируемый пост)
а просто привожу пример хрени

слово "хорошая" было поставлено в противовес выделенному smile
а Qt привел в пример не потому то, она такая хорошая, а потому, что в отличие от .Net свободная
в том плане, что 
1. хотя и требует тоже специфических особенностей, но позволяет пользовать обычный (не специфический) компилятор
2. доступна  значительно более, чем на одной платформе
3. необъективно: приятна и логична в освоении.. 

Это сообщение отредактировал(а) mes - 2.8.2010, 20:35


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 2.8.2010, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



по поводу С vs. C++

на самом деле С вполнее может быть не быстрее С++, все зависит от того, какие средства С++ используются и как они реализованы для конкретной процессорной архитектуры

если использовать С++ просто как "С с классами", то там нет практически ничего, что может затормозить процесс выполнения

другой вопрос, что С++ объективно нагружен, сложен и костылеобразен, имеет абстрактный стандарт, который в реальной жизни не выполняет свою функцию...поэтому многие выбирают С: простой и понятный

я уже много раз повторял, что парадигма программирования и конкретный язык - это разные вещи
значительно упрощать себе жизнь на С помогает и ООП как _подход_ и _огромное_ множество (не сравнимое с С++) библиотек (кстати, из-за специфических возможностей С++ типа перегрузки)

да и вообще, здравый смысл и логика позволяют любой инструмент использовать грамотно и с наименьшими трудозатратами
HellStranger во многом прав, в частности в том, что голова и профессионализм в определенной области все-таки важнее конкретного инструмента


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
djamshud
Дата 2.8.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



В топку видеоредакторы, это весьма скучно и рутинно, к тому же решения будут базироваться на сторонних библиотеках - в итоге просто сравниваются библитотечные пиписьки. Предлагаю наколбасить по парсеру. Используем стандартные библиотеки (C99 - libc, C++03 - libc и libstdc++), всяким генераторам - нет. О входном языке можно договориться, о модулях (собсно парсер, оптимизатор, генератор кода/интерпретатор) - тоже; при подведении итогов сравниваются объем кода (меньше - лучше), его простота (проще - лучше), простота внесения новых языковых конструкций и прочих фич (к модулям, если будет что-то кроме парсера) (проще - заeбатее), производительность (скорость, память), что-нибудь еще? Заведомо субъективные оценки выносим на голосование.

Это сообщение отредактировал(а) djamshud - 2.8.2010, 22:11


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
MAKCim
Дата 2.8.2010, 22:18 (ссылка) |    (голосов:8) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



djamshud
идея "соревнований" обречена на нереализацию ;)
проверено практикой


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 22:40 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(MAKCim @  2.8.2010,  21:14 Найти цитируемый пост)
если использовать С++ просто как "С с классами", то там нет практически ничего, что может затормозить процесс выполнения


Естественно! Почему я приводил в пример PWLib, OPAL и старенький уже OpenH323. С++ используется просто как язык, поддерживающий ООП... ну и операторы переопределяются многие. Разработана вполне понятная, логичная архитектура классов, вся реализация которой- чистый C. 

Цитата(MAKCim @  2.8.2010,  21:14 Найти цитируемый пост)
на самом деле С вполнее может быть не быстрее С++, все зависит от того, какие средства С++ используются и как они реализованы для конкретной процессорной архитектуры


Да вопрос даже скорее не в том, какой язык быстрее, в конце-концов это действительно зависит от многих факторов. Просто реально хочется проверть настолько ли хорошо stl, как его малюют. По крайней мере в работе со строками реально от отдыхает по сравнению с библиотекой C.

Цитата(MAKCim @  2.8.2010,  22:18 Найти цитируемый пост)
идея "соревнований" обречена на нереализацию ;)
проверено практикой 


Реализовывать круптые поделухи, я думаю, ни у кого особого желания нет, по крайней мере у меня и времени нет. А что-нибудь простенькое для сравнения CRT и stl- я только за. Пусть и другие заинтересованные лица подпрягаются. Обсудим, что будем сравнивать и как.

Добавлено @ 22:44
Цитата(djamshud @  2.8.2010,  22:10 Найти цитируемый пост)
В топку видеоредакторы, это весьма скучно и рутинно, к тому же решения будут базироваться на сторонних библиотеках - в итоге просто сравниваются библитотечные пиписьки.


Прошу обратить внимание, что библиотечные пиписьки я указывал сишные и пипишные. Как нельзя лучше отвечает предмету нашего соревнования. ) Это во-первых. Во-вторых, когда сварганишь редактор и пережмёшь им пару сотен фильмов, поизголяешься над звуковыми пакетами в .mov и профилях H264 и AAC, тогда и скажешь, что скучно и рутинно. По-моему, очень интересная область программирования. В-третьих, неужели у программистов есть время на то, чтобы реально меряться письками?.. Наряду с рабочими проектами можно найти море сторонних проектов, чтобы на маслице и икорочку к хлебу заработать... когда здесь меряться?..

Это сообщение отредактировал(а) HellStranger - 2.8.2010, 22:57
PM MAIL   Вверх
boostcoder
Дата 2.8.2010, 22:46 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(HellStranger @  2.8.2010,  12:37 Найти цитируемый пост)
Live555 меня поверг в уныние через 10 минут просмотра исходного кода...

учится, учится, еще раз учится (с) дядя ленин.

Цитата(HellStranger @  2.8.2010,  12:37 Найти цитируемый пост)
Как тогда тысячи программеров с FFMPEG разбираются?

через попу.
т.к. написано огромное кол-во оберток на с++, потому как с интерфейсами на Си работать можно как написано выше..

Добавлено через 1 минуту и 36 секунд
Цитата(HellStranger @  2.8.2010,  22:40 Найти цитируемый пост)
вся реализация которой- чистый C. 

естественно. когда ядра начнут писать на с++, тогда Си стал бы оберткой.

Добавлено через 4 минуты и 18 секунд
Цитата(HellStranger @  2.8.2010,  22:40 Найти цитируемый пост)
По крайней мере в работе со строками реально от отдыхает по сравнению с библиотекой C.

наследуемся от std::string, добавляем свойство - _хеш_сумму_, и вуаля! сравнение за один машинный такт! это же очевидно smile

Добавлено через 6 минут и 25 секунд
Цитата(HellStranger @  2.8.2010,  22:40 Найти цитируемый пост)
у меня и времени нет

Цитата(HellStranger @  2.8.2010,  18:26 Найти цитируемый пост)
Только в свободное от проектов время

вы столько времени тратите на флуд, что можно было уже довольно крупный тест наваять. по крайней мере на С++, за, к примеру, час smile 
PM WWW   Вверх
HellStranger
Дата 2.8.2010, 22:57 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(boostcoder @  2.8.2010,  22:46 Найти цитируемый пост)
через попу.
т.к. написано огромное кол-во оберток на с++, потому как с интерфейсами на Си работать можно как написано выше..


Нет, через вполне понятные исходники и комменты к ним, а вот cpp-обёртки- это как раз и есть попа для тех, кому лень учиться, учиться и учиться языку C. smile И будет тебе известно, работать с интерфейсами в C не многим сложнее, чем в cpp. C поддерживает COM, а COM-это интерфейсы. 
PM MAIL   Вверх
boostcoder
Дата 2.8.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(HellStranger @  2.8.2010,  22:57 Найти цитируемый пост)
C поддерживает COM

это чё?
Цитата(HellStranger @  2.8.2010,  22:57 Найти цитируемый пост)
cpp-обёртки- это как раз и есть попа для тех, кому лень учиться

т.е. вы хотите сказать, что выучить Си сложнее? smile лжец!
PM WWW   Вверх
HellStranger
Дата 2.8.2010, 23:02 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(boostcoder @  2.8.2010,  22:46 Найти цитируемый пост)
вы столько времени тратите на флуд, что можно было уже довольно крупный тест наваять. по крайней мере на С++, за, к примеру, час smile  


Ага, в 12 ночи сел ваять. ;)

Цитата(boostcoder @  2.8.2010,  22:46 Найти цитируемый пост)
сравнение за один машинный такт!


И это я флудер... smile У меня по дискретке хорошо профессор говорил: "Нечем заняться, не делай этого здесь." От тебя уже реально один бред пошёл...
PM MAIL   Вверх
bsa
Дата 3.8.2010, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(HellStranger @  2.8.2010,  18:21 Найти цитируемый пост)
 Что касается сравнения строк, тоя  уже писал, что strcmp убивает string::compare в десятки раз...

Если быть точным - в пять:
Код
time ./aaac 

real    0m1.104s
user    0m1.100s
sys    0m0.000s
Код
time ./aaacpp

real    0m5.014s
user    0m4.990s
sys    0m0.000s
Правда, я имел в виду сравнение на равенство, операторами == и !=. Только в их случае имеет смысл сравнивать длину.
PM   Вверх
borisbn
Дата 3.8.2010, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Если ваша программа (данные+функции) написана на Си и вам понадобилось внедрить ваш код в многопоточное приложение, то у вас начнутся проблемы (не нерешаемые, но всё же ...)
Если ваша программа написана на Си++ и вам надо перевести её на Си (для использования в каком-нибудь контроллере, например), то у вас тоже будут проблемы.
Вывод: edem das zaine (пардон за мой немецкий)
И ещё: если нужно написать программу с одной кнопкой, выводящей по нажатии на неё Хело Ворлд, то без использования визардов на Си уйдёт пару часов, на MFC - минут 20-30, на VCL или Qt - 2-3 минуты. Выводы делай сам


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Abyx
Дата 3.8.2010, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(HellStranger @  2.8.2010,  23:57 Найти цитируемый пост)
 И будет тебе известно, работать с интерфейсами в C не многим сложнее, чем в cpp. C поддерживает COM, а COM-это интерфейсы.  

множественное наследование и dynamic_cast на Си покажите
PM MAIL   Вверх
bsa
Дата 3.8.2010, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Abyx @  3.8.2010,  09:12 Найти цитируемый пост)
множественное наследование и dynamic_cast на Си покажите 

встроенных нет. но самому организовать тебе никто не запрещает  smile 
PM   Вверх
Abyx
Дата 3.8.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



bsa, я думаю вы понимаете, что это *много строк кода*
вернее *ОЧЕНЬ МНОГО СТРОК КОДА*

мой опыт работы с COM из асма показал что лучше использовать как минимум С++ и ATL smile

Это сообщение отредактировал(а) Abyx - 3.8.2010, 10:27
PM MAIL   Вверх
djamshud
Дата 3.8.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



HellStranger, тогда к чему вообще написание каких-то редакторов? Ищи по софтине с (примерно) аналогичным функционалом на разных языках и сравнивай. Можно найти кучу примеров как в пользу сишных поделок, так и плюсовых - в конечном счете все упирается в криворукость ваятелей каждого конкретного решения. Плюсы дают такой же простор для творчества и маневра, что и си, но предлагают больше слов для выражения своих идей, и, если ты путаешься в этих словах - ССЗБ, пиши на более простом си и трать на разработку больше времени, в противном случае получай как минимум тот же результат (хотя на деле результат скорее всего окажется более расширяемым и масштабируемым - но тут опять все зависит от криворукости) за умеренные сроки.

boostcoder

>наследуемся от std::string, добавляем свойство - _хеш_сумму_, и вуаля! сравнение за один машинный такт! это же очевидно

Че, серьезно? Показывайте пример сей чудной перделки или признавайтесь, что ляпнули глупость.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 3.8.2010, 11:09 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  3.8.2010,  11:00 Найти цитируемый пост)
Че, серьезно? Показывайте пример сей чудной перделки или признавайтесь, что ляпнули глупость. 

а что тут несерьезного? сложность в чем? точнее, в чем именно?
PM WWW   Вверх
djamshud
Дата 3.8.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder, пример, пожалуйста. А там посмотрим, что за проблемы. Сколько уже можно теоретизировать?:)


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 3.8.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(boostcoder @  3.8.2010,  12:09 Найти цитируемый пост)
а что тут несерьезного? сложность в чем? точнее, в чем именно?

В том, что методы сравнения у std::string как минимум не виртуальные. Т.е. наследованием ты тут не обойдешься - придется делать агрегацию и перенаписание всех методов заново. А потом, когда ты собрался считать хэш? на этапе присваивания/изменения значения? А ты не думал, что может оказаться такая ситуация, в которой есть куча смен значений и ни одного сравнивания? Кстати, хэш тебе не заменит compare.
PM   Вверх
djamshud
Дата 3.8.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Ну и ладно, теория тоже хорошо в конце концов.

1. Коллизии (потенциальные!). Что с ними делать?
2. Есть ли хеш-функции, гарантирующие, что хеш любой "меньшей" строки будет меньше хеша данной строки? Сомневаюсь.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 3.8.2010, 11:28 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  3.8.2010,  11:13 Найти цитируемый пост)
пример, пожалуйста.

Код

#include <string>
#include <iostream>

const uint_least32_t Crc32Table[256] = {
    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
 
uint_least32_t Crc32(const unsigned char * buf, size_t len)
{
    uint_least32_t crc = 0xFFFFFFFF;
    while (len--)
        crc = (crc >> 8) ^ Crc32Table[(crc ^ *buf++) & 0xFF];
    return crc ^ 0xFFFFFFFF;
}

/***************************************************************************/

struct super_string: std::string {
   super_string() {}
   super_string(const char* p):std::string(p) {
      crc = Crc32(reinterpret_cast<const unsigned char*>(p), length());
   }
   bool operator== (const super_string& s) const {
      return crc == s.crc;
   }
private:
   uint_least32_t crc;
};

/***************************************************************************/

int main() {
   super_string s1("abcdef"), s2("abcdef");
   bool ok = s1 == s2;
   std::cout << "is " << ((ok) ? "" : "not ") << "equal" << std::endl;
   return 0;
}

/***************************************************************************/


потестить тут: http://liveworkspace.org/code/be1ad8c6bdca...15e8dd2119deb17

Цитата(bsa @  3.8.2010,  11:14 Найти цитируемый пост)
А потом, когда ты собрался считать хэш? на этапе присваивания/изменения значения? А ты не думал, что может оказаться такая ситуация, в которой есть куча смен значений и ни одного сравнивания? 

нет, я конечно подумал об этом. но раз HellStranger`а беспокоит производительность, значит ему нужно сравнивать не 5 строк. но если строк много, тысячи..сотни тысяч, то рассчитывать хешь нужно в момент "собирания" такого кол-ва строк. т.к. сложно представить источник, способный формировать, к примеру, мильён строк за 20мс.

Цитата(bsa @  3.8.2010,  11:14 Найти цитируемый пост)
Кстати, хэш тебе не заменит compare. 

смотря что ожидается от compare.

Добавлено через 1 минуту и 23 секунды
Цитата(djamshud @  3.8.2010,  11:17 Найти цитируемый пост)
2. Есть ли хеш-функции, гарантирующие, что хеш любой "меньшей" строки будет меньше хеша данной строки?

я так понял, разговор про operator==() и !=

Добавлено через 5 минут и 2 секунды
кстати, еще один тест: http://liveworkspace.org/code/6b5720fc2147...b8e099875da53d1
как видно из результата, сравнение стандартной строки, происходит в 6-7 раз дольше. профайлер говорит что все тормоза из-за функции(метода) __builtin_memcmp(). но я ее не нашел.

Добавлено через 5 минут и 48 секунд
зы
алгоритм подсчета хеш суммы, взят из википедии.
PM WWW   Вверх
HellStranger
Дата 3.8.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(bsa @  3.8.2010,  00:41 Найти цитируемый пост)
Если быть точным - в пять:


Если быть совсем точным, то зависит от компилятора и процессора, но суть Тела не меняет, правда ведь?.. 
Операторы сравнения: в C аналогов нету, смысл сравнивать?.. Или будем сравнивать указатели? smile

Что касается qsort, то результат вас тоже не сильно обрадует... Хотя, сильно зависит от того, что сортировать...

Предлагаю! Всем заинтересованным в тесте людям, модераторам тоже! Реально заняться сравнением прелестей CRT и stl. Выработать ощий план: что сравниваем, как сравниваем, на чём сравниваем. Прок от этого, думаю, в любом случае будет: кто-то начнёт больше юзать CRT, а кто-то, возможно, обратит внимание на stl... 

Это сообщение отредактировал(а) HellStranger - 3.8.2010, 11:47
PM MAIL   Вверх
djamshud
Дата 3.8.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



>я так понял, разговор про operator==() и !=

С ними весьма хорошо справляются и обычные сравнения длин + memcmp. Для сортировок нужно проверять на больше/меньше.

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

Добавлено через 4 минуты и 44 секунды
Я как бы намекаю, что сравнение строк по их хешу очень эффективно, когда идет речь о !=, а == - это сравнение хешей плюс сравнение самих строк.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 3.8.2010, 11:47 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  3.8.2010,  11:41 Найти цитируемый пост)
С ними весьма хорошо справляются и обычные сравнения длин + memcmp.

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

Цитата(djamshud @  3.8.2010,  11:41 Найти цитируемый пост)

Для сортировок нужно проверять на больше/меньше.
И таки что с коллизиями делять?

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

Добавлено через 1 минуту и 45 секунд
Цитата(djamshud @  3.8.2010,  11:41 Найти цитируемый пост)
Я как бы намекаю, что сравнение строк по их хешу очень эффективно, когда идет речь о !=, а == - это сравнение хешей плюс сравнение самих строк. 

вариант  smile 
PM WWW   Вверх
djamshud
Дата 3.8.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder, так вы признаете, что ваша реплика об однотактовом сравнении имеет смысл только для операции !=, а все остальные - ==, >, <, >=, <= - будут тупить и особого смысла применять к ним хеширование (внутри реализации класса "строка") нет? Или будете гуглить волшебные хеш-функции?:)


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
HellStranger
Дата 3.8.2010, 11:52 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(djamshud @  3.8.2010,  11:41 Найти цитируемый пост)
С ними весьма хорошо справляются и обычные сравнения длин + memcmp. Для сортировок нужно проверять на больше/меньше.И таки что с коллизиями делять? (это когда у двух разных строк хеш-суммы совпадают (потенциально это может быть у любой пары строк)).Добавлено через 4 минуты и 44 секундыЯ как бы намекаю, что сравнение строк по их хешу очень эффективно, когда идет речь о !=, а == - это сравнение хешей плюс сравнение самих строк.


Да и между нами девочками, нехилые такие строки получаются... В C просто набор байт и ничего лишнего... А здесь уже нагородили хэш-таблицы, помимо своих охренительных прелестей std::string... А мне надо тупо сравнить "Вася Пупкин" с "Маша Залупкина"! Сейчас мы вооружимся ядерной боеголовкой производства boostcoder и Ёпнем по мухе!

Добавлено через 3 минуты и 44 секунды
Цитата(djamshud @  3.8.2010,  11:52 Найти цитируемый пост)
Или будете гуглить волшебные хеш-функции?


А их нет и не может быть... Все алгоритмы подвержены коллизиям. Если мощность множества объектов, от которых будет вычисляться хэш больше мощности множества значений хэш-функции, а в нашем примере это так; то коллизии в любом случае есть и будут. Спорить собственно не о чем!
PM MAIL   Вверх
boostcoder
Дата 3.8.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(djamshud @  3.8.2010,  11:52 Найти цитируемый пост)
так вы признаете, что ваша реплика об однотактовом сравнении имеет смысл только для операции !=, а все остальные - ==, >, <, >=, <= - будут тупить и особого смысла применять к ним хеширование (внутри реализации класса "строка") нет?

да smile 
Цитата(djamshud @  3.8.2010,  11:52 Найти цитируемый пост)
Или будете гуглить волшебные хеш-функции?

буду. любопытно smile 

Цитата(HellStranger @  3.8.2010,  11:52 Найти цитируемый пост)
А здесь уже нагородили хэш-таблицы

ничего не городил. стандартная таблица.

Цитата(HellStranger @  3.8.2010,  11:52 Найти цитируемый пост)
А мне надо тупо сравнить "Вася Пупкин" с "Маша Залупкина"!

т.е. для сравнения двух строк, вас мегабесспокоит затрачиваемое время? smile 

Цитата(HellStranger @  3.8.2010,  11:52 Найти цитируемый пост)
"Вася Пупкин" с "Маша Залупкина"

Цитата(HellStranger @  3.8.2010,  11:52 Найти цитируемый пост)
и Ёпнем

 smile 
PM WWW   Вверх
djamshud
Дата 3.8.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



boostcoder,

>буду. любопытно

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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 3.8.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а какая вероятность коллизий, кто-то может сказать? чувствую, что получится так, что она почти невероятна smile 
PM WWW   Вверх
djamshud
Дата 3.8.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



HellStranger, это была ирония. Почему никто этого не понял?.. :)

Добавлено через 3 минуты и 47 секунд
boostcoder, она маловероятна для десяти строк. Но вот же будет обидно, когда чудо-программа возьмет, да перепутает Васю с Маней. Какой бы малой эта вероятность ни была ее никак нельзя игнорировать.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 3.8.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(djamshud @  3.8.2010,  12:41 Найти цитируемый пост)
Я как бы намекаю, что сравнение строк по их хешу очень эффективно, когда идет речь о !=, а == - это сравнение хешей плюс сравнение самих строк.
Вообще-то, операции != и == имеют абсолютно одинаковую сложность. Так как != это инвертированный вариант ==. Т.е. если ты зафиксировал, что условие a != b не выполняется, то можно со 100% точностью сказать, что выполняется a == b. В нашем же случае, когда два хэша равны, это не значит что две строки равны. Это значит, что надо сравнить сами строки. И не важно для какого оператора - == или !=.
PM   Вверх
HellStranger
Дата 3.8.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Ребят, хорош хрень нести. Люди вроде все взрослые, что толку переливать из пустого в порожнее? Если нечего делать, лучше людям на форуме помочь...

Это сообщение отредактировал(а) HellStranger - 3.8.2010, 12:40
PM MAIL   Вверх
djamshud
Дата 3.8.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



bsa, да, у меня мысля за мыслю зашла.

Это сообщение отредактировал(а) djamshud - 3.8.2010, 13:10


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
mes
Дата 3.8.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  3.8.2010,  11:34 Найти цитируемый пост)
 В нашем же случае, когда два хэша равны, это не значит что две строки равны. Это значит, что надо сравнить сами строки. И не важно для какого оператора - == или !=.

зато если хэши не равны, то однозначно не равны.. хотя в любом случае не аргумент.. 

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

а вот например как выглядит на С реализация автоматизации по технологии CopyOnWrite ?
или RAII ? 





--------------------
PM MAIL WWW   Вверх
bsa
Дата 3.8.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(mes @  3.8.2010,  14:34 Найти цитируемый пост)
а вот например как выглядит на С реализация автоматизации по технологии CopyOnWrite ?

Посмотри OpenSSL  smile
Цитата(mes @  3.8.2010,  14:34 Найти цитируемый пост)
или RAII ?

Имхо, это нереально.
PM   Вверх
MAKCim
Дата 3.8.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(borisbn @  3.8.2010,  07:36 Найти цитируемый пост)
Если ваша программа (данные+функции) написана на Си и вам понадобилось внедрить ваш код в многопоточное приложение, то у вас начнутся проблемы (не нерешаемые, но всё же ...)

какие?

Добавлено через 5 минут и 6 секунд
Цитата(mes @  3.8.2010,  13:34 Найти цитируемый пост)
или RAII ? 

не надобно из-за отсутствия исключений ;)




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Abyx
Дата 3.8.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



MAKCim, в Си могут быть исключения.
в винде например есть SEH\VEH + RaiseException()
PM MAIL   Вверх
MAKCim
Дата 3.8.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Abyx
это не связано с языком как таковым


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
borisbn
Дата 4.8.2010, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



MAKCim, когда функции используют глобальные статические переменные и их потребовалось использовать в нескольких потоках - это проблема. У меня были случаи, когда dll-ки, написанные подобным образом на Си нужно было переименовывать в рантайме и загружать её копию в каждом потоке.
Конечно и на Си++ можно так писать, но процедурное программирование к этому больше располагает, чем классы


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Abyx
Дата 4.8.2010, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(borisbn @  4.8.2010,  07:49 Найти цитируемый пост)
У меня были случаи, когда dll-ки, написанные подобным образом на Си нужно было переименовывать в рантайме и загружать её копию в каждом потоке.

вы уверены что это нормальный способ? если длл - ваши, то более тупого решения не придумать %) для таких вещей есть TLS
PM MAIL   Вверх
borisbn
Дата 4.8.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Abyx @  4.8.2010,  08:10 Найти цитируемый пост)
если длл - ваши, то более тупого решения не придумать

Естественно, Вы тут самый умный, а все вокруг - полные идиоты.
Длл-ки были не мои. Предложи более правильный способ.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
HellStranger
Дата 4.8.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(borisbn @  4.8.2010,  06:49 Найти цитируемый пост)
MAKCim, когда функции используют глобальные статические переменные и их потребовалось использовать в нескольких потоках - это проблема.


Знаете, по-моему это проблема называется- недостаточно хорошее продумывание архитектуры приложения. И, если C по-вашему виноват в том, что не предоставляет инструментария по вырыванию рук криворуким программистам, то уж извините... Не для этого он разрабатывался... smile


Цитата(borisbn @  4.8.2010,  06:49 Найти цитируемый пост)
Конечно и на Си++ можно так писать, но процедурное программирование к этому больше располагает, чем классы


А вот этов  чистом виде ОБС (Одна Баба Сказала). Так можно писать и на C#, и на Java и т.д. и т.п. Классы не заменят мозгов!


Цитата(borisbn @  4.8.2010,  06:49 Найти цитируемый пост)
написанные подобным образом на Си нужно было переименовывать в рантайме и загружать её копию в каждом потоке.


Я, конечно, далёк от вашей проблемы, но решение выбрано и в самом деле брутальное... Сродни разработчикам вашей пресловутой dll...

Добавлено через 4 минуты и 36 секунд
Цитата(Abyx @  3.8.2010,  21:19 Найти цитируемый пост)
MAKCim, в Си могут быть исключения.в винде например есть SEH\VEH + RaiseException()


Только не все даже виндовые компиляторы поддерживают структурную обработку исключений. Так что соглашусь с MAKCim. Хотя, в принципе, если уж так сильно хочется исключений, то SEH- вполне нормальный выход... )

Добавлено через 5 минут и 48 секунд
Цитата(MAKCim @  3.8.2010,  20:56 Найти цитируемый пост)
какие?


Поверьте, их может быть ОЧЕНЬ МНОГО! Только C как таковой здесь не причём... smile
PM MAIL   Вверх
Abyx
Дата 4.8.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(borisbn @  4.8.2010,  12:07 Найти цитируемый пост)
Предложи более правильный способ. 

1. переписать эту длл, чтоб была многопоточной
2. перехватывать обращения к секции данных, выдавать каждому потоку свою секцию данных. 

делать по длл на поток - это весьма расточительное использование памяти. разве что дллки очень маленькие.
впрочем переименовывать файл - это тоже сомнительное решение, из разряда "как умеем так и делаем".
так что 3й вариант, с копированием:

3. свой загрузчик, который будет копировать только то что действительно надо копировать.
PM MAIL   Вверх
Леопольд
Дата 4.8.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



По мне, так С++ силён шаблонами - работой на этапе компиляции

Это сообщение отредактировал(а) Леопольд - 4.8.2010, 15:05


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
borisbn
Дата 4.8.2010, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



HellStrangerAbyx, повторю
Цитата(borisbn @  4.8.2010,  11:07 Найти цитируемый пост)
Длл-ки были не мои.


Abyx, мне нужно было простое и быстрое решение. Я его сделал за 10 минут. Сколько нужно на твои ( с учётом поиска информации о том, как это делается ) ?

Цитата(Abyx @  4.8.2010,  08:10 Найти цитируемый пост)
для таких вещей есть TLS

Transport Layer Security ?

Цитата(HellStranger @  4.8.2010,  11:29 Найти цитируемый пост)
Я, конечно, далёк от вашей проблемы, но решение выбрано и в самом деле брутальное...

предложи другое, но с учётом того, что я написал здесь.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 4.8.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(borisbn @  4.8.2010,  15:18 Найти цитируемый пост)
Transport Layer Security ?

Thread Local Storage
PM WWW   Вверх
HellStranger
Дата 4.8.2010, 15:39 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: -2
Всего: -1



Цитата(borisbn @  4.8.2010,  15:18 Найти цитируемый пост)
мне нужно было простое и быстрое решение. Я его сделал за 10 минут.


Если по-русски, костыль... 
Цитата(borisbn @  4.8.2010,  15:18 Найти цитируемый пост)
предложи другое, но с учётом того, что я написал здесь. 


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

Добавлено через 6 минут и 36 секунд
Цитата(Abyx @  4.8.2010,  11:42 Найти цитируемый пост)
делать по длл на поток - это весьма расточительное использование памяти. разве что дллки очень маленькие.


На самом деле никакого дополнительного использования памяти нет. Стопятьсот разных потоков грузят одну dll- результат один: в виртуальном адресном пространстве процесса одна dll, на которую стопятьсот ссылок и которая не выгрузится до тех пор пока либо не завершится приложение, либо не вызовется стопятьсот раз FreeLibrary. 
Как я понял, он переименовывает одну и ту же dll и грузит переименованные копии... Насчёт этого метода всё уже сказано...
PM MAIL   Вверх
borisbn
Дата 4.8.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(HellStranger @  4.8.2010,  15:39 Найти цитируемый пост)
Если по-русски, костыль... 

согласен.

Цитата(HellStranger @  4.8.2010,  15:39 Найти цитируемый пост)
Опиши проблему в деталях- предложу

я создал тему, чтобы не захламлять чужую.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
MAKCim
Дата 4.8.2010, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(HellStranger @  4.8.2010,  11:29 Найти цитируемый пост)
Только C как таковой здесь не причём... 

ну так акцент в высказывании делался именно на С ;)

Добавлено через 2 минуты и 19 секунд
Цитата(borisbn @  4.8.2010,  06:49 Найти цитируемый пост)
У меня были случаи, когда dll-ки, написанные подобным образом на Си нужно было переименовывать в рантайме и загружать её копию в каждом потоке.

если либа не thread-safe, то что мешает вызовы функций либы обернуть локами?
или тым критическая к локам функциональность?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
W4FhLF
Дата 5.8.2010, 06:46 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(boostcoder @  3.8.2010,  12:04 Найти цитируемый пост)
а какая вероятность коллизий, кто-то может сказать? чувствую, что получится так, что она почти невероятна


Вероятность коллизий обратнопропорциональная размеру выходного множества хеш-функции, для любого случайного входа для CRC32 вероятность коллизий 1 / 2^32. Для конечного множества из N элементов (в данном случае строк) вероятность коллизий (N - 1) / 2^32.


А вообще тема скатилась в область системного программирования, где бессмысленно рассматривать эти два языка, особой разницы нет. Если же мы начинаем оперировать абстрактными типами данных, из реальной жизни или из каких-то научных направлений, то С сливает в жёсткой форме. Взять те же матрицы, они могут быть большими, маленькими, с комплексными числами, плотные и разреженные, симметричные, трёхдиагональные, хранить разные типы (простейший случае одинарная и двойная точность). И для всего этого на С++ я имею один унифицированный интерфейс и благодаря шаблонам оперирую над данными любых типов. Причём работает это всё очень очень быстро. 
В какое г**но это всё превратится на С даже трудно себе представить. smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3085 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.