Обсуждение:Структура (язык Си)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

приведенный для С++ пример некорректен. при наличии квалификатора private: инициализировать структуру без конструктора не получится. Таким образом следует либо убрать модификаторы доступа из примера, либо добавить в пример конструктор. а так же желательно добавить строку #include <string> в пример. ProstoRoman 07:19, 26 февраля 2014 (UTC) ProstoRoman[ответить]

  • Да вообще С++у тут делать нечего - в нём нет записей, а только классы. Статью переименовать надо - слово "структура" в этом смысле используется ТОЛЬКО в Си, в остальных языках используется слово "запись" Arachnelis 09:41, 26 февраля 2014 (UTC)[ответить]
  • Вопрос не в терминологии, а в сущностном содержании. Это фактически омонимы. Намного корректнее и полезнее с энциклопедической т.з. говорить о "структурах в С++" как о разновидности классов, дополняя рассмотрение их Сишным происхождением, чем вводить читателя в заблуждение, рассказывая как "С++ преобразовал структуры до такой степени, что они уже как бы и не совсем структуры, но ещё и не совсем классы". Я сделал статью тип-произведение и предлагаю туда склеить и структуры, и записи, и кортежи. Статья будет намного полнее, и получит хотя бы гипотетическую возможность дорасти до избранной. Что касается соотнесения всего этого с ООП, то как раз в статье про записи об этом много в английской статье, надо только перевести. Arachnelis 13:15, 8 марта 2014 (UTC)[ответить]
  • Я бы не назвал их омонимами, структура struct Point { int x; int y; } в языке C ничем не отличается от такой же в языке C++. Это одна сущность, с одинаковой смысловой и функциональной нагрузкой. Запись в Паскале, структура в С#, Прологе и др. также несёт тот же самый смысл. — Ivan A. Krestinin 15:36, 8 марта 2014 (UTC)[ответить]
  • Только не экспортируется непосредственно, т.к. обогащена конструкторами. Структура в С++ будет именно структурой, а не классом, только при условии, что она изначально объявлена внутри extern "C" {...}. Это ровно то же самое, что FFI в языках более высокого уровня. Записи в других языках не тождественны Сишным структурам, приходится делать прослойку-адаптер. Проблема, которую вы то ли не понимаете, то ли не хотите признавать существенной, в том, что Си - это кроссплатформенный ассемблер, а не прикладной язык, т.е. его семантика изначально продумана так, чтобы точно контролировать получаемый машинный код, а С++ - язык уже чуть более высокого уровня, у него другая модель данных, которую следует рассматривать самостоятельно, а не как "подвид Сишной модели данных". Arachnelis 18:13, 8 марта 2014 (UTC)[ответить]
  • upd: Если в некотором высокоуровневом языке под ключевым словом синтаксиса "struct" скрывается составной тип, в полной мере отвечающий определению типа "запись", то в энциклопедической статье следует писать "в языке есть тип записей, которые объявляются ключевым словом struct". Сишный тип "структура" уникален в своём роде уже хотя бы тем, что допускает рекурсию, т.е. фактически соединяет в себе не только записи и кортежи, но ещё и возможности алгебраических типов. В прологе, кстати, структур не припомню. В статье по вашей ссылке просто перевод кривой - там "compound term", что не имеет ни малейшего отношения ни к record, ни к struct. Наш народ ещё не так "адаптировать" тексты может - недавно вон напоролся: классы типов представили как "другое имя интерфейсов". Arachnelis 19:00, 8 марта 2014 (UTC)[ответить]
  • Хорошо бы найти источник, который систематизирует понятия разных языков, а то мы сейчас можем уйти в изобретение собственной классификации. Для меня термины «структура», «запись», «тип-произведение» — синонимы с той лишь разницей, что в отношении конкретного языка программирования предпочитают использовать один из этих терминов. Соответственно я бы ожидал увидеть одну статью про все эти термины, где бы в том числе рассказывалась специфика разных языков программирования (начало такого рассказа вы кстати удалили никуда не перенеся). Однако в АИ может быть другой взгляд на мир и другая классификация. — Ivan A. Krestinin 06:02, 9 марта 2014 (UTC)[ответить]
  • Ой, не знаю почему удалилось - это я где-то напартачил. Но я рад, что вы разделяете моё предложение объединить эти статьи. Там будет проще и в слова играть, и АИ проставлять. Систематизирующий источник я ни разу не встречал - а вот теоретическое обоснование отыскать, я думаю, можно. Arachnelis 15:07, 9 марта 2014 (UTC)[ответить]

Неверное название статьи[править код]

Название статьи вводит в заблуждение. Статья по факту описывает возможные реализации слова struct в разных Си-подобных языках, в то время как «Структура (язык Си)» явно даёт понять, что речь идёт только о языке Си. Однако в шаблонах про типы данных есть ссылка на эту статью, то есть статья должна быть обобщающей по всем языкам? Такая статья уже есть, «Запись (тип данных)», однако даже по названию понятно, что статья ориентирована на Паскаль. Есть две статьи, которые называются по-разному, но описывают одно и то же. Есть смысл объединить данные статьи под обобщающим названием. -- D6194c-1cc (обс.) 16:58, 17 февраля 2019 (UTC)[ответить]