На главную страницу AlgoNet В сотрудничестве с ZDNet
АРХИВ СТАТЕЙ 2002-6-28 на главную / новости от 2002-6-28
AlgoNet.ru
поиск

 

Место для Вашей рекламы!

 

Все новости от 28 июня 2002 г.

Обнаружена лазейка в OpenSSH

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

Программа Open Secure Shell (OpenSSH) входит в состав многочисленных популярных дистрибутивов операционной системы Unix с открытым исходным кодом, таких как OpenBSD 3.0, OpenBSD 3.1 и FreeBSD-Current. Эти ОС широко используются в сетевом оборудовании, системах защиты и других приложениях. По словам Гранта Слендера (Grant Slender), главного консультанта по региону Азии и Австралии секьюрити-фирмы Internet Security Systems, который первым обнаружил дефект, проблема касается версий ОС с 3.0 пo 3.2.3. Слендер пояснил, что ошибка связана с неаккуратной обработкой «переполнения буфера» в OpenSSH, когда в программу поступает сообщение гораздо большей длины, чем обычно. Хакеры используют подобные пробелы в защите, загружая в программу больше символов, чем она может принять, и помещая в конце этой посылки исполняемый код.

В рекомендации Internet Security Systems говорится, что, воспользовавшись данной ошибкой, атакующий может прислать на сервер специально сформированное сообщение, дистанционно выводящее из строя демон OpenSSH. В результате хакер получает доступ к серверу на самом высоком уровне. «Демон OpenSSH работает с привилегией superuser, так что злоумышленники, воспользовавшись этой ошибкой, могут дистанционно получить доступ на правах суперюзера», — говорится в рекомендации.

По словам Слендера, ISS предупредила главного разработчика OpenSSH, который подготовил патч. Компания рекомендует системным администраторам заблокировать неиспользуемые механизмы аутентификации OpenSSH. Проблему также можно решить, запретив в файле конфигурации демона OpenSSH параметр аутентификации challenge-response. Кроме того, Слендер рекомендует пользователям обновить ПО. Информация об уязвимости опубликована в списках рассылки, посвященных безопасности, таких как BugTraq и Debian. 

 Предыдущие публикации:
2001-07-24   Лазейка открывает хакерам доступ к машинам Unix
 В продолжение темы:
2002-07-01   Веб созрел для массированной атаки червей
Обсуждение и комментарии
Qrot
28 Jun 2002 12:08 PM
ну вот, еще одним мифом меньше стало..
 

Проходивший мимо
28 Jun 2002 2:10 PM
2Qrot: Каким мифом ?
Что в open source нет багов ? Кто сказал этот бред ?

В оправдание надо сказать, что в closed source софте багов ничуть не меньше (а скорее всего - больше), и находят их почему-то чаще... (намёк на одну известную фирму все поняли)...

2Редакция: Переводчики слегка напортачили с переводом названия -
как результат - смысл искажен напрочь.

В оригинале оно было "OpenSSH security hole unearthed".
"Security hole" обычно переводят как "дыра в security", но никак не "лазейка"
(в последнем случае обычно подразумевается намеренно оставленый "черный ход"). А в коде openssh была явная "плюха" (желающие сами могут посмотреть соответствующий кусок кода).

 

Qrot
28 Jun 2002 2:21 PM
2Проходивший: я про OpenBSD, 4 (или больше?) года без remote holes
 

Bosch - boschpisem.net
28 Jun 2002 2:39 PM
"(намёк на одну известную фирму все поняли)... "

Знаете, господа... До меня наконец-то дошло. Именно дошло. Понял я это раньше, только не мог высказать, сформулировать.

Достают именно такие вот "намеки". Да. блин, в майкрософте есть дыры. Макстрсофт это признает и делает заплатки. И растет, что бы ни говори кто бы то ни было. И приверженцам Майкрософта не доставляет БОЛЬШОГО удовольствия поднимать кипеш вокруг обнаруженной в НеМайкрософте дыры. И, кстати, заявления о стабильности платформы НТ не говорят о том, что там все безоблачно. Просто сильный имеет смелость признать свои ошибки. Пусть тот жу Линукс растет и без ора, без вопле
 

Bosch - boschpisem.net
28 Jun 2002 2:45 PM
...й о "рулез" и "винда мастдай".
А то скучно все это. Очень похоже на "а мой брат твоего боара через забор перекинет"...
 

Sergey
28 Jun 2002 9:53 PM
А все этот поганый C/C++ в котором строк нормальных нет. До сих пор этот strcpy используют без проверки длины. А если проверять будут, то тормозить программы начнут еще больше.
 

Interrupt
28 Jun 2002 10:20 PM
2 Sergey: Что за чушь? Что значит strcpy используют без проверок длины? Или проверка на символ с кодом ноль это не есть проверка длины?
 

Qrot
28 Jun 2002 10:57 PM
2Sergey: ась?
 

Sergey
29 Jun 2002 12:23 AM
Ну, это же старая фигня:
char * pStr = new char(100);
strcpy(pStr, outsideParam);

Хакер находит это и передает параметр длиннее чем 100. И капут. А проверить если outsideParam длиннее чем 100 - это либо руки не дошли, либо хотелось побыстрее.
 

Qrot
29 Jun 2002 1:26 PM
2Sergey: а язык тут причем?
 

Skull - sibskullmail.ru
29 Jun 2002 4:51 PM
2Sergey: да уж! Я уж лет 5 такой код не пишу. Да и если речь зашла не о чистом C, а о C++, то там классы соответствующие для строк есть, где добрые дяди все предусмотрели. Идем читать Стауструпа.
 

glassy
30 Jun 2002 1:50 AM
2Sergey: разве можно так лажаться??? ??? ??? ???
Посоветовал бы сделать так, но код -- поганый без strncpy.
char * pStr;
pStr = strdup(outsideParam);
ASSERT(pSrt);

И про Страуструпа верно. Вы там в мелковсофте все такие программисты?
 

glassy
30 Jun 2002 1:53 AM
И почему именно 100?
Не проще ли 4096? -- цифра-то покруглее
:)
 

Sergey
30 Jun 2002 10:01 AM
Я разве сказал, что это мой код? И причем тут Microsoft? Там тоже на C/C++ пишут.
 

Interrupt
1 Jul 2002 3:21 AM
Да ладно, фигня все это, не напишет нормальный человек код типа:
char * pStr = new char(100);
strcpy(pStr, outsideParam);
(такие ляпы только новички делают)

напишет скорее:
char* pStr = new char[strlen(outsideParam)+1];
strcpy(pStr, outsideParam);

И причем тут C/C++ вообще-то ?
 

Просто прохожий - xwarlockmail.ru
1 Jul 2002 7:07 AM
Мдя ...а м.б. было вообще проще сделать

char * pStr = new char(100);
strncpy(pStr, outsideParam, 100);

правда работает действительно медленнее

 

eXOR - billgmicrosoft.com
1 Jul 2002 9:14 AM
2 Sergey:
Ну не надо затирать, что в C++ нету строк. Вы хоть про STL слыхом - слыхивали? А что такое String тогда?
 

x61
1 Jul 2002 10:54 AM
2eXOR: String - это такой тип данных, который есть, например, в Паскале, и которого нет в C. Я думаю, именно это имел в виду Sergey.
2Interrupt: язык здесь при том, что на C надо писать внимательно, а не так как на бейсике. Вот, что с твоим кодом будет, если new вернет?
 

Qrot
1 Jul 2002 11:06 AM
м-да.. маразм крепчал, называется.
по пунктам:
1. язык к данной конструкции никакого отношения не имеет, а имеют отношение исключительно кривые ручки
2. есть strncpy - всем писать кипятком от щастья и бить в барабан
3. есть std::string в плюсах
так что рекомендую начать с Кернигана и Ричи, а потом уже плавно перейти к Страуструпу.
 

x61
1 Jul 2002 2:03 PM
2Qrot: почитай http://msdn.microsoft.com/library/default.asp?url=/library/e n-us/dncode/html/secure05202002.asp

там и про C и про strncpy написано
 

Qrot
1 Jul 2002 2:29 PM
2х61: чего нового я должен был оттуда узнать и чем это противоречит тому, что я написал?
 

x61
1 Jul 2002 3:07 PM
2Qrot: ну раз тебе лень самому прочитать, я тебе цитаты приведу:
1. "Buffer overruns are primarily a C and C++ issue because these languages perform no array bounds checking and no type-safety checking."
2. "if you banned the "unsafe" string handling functions, and mandated the safer n-versions, you'd spend the rest of your life fixing the newly introduced bugs"
 

