Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Четырёхмиллиардный Выключатель.

Автор: OtD
Дата сообщения: 15.06.2005 13:54
Всем привет.
Если найдёте время, дайте пож. совет, каких возможностей добавить классу, или оставить как есть.
Класс на C++ в динамке и статике под .486 и выше, здесь. Спасибо.
Автор: WiseAlex
Дата сообщения: 15.06.2005 15:22
OtD
1) привел бы описание, а то грузить с narod.ru - мазохизм
2) приведи хотя бы 5 причин по которым нужно отказаться от stl битового контейнера и перейти на твой
3)
Цитата:
под .486
грандиозно конечно, а как насчет переносимости кроме Wintel
4) забавно смотрятся функции типа vkl - воспоминания о 10 классе средней школы и плохом знании английского. Так обычно не делают - транслитерация это худшее решение.
5) приведи сравнительный анализ скорости работы и используемой памяти stl контейнера в разных реализациях и твоего класса (все это желательно на нескольких компиляторах)
---
вот когда закончишь с баловством и сделаешь нормальное описание - будем смотреть, а пока, извини - нет времени

Автор: OtD
Дата сообщения: 15.06.2005 20:31
WiseAlex

Цитата:
2) приведи хотя бы 5 причин по которым нужно отказаться от stl битового контейнера и перейти на твой

1-я динамическое изменение размера.
2-я слияние экземпляров.
3-я битовые операции между разными экземплярами.
4-я экспорт в массив целых чисел.
5-я импорт из массива целых чисел.
6-я циклическая генерация по шаблону.
7-я включение диапазона бит.
и т.д. читай инструкцию внимательней, даже есть тестовая прога.
Цитата:
3)
Цитата:
под .486
грандиозно конечно, а как насчет переносимости кроме Wintel

Легко, только открыть код, или компильнуть под другую платформу.
Правда, придётся отказатся от ассемблерных операций по сдвигу (проигрышь в скорости).

Цитата:
4) забавно смотрятся функции типа vkl - воспоминания о 10 классе средней школы и плохом знании английского. Так обычно не делают - транслитерация это худшее решение.

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

Цитата:
5) приведи сравнительный анализ скорости работы и используемой памяти stl контейнера в разных реализациях и твоего класса (все это желательно на нескольких компиляторах)

Скорость у этого класса, по всем функциям на одинаковом компиляторе превышает или равна (равна если STL использует теже алгоритмы что и у этого класса).
А на счёт памяти там и так всё видно, сколько заказал, столько и памяти в битах, плюс не более 31-го бита, если заказ не кратен 32-м.

Цитата:
вот когда закончишь с баловством и сделаешь нормальное описание - будем смотреть, а пока, извини - нет времени

Ты превзошёл сам себя в своей наглости, о себе во множественном числе

Не в обиду сказано, но веди себя по скромней.
Автор: WiseAlex
Дата сообщения: 16.06.2005 10:15
OtD

Цитата:
а транслитом там и не пахнет.

запись латинскими буквами русских слов и есть транслитерация в сокращенном варианте транслит
кроме того русским из известных мне программистов с/с++ никто не пользуется
Если собираешься дорости в своей библиотеки до чего-то типа boost - то используй английский, как это делают все

Цитата:
Легко, только открыть код, или компильнуть под другую платформу.

т.е. ты заранее уверен, что код будет прекрасно работать и на big-endian платформах. Мне бы твою уверенность...
Кроме того библотеки такого рода принято распросранять в исходниках... (ну не продавать же ты ее собираешься ) да и процесс использования забавен - тащить с собой кучу мелких dll-ок для чего? проще написать самому или найти похожее в исходниках

Цитата:
о себе во множественном числе

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

Цитата:
Скорость у этого класса, по всем функциям на одинаковом компиляторе превышает или равна

а числа где? где проверки на разных компиляторах и с разными stl?
вот и говорю - баловство пока что...
Не в школе учишься?

Цитата:
но веди себя по скромней.

уже ответил

Цитата:
1-я динамическое изменение размера.
2-я слияние экземпляров.
3-я битовые операции между разными экземплярами.
4-я экспорт в массив целых чисел.
5-я импорт из массива целых чисел.
6-я циклическая генерация по шаблону.
7-я включение диапазона бит.
и т.д. читай инструкцию внимательней, даже есть тестовая прога.

