API: тип ItemsNumber заменить на size_t ?

Разработка Far.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: глобальный слом апи.

Post by GrAnD »

Latest post of the previous page:

Max Rusov wrote:Windows использует LLP64 модель, поэтому логично ей следовать.
size_t как раз и нужен в этой дебильной модели. иначе хватило бы long.

лично я согласен с тем что нужно везде использовать size_t. Считать что у вас отрицательное число элементов чего то - это нонсенс.
Ну, а если совсем плохо, то тогда использовать ssize_t.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: глобальный слом апи.

Post by NightRoman »

DrKnS wrote:Вот интересно, почему strlen() возвращает size_t? Почему все STL-контейнеры хранят количество элементов в size_t? Почему в Windows API для описания "количества" повсеместно используется DWORD?

Их проектировали неучи, не владеющие истинным Дао?
Все, что перечислено, я считаю далеко неидеальным и с тяжелым наследием и кармой. Проектировали неучи? Риторический вопрос. Кроме того, они проектировали не в вакууме, а с учетом факторов, о которых мы можем не знать, а потому не обладать правом грамотной критики.

В .NET API, который проектировался гораздо позже, чем все перечисленное, везде в коллекциях количество и индексация реализованы через int (а именно, Int32). Длина строк - тоже. Тоже интересно, почему? Может, уже с учетом предыдущего опыта?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: глобальный слом апи.

Post by NightRoman »

GrAnD wrote:Считать что у вас отрицательное число элементов чего то - это нонсенс.
Нет, это математика. Отрицательные числа вообще почему есть? Потому что есть понятие разности. Если первое количество меньше второго, появляется отрицательное число при разности. Это количество? В каком-то смысле - да. В математическом. А в программном если это будет все задано еще unsigned типом, начинаются еще нюансы и ошибки.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: глобальный слом апи.

Post by NightRoman »

Вобщем, я за то, чтобы количества элементов в коллекциях разного рода в Фар АПИ были заданы, как int. Все это для отображения в UI, в конечном итоге. Приведите пример хоть чего-нибудь в UI, чтобы оно было больше 2 миллиардов с копейками и при этом имело практический смысл. Мне такое в голову не приходит. И дело тут не в мощности компов и размерах памяти машин. Дело в человеческих возможностях, нет никакого смысла вываливать в UI что-то, что около 2 миллиардов или больше, человек это не асилит.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: глобальный слом апи.

Post by GrAnD »

Прошу модераторов отпочковать этот оффтопик в соответствующую тему.
NightRoman wrote:А в программном если это будет все задано еще unsigned типом, начинаются еще нюансы и ошибки.
Ошибки происходят не из-за типа, а из-за программиста. Тип же должен выражать логическую сущность объекта, и если что то не бывает отрицательным для него надо использовать беззнаковый тип.

При использовании signed типа выражающего количество - увеличивается число проверок.

Code: Select all

void do_something(size_t index) {
  if (index < array.size())
    ...
}

void do_something(int index) {
  if (index >=0  && index < array.size())
    ...
}
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: глобальный слом апи.

Post by NightRoman »

При использовании signed типа выражающего количество - увеличивается число проверок.
Спорно. В одном месте увеличивается, в другом уменьшается. Ты привел одно место. Я могу привести другие. Но не хочется. У меня нет цели кого-то в чем-то переубедить.
Ошибки происходят не из-за типа, а из-за программиста.
Да, и с некоторыми типами некоторые программисты совершают больше ошибок. Я совершаю больше ошибок, когда работаю с unsigned. Это просто факт из моего опыта. Потому я и не хочу unsigned в Фар АПИ для количеств. У других другой опыт, хорошо. Делимся опытом, взвешиваем плюсы и минусы (каламбур, однако).
User avatar
ctapmex
Posts: 1241
Joined: Fri 11 Apr, 2008 07:53
Has thanked: 1 time
Been thanked: 50 times

Re: глобальный слом апи.

Post by ctapmex »

в атаче патч на сборку 1930.
исправлены места в api где в структурах передается указатель и количество.
Attachments
far1930.7z
(1.97 KiB) Downloaded 133 times
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: глобальный слом апи.

Post by Max Rusov »

GrAnD wrote:size_t как раз и нужен в этой дебильной модели. иначе хватило бы long
Спорить не буду. Я тоже раньше так считал, пока не начал портировать под x64 проект на >20M исходников. Понимание приходит с опытом.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: глобальный слом апи.

Post by GrAnD »

Max Rusov wrote:Спорить не буду. Я тоже раньше так считал, пока не начал портировать под x64 проект на >20M исходников. Понимание приходит с опытом.
О том, что нужно активно использовать MEMSIZE типы я понял, когда портировал под x64 несколько библиотек. Понимание точно приходит с опытом.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: глобальный слом апи.

Post by Max Rusov »

GrAnD wrote:...нужно активно использовать MEMSIZE типы ...
Когда речь идет о размере памяти - несомненно. Когда о количестве - нет.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: API: тип ItemsNumber заменить на size_t ?

Post by GrAnD »

Я понимаю.
Max Rusov адепт паскаля, NightRoman - C#.
Мы разговариваем немного на разных языках. Но когда дело доходит до С++ с банальным STL ваши аргументы теряются.
собирая под x64 в цикле:

Code: Select all

vector<Obj> array;
for (int i = 0; i < array.size(); ++i)
  ...
вы получите как минимум 2 ворнинга на счет знаковости и размерности. И это вам скажу не я, со мной можно спорить, а компилятор. Поэтому давайте не будем теоретизировать а исходить из реалий жизни.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: API: тип ItemsNumber заменить на size_t ?

Post by Max Rusov »

А вот если бы Count (Size) _не_ был size_t, то все было бы хорошо. Т.е. твой пример как раз подтверждает ошибочность использования данного типа. Но, согласен, все зависит от библиотек. Т.е. теперь вы будете везде в исходниках менять int на size_t? Удачи.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: API: тип ItemsNumber заменить на size_t ?

Post by NightRoman »

GrAnD wrote:Max Rusov адепт паскаля, NightRoman - C#.
Мы разговариваем немного на разных языках. Но когда дело доходит до С++ с банальным STL ваши аргументы теряются.
Вовсе не на разных. С++ у меня основной язык по работе. Да и Фарнет представляет из себя раппер всего АПИ Фара, написанный на C++/CLI вообще-то. Это врочем означает, что рапнуть придется один раз и забыть (еще раз под Фар 3). Остальное под Фар я пишу на C# и там будет все int, и это хорошо.
Last edited by NightRoman on Thu 24 Mar, 2011 10:21, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: API: тип ItemsNumber заменить на size_t ?

Post by zg »

Max Rusov wrote:Удачи.
аккаунт удалять?
Post Reply

Return to “Development”