Qrot
1 Jul 2002 3:45 PM
2Qrot: да я прочитал, перед тем как в прошлый раз постить. и, кстати, заметил что полная фраза звучит так - "..., I often joke that if you banned the "unsafe" string handling functions...". Слово joke понимаем, да? дяди шутят. ну и что там дальше пишут про проблемы с strncpy не совсем верно - всегда копируй _MAX_BUF-1 и ноль в конце проставляй ручками.
string и контейнерные классы описаны в стандарте С++ и там таки есть и type-safety checking и bounds checking
я же говорю - от Кернигана и Ричи плавно переходим к Страуструпу
 

Qrot
1 Jul 2002 3:47 PM
а-ё! заговорился :) предыдущее сообщение было для x61, не могу же я сам себе писать :)
 

x61
1 Jul 2002 4:31 PM
2Qrot: ну хоть насчет языка ты согласился, уже хорошо.
А почему бы тебе сразу к Вирту не перейти, в его языках вообще нет такой проблемы, или ты до Вирта еще не дочитал?
 

Qrot
1 Jul 2002 5:22 PM
2x61: "насчет языка ты согласился" - где?
Вирта обычно читают до Кернигана.. я не исключение.
 

Sergey
1 Jul 2002 5:37 PM
Вирта советую читать вместо Кернигана. Тогда и объект от строки отличить сможете и на макро-ассемблерах (типа C и C++) писать перестанете.
 

x61
1 Jul 2002 5:38 PM
2Qrot так ведь Вирт, он же не только книжку про структуры данных написал :)
А что, ты не согласен, что эта проблема встречается, как правило, в программах, написанных на C?
 

Qrot
1 Jul 2002 5:59 PM
2x61: угу.. еще описание паскакаля и оберона.
согласен. однако, дело в элементарной лени или в незнании возможностей языка, а не в самом языке. как говориться - не умеешь, не берись.. или пиши на Паскале. шютка.

2Sergey: а ты много писал на этих макро-ассемблерах, человек-не-знающий-strncpy-и-STL?
 

x61
1 Jul 2002 7:00 PM
2Qrot: http://www.cs.inf.ethz.ch/~wirth/ раздел Books.
Если бы те, кто не умеет, не брались, мы бы жили в мире очень хорошего, но очень дорогого ПО :)
 

Qrot
1 Jul 2002 7:48 PM
2x61: да я в курсе что не только эти книги.. я имел ввиду, что читал лично я.
почему дорого? djbns, qmail, TeX - написаны на C кстати, бесплатны, и авторы предлагют премию любому кто найдет багу.
 

Sergey
1 Jul 2002 9:05 PM
О существовании strncpy не знал не я, а тот кто писал глюкавые программы на C. Пример, который я привел, показывал как образуется ошибка переполнения буфера. После этого я получаю кучу советов как надо писать программы на C. Спасибо, друзья, что научили. Как бы я без вас то? Теперь еще научите тех, кто такие ошибки делал и продолжает делать.
Кстати, правильный код:
Str := outsideParam;
Просто, быстро, эффективно.
 

Рнкщ
2 Jul 2002 12:18 AM
2Sergey:
А эффективно ли? Ведь паскаль делает то же самое, только внутри себя. Причем, наверняка даже тогда, когда параметр внутренний, и длину прверять совсем не обязательно.
 

Sergey
2 Jul 2002 1:53 AM
Операция оптимизируется компилятором, а длина строки записана в ее начале. Так что эффективность максимальна.
 

eXOR - billgmicrosoft.com
2 Jul 2002 7:21 AM
2 Sergey:
Ну ты тут еще про packed Array расскажи. И еще расскажи нам какие безглючные и надежные поделки на паскале делают обожатели delphi. Потом про строки в паскале, которые хронят свою длину.

> Операция оптимизируется компилятором
А ты хоть раз пробовал проверить как оно оптимизируется?

Паскаль - паскаль...
кто - нибудь для него нормальную объектную модель сделал (за исключеннием с некоторыми оговорками Borland)? А то то что есть по большей части похоже на ObjC... знаете... а на дворе уже 21 век вообще - то... процедурное программирование изживает себя - объемы становятся слишком большими...
Явная передача строки функции... ага заоптимизированая компилятором в доску... тоже фича та еще... в общем

ИМХО...
паскаль язык хороший, но только для того, чтобы студентам на кафедре ВТ преподдавать процедурное программирование. Развивать у них хороший стиль и вбивать его на уровне рефлексов. Но для реальной разработки у паскаля больше недостатков чем достоинств.

 

glassy
2 Jul 2002 11:25 AM
2Sergey: если честно, я с неприязнью отношусь к людям, которые пишут про char buf[32]; Ну не серьезно это. Равно как и использование strncpy (потому что проще самому \0 втюкать, что я и приветствую)
А вот про Паскаль не надо, есть у него рамки, за которые выходить не надо.
 

x61
2 Jul 2002 4:01 PM
2Qrot: ну ты примерно сравни количество программ, которые ты перечислил, с их общим количеством.
 

x61
2 Jul 2002 4:02 PM
я смотрю, тут намечается еще более вечный флейм, чем Windows vs Linux :)

2Sergey & eXOR: вы путаете описание языка и реализацию его компилятора фирмой Borland. а eXOR еще похоже и с ней не совсем знаком :)

2glassy: а что это за загадочные рамки, за которые не надо выходить?
 

Qrot
2 Jul 2002 4:38 PM
2х61: в оригинальном Pascal никаких string не было AFAIR, а был тот самый packed array, который только для строк и использовался. косяк тот еще. и ооочень много времени прошло прежде чем там нормальные строки наконец-то появились - после того как багланд наконец-то объектный паскал сделал и пара версий дельфей сменилась.
"сравни количество программ, которые ты перечислил, с их общим количеством." а тебе что, в пример нужно приводить весь список, что ли? утверждение неверно, если есть хотя бы один факт его опровергающий - я тебе аж 3 привел. утверждение было про дорогой софт и хороший софт.. неверное утверждение :)
 

Qrot
2 Jul 2002 4:43 PM
2x61: паскал создавался как академический язык алгоритмов, а С - как язык ОС. вот и думай, на чем писать очередную задачу :)
 

x61
2 Jul 2002 4:57 PM
2Qrot: я вроде про string не говорил, но, кстати, строки в Pascal почти сразу добавили, задолго до появления Borland. В Delphi2 добавили поддержку длинных строк.

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

x61
2 Jul 2002 4:58 PM
2Qrot: я ж не вольный художник, как правило выбирать не приходится :)
 

Qrot
2 Jul 2002 5:35 PM
2x61: это так, шютка юмора такая была.. но в каждой шутке есть доля шутки.
скажем так, утвеждение верно не всегда и применимо только к коммерческим продуктам. ну так я не против, что бы ПО подорожало повсеметно, если при этом увеличится моя оплата :)
 

x61
2 Jul 2002 7:07 PM
2Qrot: не, это инфляция получится, если зарплата вырастет вместе с ценами. Вот пусть оплата увеличится, а программы не дорожают, тогда я согласен :)
 

Qrot
2 Jul 2002 7:44 PM
2x61: я программами не питаюсь, я их пишу. а тулзы по работе покупаются один раз и навсегда.. короче это не постоянные периодические траты (для меня) как например продукты.
 

Qrot
2 Jul 2002 7:45 PM
короче, оплата в IT что то больно низкая :)) нужно приподнять планочку! :)
 

Просто прохожий - xwarlockmail.ru
3 Jul 2002 7:44 AM
2Qrot: ну не такая уж низкая :-)) Это я правда о себе :-))
 

Просто прохожий - xwarlockmail.ru
3 Jul 2002 8:01 AM
2ALL:
1) Почему используются С функции strcpy strncpy
Вся проблема в том, что если вы используете классы высокого уровня типа, то изначально обречены на либо на динамическое выделение памяти либо на массу проверок на соответсвие локального буфера длине строки и как следствие крайне низкое быстродействие. В конечном счете все сводится
все равно к функциям: strcpy strncpy strlen , ну и иногда memset
Желающих проверить отправляю к исходным текстам MFC и ATL

2)О Борландовских строках
Идея неплохая ...и сделано красиво ... но ...если требуется критичность по быстродействию то тоже не сахар. Впрочем кто пишет критичный код на Object pascal :-))

P.S. Разумеется все это IMHO


 

glassy
3 Jul 2002 8:13 AM
рамки паскаля -- алгоритмическая прога, с выводом текстовых результатов в мемо, или графиков в чарт. Ничего более.
 

eXOR - billgmicrosoft.com
3 Jul 2002 10:22 AM
2 x61:
> я смотрю, тут намечается еще более вечный флейм, чем Windows
> vs Linux :)
Ага в флеймах на эту тему я помню учавствовал еще лет 7 назад...

> вы путаете описание языка и реализацию его компилятора фирмой
> Borland.
Я знаком с паскалем в Виртовском его представленнии + минимум в 5 реализациях от разных фирм :-). Когда - то был соавтором брошуры по этому языку. Правда тираж был что - то около 500 экз. ;-). Но это все было так давно ;-).

