Как вы относитесь к паскалю?
, (есть гипотеза)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
| Страницы: (20) « Первая ... 16 17 [18] 19 20 все ( Перейти к последнему сообщению ) |
Как вы относитесь к паскалю?
, (есть гипотеза)
|
Сообщ.
#256
,
|
|
|
|
Barklay, мало того, что ты вообще не осилил исходного поста, так ухватившись за знакомый термин "ссылка", пытаешься "их коллегу в данный момент Сишника", в бытности заядлого Паскалянта, убедить, что он нихрена не понимает в предмете твоего вброса. Наивно, уважаемый. |
|
Сообщ.
#257
,
|
|
|
|
Цитата Qraizer @ Barklay, мало того, что ты вообще не осилил исходного поста, Поясни, о каком посте идет речь, что ты имеешь в виду? |
|
Сообщ.
#258
,
|
|
|
|
Вот этот. В нём написано лишь то, что в Дельфях так писать не принято. Экстравагантность заключается в неявности того, что массив хранит не элементы классов, а ссылки на них. Ну просто потому, что классы в Дельфях всегда ссылочный тип. Дальнейшее сравнение с Плюсами понятно тем, кто присутствовал тут в священных войнах на тему "смешанная семантика типов - это зло или нормально?".
|
|
Сообщ.
#259
,
|
|
|
|
И то, и другое. Цитата это именно ссылка-на-ссылку-... Посмотри в дебагере ASM-код ![]() Это как раз не важно в данном контексте. Внимательно читайте на что отвечаете. Цитата А то - "Но в этом выражении нет указателя на указатель на указатель" - Это может быть в Си - нет, а в Паскале - есть! Самые настоящие! И в Си и в Паскале. В Си аналог вашего кода будет выглядеть так: ![]() ![]() typedef struct My * PMy; typedef struct My { int Num; PMy *Next; } TMy; PMy p; И далее p->Next p->Next->Next p->Next->Next->Next и т.д. Полный аналог вашего паскалевского примера. И это не "указатель на указатель на указатель" и не "классические паскалевские цепочки", а связный список. Цитата вы "хочете" каких то особых песен, так их уже было для вас у меня, всего пару постов назад Нет, я хочу чтобы вещи называли своими именами. Цитата В отличие от теоретических си-шных умствований - как там "В Си было бы бла-бла-бла..." Вы сейчас о чем? Мои примеры тоже рабочие и проверяемые. |
|
Сообщ.
#260
,
|
|
|
|
Цитата Qraizer @ Экстравагантность заключается в неявности того, что массив хранит Кстати говоря, там же массив безразмерный, т.е. по-умолчанию инициализируется пустым(?), т.е. там в принципе должно быть пофиг какой тип, хоть ссылочный, хоть значение. http://ideone.com/7ilRbR Или я уже не понимаю в чем там соль должна быть. =) |
|
Сообщ.
#261
,
|
|
|
|
Безразмерный массив - ещё одна "экстравагантность" Паскаля. В Плюсах есть только статические массивы, с явным указанием размера которые. (Ну, кроме их extern-объявлений, но за объявления отдельный разговор. По любому с Дельфями тут сравнивать нечего, у него с объявлениями совсем туго.) Даже в C99, допускающего указание размера в run-time, это возможно только для automatic storage duration, т.е. проще говоря, для локальных массивов, которые обычно на стеке. Динамические же массивы возможны только как dynamic storage duration, т.е. располагаемые в хипе. И тип их при этом будет отнюдь не какой-то там массив, а самый что ни на есть обычный указатель.
Получается, что статические массивы и динамический массивы - в Си/Плюсах это совершенно разные типы данных, и переменные этих типов определяются совершенно разным образом. Ну а теперь смотрим в Дельфи, вспоминаем, что он такой же компилируемый и нативный, как и Си/Плюсы, и видим, что совершенно разные структуры данных, представляемые совершенно разными способами, требующих для обслуживания себя совершенно разных методов со стороны компилятора и RTL, ради непонятных идей упрощения непонятно чего представлены в языке одинаковым образом. Что естественно не может не сбивать с толку неподготовленных ребят, только-только постигающих Дельфи. Вот осталось ещё Record-ы объявить "расширенным массивом, допускающим разные типы данных своих элементов", и ввести индексацию именами полей в []. Не, понятно, что указатели Паскалю без надобности. Они и вводились-то Виртом, если мне не изменяет память, исключительно для поддержки динамических структур данных, типа списков, деревьев, графов итп. Поэтому идеологически указатели Паскалю чужды, и Борландцы всеми правдами и неправдами пытались не допускать их широкое пользование, везде, где только можно, предлагая вместо них их заменители. Как например те же безразмерные массивы. Вопрос же как раз в этом: было ли это оправданным настолько? В конце же концов указатели в программах всё равно используются по причине того, что многие API, и ОСовые, и не только, их требуют. Лично мне С/Плюсовая идеология "не вводить в заблуждение" больше по душе. Вот я вижу в Сишном коде некую конструкцию, и я понимаю, что это, как это работает, какие грабли где могут выплыть, что с этим делать можно, что нельзя, а что с осторожностью. Итп. Плюсовые конструкции вообще могут быть отдизайнены так, что комар носа не подточит. Если их автор соответствующим образом был подкован в соответствующих технологиях и Плюсовых инструментах, пользователь его творения может просто и интуитивно работать с ним безо всякой опаски. Нужна лишь документация на публичный интерфейс компонента, и не надо никаких лишних подкапотных знаний. Но вот слушаем паскалянтов и то и дело умиляемся: "это надо просто помнить, то - ссылки, а это - значения", "любой программер обязан учитывать, что другой программер его класс имеет право хакнуть", "а вдруг агрегат уже разрушен...", "а вдруг агрегат ещё не сконструирован...", "...в виртуальном методе обязательно надо проверять на 0", итп. В Плюсах как-то спокойнее, всё в языке спроектировано единообразно. Всё - значения, нужна ссылка - добавь явно модификатор. Всё - можно сделать ссылочным, добавив модификатор. Всё, что разное, выглядит по-разному, напутать сложно. Написал класс или даже иерархию - никто её случайно не хакнет, только намеренно. Итд. P.S. Вообще, насколько помню, в Дельфях классы принято хранить в коллекциях. Ну да, массив как бы тоже своего рода коллекция, но я имею в виду те коллекции, которые сами классы. |
|
Сообщ.
#262
,
|
|
|
|
Цитата Qraizer @ Поэтому идеологически указатели Паскалю чужды, и Борландцы всеми правдами и неправдами пытались не допускать их широкое пользование, везде, где только можно, предлагая вместо них их заменители Остапа понесло (С) Если из паскаля убрать указатели и все, что с ними связано, то в сухом остатке получится жалкое подобие бэйсика, которое нафиг никому не нужно. Не надо путать "классический" паскаль с дельфями, т.к. "заменители" со смешанной семантикой типа лонг-стринг, дин.массивов, class и т.п., а также отмена обязательного дереференса указателей появились только в дельфях. А в додельфийском паскале ничего подобного не было - и дереференс указателей был обязателен, и тип object больше соответствовал сишным struct\class в плане возможности выбора размещения в памяти (статическое или динамическое) и обращения (по значению\ссылке или указателю). |
|
Сообщ.
#263
,
|
|
|
|
Object'а в виртовском паскале не было же.
|
|
Сообщ.
#264
,
|
|
|
|
Цитата D_KEY @ Object'а в виртовском паскале не было же. Я не только о виртовском говорю, но и о борландовском додельфийско-VCLском |
|
Сообщ.
#265
,
|
|
|
|
Цитата leo @ Их там и нет по сути, leo. Сам посуди, куда их приткнуть-то? Только в интерфейсы с внешним миром. Всё остальное, окромя исходноидейных динамических структур данных, обходится без них. Даже процедурные типы есть вместо указателей на функции. Если из паскаля убрать указатели и все, что с ними связано,... Добавлено Цитата leo @ И это правильно. ИМХО. ...и дереференс указателей был обязателен... Добавлено Цитата leo @ И это правильно. Тут даже без ИМХОа. Только это всё не class. И даже в таком же доДельфийном виде и осталось. Там речь шла именно за классы, которые class, а не объекты, которые object. ...и тип object больше соответствовал сишным struct\class в плане возможности выбора размещения в памяти (статическое или динамическое) и обращения (по значению\ссылке или указателю). |
|
Сообщ.
#266
,
|
|
|
|
Цитата Qraizer @ Получается, что статические массивы и динамический массивы - в Си/Плюсах это совершенно разные типы данных, и переменные этих типов определяются совершенно разным образом В чем по твоему отличие стат массивов в дельфе от сишных ? Я что то вообще отличий не вижу. А с динамическим массивом в дельфи как раз все понятно, ну вот такой тип, имеет такую внутренюю структуру, такой набор операций. А вот в плюсах дин. массив - это не тип, а хз что. Припудренный указатель, не больше. |
|
Сообщ.
#267
,
|
|
|
|
Цитата jack128 @ А вот в плюсах дин. массив - это не тип, а хз что. Припудренный указатель, не больше. Чем это он припудрен? И да, в плюсах есть vector и др. типы. |
|
Сообщ.
#268
,
|
|
|
|
Цитата D_KEY @ Чем это он припудрен? Ну, нет в плюсах такого встроенного типа - динамический массив. Только указатель и дополнительные действия вокруг операторов new[] и delete[]. |
|
Сообщ.
#269
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Чем это он припудрен? Ну, нет в плюсах такого встроенного типа - динамический массив. Только указатель и дополнительные действия вокруг операторов new[] и delete[]. Я знаю. Так припудрен-то чем? new[] и delete[]? А если я буду юзать malloc/free или еще что, то это будет не динамический массив? |
|
Сообщ.
#270
,
|
|
|
|
Цитата D_KEY @ Я знаю. Так припудрен-то чем? new[] и delete[]? Ага. Цитата D_KEY @ А если я буду юзать malloc/free или еще что, то это будет не динамический массив? Смотря какое определение у "динамического массива". И new[]/delete[], и malloc/free - это просто куски памяти, в которых располагаются объекты. |