Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 08:44
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

Ок. вот я и не понимаю: зачем плодить сущности?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:45
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Здравствуйте, OdesitVadim, Вы писали:


V>>>3/2 — это деление двух целых

OV>>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность"
OV>>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться?
OV>>Получается, что (3/2)*2!=3 явное нарушение законов математики. Вот где одна из собак языка Си/Си++ порылась. В Паскале всё нормально — математика выполняется.

AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.


И в дополнение мы не в школе и не в институте, а решаем задачи программирования на языке программирования со своими правилами. А как гвоорится со своими уставами в чужой монастырь... Так что все просто либо вы принимаете правила и пишите на С++ (могу поверить что вас моугт заставить), либо нет и пишите на другом языке.
Я пишу и на том и на том, дискомфорта не чувствую, В Делфи (мое мнение) нужно помнить больше того что должне знать компилер.
Re[11]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:46
Оценка:
V>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.
Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
В контексте же темы ветки существенных отличий нет.
Re[12]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 08:50
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.

SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
SS>В контексте же темы ветки существенных отличий нет.
Для вас const не существенно? Для меня очень существенно. Потому как то что константно — то должно им и оставаться (естественно если вы намеренно не хотите снять константность), и за этим следить должен в первую очередь программер (он вообще за всем следить должен) а помогать за этой слеэкой компилер.
То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Re[14]: Контроль типов в С++ и в Object pascal
От: AKh  
Дата: 11.05.07 08:57
Оценка: +1
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, AKh, Вы писали:


AKh>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

OV>Ок. вот я и не понимаю: зачем плодить сущности?

Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".

Моя точка зрения такая (попробую быть последовательным):
Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции. Но имеет уточнение — а именно предметная область пременения — программирование. А в этой области есть особенность — в компьютере нет непрерывной линейки чисел. Поэтому, есстественным выглядит, разделение на типы: целые и иммитация дробных. В зависимости от предметной области использование одного из этих типов будет выгоднее использование другого. Таким образом, и использование операции деления с одним типом будет выгоднее операции деления с другим. Это и является обоснованием рациональности ввода 2-х типов операций деления.
Re[12]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 08:58
Оценка:
V>>>>Здравствуйте, SuhanovSergey, Вы писали:
OV>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
SS>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!

V>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение...

Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у.
Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.
Re[12]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:02
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.

SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
SS>В контексте же темы ветки существенных отличий нет.

Мне было сложнее я учил Делфи после С++, а это туевы хучи ликов, наделаных мною по простому не знанию того (на тот момент) чьл лбьект в Делфе выделяется динмически и после разрушения стека не освобождается, это куча надежд на компилер (не то чтобы надежд, просто не допускания в голову мысли что компилер такое может пропустить).

И тот и тот языки хороши, докозательство тому — тонны приложений написаных как на плюсах так и на делфе. И я не являюсь ярым приверженцем плюсов или делфы и ярым противником обратного, для лбой задачи нужно выбирать оптимальные средства ее решения.
Re[13]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:04
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>>>>Здравствуйте, SuhanovSergey, Вы писали:

OV>>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот
OV>>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4.
SS>>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!

V>>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение...

SS>Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у.
SS>Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.

Нет, посто относился не к вам, а к тому кому отвечали вы постом выше о как замучено.
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:07
Оценка:
SS>>Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.

Не только FreeAndNil вообще не типизированый тип (var Data) это ЗЛО во всех его проявлениях, уж лучше поинтер.
Re[12]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:10
Оценка:
SS>>Если так рассуждать, то все укзатели — это по сути целые числа.
OV>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.
Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.

Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо. Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
Re[5]: Контроль типов в С++ и в Object pascal
От: MasterZiv СССР  
Дата: 11.05.07 09:12
Оценка:
vasmann пишет:

> MZ>У них все объекты наследуются принудительно и неявно от TObject.

> MZ>Так что все в порядке ( с точки зрения борладна ).
>
> Шутить изволите?
> String это не TObject
> Pointer — это не TObject

Ладно, хорошо. На самом деле это не делает Object Pascal языком
без строгой типизации. Ну а то что борланды делают все что
им вздумается с их языком — это их дело.

Кстати я бы наверное сравнивал тогда не с Object Pascal,
которого как языка и не было (стандарта не было потому что),
а с языком Pascal, который все же как язык был, хотя стандарта
его тоже вроде бы не было.
Posted via RSDN NNTP Server 2.1 beta
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:15
Оценка:
Здравствуйте, AKh, Вы писали:

AKh>Здравствуйте, OdesitVadim, Вы писали:


OV>>Здравствуйте, AKh, Вы писали:


AKh>>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.

OV>>Ок. вот я и не понимаю: зачем плодить сущности?

AKh>Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".

Непонял, причем это здесь
AKh>Моя точка зрения такая (попробую быть последовательным):
AKh>Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции.
Как кто то с класиков тоже сказал, унаследованный класс не должен изменять сущность базового. Кто то на этом форуме с сишников кричал мне что наследование — ужос.
AKh>Но имеет уточнение — а именно предметная область пременения — программирование. А в этой области есть особенность — в компьютере нет непрерывной линейки чисел.
А в обычной математике разве не так? Вы помните о делении на рациональные и иррациональные числа. Просто в эти множества немного разные для компа и обычного математика. По моему, (могу ошибаться) но множество рациональных чисел, которые использует комп входят в множество рациональных чисел математика. Но не наоборот.