> добавили поддержку длинных строк.
Длинных != безразмерных. Вернее там у багланда есть конечно PChar, но введен он имхо только для того чтобы работать с библиотеками, написанными на C/C++.

2 Просто прохожий:
> ну не такая уж низкая
Все относительно :-). Тебе может и не низкая, а кому - то может показаться и не оплатой, а так насмешкой...

 

Qrot
3 Jul 2002 10:24 AM
2Просто прохожий: да у меня тоже вобщем то ничего, но всегда хочется большего :))
 

x61
3 Jul 2002 1:04 PM
2eXOR: Сами по себе строки безразмерные, это уже дело компилятора ограничения накладывать. В Delphi максимальная длина 2Gb, такой buffer overrun представить можно, но сложно :)
 

x61
3 Jul 2002 1:09 PM
2glassy: если тебе не в лом, опиши рамки других языков тоже, чтобы была полная картина. Я тогда табличку составлю, буду перечитывать ее, когда настроение плохое :)
 

Qrot
3 Jul 2002 2:04 PM
2x61: у C/С++ рамок нет :)
 

x61
3 Jul 2002 2:22 PM
2Qrot: опасное заблуждение :)попробуй 4-х байтовый char * через 4Гб перевести.
 

Qrot
3 Jul 2002 3:13 PM
2x61: а надо? если фактически процессу доступно те же 2Г? :) (я про винюки говорю, но думаю везде похожая ситуация)
 

x61
3 Jul 2002 3:42 PM
2Qrot: то есть, в Delphi 2Гб - это ограничение, а в C - это просто не надо. Что-то мне это логику некоторых местных линуксоидов напоминает :)
 

glassy
3 Jul 2002 3:46 PM
2x61: умник, что ж ты на Венере ни разу не был?
 

Qrot
3 Jul 2002 3:59 PM
2Qrot: ну ты из меня собирательного персонажа то не делай :) про то что 2Г на строки в дельфях серьезное ограницения я не писал.
 

x61
3 Jul 2002 4:12 PM
2glassy: ты это к чему?

2Qrot: опять сам с собой разговариваешь :) Извини, я тебя наверно неправильно понял.
 

Qrot
3 Jul 2002 4:34 PM
2x61: вот именно что. во-первых, приведи из меня цитату, где я говорю что 2Г это серьезное ограничение, во-вторых 4Г - ограничение не С, а архитектуры, и в третьих - обращай иногда внимание на смайлики.
 

x61
3 Jul 2002 5:32 PM
2Qrot: я ж говорю, неправильно понял. Я думал ты "рамок нет" в ответ на мой пост от 13:04 написал. В общем, стормозил я, не обижайся :)
 

Qrot
3 Jul 2002 5:47 PM
:)
 

eXOR - billgmicrosoft.com
4 Jul 2002 7:53 AM
2 x61:
> Сами по себе строки безразмерные
Хмм?
 

Просто прохожий - xwarlockmail.ru
4 Jul 2002 7:55 AM
2eXOR
ну я же написал ИМХО :-))
а то что хочется все больше и больше - так это нормальное здоровое желание ...сам такое имею :-))
 

Просто прохожий - xwarlockmail.ru
4 Jul 2002 8:04 AM
2Qrot ограничение в 4Гб - это ограничение не только архитектуры, но и реализации длинных строк в дельфях
(поля соответсвующие длине строки и размеру распределенного участка памяти имеют длину в 4 байта. 2^32 = 4Гб)
 

x61
4 Jul 2002 9:27 AM
2eXOR: например, int сам по себе не ограничен сверху, максимальное значение зависит от архитектуры.
 

Qrot
4 Jul 2002 10:24 AM
2Просто прохожий: еще один :) я НЕ говорю про дельфовые строки. речь шла о С. как ты на IA32 будешь адресовывать больше 4Г интересно (на любом языке)? так что не надо про реализацию.. кстати, ниже написали что в дельфях строки 2Г.

2x61: возвращаясь к рамкам :) у С/С++ рамки задает платформа, а у Пакаля - реализация. на примере строк это видно. есть что возразить? :)
 

x61
4 Jul 2002 10:58 AM
2Qrot: я что-то не понял, рамки чего? Если строк, так их под C вообще нет, какие уж тут рамки :) В описании языка нигде не ставятся рамки на длину строки, 2Г - это ограничение _текущей_ версии Delphi.
Точно так же нет рамок и в C, например, Watcom C 11 поддерживал 8байтные int несмотря на ограничения платформы.
 

Qrot
4 Jul 2002 11:14 AM
2x61: строк в описании оригинального паскаля нет, поскольку то, что там описано - не строка, а массив байт с жестко заданным размером. у тебя получается так - строки есть, но в дельфях; ограничений на длину нет, но в оригинальном паскале, итого - там классные строки! :) а в сях они как раз есть, и независимо от реализации, одинаковые. по Паскалю вообще-то стандарт есть? или все до сих пор опираются на виртовское описание?
по поводу 8-байтных int - так их все современные компиляторы поддерживают, __int64 называется; только в указателе ты не сможешь все 64 бита задействовать.
 

eXOR - billgmicrosoft.com
4 Jul 2002 1:59 PM
2 x61:
> например, int сам по себе не ограничен сверху, максимальное
> значение зависит от архитектуры.
int - нет, а вот integer - да :-). Так же и String в C++ - нет, а string в паскакале - да. Дельфа ограничевает длину строк на двух архитектурах, на которых работает (Win(DOS)/Linux).

> Паскалю вообще-то стандарт есть?
1. ANSI/IEEE 770X3.160: Programming Language Extended Pascal
2. ISO/IEC 10206: Programming Language Extended Pascal
3. Programming Language Pascal ANSI/ISO/IEC 7185-1990
вопрос интересный... поновее что - нибудь есть - ы x61?

Кстати... вопрос интересный... я помню ANSI'шную спеку года эдак 98'го (не точно)...
 

eXOR - billgmicrosoft.com
4 Jul 2002 2:01 PM
нет не помню... позже 91го ничего не могу найти...
 

Просто прохожий - xwarlockmail.ru
4 Jul 2002 3:38 PM
2Qrot:
Мое Замечание по ограничению архитектуры сводилось только к тому что действуют оба ограничения. Например класс CString в текущей реализации (нечто соответсвующее борландовским строкам) не может перешагнуть ограничения платформы, однако ничего не мешает реализовать, например, класс CFileString который будет обращаться с гораздо более большими объемами данных./Только не нужно это никому/
Естественно, что строки в памяти (а char [] как раз таковыми и являются)не могут перешагнуть предел устанавливаемый архитектурой

2eXOR
>> например, int сам по себе не ограничен сверху, максимальное
>> значение зависит от архитектуры.
>int - нет

The int and unsigned int types have the size of the system word. This is two bytes (the same as short and unsigned short) in MS-DOS and 16-bit versions of Windows, and 4 bytes in 32-bit operating systems.
MSDN/VCCORE.chm/Data Type Ranges
 

Crazy - crazyhotmail.com
4 Jul 2002 5:31 PM
Rebjata, a shtoto takoe "IMHO" by the way?
Thanks
 

x61
4 Jul 2002 5:41 PM
2Qrot: судя по тому с какой скоростью Borland добавляет в язык новые фишки, никаких стандартов они не придерживаются. Это наверно имеет свои преимущества, но делает программы, написанные на Borland Pascal/Delphi мало куда переносимыми. Но строки в Delphi все равно классно сделаны ;)
 

x61
4 Jul 2002 5:41 PM
2Crazy: In My Humble Opinion
 

x61
4 Jul 2002 5:45 PM
2eXOR: Это в текущей версии 2Гб, но там ничего к этому не привязано, проблем сделать их 2^64 нет никаких, разве что каждая строка на 4 байта больше станет.
 

eXOR - billgmicrosoft.com
4 Jul 2002 6:22 PM
2 Просто прохожий:
Так я и говорил про это :-).

2 x61:
ИТОГО от багланда мы имеем:
- непереносимый
- нестандартизованый
- немасштабируемый
- не лаконичный (begin vs {)
- не объектно - ориентированый
язык... чего же в нем хорошего? Тем более что новые фишки будут все хуже и хуже, ибо создатель Delphi (читай Object Pascal) ушел из Багланда в Мелкософт и делает C#... не даром видать ;-)
 

x61
4 Jul 2002 6:58 PM
2eXOR: Я так понял, что мне отвели роль защитника паскаля :)
первые два "не" - согласен на 100%, лаконичность - тоже, но это далеко не самое главное в языке, объекты там поддержаны, не полностью, но достаточно. С масштабируемостью все в порядке.
Я могу в ответ перечислить вещи, которые там есть, и нет в C, но ты без труда найдешь их в любом флейме на эту тему :)
После выхода Delphi 3 прогресс прекратился, так что будущего у Delphi, скорее всего нет.
Но настоящее есть - для очень большого набора задач Delphi будет неплохим выбором.