вот с этого надо начинать - привести подробное описание в шапке с мотивированием создания, фичами и недостатками
По поводу фич: большенство реализуется с помощью дополнительных функций, работающих с bitset - смысл использовать твой класс?
Кроме того есть библиотека BitMagic, Есть в конце концов boost с его dynamic_bitset, а boost это почти стандарт. У твоей библиотеки есть хоть что-то, что можно им противопоставить (кроме русских названий методов)? Если есть - то включайся в команду разработчиков boost или bitmagic и вноси реальную помощь.
Автор: Dust
Дата сообщения: 16.06.2005 17:37
Баян короче... Если это следствие работы над собой в русле девелопера, то хорошо.
Выкладывать это дело - никто не оценит.
Самооценка - вообще порясная вещь )
Автор: OtD
Дата сообщения: 17.06.2005 22:16
WiseAlex

Цитата:
кроме того русским из известных мне программистов с/с++ никто не пользуется

Какие твои годы... ещё познакомишся.

Цитата:
Если собираешься дорости в своей библиотеки до чего-то типа boost - то используй английский, как это делают все

Смотри внимательней, поддержка двух языков: русского и английского.
Твой круг, это не все.

Цитата:
да и процесс использования забавен - тащить с собой кучу мелких dll-ок для чего?

Смотри внимательней, есть статические библиотеки.

Цитата:
я не о себе, а о форумчанах

А ты что тут за предводителя? Отец русской демократии...

Цитата:
а числа где? где проверки на разных компиляторах и с разными stl?

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

Цитата:
Не в школе учишься?

В школе, в 8-м классе. А что? Сам-то в каком?

Цитата:
смысл использовать твой класс?

Смотри внимательней! Прочитаешь две строчки и критикуешь.
"Вдруг из маминой из спальни, кривоногий и хромой, выбегает..." и тут твоими словами можно: Ах какой паршивец и т.д. и т.п. Узнаёшь?

Цитата:
Кроме того есть библиотека BitMagic, Есть в конце концов boost

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

Цитата:
Если не я за себя, то кто за меня?
Если я только сам по себе - что я?
И если не теперь, то когда?

Вот это на тебя похоже, весь в вопросах, пора бы определиться.
А я тебе не чем помоч не смогу.
Спасибо за ответ на вопрос "чего не хватает?", оказывается много чего по твоим меркам, а кто много хочет, тот мало получает, такова жизнь. Удачи.
Автор: oSLikus
Дата сообщения: 18.06.2005 01:22
OtD, человек ответил чётко на твой призыв оценить твою библиотеку, причём сделал это по-честному - задал нужные вопросы, рассказал, как и что в других библиотеках есть. А ты ему ещё говоришь, чтобы он подучился

Названия: только на английском.
Тесты и сравнение с stl: это твоя задача. Ты предлагаешь пользоваться своей библиотекой, ты и покажи, что она очень хорошая.
Автор: Swappp
Дата сообщения: 18.06.2005 02:10
OtD

Цитата:
Какие твои годы... ещё познакомишся.


Цитата:
В школе, в 8-м классе.

Ты по аккуратнее... На самом деле, использовать в названиях переменных/функций/классов/методов/etc языки отличные от английского - плохой тон и не уважение к тем, кто возможно будет пользоватся твоей библиотекой.

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

Что то я не понял, где поддержка двух языков? Т.е. есть вариант где например вместо "vb2.vkl();" "vb2.turnOn();"?
Ну и на последок:

Цитата:
Операционные системы: DOS, Windows 3.x, Windows 95, Windows 98, Windows ME, Windows XP, Windows NT, Windows 2000, Windows 2000 Server, Windows 2003 Server.

И все? Лично мне такая библиотека не подходит
Автор: OtD
Дата сообщения: 18.06.2005 17:37
Swappp

Цитата:
Что то я не понял, где поддержка двух языков? Т.е. есть вариант где например вместо "vb2.vkl();" "vb2.turnOn();"?

Совершенно верно, есть два варианта для удобства: функции элементы
Код: vb2.vkl();
Автор: Swappp
Дата сообщения: 18.06.2005 19:17
OtD

Цитата:
Перечисленные ОС для динамической библиотеки

Хм, тогда DOS и Windows 3.x тогда лишнии... Ты там точно не сможешь использовать библиотеку скомпилированную для Win32.

