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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Pascal sv C++ 
:(
    Опции темы
baldina
Дата 17.12.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ну вот, дельфиста обидели...

Alexeis, тут изначально обсуждать то нечего было  smile
Развивай ЧЮ
PM MAIL   Вверх
Mayk
Дата 17.12.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(Alexeis @  17.12.2007,  18:07 Найти цитируемый пост)

  Так в критических местах ее {длину строки} можно сохранить в локальной переменной, чтобы постоянно не вычислять, а если посмотреть на набор функций {по работе со строками}, то они ориентированы на выполнение всех операций без вычисления длинны

а зря. такая неориентированность на длину строки приводит к некоторым серьезным проблемам с безопасностью. gcc  к примеру любит орать warning'и если кто-то хочет использовать gets. 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
baldina
Дата 17.12.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

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


точно к таким же проблемам ведет неправильное значение длины строки
PM MAIL   Вверх
Mayk
Дата 17.12.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(baldina @  17.12.2007,  22:26 Найти цитируемый пост)

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

А что, её так легко запороть? выйти за границы буффера гораздо легче.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Lazin
Дата 17.12.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



archimed7592, ПРЕВЕД!!!

Добавлено через 1 минуту и 8 секунд
я как то странно себя чувствую  smile 
PM MAIL Skype GTalk   Вверх
baldina
Дата 17.12.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

А что, её так легко запороть? выйти за границы буффера гораздо легче. 

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

Если это С строка, имеется оконечный 0, достижение которого контролируется, то имхо разницы никакой.
PM MAIL   Вверх
Mayk
Дата 18.12.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(baldina @  18.12.2007,  00:48 Найти цитируемый пост)

Если это С строка, имеется оконечный 0, достижение которого контролируется, то имхо разницы никакой. 

контролируется? То-то же strncpy не оканчивает строку нулем при нехватке места.
Причем самое смешное, snprintf строку нулем заканчивает если места нет. 

Кстати. В ЖЖ упаминались generic'и в дельфи.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 18.12.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Mayk, пожалуйста, не нужно путать мощнейший метаязык в виде шаблонов С++ и какие-то дженерики, которые, что в java, что в .net'е, что в Delphi основаны на интерфейсах. В дотнете, по сути, никакой разницы между интерфейсом и дженириком нет.
Да и вообще, ни одна runtime технология никогда не сравниться с compile-time шаблонами.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mayk
Дата 18.12.2007, 14:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(archimed7592 @  18.12.2007,  16:21 Найти цитируемый пост)
Mayk, пожалуйста, не нужно путать мощнейший метаязык в виде шаблонов С++ и какие-то дженерики, которые, что в java, что в .net'е, что в Delphi основаны на интерфейсах. В дотнете, по сути, никакой разницы между интерфейсом и дженириком нет.
Да и вообще, ни одна runtime технология никогда не сравниться с compile-time шаблонами.

Согласен, не сравняется [ровно как и с++ не сравнится с немрловскими макросами]. 

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


Задачи в которых требуется тьюринг полнота шаблонов на практике имхо достаточно редки. [Не могу вспомнить и одного примера, использующего мощь метаязыка, но думаю что они есть].
Задачи в которых шаблоны делают много чего нечитаемого в stderr'е достаточно часты. Это уже имхо авторов STLFilt'а. 


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 18.12.2007, 15:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(Mayk @  18.12.2007,  14:25 Найти цитируемый пост)
Однака положа руку на  сердце, оно ей часто надо?

Не так давно я на С# делал фасад для работы с AutoCAD'ом через COM. Считывался XML файлик, в котором рисуемые сущности могли находится либо внутри block, либо внутри layer. Вся разница в том, что в первом случае нужно вызывать ф-цию myBlock.AddXXX, а в другом modelSpace.AddXXX. Мне досталась какая-то кривая версия автокада, в которой AcadBlock и AcadModelSpace не имели общего интерфейса. В итоге выхода было два: дублировать код полностью, либо написать обёртки над этими объектами. Ессно я выбрал второй вариант, ибо он кошернее и мне требовалось работать всего с 15-20 ф-циями(т.е. я просто делал минимальную обёртку). Но, если бы это был С++, то никаких обёрток не понадобилось бы т.к. С++ инстанцирует шаблон в compile-time и сразу может проверить наличие или отсутствие нужных методов. А в дотнете - сиди и делай copy-paste. Позже понадобилось добавить ещё около 20 ф-ции, благо я порылся в иерархии, поэкспериментировал и понял что можно явно приводить оба объекта к какому-то магическому IAcadBlock3(а зачем нужны первые 2? smile ).

Ну а если посмотреть масштабнее - могло бы быть 150 ф-ций, причём, разных поддерживаемых сущностей могло бы быть не 2, а штук 15 и, по закону подлости, они не имели бы общего интерфейса. В таком случае я просто написал бы скриптик, генерирующий обёртки, но что же это за шаблоны, если их главную ф-цию приходится выполнять самому, пусть, порой и в полуавтоматическом режиме...

Добавлено через 14 минут и 57 секунд
Цитата(Mayk @  18.12.2007,  14:25 Найти цитируемый пост)
[Не могу вспомнить и одного примера, использующего мощь метаязыка, но думаю что они есть].

Ну а что касается этого - возьми, хотя бы, те же traits...

Или, вот я сейчас достаточно плотно работаю с геометрической библиотекой CGAL. Она совершенно не привязана к типу, представляющему число. Это может быть и double и числовые типы из GMP и что угодно другое.
Вот понадобилось мне использовать неточные сравнения(в моём случае это была точность до 1e-6). Написал я класс, в котором все операторы сравнения перегружены для неточных сравнений - и вуаля, теперь, сравнивая два вектора я могу быть уверен, что не получу отрицательный результат из-за неточности double. Можно сделать подобное на дельфёвых интерфейсах? Несомненно, но, представьте себе, какой получиться оверхед из-за, во-первых, вызовов ф-ции, да ещё и виртуальных вызовов(когда ни один линкер, не в силах ничего оптимизировать).

Ещё пример: в этой библиотеке написана обёртка над mpz_t из GMP, которая немного кривовата. Я элементарно унаследовался от этой обёртки, не меняя, по сути ничего - просто сделал forward конструкторы. Потом, чтобы обёртка, над Gmpzf начала правильно считать sqrt, я унаследовался от соответствующих traits, где изменил всего один функтор Sqrt, заменив его вычислитель на нужный мне. И все эти унаследования и прочие извращения никак не сказались на производительности т.к., к примеру, forward-ctor - просто инлайнился(как, скорее всего и сам конструктор, на который происходил редирект). Анлогично и со всем остальным.

Кстати, когда-то и где-то мы делали бенчмарк vector vs new. Угадай кто остался в пролёте ;). Шаблоны - это мощь.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
baldina
Дата 18.12.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