Ты вот сам подумай, почему такая неглупая фирма как MS для создания нового языка взяла человека, написавшего Turbo Pascal и Delphi. Причем в C# от Delphi очень много.
 

Qrot
4 Jul 2002 8:48 PM
2х61: проблем сделать 2^64 на IA32 есть - уже потому что указатель 32 битный. а вот при переходе на IA64 строки в С станут сразу 2^64, а в дельфях (если они еще будут жить) так эти 2Г и остануться.

(говоря о непереносимости почему то забыли о Kylix - оставим в стороне качество и прочие материи, шняга позволяет писать кроссплатформенный код как никак)
 

x61
5 Jul 2002 5:52 AM
2Qrot: это на C проблемы есть, а в Delphi строка - это тип данных, теоретически можно реализовать поддержку строк неограниченного размера, практически - нафиг не надо.
А почему ты считаешь, что на IA64 2Г останутся?
 

Ron - rodionlenta.ru
5 Jul 2002 7:33 AM
2 x61: "Ты вот сам подумай, почему такая неглупая фирма как MS для создания нового языка взяла человека, написавшего Turbo Pascal и Delphi. Причем в C# от Delphi очень много."

Ага, вот именно. Борланд от этого дельфи по бороде пошёл. Делали, в своё время, неплохой С++, а после того, как этот гений влез со своей дельфёй - Borland C++ окончательно склеил ласты. С++ свой похоронили ради этого ламерского угрёбища, теперь и С++ нет и Дельфи этот нахрен никому не нужен. Visual Studio, имхо, ждёт та же бодяга.
 

Просто прохожий - xwarlockmail.ru
5 Jul 2002 8:27 AM
2Ron но концепция свойств объектов таки в дельфях изящно решена ... в существующих сях таки такая функциональность решается куда как менее удачно
 

eXOR - billgmicrosoft.com
5 Jul 2002 9:03 AM
2 x61:
А мне так понимаю отвели роль ненавистника pascal? ;-). Напрасно :-).
> Я могу в ответ перечислить вещи, которые там есть, и нет в C
:-). Знамо - знамо... много таких флеймов было на моей памяти ;-)

> человека, написавшего Turbo Pascal и Delphi.
Так я Pascal - то он правда облагородил. Сделал применимым к реальным задачам ;-). VCL vs MFC имхо очевидно кто лучше c точки зрения простоты и логичности.

2 Просто прохожий:

> концепция свойств объектов таки в дельфях изящно решена
Нет... вот это как раз главный отстой в Delphi а далее в C#. Алогичная не сочитающаяся с идеологией ООП нахлобучка, позволяющая угробить квалификацию любому программеру и угробить любой програмынй продукт.
 

Qrot
5 Jul 2002 10:50 AM
2eXOR: не знаю, что тебе очевидно, но MFC лучше, с любой точки зрения. ибо пришлось работать и с VCL и с MFC по нескольку лет. так вот, VCL - жирное, тормозное и глюкавое угребище, после него MFC какое-то время кажется чудом программерской мысли.

2х61: причем здесь теоретическая возможность? практически это не осуществимо. и похрену что есть на дельфи строка, т.к. похрену где реализовывать обработку объектов типа - в компиляторе или в рантайм либе, ее все равно реализовывать. (вообще же как я понимаю, длинная строка в дельфи - это класс AnsiString, который подставляется по директиве компилера, а не встроенный тип)
здесь, собсно, одна проблема - как организовать работу с непрерывным куском данных длиной до 2^64 байт, при том что адресовать можно не более чем 2^32 байт.
а на 64битной платформе так и останется эти 2Г ибо класс AnsiString никто переписывать не будет - ибо нафиг не надо. (гм.. а 2Г не потому ли что в качестве индекса знаковое целое используется? в таком случае и на 64 битах будет (если перепишут) (2^64)/2 байт, что уже может быть не так похрену, между прочим)
 

glassy
5 Jul 2002 11:24 AM
2eXOR: про свойства -- это действительно жуть. Пойдешь как надо, прога будет работать раз в 100 медленнее. Это я с 3-го курса еще помню.
 

glassy
5 Jul 2002 11:26 AM
Давайте лучше пообсуждаем rand(), возвращающем неслучайные значения, и f(g(a)), когда вместо g(a) выдается nan.
 

Просто прохожий - xwarlockmail.ru
5 Jul 2002 11:38 AM
2eXOR:
и в чем наблюдается отклонение от ООП в концепции свойств (в реализации дельфей) ?

2glassy:
а в коде (особенно для программ реализующих UI) полно мест где быстродействие не является важным фактором ...
Впрочем любой основанный на ООП код будет либо большой по объему либо медленный ...либо наоборот ...
Решение может быть в использовании темплэйтов
но дельфям, к сожалению, это недоступно

т.е. в плане практической применимости смотреть нужно :применять или не применять
но с технической и эстетической точки зрения я таки остаюсь при своем мнении об изящности решения
 

Просто прохожий - xwarlockmail.ru
5 Jul 2002 11:44 AM
2glassy:

хорошие темы :-)))
 

glassy
5 Jul 2002 12:18 PM
Зачем в TBitmap есть GetPixel и PutPixel? Ничего более тормозного придумать нельзя.
 

eXOR - billgmicrosoft.com
5 Jul 2002 12:28 PM
2 Просто прохожий:
> и в чем наблюдается отклонение от ООП в концепции свойств (в
>реализации дельфей) ?
Ок. Если метод мы можем представить, как действие, которое может совершать объект, поле - как состояние в котором находится объект, то что тогда такое свойство в Delphi?
 

eXOR - billgmicrosoft.com
5 Jul 2002 12:31 PM
2 Просто прохожий:
Изменять свое состояние должен быть способен только сам объект, а остальные должны производить с ним какие - то действия, в результате которых объект должен изменять свое состояние. Если не придерживаться этого принципа - получаем не объектную модель задачи, а просто наляпаную поделку, с применением современных техноологий... возвращаемся к процедурному программированию.
 

Ron - rodionlenta.ru
5 Jul 2002 1:07 PM
"Впрочем любой основанный на ООП код будет либо большой по объему либо медленный"

Блин, откуда вообще пошла эта легенда? Неужели никто из тех, кто её передаёт из уст в уста не давал себе труда разобраться как, к примеру в С++ реализованы методы объектов? Вызов невиртуального метода в С++ не имеет оверхеда _ВООБЩЕ_. Оверхед вызова виртуального метода - что-то около 3-х команд х86. Это что сильно тормозно?
 

me - userinternet.com
5 Jul 2002 2:31 PM
>> что тогда такое свойство в Delphi?
Event. Событие то есть.
 

Qrot
5 Jul 2002 4:52 PM
2me: нифига. это только одно из примений.
 

x61
5 Jul 2002 4:54 PM
2Qrot: длинные строки в Delphi поддержаны на уровне компилятора, это не класс, а такой же тип, как Integer, например.
 

x61
5 Jul 2002 5:07 PM
2glassy: property сами по себе замедлить ничего не могут, что-то ты перепутал.
А rand() обсуждать неинтересно, все сводится к "не бывает".

2eXOR: в реальной жизни объекты обладают свойствами, а не методами изменения своего состояния. Так что, теоретически, properties позволяют более точно описывать обекты. А практически, просто очень удобная и мощная вещь.
 

Ron - rodionlenta.ru
5 Jul 2002 5:45 PM
Properties жуть как удобны :-))
Не знай я как следует, к примеру, ADO, я бы просто охерел, когда обнаружил, что: adoConnection.ConnectionString = "..."
в разных местах проги работает по-разному, а в иных вообще выкидывает exception. А между тем, это поведение вполне соответствует его спекам. Т.ч. я уж лучше не поленюсь и напишу на несколько букв длиннее: adoConnection->put_ConnectionString("..."), а кто хочет - флаг в руки, пусть себе жизнь "упрощает"
 

x61
5 Jul 2002 6:22 PM
2Ron: а не надо C++ Builder использовать :)

а насчет "гения с дельфёй" - если бы он не написал Turbo Pascal, то Borland вообще бы не было, а если бы не сделал Delphi, то Borland склеило бы ласты, у них дела совсем неважно шли в то время.
 

eXOR
7 Jul 2002 7:31 PM
2 me: Хмм?

2 x61: разве? В реальной жизни для описания измененния состояния мы пользуемся глаголами. Вы же предлагаете от них отказаться Ну ка приведите пример того, как можно описать поведение объекта меняющего свое состояние не пользуясь глаголами (читай методами).
 

eXOR
7 Jul 2002 7:31 PM
Извиняюсь долго писать не могу - никак не привыкну к клавиатуре на буке.
 