Цитата:
а для статических ограничения только процессором .486 и выше, так как в исходниках есть комманды на ассемблере.

Еще ограничена компилятором. Т.е. за пределы Win все равно не выйти.
Автор: OtD
Дата сообщения: 19.06.2005 02:24
Swappp

Цитата:
Еще ограничена компилятором. Т.е. за пределы Win все равно не выйти.

Да, согласен. По ходу, по многочисленным просьбам пользователей, прейдётся открывать код.
Как думаешь, ассемблер оставить или переписать на С++?
Автор: TheChampion
Дата сообщения: 19.06.2005 07:19
OtD

Цитата:
ассемблер оставить или переписать на С++?

Мальчик, не выпендривайся! Программа "чиста на C++" работает ничуть не медленнее ассемблерной, если только у программиста драйверы head.sys и hands.sys в порядке.

Хотелось бы
1. Полное описание класса. Как в ISO 14882.
2. Ответ на вопрос "и чем оно лучше bitset?"


Цитата:
прейдётся открывать код

Было бы зело интересно.
Автор: MoKC0DeR
Дата сообщения: 19.06.2005 07:24
OtD не как не в 8 классе, ему если не ошибаюсь лет 40. Он не способен воспринять ни какую критику своих "творений". Он уже выстваил им оценку на сайте (всем своим "работам" - 5).
OtD
ИМХО лучше не врать про 8 класс и т.п. и дать исходники своих прог, если конечно они не будут продаваться
Автор: OtD
Дата сообщения: 20.06.2005 10:18
MoKC0DeR

Цитата:
OtD не как не в 8 классе

Это же прикол. Или с юмором напряг?
Твои работы скажи где глянуть, или ты теоретик? .

Цитата:
Он уже выстваил им оценку на сайте

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

TheChampion ка

Цитата:
Мальчик, не выпендривайся! Программа "чиста на C++" работает ничуть не медленнее ассемблерной

Да нет, девочка, я не выпендриваюсь, на асме быстрей.
Автор: Tunga
Дата сообщения: 20.06.2005 10:24

Цитата:
Да нет, девочка, я не выпендриваюсь, на асме быстрей

Все-таки замерь скорости, чтобы не быть голословным;) Удивишься)
Автор: WiseAlex
Дата сообщения: 20.06.2005 10:30
TheChampion

Цитата:
2. Ответ на вопрос "и чем оно лучше bitset?"

а заодно чем лучше boost или bitmagic ! (Кстати если эти библиотеки москвичи, то твоя явно до велосипеда не дотягивает - там и многоплатформенность и стабильность и разные компиляторы поддерживаются)

Цитата:
прейдётся открывать код

наконец-то

Цитата:
Какие твои годы... ещё познакомишся.

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

Цитата:
А что? Сам-то в каком?

Если в твои около 40 ты в 8-м, то даже не знаю как ответить. Кроме того есть подозрение, что программистом на с++ ты не работал - иначе таких библиотек мы бы просто не увидели

Автор: OtD
Дата сообщения: 20.06.2005 10:34
Tunga
В заголовочном файле в комментариях есть сравнительная оценка.
На асме сдвиг битов, гораздо быстрей.
Автор: WiseAlex
Дата сообщения: 20.06.2005 10:35
OtD

Цитата:
Да нет, девочка,

поаккуратней на поворотах

Добавлено:
OtD

Цитата:
В заголовочном файле в комментариях есть сравнительная оценка.

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

Добавлено:
По существу:
почему испытательный стенд включен в заголовочный файл с самой библиотекой, а не отдельный cpp?


Добавлено:
Не смог скомпилировать на VC7.1 :
d:\Visual C++ Projects - TestProgs etc\odk_vector\odk_vektor_bit.h(410): error C2487: 'kvBIT_FILTR0' : member of dll interface class may not be declared with dll interface

d:\Visual C++ Projects - TestProgs etc\odk_vector\odk_vektor_bit.h(409): error C2487: 'kvBIT_FILTR1' : member of dll interface class may not be declared with dll interface

пояснение:

'identifier' : member of dll interface class may not be declared with dll interface
You can declare a whole class, or certain members of a non-DLL interface class, with DLL interface. You cannot declare a class with DLL interface and then declare a member of that class with DLL interface.