strncpy не оканчивает строку нулем при нехватке места


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

Добавлено через 1 минуту и 48 секунд
archimed7592, +1

вобщем С++ рулит. чтд   smile 
PM MAIL   Вверх
archimed7592
Дата 18.12.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(baldina @  18.12.2007,  15:46 Найти цитируемый пост)
хотелось бы узнать, как strncpy может определить нехватку места.

На самом деле очень просто. "Решение этой задачи предлагаю решить читателю самостоятельно" smile.

Добавлено через 1 минуту и 58 секунд
Просто если задуматься, почему strncpy не пишет в конец 0, то можно достаточно быстро прийти к ответу на вопрос почему sprintf пишет, а strncpy нет smile. Решение этой задачи тоже остаётся на плечах читателей smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
baldina
Дата 18.12.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



archimed7592, если б так все было просто...
смотри сюда:
Код

char str[10] = "Something";
*str = 0;
strncpy (str, "Hello", 6);


Добавлено через 2 минуты и 26 секунд
да и вообще, имея

void f (char *str, size_t size)
{
   // делать здесь предположения о реальном размере памяти, на который указывает str дело неблагодарное
}

Добавлено через 3 минуты и 52 секунды
а итог простой - все на плечах пользователя. и забытый 0, и неправильно определенный size есть проблемы одного рода
PM MAIL   Вверх
archimed7592
Дата 18.12.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



baldina, нет, нет. Мы не берём в расчёт неправильный размер, указанный заведомо большим, чем реальный.
Что же касается меньшего размера - ты можешь считать, что всё правильно, ибо, если идёт просьба записать не больше 6-ти байт в 10-байтный буффер, то значит оставшиеся 4 байта для чего-то нужны и для строки не предназначается.

Ну а незаписываемый 0 в случае strncpy - подтолкну направление в котором нужно мыслить: что возвращает strncpy? А что возвращает snprintf?

Добавлено через 53 секунды
Цитата(baldina @  18.12.2007,  16:21 Найти цитируемый пост)
а итог простой - все на плечах пользователя.

Само собой. Просто иногда на плечи пользователя возлагается чуть больше, а иногда - чуть меньше smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mayk
Дата 18.12.2007, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



/archimed7592, ну ты и графоман блин, я столько не осилю smile  /

Цитата(archimed7592 @  18.12.2007,  19:27 Найти цитируемый пост)

Ну а если посмотреть масштабнее - могло бы быть 150 ф-ций, причём, разных поддерживаемых сущностей могло бы быть не 2, а штук 15 и, по закону подлости, они не имели бы общего интерфейса.

c# и дот нет? А тот addXXX можно было вытащить и вызвать через рефлекшн?

Цитата(archimed7592 @  18.12.2007,  19:27 Найти цитируемый пост)
 что же это за шаблоны, если их главную ф-цию приходится выполнять самому, пусть, порой и в полуавтоматическом режиме...

В том числе и шаблоны c++[особенно пока variadic template arguments не появятся в компиляторах]. Правда в гораздо меньшей степени. smile 


Цитата(baldina @  18.12.2007,  19:46 Найти цитируемый пост)

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

йап, в том то и дело что в строках аля паскаль никаких дополнительных переменных не надо.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




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


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

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