x61
8 Jul 2002 7:09 AM
2eXOR: если мы хотим определить, свежее мясо или нет, мы смотрим на его запах и цвет. При этом нас не интересует механизм образования запаха или цвета. Использование свойств - это более высокий уровень абстракции.
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 7:47 AM
2eXOR:
Только про соответствие ООП модели реального мира не надо ...
Сама модель мира есть определенная абстракция
А свойства технически удобнее. И при этом целостность и автономность объекта не нарушается, поскольку запись звойства эквивалентна методу (на самом деле, компилятор фактически и генерит вызов соответствующего метода объекта)
Кроме того есть изящная вещица с использование свойства типа interface в качестве ДИНАМИЧЕСКИ ИЗМЕНЯЕМОЙ реализации интерфеса, поддерживаемого объектом

2Ron: Разговор шел о реализации свойств в Дельфях. Dispatch интерфесы и их реализация - вообще отдельная статья :-))

"Блин, откуда вообще пошла эта легенда?"
Дык из практических реализаций ... :-))
Как только выстраивается достаточно глубокая иерархия объектов
так начинается байда с необходимостью вызова методов предков
Хотя конечно есть методы решения этой проблемы

2х61: насчет более высокого уровня абстракции согласен.

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

eXOR - billgmicrosoft.com
8 Jul 2002 8:18 AM
2 x61:
Для нас важно что мясо _ИСПОРТИЛОСЬ_, а уже в результате этого оно изменило свои свойства. Свойства - в данной модели права на жизнь вообще не имеет.

2 Просто прохожий:
> Сама модель мира есть определенная абстракция
Извини. Это не довод.

> А свойства технически удобнее.
Кому удобнее? Тому, кто пишет? Тому, кто читает? Или чукча не читатель?

 

x61
8 Jul 2002 9:13 AM
2eXOR: испорченность - это тоже свойство мяса :)
Мне неважно, в результате чего поменялся запах или цвет, меня интересует текущее состояние мяса, а оно описывается именно его свойствами.
Читабельность кода при использовании properties не сильно меняется, но писать легко читаемый код становится заметно проще и быстрее.
 

Ron - rodionlenta.ru
8 Jul 2002 9:43 AM
2 Просто прохожий: При чём тут вообще Dispatсh - интерфейсы?
Вызов метода предка в С++ делается без проблем абсолютно без разницы - виртуальный это метод или нет. Тот небольшой оверхед, который вызван виртуальностью метода при этом тоже одинаков и от того, что вызывается метод предка а не самого класса независит.
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 9:56 AM
2Ron:
По поводу adoConnection
Если не через Dispatch интерфейс работали, то приношу извинения, ошибся ...но выглядело похоже ...
тем не менее проблемы конкретной реализации свойств не могут быть аргументом в критике концепции свойств вообще

угу ...при неглубокой иерархии классов - это терпимо
 

glassy
8 Jul 2002 10:04 AM
2x61:
про rand(). На что будем спорить? У меня на i810 и i815 при использовании многопоточности возвращаемые значения меняются раз в полсекунды. Я аж офигел. Дальше копать не стал, счетчиком запатчил.

про PutPixel/GetPixel. Ну давайте порассуждаем, допустим я делаю медиан блёр своими ручками над битмапом (хотелось бы еще и над другими файлами, но это надо еще кучу левых движений делать) в дельфях. Даже если предположить, что getpixel*25 работает быстро, то putpixel отрисовывает на поверхности. В результате запускать медиан блер надо на ночь, чтобы утром, позавтракав и почистив зубы, взглянуть на результат работы. И кстати, сканлайн работает быстрее, но не настолько быстро по сравнению с виа gtk+gdk+imlib в линуксе.

 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 10:08 AM
Re: "читаемый код становится заметно проще и быстрее" by x61

class OneObject
private
Field1: integer;
public
function getProperty1:integer;
property Property1 :integer read Field1
end

сравните два фрагмента

a = theObject.Property1
и
a = theObject.getProperty1

в первом случае однозначно генерится инструкция что то вроде

1 инструкция, косвенная индексная адресация ... - 1 такт

MOV a, [theObject]+Field1Offset

во втором

MOV EAX, theObject
CALL getProperty1
MOV a, EAX

ну и что быстрее ...имхо очевидно :-)
 

x61
8 Jul 2002 11:11 AM
2glassy: хм, я думал, ты имел в виду проблему написания rand(), которая бы возвращала _случайные_ значения, а неслучайные тебе любая rand() вернет.
 

me - userinternet.com
8 Jul 2002 11:16 AM
Ах вот что такое свойства в дельфях. А я-то думал... Однозначно давить!
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 11:25 AM
2eXOR:
в таком случае

> В реальной жизни для описания измененния состояния мы
> пользуемся глаголами.

это тоже не довод

о читабельности

имхо конструкции а = b.field и b.field = a
гораздо читабельнее чем
а = b.getfield() и b.putfield(a)

2glassy, x61 : так вы все таки о случайных или псевдослучайных числах говорите :-))
 

x61
8 Jul 2002 11:50 AM
2me: учить, а не давить :)
 

Ron - rodionlenta.ru
8 Jul 2002 11:59 AM
2 Просто прохожий: "имхо конструкции а = b.field и b.field = a
гораздо читабельнее чем а = b.getfield() и b.putfield(a)"

Это твоё имхо, а моё имхо - наоборот. Читабельность - весьма субъективное понятие. А насчёт концептуальной правильности или неправильности свойств, то тут тоже спорить сложно. Вот если когда-нибудь будет создана формальная теория ОО-модели, тогда уже можно будет поспорить. А пока что это остаётся делом вкуса.
На мой вкус свойства - сакс и ацтой :-)))
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 12:04 PM
2Ron
вот на индивидуальности вкусов в искусстве программирования и порешим :-))
 

Qrot
8 Jul 2002 12:11 PM
по поводу читабельности: для a.field := value1 может быть назначен не SetField, к примеру, а SetFieldAndDoSomethingElse. в этом случае, из кода нихрена не будет понятно, что происходит на самом деле, и такой код потенциально ведет к логическим ошибкам. и это в паскале, который, казалось бы, сделан с целью недопускать или минимизировать подобные вещи. защиты, насколько я понимаю, нет.
 

x61
8 Jul 2002 12:16 PM
2Qrot: в этом и состоит разница между ООП и процедурным программированием.
Если ты пишешь Obj.Method, то тоже не знаешь, что на самом деле вызовется.
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 12:25 PM
2Qrot: а вызываться и делаться должно в любом случае то что написано в документации :-))
Хотя нет ... В документации должно быть написано все то, что делает этот метод

кстати большинство методов установки свойств как раз и построены по принципу "установить значение свойства и сделать еще что нибудь"
 

Qrot
8 Jul 2002 2:06 PM
2Просто прохожий: дык эта.. хочу глядеть код и понимать что происходит, а не рыться в исходниках, попутно штудируя документацию. и это еще документация должна быть...

2х61: не понял. если я пишу o.Method() я знаю что вызовется метод Method у объекта о. здесь похрену - виртуальный, не виртуальный.. главное что вызовется такой метод. а со свойтвом - видишь присваивание, а что там подтекстом идет хрен знает.
 

Просто прохожий - xwarlockmail.ru
8 Jul 2002 2:43 PM
2Qrot:
> ... хочу глядеть код и понимать что происходит
И чем o.Method() информативнее o.Property :=Value ???
не понимаю ...
а Variable := o.Property imho гораздо понятнее чем
Variable := o.Method;

> я знаю что вызовется метод Method у объекта о.

А что делает этот метод - типа по барабану?

> а со свойтвом - видишь присваивание, а что там подтекстом
> идет хрен знает.

Почему ... ты знаешь, что свойству присваивается значение :-))

В таком случае, весь C++ с его переопределением операторов надо выкинуть ... :-)))
 

Qrot
8 Jul 2002 3:13 PM
2Просто прохожий: как я понял, ты не понял :)

вариант1:
o.X := 10;
трансформируется в:
//some checking
X := 10;
Adjust;

где в коде, который видет раазработчик, указано что делается Adjust? нигде.

вариант2:
o.SetX(10);
o.Adjust();

трансформируется в:
//some checking
X=10;
Adjust();

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

Аналагия с плюсами и перегрузкой неверна - паскаль изначально предполагался как язык, для работы с которым, достаточно прочитать не сильно большое кол-во документации (именно по самому языку); о C и тем более C++ такого не скажешь. Если же объем доументации для современного Паскаля (Delphi) и C++ примерно одинаков (в том числе и по сложности), то не понятно, нахрена нужен еще один настолько сложный язык, который к тому же еще ограничивает разработчика во всем что только можно.. Когда ограничения вводятся ради того, чтобы сделать язык более простым и устранить вероятность ошибки, это можно понять.. но когда в итоге получаем все те же ограничения плюс резко возросшую сложность - в морг, однозначно. что, вобщем, заметно.
 