Так задумано? - пришлось стирать лишнее

название класса ODK_VEKTOR_BIT больно длинное и идет вразрез со всеми принятыми стандартами.

нет оператора []

Собираться приложение все равно отказывается :
odk_vector error LNK2019: unresolved external symbol "__declspec(dllimport) const OtDiatlovaOU::ODK_VEKTOR_BIT::`vftable'" (__imp_??_7ODK_VEKTOR_BIT@OtDiatlovaOU@@6B@) referenced in function _main
и т.д. - разбираться лень - короче поставляй как все в исходниках, а то твоя совместимость со всеми (т.е. только с BCB) достала
Автор: dneprcomp
Дата сообщения: 21.06.2005 01:08
OtD
Слушай, ну зачем ты у всех работы требуешь предьявить? Это ведь ты просил оценить твои работы. Зачем тебе чужие? Хочешь чему-нибудь научиться на чужих работах? Тогда прислушивайся к критике.
Автор: OtD
Дата сообщения: 24.06.2005 05:22
WiseAlex

Цитата:
Не смог скомпилировать на VC7.1 :
d:\Visual C++ Projects - TestProgs etc\odk_vector\odk_vektor_bit.h(410): error C2487: 'kvBIT_FILTR0' : member of dll interface class may not be declared with dll interface

d:\Visual C++ Projects - TestProgs etc\odk_vector\odk_vektor_bit.h(409): error C2487: 'kvBIT_FILTR1' : member of dll interface class may not be declared with dll interface

Это из-за того, что константы kvBIT_FILTR0 и kvBIT_FILTR1 должны объявлятся как _import. Спасибо. Исправил.

dneprcomp
Есть вобще далёкие. Хотя ты прав, буду учится прислушиватся.
Автор: Tunga
Дата сообщения: 24.06.2005 06:51

Цитата:
На асме сдвиг битов, гораздо быстрей.

Гм. Это ж какой должен быть компилятор, чтобы сдвиг реализовать медленней, чем это можно сделать на ассемблере. Страшно представить даже)
Автор: WiseAlex
Дата сообщения: 24.06.2005 09:20
OtD

Цитата:
Спасибо. Исправил.

неа :
// Битовые фильтры: Константы для управления битами в массиве. //
_ODK_DLL static const NB32 kvBIT_FILTR1[];
_ODK_DLL static const NB32 kvBIT_FILTR0[];
надо заменить на
static const NB32 kvBIT_FILTR1[];
static const NB32 kvBIT_FILTR0[];

да и собираться все это счастье все равно отказывается
Ты при компиляции dll использовал класс или С функции? Есть подозрение, что классы - тогда она точно ни с чем кроме билдера не соберется

кидай dll и давай исходники
Автор: OtD
Дата сообщения: 25.06.2005 06:35
Tunga

Цитата:
Гм. Это ж какой должен быть компилятор, чтобы сдвиг реализовать медленней, чем это можно сделать на ассемблере. Страшно представить даже)

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

Код:
// Операция сдвига и присвоение. //
ksODK_VEKTOR_BIT __stdcall ODK_VEKTOR_BIT::operator<<=(NB32 Sdvig)
{ if(!EK_KolBit) return *this;
NB32 *vBit =EK_vBit;
if(EK_KolBit<=Sdvig)
{ for(NB32 i=0; i<EK_KolShag; i++)
EK_vBit[i]=0;
}
else
{ NB32 Sdv32 =Sdvig/kRAZM_SHAGA;
NB32 KolShagOst=EK_KolShag-Sdv32;
NB32 KolBajt =KolShagOst*sizeof(NB32);

if(Sdv32) // Если сдвиг больше 31 бита:
{ memmove(EK_vBit, &EK_vBit[Sdv32], KolBajt);
memset(&EK_vBit[KolShagOst], 0, Sdv32*sizeof(NB32));
}
Sdv32=Sdvig%kRAZM_SHAGA;
if(Sdv32)
{ asm{//.486
pushad;
mov eax, 1;
xor ebx, ebx;
mov ecx, Sdv32;
mov esi, vBit;
cmp KolShagOst, 2;
jl M02op;
M01op:
mov edx, [esi+eax*4];
shrd [esi+ebx*4], edx, cl;
inc eax;
inc ebx;
cmp eax, KolShagOst;
jl M01op;
M02op:
shr dword ptr[esi+ebx*4], cl;
popad;
}
}
}

return *this;
}
Автор: Tunga
Дата сообщения: 25.06.2005 09:37
OtD
Ты меня прям смущаешь чесслово. Во что кроме набора push/pop и всяких там mov, ну и shl, конечно, можно вот это дело превратить?