AKh>Поэтому, есстественным выглядит, разделение на типы: целые и иммитация дробных.

Иммитация — это супер!
AKh>В зависимости от предметной области использование одного из этих типов будет выгоднее использование другого. Таким образом, и использование операции деления с одним типом будет выгоднее операции деления с другим.
Согласен.
AKh>Это и является обоснованием рациональности ввода 2-х типов операций деления.
Но я бы оставил для целого деления симпол "\" и всё. Тоесть

3/2 = 1.5
3\2 = 1
3.0/2 = 1.5
3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
таким образом всё было бы по местам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:18
Оценка:
OV>Иммитация — это супер!
Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>3/2 = 1.5

OV>3\2 = 1
OV>3.0/2 = 1.5
OV>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>таким образом всё было бы по местам.

Не переживайте, кому нужно, запинают, что целочисленное деление дает целый меньший результат, а дробное делене дает максимально приближенный дробный результат, это правиль за два повторения в уме, и 2-3 примерами увиденных в дебагере.
Re[13]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:20
Оценка:
V>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Re[13]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:20
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

SS>>>Если так рассуждать, то все укзатели — это по сути целые числа.

OV>>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.
SS>Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.
Я просто показал, что переменная объект — указатель.
SS>Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо.
Я не утверждал что это хорошо. Я просто сказал, что это законно. Законно!=хорошо. Аккуратно выводите мысль.
SS> Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
так приведения pointer -> TObject только явное. Просто паскаль допускает создание параметров без указания типа. Это другое дело. И компилятор смотрит. ведь посмотрите определение параметров FreeAndNil — (var Obj)
Если её обявить как (var Obj:TObject) то указатели не пройдут.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:25
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:

V>>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?

SS>Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Да в том то и дело, кому то не нравится что в С++ 3/2 дает 1, когда это вовсе не противоречит стандарту а даже им указано, я бы понял если бы на 3 из 6 машинах это работало так, а на других не так, причем в независимости от компилятора — духовная связ так сказать — да это была бы проблема.
И в принципе тему можно было бы давно закрыть, т.к. автор темы давно в курсак себе впишет то что было сказано давно, а мы тут просто поддержали разговор .
Re[14]: Контроль типов в С++ и в Object pascal
От: SuhanovSergey  
Дата: 11.05.07 09:27
Оценка:
OV> так приведения pointer -> TObject только явное.
Это работает:
var
  p: Pointer;
  m: TButton;
begin
  m := p;
end;
Re[17]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:27
Оценка:
Здравствуйте, vasmann, Вы писали:

OV>>Иммитация — это супер!

V>Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>>3/2 = 1.5

OV>>3\2 = 1
OV>>3.0/2 = 1.5
OV>>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>>таким образом всё было бы по местам.

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

Да вот 3 месяца пишу на чистом Си, свык. Но слава Богу, мой компилятор хоть жорсткий. Он кричит на меня по каждой мелочи. Например,
char t[10];
printf("%d",t);

компилятор пишет о серёзной ошибке и отказывается компилить. Не говоря о других вещах.
Когда к MS VC2005++ пришёл, то его вольностям я был в шоке. Мне нужно было передать в процеру масив, и как я не передавал его, компилятор пропускал (а я случайно описался и амперсанд забыл дописать, а потом, когда понял, просто уже "игрался" и смотрел как компилятор глотает откровенный бред)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Контроль типов в С++ и в Object pascal
От: vasmann  
Дата: 11.05.07 09:30
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Здравствуйте, vasmann, Вы писали:


OV>>>Иммитация — это супер!

V>>Тоесть для вас они дробные на промежутке -бесконечность..+бесконечность, ну ну

OV>>>3/2 = 1.5

OV>>>3\2 = 1
OV>>>3.0/2 = 1.5
OV>>>3.0\2 = 1 (или 1.0?) Вот здесь я бы задумался, наверно ругаться надо, так как 3.4\2 я сложно представляю
OV>>>таким образом всё было бы по местам.

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

OV>Да вот 3 месяца пишу на чистом Си, свык. Но слава Богу, мой компилятор хоть жорсткий. Он кричит на меня по каждой мелочи. Например,
OV>
OV>char t[10];
OV>printf("%d",t);
OV>

OV>компилятор пишет о серёзной ошибке и отказывается компилить. Не говоря о других вещах.
OV>Когда к MS VC2005++ пришёл, то его вольностям я был в шоке. Мне нужно было передать в процеру масив, и как я не передавал его, компилятор пропускал (а я случайно описался и амперсанд забыл дописать, а потом, когда понял, просто уже "игрался" и смотрел как компилятор глотает откровенный бред)
Какое отношение бред пропущенный компилером 2005 относится к стандарту языка по поводу опереатора / для целых и с плавающей точкой чисел. Вообще бред который пропускает компилер марки HZ не означает что это ошибка стандарта языка.
Re[15]: Контроль типов в С++ и в Object pascal
От: OdesitVadim Украина  
Дата: 11.05.07 09:41
Оценка:
Здравствуйте, SuhanovSergey, Вы писали:


OV>> так приведения pointer -> TObject только явное.

SS>Это работает:
SS>
SS>var
SS>  p: Pointer;
SS>  m: TButton;
SS>begin
SS>  m := p;
SS>end;
SS>


А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.
В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.