x61
8 Jul 2002 3:24 PM
2Qrot: когда я пишу MOV EAX, 12 то всем ясно, что в EAX будет 12, а когда пишу Func(), то, кто его знает, что там компилятор намутит, и что эта функция делает.
Немного утрирую, но я думаю, аналогия понятна.
 

Qrot
8 Jul 2002 3:51 PM
2х61: аналогия понятна, но неверна. во-первых, Func не Func, а длинный-и-понятный-мнемоничный-идентификатор, из которого ясно, что произойдет; во-вторых, если ты используешь свойства, то кроме как Field := Value, ты больше ничего сказать не можешь, т.е. у тебя нет возможности точно отразить в исходном коде реально выполняемые действия; в третьих, одна ассемблерная инструкцая никак не может соответствоать вызову ф-ции на языке высокого уровня, так что ты сначала вызов-то распиши, а потом посмотрим что кому ясно :)
 

eXOR - billgmicrosoft.com
8 Jul 2002 4:35 PM
2 Просто прохожий:
>вот на индивидуальности вкусов в искусстве программирования и
>порешим
Вот... меня не было... а они уже и порешили друг - друга :-).

> И чем o.Method() информативнее o.Property :=Value ???
Тем, что ты видишь, что вызывается метод, а не происходит простое присвоенние.
o.Property="sux";
ожидаемое поведенние - то, что в поле Property будет "sux", а не то, что при этом еще и o.Property2 установится в 0, и o.Property3 установится в 4.

Когда же ты видишь:
o.setProperty("sux");
ты заведомо знаешь, что тут может произойти что - то еще... из - за того что это не присвоенние, а метод... на то его методом и сделали, что может что - то еще случиться...

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

> испорченность - это тоже свойство мяса
Да, свойство, которое устанавливается в истину, когда мясо _портится_... при этом с мясом могут произойти еще какие - то измененния... и совершенно не важно, что тебя они не касаются - они будут касаться тех врачей, что будут тебя откачивать...
 

eXOR - billgmicrosoft.com
8 Jul 2002 4:38 PM
2 x61:
Когда ты пишешь на ассемблере и когда ты создаешь функцию - заведомо известно что будет в выполняемом модуле. Исключенние - tasm и nasm.

> Немного утрирую
Ты смысл искажаешь... извини конечно.
 

x61
8 Jul 2002 4:54 PM
2eXOR: точно так же я знаю, что происходит, когда я пишу Obj.Prop := Value.
Вы с Qrot сравниваете плохо написанный код с использованием свойств, в котором неосторожного программиста подстерегают сплошные опасности, с хорошо написанным кодом без свойств, в котором все методы красиво названы и делают то, что от них ожидается. Так все что угодно доказать можно.
 

me - userinternet.com
8 Jul 2002 5:18 PM
eXOR, пример без глаголов привести легко. Как правило, когда ты говоришь, что будешь ждать кого-либо на Манежной площади, то ты просто указываешь примерно следующее: объект.пункт назначения = Манежная площадь. И тебе пофигу как объект будет добираться до места.

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

Не начинаю:)) Просто злюсь очень, так как в жаве нет свойств и запись вида o.value=1 означает полную безграмотность писавшего:))

>> ты заведомо знаешь, что тут может произойти что - то еще
Блин. Ну кто тебя заставляет использовать _только_ свойства? Методы никто не отменял, поэтому используй их, если очень необходимо.
 

Qrot
8 Jul 2002 5:41 PM
2x61: дык это щастье если в методе записи свойства, ничего кроме проверки значения на правильность не используется.. так должно быть! но этого нет в 99% случаев, потому что в Паскале нет "защиты от дурака" при использовании свойств. для работы со строками есть защита от переполнения, а вот для работы со свойствами - нихера нет.
в тоже время подобной защиты от дурака нет и в С++ но здесь ее никто и не обещал и не ожидал, надо сказать :)
 

Просто прохожий - xwarlockmail.ru
9 Jul 2002 8:10 AM
А еще свойства в разделе published автоматически сохраняются в наследниках TPersistant :-))
 

eXOR - billgmicrosoft.com
9 Jul 2002 8:55 AM
2 x61:
> точно так же я знаю, что происходит, когда я пишу
> Obj.Prop := Value
Ок. Объясняю еще раз... ты знаешь, если это ты писал
Obj.Prop := Value
А если это _Я_ написал - знаешь ли ты что там происходит?

---
И - таки Qrot прав :-).

2 me:

> Не начинаю:))
Ага... и тогда ты удивляешься - фиг ли у меня там что - то меняется без моего ведома?

> И тебе пофигу как объект будет добираться до места.
Но я буду его ждать, т.е.
я->ждать(он);

> И тебе пофигу как объект будет добираться до места.
Это мне и правда пофигу. Мне важен сам факт того что добираться он - таки будет, а то как он добирался - это должно быть заложено в логику того, объекта.

 

me - userinternet.com
9 Jul 2002 10:10 AM
>> я->ждать(он);
Ну да, все правильно:)) Ты ждешь, а он "добирается". Только пишешь ты так:
он.куда = сюда;
я->ждать(он);
То есть ты "ему" просто сообщаешь место.

Объясняю еще раз для тех, кто в танке. Свойства нужны для того, чтобы не писать приставки set/get в каждой дырке. Идейно они обозначают рекомендацию изменить состояние, что вполне может привести к исключению (состояние не меняется, например). Однако, использование свойств действительно может привести к путаннице, потому что при обращении с ними используется оператор присваивания, который у многих программистов не ассоциируется с вызовом метода, поэтому использвание свойств или медотов get/set - это только вопрос стиля, принятого в коллективе разработчиков.

>> А если это _Я_ написал - знаешь ли ты что там происходит?
Да не надо мне знать, что там происходит. Мне важно знать, что obj.prop == value и не более того.

ЗЫ: Я говорю про свойства вообще (как в C#, например), а не про свойства в дельфях, ибо в дельфях, судя по описанию Прохожего, это и правда "сакс и ацтой" :))
 

Ron - rodionlenta.ru
9 Jul 2002 10:22 AM
Между прочим, сколько я видел дельфистов, мало кто из них писал собственные классы. В основном, юзали только готовые из того же VCL. Вот вам и О-О подход...
 

Qrot
9 Jul 2002 10:27 AM
2me: а чем свойства в C# вообще отличаются от свойств в дельфях?

2Ron: почему, пишут.. матерятся.. пишут.. матерятся.. тут главное опыта в плюсах не иметь и все будет хорошо :)
 

eXOR - billgmicrosoft.com
9 Jul 2002 11:27 AM
2 me:
> использование свойств действительно может привести к путаннице
Об том и речь. И только об том :-).

> он.куда = сюда;
Нее... хрень получается... лучше так
он.ехать(сюда); // имхо логичнее
 

me - userinternet.com
9 Jul 2002 12:36 PM
>> он.ехать(сюда); // имхо логичнее
В общем случае, "он" не желает предоставлять тебе возможность им управлять, и поэтому разрешается указывать только цель:))
Но это так, лирика.

>> Об том и речь. И только об том :-).
"...но может и не привести" - это подразумеваемое окончание фразы:))

>> чем свойства в C# вообще отличаются от свойств в дельфях?
Если верить Прохожему, то в дельфях свойства ограничивают лишь тип значения и способ доступа (read/write). В C# можно еще и пытаться хандлить факт обращения к тому или иному свойству. Возможно, в дельфи тоже так, а я просто не понял приведенный Прохожим пример.
 

x61
9 Jul 2002 12:55 PM
2me: ну вот, не понял, и сразу "сакс и ацтой" :) Там почти то же самое. В C# улучшили events, там можно на один event несколько обработчиков вешать.

2eXOR: что-то мы зацикливаемся, пора проверку на глубину рекурсии использовать :)
Если я вижу Obj.Prop := 123, то там на самом деле может быть все что угодно, тут я с тобой согласен. Но когда я вижу Obj.SetProp(123), то там точно так же может быть все что угодно. Особенно если это _ТЫ_ написал ;)

2Qrot: Никто и не обещал, что нельзя написать непонятный код, это тебя продавец Delphi обманул :)
Но отсутствие перегрузки операторов и макросов заметно уменьшает количество непонятностей при чтении чужого кода.
 

Qrot
9 Jul 2002 2:00 PM
2me: у тебя есть ф-ции записи/чтения свойсва, сделай в них вызов евента - вот тебе и хэндлинг

2х61: никто меня обманывал, если только ты с Виртом :) концепция дельфи - простой язык, на изучение которого не нужно тратить много времени. по крайней мере такую идею Вирт заложил в Паскаль. приведенные примеры показывают что эта концепция в дельфи соблюдается не полностью из-за различных расширений. даже Вижуал Бэйсик в этом отношении много лучше, ИМХО.
короче, я все это уже писал раньше.
 