Код:
void main(void)
{
unsigned char a = 0x0F;
unsigned char b = a << 3;
}
Автор: WiseAlex
Дата сообщения: 27.06.2005 09:29
OtD

Цитата:
Класс.

короче твой супер класс совместим со всеми компиляторами, если это билдер....
Ну и кому это надо?
Автор: mr_eoi
Дата сообщения: 30.06.2005 07:03
OtD
Даже если ты будешь распространять свой класс в исходных текстах, останется проблема совместимости с watcom и gcc (из известных мне) ибо они используют синтаксис ассемблерных вставок кардинально отличающийся от принятой Интелом. Таким образом использование встроенного ассемблера - прямой путь к потере совместимости. Плохо.
Автор: OtD
Дата сообщения: 30.06.2005 10:03
WiseAlex

Цитата:
Ну и кому это надо?

Походу тем кто на Билдере.

Tunga
Ведать ты не въехал в суть задачи.
Обработать один байт (8 бит) при сдвиге, любой лох программист сможет, и то в твоём примере три бита потеряны навсегда.
Далее, твой код в команды для процессора не превратится, его подсчитает препроцессор и выдаст как константы.
Для лучшего понимания сути задачи см. ниже:

Код:
void main(void)
{
unsigned char a[] = {0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F};
// Вот теперь попробуй сдвинуть весь массив на 35 бит.
// ...
}
Автор: Tunga
Дата сообщения: 30.06.2005 14:00
OtD
Видать, ты не думаешь, что говоришь. А мне пришлось потратить свое время, чтобы это выяснить.
Во-первых:

Цитата:
В заголовочном файле в комментариях есть сравнительная оценка.

В каком? Ни в одном из трех, которые присутствуют в закачке, ничего похожего нет.
Во-вторых:

Цитата:
На асме сдвиг битов, гораздо быстрей.

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

Код:
typedef struct tagBIT
{
unsigned char bit:1;
} BIT;
Автор: WiseAlex
Дата сообщения: 30.06.2005 20:20
OtD

Цитата:
Походу тем кто на Билдере.

ну так и пиши, что библиотека для билдера, и не рассказывай про совместимости, lib и dll
И все таки приведи сравнение по скорости для твоего класса, bitset, dynamic_bitset и bitmagic, ради этого билдер ставить не хочется, авразумительных замеров скорости у тебя нет
Автор: OtD
Дата сообщения: 01.07.2005 23:27
Tunga

Цитата:
В каком? Ни в одном из трех, которые присутствуют в закачке, ничего похожего нет.

odk_vektor_bit.h
стр. 189 operator<<=(), стр. 192 operator>>=(), стр. 358 expStr()


Цитата:
Я попытался конкретизировать, сведя обсуждения к вопросу об одной-единственной операции сдвига, при этом вовсе не собираясь влезать в алгоритмические дебри.

Даже если и так то команды на асме shrd и shld обеспечивают сдвиг 32 битного значения с размещением выдвигаемых бит в память или в регистр за один такт, а в С++ ты при всём желании так не сделаешь. Возможный вариант на С++ ниже.
Количество инструкций явно превосходит

Код:
void main()
{
// ulM надо сдвинуть влево на 8 битов:
unsigned long ulM[] = {0xCCCCFFFF, 0xCCCCFFFF};
unsigned long ulBuff;

// Первое сдвигаем без проблем, выдвигаемые биты не нужны.
ulM[0] <<= 8;
// Со вторым посложней, выдвигаемые биты нужно разместить в первом.
// Сначало обработка левой части.
ulBuff = ulM[1] >> 16; // Левую половину в правую и в буфер.
ulBuff <<= 8; // Сдвиг.
ulBuff >>= 16; // Нужна только левая половина.
// Объединение первого с выдвинутыми битами из второго.
ulM[0] |= ulBuff;
ulM[1] <<= 8; // Сдвиг второго. Всё.
//
}

Страницы: 12

Предыдущая тема: 1C Программирование и поддержка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.