Здравствуйте, AKh, Вы писали:
AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.
Ок. вот я и не понимаю: зачем плодить сущности?
Здравствуйте, AKh, Вы писали:
AKh>Здравствуйте, OdesitVadim, Вы писали:
V>>>3/2 — это деление двух целых OV>>Да, но скажи это в школе или институте. Они пальчиком у виска покрутят. Только Сипрограммеры и им подобные понимают эту "особенность" OV>>Ведь если 3 яблока на двоих делить, то куда ещё одно денеться? OV>>Получается, что (3/2)*2!=3 явное нарушение законов математики. Вот где одна из собак языка Си/Си++ порылась. В Паскале всё нормально — математика выполняется.
AKh>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия.
И в дополнение мы не в школе и не в институте, а решаем задачи программирования на языке программирования со своими правилами. А как гвоорится со своими уставами в чужой монастырь... Так что все просто либо вы принимаете правила и пишите на С++ (могу поверить что вас моугт заставить), либо нет и пишите на другом языке.
Я пишу и на том и на том, дискомфорта не чувствую, В Делфи (мое мнение) нужно помнить больше того что должне знать компилер.
V>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо.
Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает".
В контексте же темы ветки существенных отличий нет.
Здравствуйте, SuhanovSergey, Вы писали:
V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо. SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает". SS>В контексте же темы ветки существенных отличий нет.
Для вас const не существенно? Для меня очень существенно. Потому как то что константно — то должно им и оставаться (естественно если вы намеренно не хотите снять константность), и за этим следить должен в первую очередь программер (он вообще за всем следить должен) а помогать за этой слеэкой компилер.
То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Здравствуйте, OdesitVadim, Вы писали:
OV>Здравствуйте, AKh, Вы писали:
AKh>>Имхо тут надо различать оператор деления языка и математический оператор деления. Вы сравниваете совсем разные понятия. OV>Ок. вот я и не понимаю: зачем плодить сущности?
Как сказал Саттер с Александреску "Предпочитайте минимальные классы монолитным".
Моя точка зрения такая (попробую быть последовательным):
Оператор деления языка можно "отнаследовать" от математического, т.к. он выполняет те же функции. Но имеет уточнение — а именно предметная область пременения — программирование. А в этой области есть особенность — в компьютере нет непрерывной линейки чисел. Поэтому, есстественным выглядит, разделение на типы: целые и иммитация дробных. В зависимости от предметной области использование одного из этих типов будет выгоднее использование другого. Таким образом, и использование операции деления с одним типом будет выгоднее операции деления с другим. Это и является обоснованием рациональности ввода 2-х типов операций деления.
V>>>>Здравствуйте, SuhanovSergey, Вы писали: OV>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот OV>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4. SS>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!
V>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение...
Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у.
Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.
Здравствуйте, SuhanovSergey, Вы писали:
V>>Но факт остается фактом Типовая систем Делфы сливает С++ без особых надежд на победу. И это ВСЕГДА НУЖНО ДЕРЖАТЬ В ГОЛОВЕ, отвлекать себя на это, в то время как это МОЖЕТ И ДОЛЖЕН ДЕЛАТЬ КОМПИЛЯТОР, но знать об это тоже надо. SS>Когда я изучал C++ после Delphi мне всё больше казалось, что Object Pascal — это какая-то урезанная версия C++. Классы есть, но можно создавать только динамически. Стековые объекты есть (object, record) но без деструкторов. Смарт-поинтеры есть, но только для COM. Строки намертво встроены в язык, никак настроить их нельзя. В этом смысле конечно "сливает". SS>В контексте же темы ветки существенных отличий нет.
Мне было сложнее я учил Делфи после С++, а это туевы хучи ликов, наделаных мною по простому не знанию того (на тот момент) чьл лбьект в Делфе выделяется динмически и после разрушения стека не освобождается, это куча надежд на компилер (не то чтобы надежд, просто не допускания в голову мысли что компилер такое может пропустить).
И тот и тот языки хороши, докозательство тому — тонны приложений написаных как на плюсах так и на делфе. И я не являюсь ярым приверженцем плюсов или делфы и ярым противником обратного, для лбой задачи нужно выбирать оптимальные средства ее решения.
Здравствуйте, SuhanovSergey, Вы писали:
V>>>>>Здравствуйте, SuhanovSergey, Вы писали: OV>>>>Считаю не нормальным неявное преобразование типа из TObject в pointer и наоборот OV>>>>Ну я в си и плюсах тоже многое считаю неверным. Но в данном случае это преобразование вполне законно, так как в Делфи любая переменная-объект есть указателем. Попробуйте к примеру sizeof(Form1). Будет 4. SS>>>Если так рассуждать, то все укзатели — это по сути целые числа. Давайте тогда разрешим свободно приводить их в Integer!
V>>Я приведу пример из реальной жизни. Писалось клиент/сервер приложение... SS>Интресно, как эта поучительная история связана с моим злорадным замечанием к мнению о корректсности приведения Pointer-ов TObject-у. SS>Я так понял вы имеете свои счёты с FreeAndNil и хотите об этом поговорить Я лично не спорю, что FreeAndNil — это грабля.
Нет, посто относился не к вам, а к тому кому отвечали вы постом выше о как замучено.
SS>>Если так рассуждать, то все укзатели — это по сути целые числа. OV>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу.
Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.
Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо. Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
vasmann пишет:
> MZ>У них все объекты наследуются принудительно и неявно от TObject. > MZ>Так что все в порядке ( с точки зрения борладна ). > > Шутить изволите? > String это не TObject > Pointer — это не TObject
Ладно, хорошо. На самом деле это не делает Object Pascal языком
без строгой типизации. Ну а то что борланды делают все что
им вздумается с их языком — это их дело.
Кстати я бы наверное сравнивал тогда не с Object Pascal,
которого как языка и не было (стандарта не было потому что),
а с языком Pascal, который все же как язык был, хотя стандарта
его тоже вроде бы не было.
Здравствуйте, 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 я сложно представляю
таким образом всё было бы по местам.
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 примерами увиденных в дебагере.
V>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ?
Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Здравствуйте, SuhanovSergey, Вы писали:
SS>>>Если так рассуждать, то все укзатели — это по сути целые числа. OV>>А как оригинально вы основываясь на количестве байт, пришли к неверному выводу. SS>Дак это вы же начали основываться на количестве байт для своих выводов! Моя реплика — это была "гипербола". Я преувеличил, чтобы показать, ваш такой подход неверен.
Я просто показал, что переменная объект — указатель. SS>Вы утверждали, что приведение TObject в Pointer и обратно — это правильно и хорошо.
Я не утверждал что это хорошо. Я просто сказал, что это законно. Законно!=хорошо. Аккуратно выводите мысль. SS> Я и создатели C++ не согласны. TObject является указателем, но наоборот. Поэтому приведение TObject -> pointer пртензий не вызывает, pointer -> TObject по идее не должно быть неявным.
так приведения pointer -> TObject только явное. Просто паскаль допускает создание параметров без указания типа. Это другое дело. И компилятор смотрит. ведь посмотрите определение параметров FreeAndNil — (var Obj)
Если её обявить как (var Obj:TObject) то указатели не пройдут.
Здравствуйте, SuhanovSergey, Вы писали:
V>>То что обьект и поинтер можно переприсваивать в разных направлениях — это тоже не существенно, тогда я не вижу для чего вообще система типов нужна ? SS>Просто я смотрю на C++ и Delphi как языки одной группы: unmanaged. На фоне олтличий от Java, C# или даже Delphi.NET обсуждаемые отличия кажутся какими-то несерьёзными.
Да в том то и дело, кому то не нравится что в С++ 3/2 дает 1, когда это вовсе не противоречит стандарту а даже им указано, я бы понял если бы на 3 из 6 машинах это работало так, а на других не так, причем в независимости от компилятора — духовная связ так сказать — да это была бы проблема.
И в принципе тему можно было бы давно закрыть, т.к. автор темы давно в курсак себе впишет то что было сказано давно, а мы тут просто поддержали разговор .
Здравствуйте, 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++ пришёл, то его вольностям я был в шоке. Мне нужно было передать в процеру масив, и как я не передавал его, компилятор пропускал (а я случайно описался и амперсанд забыл дописать, а потом, когда понял, просто уже "игрался" и смотрел как компилятор глотает откровенный бред)
Здравствуйте, 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 не означает что это ошибка стандарта языка.
А вы все настройки варнингов включили? там почему то по умолчанию UnSafe операции не отмечены. Для меня варнинги — ошибки, так как это потенциальные ошибки.
В младших версиях за такое сразу получал по шапке. Куда мир котиться. Жаль по рукой нет 3 делфи.