x61
9 Jul 2002 3:06 PM
2Qrot: Вижуал Бэйсик? Ну это ты со зла :) На самом деле ничего сложного в properties нет, просто привыкнуть надо. Вот как начнут все на C# писать, так сразу и станет всем ясно, что properties это рулез :)
 

Ron - rodionlenta.ru
9 Jul 2002 4:20 PM
2 x61: "Вот как начнут все на C# писать".
Я уже не начну, это точно. Решил я постепенно начинать забивать на МС с его "новациями". Эти ежегодные "новации" уже заколебали.
 

Qrot
9 Jul 2002 4:44 PM
2х61: ну со зла конечно :) но с другой стороны мне он показался куда более простым чем дельфи. а если пропертя в шарпе сделаны так же, как в дельфях, то и там это отстой. по любому, я уж как-нибудь на плюсах :)
 

x61
9 Jul 2002 4:50 PM
2Ron: так работа такая - приходится все время что-то новое учить. Тем более, не так уж часто MS свой язык придумывает - надо дать им шанс :)
 

glassy
10 Jul 2002 10:17 AM
Ну не удержался.
чел_послать(он, туда, быстро);
 

glassy
10 Jul 2002 10:23 AM
точнее так:
умный_чел_послать(он, туда, пешком);
умный_чел_послать(он, сюда, на_моторе);
умный_чел_послать(он, обратно, трамваем);
if (больше_заданий_нет) умный_чел_выполняй_с_оптимизацией();
 

eXOR - billgmicrosoft.com
10 Jul 2002 11:03 AM
2 me:
> поэтому разрешается указывать только цель:))
Ну нихрена себе... т.е. я в его состояние залезу и буду ковыряться... это уже вообще будет свинство... А в моем случае, вызов метода носит рекомендательный характер и "он" может захотеть идти, а может и нет.

2 x61
> Особенно если это _ТЫ_ написал ;)
Злая - злая шутка. С открытым наездом... ай - яй - яй.

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

x61
10 Jul 2002 12:31 PM
2eXOR: я просто твое "если это _Я_ написал" повторил, ничего личного :)
 

x61
10 Jul 2002 12:34 PM
2glassy: устаревший у тебя подход, надо
он.послать(туда, быстро)
а там уже умный_чел доберется одним способом, а глупый_чел другим, меня это волновать не должно.
 

glassy
10 Jul 2002 3:04 PM
имелось в виду:
умный_чел_иди(он, туда);
умный_чел_иди(он, сюда);
умный_чел_иди(он, туда);
умный_чел_иди(он, сюда);
умный_чел_иди(он, туда);
if (я_определился_наконец) умный_чел_выполняй_с_оптимизацией(он);

Теперь более правльно, но свойства сосут anyway.
 

glassy
10 Jul 2002 3:06 PM
еще более правильно :)
if (я_определился_наконец) умный_чел_выполняй_с_оптимизацией_что_я_тебе_говорил(он);
 

Просто прохожий - xwarlockmail.ru
10 Jul 2002 4:21 PM
2All
//типа пример использования свойств на дельфи

TMover = class
private
FTarget: ITarget;
protected
function GetTarget: ITarget;
procedure SetTarget(ATarget:ITarget);
public
property Target:ITarget read GetTarget write SetTarget;
Property FastTarget: ITarget read ITarget;
end;

implementation

function TMover.GetTarget: ITarget;
begin
//Do something
Result:= FTarget
end;
procedure SetTarget(ATarget:ITarget);
begin
//Do something ...check validity for example
FTarget := ATarget;
//Do something else
end;

 

Просто прохожий - xwarlockmail.ru
10 Jul 2002 4:22 PM
в разделе implementation читать
procedure TMover.SetTarget(ATarget:ITarget);
 

Просто прохожий - xwarlockmail.ru
10 Jul 2002 4:25 PM
В принципе можно еще навесить внешний обработчик событий на класс
чтоб когда он мувер дойдет ...то уведомил бы о достижении состояния
 

Просто прохожий - xwarlockmail.ru
10 Jul 2002 4:32 PM
а вот насчет реализации динамически изменяемой реализации интерфейса что то нет откликов, а таки в дельфях и именно через свойства это доступно!

 

Nick - nkulykmail.ru
10 Jul 2002 11:12 PM
2 Просто прохожий. Да кто тебе здесь может дать отклик. Все ж супер-пупер крутые С++ программеры. "Ацтой" + "Давить" = характеристика присутствующих здесь Гейтсов и Торвальдсов.
 

Qrot
10 Jul 2002 11:28 PM
2Просто прохожий: а по поводу евентов никаких нареканий нет :) единственно что, могли бы только таким примением и ограничиться, и заточить именно под евенты
 

Ron - rodionlenta.ru
11 Jul 2002 12:21 AM
2 Просто прохожий: А что такое "динамически изменяемая раелизация интерфейса" ?
 

glassy
11 Jul 2002 7:48 AM
Опять про евенты. T-FLEX CAD плохо сделан. Создание 5 000 линий занимает 15 секунд, их удаление -- 15 минут. Нормально написанное приложение на Делфи именно так и работает -- в данном случае если на каждое удаление и создание графического примитива делать перерисовку экрана. Маразм.
 

glassy
11 Jul 2002 7:49 AM
в дельфях вообще можно сделать OnIdle?
 

eXOR - billgmicrosoft.com
11 Jul 2002 8:37 AM
2 Просто прохожий:
Не... ивенты на пропертях - это всяко удобно. Я никогда не говорил что это неудобно писать. Вот читать - это да...
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 10:16 AM
2Ron: Динамически изменяемая реализация интерфейса это вот что:

TCooler = class (TBaseClass, ICooler)
FColer :ICooler;
public
Property Cooler:ICooler read FCooler write SetCooler implements ICooler;
end;

Присваивая свойству Cooler разные значения (указатели на конкретные реализации интерфейса, полученные каким либо образом, например, хоть путем вызова COM API меняется реализация интерфейса класса TCooler!!!!
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 10:18 AM
2Nick:
Да лана те ...врое приличные все люди :-))))
 

Qrot
11 Jul 2002 10:33 AM
2Просто прохожий: аа... я думал ты про евенты :))
а нафига такая шняга нужна если уже есть
TCooler = class (TBaseClass, ICooler) ?
 

x61
11 Jul 2002 10:55 AM
2Qrot: а чтобы можно было написать
property MyInterface: IMyInterface read MyInterface implements IMyInterface;
тогда класс может поддерживать IMyInterface но не содержать его реализацию, а делегировать ее.
 

x61
11 Jul 2002 10:58 AM
2glassy: в дельфях можно сделать практически все, что можно сделать вообще. OnIdle там уже есть. Существование плохой программы, написанной на Delphi, говорит только об уровне ее разработчиков.
 

Qrot
11 Jul 2002 10:59 AM
2х61: непонятно, но красиво :) вот на этом и нужно было остановится, сделав такие делегаты и евенты. ИМХО.
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 11:27 AM
2x61
ага ...туда бы еще поддержку templates'ов :-))
кстати вроде обещают :-))
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 11:34 AM
2glassy на самом деле правильно написанное приложение на дельфях не перерисовыет немедленно экран паосле каждой примитивной операции. Оно просто уведомляет окно (Window), о том что надо перерисовать определенную область (вызывая InvalidateRect или InvalidateRegion) окно отрисовывается асинхронно.
Если действительно ОЧЕНЬ много прорисовок, тогда работай через BeginPaint EndPaint При этом промежуточные результаты не отрисовываются, а отрисовка происходит только после вызова EndPaint. Еще более ускорить отрисовку можно используя внеэкранные контексты, и выполняя всю отрисовку в них а потом быстро копируя их в экранный контекст

В общем пути решения есть ...я тебяя уверяю
 

Qrot
11 Jul 2002 11:51 AM
2Просто прохожий: ага, добавьте туда темплэйты и получится вообще хрень на палочке, в которую без поллитры не въедешь.
 

x61
11 Jul 2002 12:10 PM
2Просто прохожий: а когда это они темплейты обещали?
 

glassy
11 Jul 2002 1:23 PM
2Просто прохожий: если проект коммерческий, то специально на этом никто внимания заострять не будет.
 

eXOR - billgmicrosoft.com
11 Jul 2002 2:43 PM
2 x61:
> Существование плохой программы, написанной на Delphi, говорит
>только об уровне ее разработчиков
Гы... а какой язык на твой взгляд сложнее - Java или Object Pascal (Delphi)?.
 

x61
11 Jul 2002 3:04 PM
2eXOR: как по мне - так все равно на чем писать, поначалу тяжело перестраиваться, а потом втягиваешься, и все становится родным и понятным. А к чему это ты про Java вспомнил?

2glassy: у меня почему то сложилось впечатление, что ты никогда в коммерческих проектах не участвовал, я прав?
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 3:25 PM
2Qrot: ну не знаю... я как то довольно быстро во все это въехал

2x61: да инфа проходила где-то ...но за точность не ручаюсь ...так что может быть и ошибаюсь ...
имхо, темплэйты в том виде как в с++ не оргапнизовать однозначно ... но вот замену адекватную, наверное можно ...типа метаклассов что-нибудь :-))
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 3:27 PM
2Qrot: Правда может я - гений ? :-)))
 

Просто прохожий - xwarlockmail.ru
11 Jul 2002 3:27 PM
2Qrot: впрочем и на VC у меня проблем не было при работе :-))
 

Qrot
11 Jul 2002 9:06 PM
2Просто прохожий: да, ты - гений! :))
в паскаль не въехать довольно сложно, ИМХО. впрочем, на дельфях я писал не особо долго, по причине религиозной ненависти. а на Буилдере довольно долго - изврат редкостный с этой VCL паскалевской... как залезешь в исходники так плеваться начинаешь...
 

Max - obriverhotmail.com
12 Jul 2002 8:12 AM
Naprimer bolshinstvo VisualBASIC controlov v osnovnom sostoyat iz properties - metodov ochen' malo. Pochemu? Pomoemu potomu chto properties bolee tochno podhodyat k VB zadacham - e.g. izmenil shirinu okna, i vse. I sovershenno ne kolyshet kak ona tam menyaetsya (zachem eto znat pol'zovatelyu?). Poetomu s moey tochki zrenia VB kod vyglyadit ochen odnorodno i ponyatno.
 

Просто прохожий - xwarlockmail.ru
12 Jul 2002 8:41 AM
2Qrot:
> изврат редкостный с этой VCL паскалевской
Ну Билдер - это вообще отдельная песня ... :-))
 

glassy
12 Jul 2002 8:46 AM
2x61: участвовать не учасвовал, но наблюдал много.

От себя лично сделал некоммерческий проект http://glassy.to.kg/gallery

Но контрибьюторы -- те же ежики -- пока не пнешь даже сырцы не распакуют.
 

x61
12 Jul 2002 10:56 AM
2glassy: не, наблюдать - это не то. Некоторые вещи все равно не понимаешь, пока на себе не попробуешь.
А ты свой проект на C написал? Тогда мы можем вернуться к изначальной теме обсуждения и посмотреть, нет ли там у тебя buffer overrun :)
 

glassy
12 Jul 2002 12:22 PM
2x61: от юзера -- нет, из файлов ресурсов -- надо пройтись (как-нибудь) и пообрезать все длиннее 4000 байт http://glassy.to.kg/engy/programmers.html -- про sprintf vs snprintf.
 

glassy
12 Jul 2002 12:28 PM
да я же об этом здесь писал
 

eXOR - billgmicrosoft.com
15 Jul 2002 8:09 AM
2 glassy:
> http://glassy.to.kg/engy/programmers.html
В корне не согласен. Ни с одним доводом в пользу sprintf.
 

glassy
15 Jul 2002 10:16 AM
2eXOR: в некоторых местах я все-таки поставил их, как ты мог видеть, но скрепя сердце. Потому как научен проблемами совместимости -- bzero нет вообще, а про snprintf та еще баталия будет....
 

eXOR - billgmicrosoft.com
16 Jul 2002 8:20 AM
2 glassy:
> и пообрезать все длиннее 4000 байт
Ок. А почему не 4001? Почему не 4096? Ты предполагаешь что твой кад будет разрастаться?
 

glassy
16 Jul 2002 9:39 AM

твой вариант выглядит так?

buf = malloc(strlen(s)+strlen("s = ")+1);
sprintf(buf,"x = %s", s);
/* using buf */
free(buf);

Во-первых, можно быть и пожестче в отношении длины строк :)
А во-вторых, syscall выполняться будет намного дольше простой инкрементации sp.
И если уж быть совсем правильным, придется делать realloc() (могу даже сказать где). А у меня к ней антипатия из-за первой рычащей буквы :)
1-6.patch сделал?
 

x61
17 Jul 2002 11:49 AM
2glassy: посмотрел я один файл твоих исходников (serv.c), вот тебе feedback:
4000 - давить. Тем более давить, что оно у тебя не в виде define или const, а явно в разных местах используется, что совсем нехорошо.
s[0] без проверки if(s) - давить.
serv_set_hint(char *s) содержит типичный пример buffer overrun, просто в книжку можно помещать. Ну и других проблем там хватает, если интересно, могу написать.
 

glassy
18 Jul 2002 8:29 AM
1. про 4000 -- на первое время мое как автора право.
2. s[0] -- смотри выше -- serv_put_string() -- строки не помещаются (и само собой пустые не могут возвращаться) в очередь.
3. serv_set_hint() -- вызывает gui_put_string(), который обрезает строки до твоих нелюбимых 4000.

Не спорю, документированно плохо, есть непонятные места, но еще одно такое заявление и окажешься ламо.
 

glassy
18 Jul 2002 8:31 AM
Пиши, мыло на сайте есть -- в разделе про автора.
 

x61
18 Jul 2002 1:47 PM
2glassy:
1. не спорю, но для таких дел хорош #define
2.
_serv_get_string(void)
{
...
if (!serv_queue)
return ;

смотрим дальше:
s = _serv_get_string();
if (s[0] == 0x27)

3. да, тут я не прав. но согласись, что если у тебя везде строки до 4000, то передавать в какую-то функцию 4100 будет немного некрасиво, даже если она и проверяет.
 

Interrupt
18 Jul 2002 11:52 PM
Прикольное обсуждение получилось. Ну много я слышал типа Delphi vs. VB, или там Delphi vs. Java, но чтобы Delphi vs C++ - этого еще не было :)) И рассказывать что есть в Delphi, чего нет в C++. Интерестно, на чем Delphi написан ?
 

glassy
19 Jul 2002 3:34 AM
2x61: 2. А ветка и в самом деле лишняя... Типа аппендикса, еще от беспозвоночной версии (проследил до ~/nnn/nnn.c -- были первые игры с очередью в феврале еще). Смысл тот, что пока очередь пуста, serv_get_string() будет стоять и ждать -- посмотри на первый оператор.
 

glassy
19 Jul 2002 3:38 AM
Skull, радуйся, ничего лучше рх7.3 не нашел (лень/жадность ;)) Сейчас начну ставить. :(

2x61: это вовсе не баффер оверран, а просто мозгопудрительсво :)
 

x61
19 Jul 2002 9:28 AM
2Interrupt: компилятор был раньше на ассемблере, редактор на C, остальное на Delphi.
VB и Java - это суета, настоящий флейм всегда был Pascal vs C :)
 

Qrot
19 Jul 2002 1:10 PM
2x61: да Interrupt то прав, Delphi относится к тому же классу инструментов что и VB :) - для быстрого клепания гуя, а все остальное там от лукавого.
 

x61
19 Jul 2002 1:21 PM
2Qrot: сильный аргумент. а C# тоже относится к тому же классу?
 

Qrot
19 Jul 2002 1:54 PM
2x61: пока не попишешь, не узнаешь. но, ИМХО, нет.
 

x61
19 Jul 2002 2:45 PM
2Qrot: а почему нет? Тоже RAD. Тут ничего плохого нет, когда что-то можно сделать быстро :)
 

Qrot
19 Jul 2002 2:54 PM
2x61: а я не говорю, что это плохо. просто это не главное в шарпе, как я его понимаю.
 

shula - paxyahoo.com
15 Dec 2006 8:29 PM
Information and news about penis enlargement pills and penis size.Visit : http://www.hqpicture.com
 

shula - paxyahoo.com
15 Dec 2006 8:29 PM
Penis enlargement pills are supplements designed to improve every aspect of a man's sexual function, performance and enjoyment. Visit : http://www.penis-enlargement-dream.com
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
Only doctors approved products . Complete Penis Enlargement Pills that is Laboratory Tested . Visit : http://www.oksextoys.com
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
ClearPores is the #1 acne treatment and help get rid of acne so that you can feel good about yourself again. This acne treatment is recomanded by specialist doctors . Visit : http://www.cho69.com
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
http://health-store.uv.ro
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
http://the-device.xhost.ro
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
http://sizegenetics.uv.ro
 

shula - paxyahoo.com
15 Dec 2006 8:30 PM
http://www.penis-enlargement-live.com
 

shula - paxyahoo.com
15 Dec 2006 8:31 PM
http://hqweight.blogspot.com
http://hqpenis.blogspot.com
http://mescane.blogspot.com
http://mescane-penis.blogspot.com
http://mescane-weightloss.blogspot.com
http://mescane-acne.blogspot.com
 

 

← май 2002 19  20  21  24  25  26  27  28  30 июль 2002 →
Реклама!
 

 

Место для Вашей рекламы!